Skip to content

Commit

Permalink
Merge branch 'master' into ticket_system
Browse files Browse the repository at this point in the history
  • Loading branch information
poshboytl committed Jul 10, 2014
2 parents 09c984a + 9fea5d8 commit c6a6122
Show file tree
Hide file tree
Showing 23 changed files with 296 additions and 119 deletions.
1 change: 1 addition & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ gem 'active_hash'
gem 'http_accept_language'
gem "globalize", "~> 4.0.0"
gem 'paper_trail', '~> 3.0.1'
gem 'rails-observers'

gem 'gon'
gem 'pusher'
Expand Down
1 change: 1 addition & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -486,6 +486,7 @@ DEPENDENCIES
rack-attack (~> 3.0.0)
rails
rails-i18n
rails-observers
ransack!
rbtree
redis-rails
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/admin/members_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ module Admin
class MembersController < BaseController
load_and_authorize_resource
def show
@account_versions = AccountVersion.where(account_id: current_user.account_ids).order("id DESC").page params[:page]
@account_versions = AccountVersion.where(account_id: @member.account_ids).order(:id).reverse_order.page params[:page]
end

def update
Expand Down
5 changes: 5 additions & 0 deletions app/controllers/application_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ class ApplicationController < ActionController::Base

helper_method :current_user, :is_admin?, :current_market, :gon, :muut_enabled?
before_filter :set_language, :setting_default, :set_timezone
before_filter :set_current_user
rescue_from CoinRPC::ConnectionRefusedError, with: :coin_rpc_connection_refused

layout 'frame'
Expand Down Expand Up @@ -42,6 +43,10 @@ def current_user
@current_user ||= Member.find_by_id(session[:member_id])
end

def set_current_user
Member.current = current_user
end

def auth_member!
redirect_to root_path unless current_user
end
Expand Down
2 changes: 1 addition & 1 deletion app/models/account.rb
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ def unlock_and_sub_funds(amount, locked: ZERO, fee: ZERO, reason: nil, ref: nil)
fee: fee,
reason: reason,
amount: account.amount,
currency: account.currency,
currency: account.currency.to_sym,
member_id: account.member_id,
account_id: account.id }

Expand Down
21 changes: 21 additions & 0 deletions app/models/audit/audit_log.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# == Schema Information
#
# Table name: audit_logs
#
# id :integer not null, primary key
# type :string(255)
# operator_id :integer
# created_at :datetime
# updated_at :datetime
# auditable_id :integer
# auditable_type :string(255)
# source_state :string(255)
# target_state :string(255)
#

module Audit
class AuditLog < ActiveRecord::Base
belongs_to :operator, class_name: 'Member', foreign_key: 'operator_id'
belongs_to :auditable, polymorphic: true
end
end
25 changes: 25 additions & 0 deletions app/models/audit/transfer_audit_log.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# == Schema Information
#
# Table name: audit_logs
#
# id :integer not null, primary key
# type :string(255)
# operator_id :integer
# created_at :datetime
# updated_at :datetime
# auditable_id :integer
# auditable_type :string(255)
# source_state :string(255)
# target_state :string(255)
#

module Audit
class TransferAuditLog < AuditLog

def self.audit!(transfer, operator = nil)
create(operator_id: operator.try(:id), auditable: transfer,
source_state: transfer.aasm_state_was, target_state: transfer.aasm_state)
end

end
end
8 changes: 8 additions & 0 deletions app/models/member.rb
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,14 @@ def from_auth(auth_hash)
member
end

def current
Thread.current[:user]
end

def current=(user)
Thread.current[:user] = user
end

private

def locate_auth(auth_hash)
Expand Down
37 changes: 19 additions & 18 deletions app/models/order.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,25 @@
#
# Table name: orders
#
# id :integer not null, primary key
# bid :integer
# ask :integer
# currency :integer
# price :decimal(32, 16)
# volume :decimal(32, 16)
# origin_volume :decimal(32, 16)
# state :integer
# done_at :datetime
# type :string(8)
# member_id :integer
# created_at :datetime
# updated_at :datetime
# sn :string(255)
# source :string(255) not null
# ord_type :string(10)
# locked :decimal(32, 16)
# origin_locked :decimal(32, 16)
# id :integer not null, primary key
# bid :integer
# ask :integer
# currency :integer
# price :decimal(32, 16)
# volume :decimal(32, 16)
# origin_volume :decimal(32, 16)
# state :integer
# done_at :datetime
# type :string(8)
# member_id :integer
# created_at :datetime
# updated_at :datetime
# sn :string(255)
# source :string(255) not null
# ord_type :string(10)
# locked :decimal(32, 16)
# origin_locked :decimal(32, 16)
# funds_received :decimal(32, 16) default(0.0)
#

class Order < ActiveRecord::Base
Expand Down
37 changes: 19 additions & 18 deletions app/models/order_ask.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,25 @@
#
# Table name: orders
#
# id :integer not null, primary key
# bid :integer
# ask :integer
# currency :integer
# price :decimal(32, 16)
# volume :decimal(32, 16)
# origin_volume :decimal(32, 16)
# state :integer
# done_at :datetime
# type :string(8)
# member_id :integer
# created_at :datetime
# updated_at :datetime
# sn :string(255)
# source :string(255) not null
# ord_type :string(10)
# locked :decimal(32, 16)
# origin_locked :decimal(32, 16)
# id :integer not null, primary key
# bid :integer
# ask :integer
# currency :integer
# price :decimal(32, 16)
# volume :decimal(32, 16)
# origin_volume :decimal(32, 16)
# state :integer
# done_at :datetime
# type :string(8)
# member_id :integer
# created_at :datetime
# updated_at :datetime
# sn :string(255)
# source :string(255) not null
# ord_type :string(10)
# locked :decimal(32, 16)
# origin_locked :decimal(32, 16)
# funds_received :decimal(32, 16) default(0.0)
#

class OrderAsk < Order
Expand Down
37 changes: 19 additions & 18 deletions app/models/order_bid.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,25 @@
#
# Table name: orders
#
# id :integer not null, primary key
# bid :integer
# ask :integer
# currency :integer
# price :decimal(32, 16)
# volume :decimal(32, 16)
# origin_volume :decimal(32, 16)
# state :integer
# done_at :datetime
# type :string(8)
# member_id :integer
# created_at :datetime
# updated_at :datetime
# sn :string(255)
# source :string(255) not null
# ord_type :string(10)
# locked :decimal(32, 16)
# origin_locked :decimal(32, 16)
# id :integer not null, primary key
# bid :integer
# ask :integer
# currency :integer
# price :decimal(32, 16)
# volume :decimal(32, 16)
# origin_volume :decimal(32, 16)
# state :integer
# done_at :datetime
# type :string(8)
# member_id :integer
# created_at :datetime
# updated_at :datetime
# sn :string(255)
# source :string(255) not null
# ord_type :string(10)
# locked :decimal(32, 16)
# origin_locked :decimal(32, 16)
# funds_received :decimal(32, 16) default(0.0)
#

class OrderBid < Order
Expand Down
5 changes: 5 additions & 0 deletions app/observers/audit_observer.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class AuditObserver < ActiveRecord::Observer
def current_user
Member.current
end
end
10 changes: 10 additions & 0 deletions app/observers/transfer_observer.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
class TransferObserver < AuditObserver
observe :deposit, :withdraw

def after_update(record)
if record.aasm_state_changed?
Audit::TransferAuditLog.audit!(record, current_user)
end
end

end
3 changes: 3 additions & 0 deletions config/application.rb
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ class Application < Rails::Application
g.template_engine :erb
g.stylesheets false
end

# Observer configuration
config.active_record.observers = :transfer_observer
end
end

Expand Down
1 change: 0 additions & 1 deletion config/environments/development.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,5 @@
# number of complex assets.
config.assets.debug = true

config.action_controller.perform_caching = true
config.active_record.default_timezone = :local
end
19 changes: 19 additions & 0 deletions db/migrate/20140707115022_create_audit_logs.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
class CreateAuditLogs < ActiveRecord::Migration
def change
create_table :audit_logs do |t|
# Common Properties
t.string :type
t.integer :operator_id
t.timestamps
t.integer :auditable_id
t.string :auditable_type

# For Deposit and Withdraw
t.string :source_state
t.string :target_state
end

add_index :audit_logs, :operator_id
add_index :audit_logs, [:auditable_id, :auditable_type]
end
end
24 changes: 16 additions & 8 deletions db/schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.

ActiveRecord::Schema.define(version: 20140703070953) do
ActiveRecord::Schema.define(version: 20140707115022) do

create_table "account_versions", force: true do |t|
t.integer "member_id"
Expand Down Expand Up @@ -58,6 +58,20 @@
add_index "api_tokens", ["access_key"], name: "index_api_tokens_on_access_key", unique: true, using: :btree
add_index "api_tokens", ["secret_key"], name: "index_api_tokens_on_secret_key", unique: true, using: :btree

create_table "audit_logs", force: true do |t|
t.string "type"
t.integer "operator_id"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "auditable_id"
t.string "auditable_type"
t.string "source_state"
t.string "target_state"
end

add_index "audit_logs", ["auditable_id", "auditable_type"], name: "index_audit_logs_on_auditable_id_and_auditable_type", using: :btree
add_index "audit_logs", ["operator_id"], name: "index_audit_logs_on_operator_id", using: :btree

create_table "authentications", force: true do |t|
t.string "provider"
t.string "uid"
Expand Down Expand Up @@ -114,12 +128,6 @@
t.text "keywords"
end

create_table "dogecoin_trades", id: false, force: true do |t|
t.datetime "created_at"
t.decimal "volume", precision: 32, scale: 16
t.integer "member_id"
end

create_table "fund_sources", force: true do |t|
t.integer "member_id"
t.integer "currency"
Expand Down Expand Up @@ -178,12 +186,12 @@
t.decimal "origin_volume", precision: 32, scale: 16
t.integer "state"
t.datetime "done_at"
t.string "type", limit: 8
t.integer "member_id"
t.datetime "created_at"
t.datetime "updated_at"
t.string "sn"
t.string "source", null: false
t.string "type", limit: 8
t.string "ord_type", limit: 10
t.decimal "locked", precision: 32, scale: 16
t.decimal "origin_locked", precision: 32, scale: 16
Expand Down
28 changes: 28 additions & 0 deletions spec/models/audit/transfer_audit_log_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
require 'spec_helper'

module Audit
describe TransferAuditLog do
describe ".audit!" do
let(:deposit) { create(:deposit) }
let(:member) { create(:member) }

subject { TransferAuditLog.audit!(deposit, member) }

before do
deposit.stubs(:aasm_state_was).returns('submitted')
deposit.stubs(:aasm_state).returns('accepted')
end

it "should create the TransferAuditLog record" do
expect { subject }.to change{ TransferAuditLog.count }.by(1)
end

its(:operator) { should == member }
its(:auditable) { should == deposit }
its(:source_state) { should == 'submitted' }
its(:target_state) { should == 'accepted' }

end
end

end
Loading

0 comments on commit c6a6122

Please sign in to comment.