counterfeit 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -2,3 +2,5 @@
2
2
  .bundle
3
3
  Gemfile.lock
4
4
  pkg/*
5
+ spec/debug.log
6
+ *.sqlite3
@@ -8,20 +8,31 @@ module Counterfeit
8
8
  options = options.with_indifferent_access
9
9
 
10
10
  default_currency = options.delete(:currency).try(:to_s).try(:upcase)
11
+
11
12
  amount_attr = options.delete(:amount_attribute) || "#{attr}_in_cents"
12
13
  currency_attr = options.delete(:currency_attribute) || "#{attr}_currency"
13
14
 
14
15
  mapping = [[ amount_attr, 'cents' ], [ currency_attr, 'currency_as_string' ]]
15
16
 
16
17
  after_initialize do
17
- self[currency_attr] = default_currency || Money.default_currency.iso_code
18
+ self[currency_attr] ||= default_currency || Money.default_currency.iso_code
19
+ end
20
+
21
+ constructor = lambda { |cents, currency| Money.new(cents || 0, currency) }
22
+
23
+ converter = lambda do |value|
24
+ if value.respond_to?(:to_money)
25
+ value.to_money(default_currency)
26
+ else
27
+ raise ArgumentError, "Can't convert #{value.class} to Money"
28
+ end
18
29
  end
19
30
 
20
31
  composed_of attr.to_sym,
21
32
  :class_name => 'Money',
22
33
  :mapping => mapping,
23
- :constructor => Proc.new { |cents, currency| Money.new(cents || 0, currency || Money.default_currency) },
24
- :converter => Proc.new { |value| value.respond_to?(:to_money) ? value.to_money : raise(ArgumentError, "Can't convert #{value.class} to Money") }
34
+ :constructor => constructor,
35
+ :converter => converter
25
36
 
26
37
  end
27
38
 
@@ -1,3 +1,3 @@
1
1
  module Counterfeit
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
@@ -19,9 +19,11 @@ describe Item do
19
19
  end
20
20
 
21
21
  it 'should handle custom attribute names' do
22
- item = Item.new(:money => 500)
23
- item.custom_money_amount.should == 500_00
24
- item.custom_money_currency.should == 'EUR'
22
+ Item.new(:money => 500).custom_money_amount.should == 500_00
23
+ end
24
+
25
+ it 'should respect default currency attribute' do
26
+ Item.new.custom_money_currency.should == 'EUR'
25
27
  end
26
28
 
27
29
  it 'should work witn has_money alias' do
@@ -36,7 +38,7 @@ describe Item do
36
38
  it 'should automatically turn on google exchange on fail' do
37
39
  Money.google_saved_the_day = false
38
40
  Money.default_bank = Money::Bank::VariableExchange.instance
39
- money = Money.new(50000, 'USD')
41
+ money = Money.new(500_00, 'USD')
40
42
  lambda do
41
43
  money.exchange_to('EUR')
42
44
  end.should_not raise_error
@@ -46,10 +48,20 @@ describe Item do
46
48
 
47
49
  it 'should use the google hack only once' do
48
50
  Money.default_bank = Money::Bank::VariableExchange.instance
49
- money = Money.new(50000, 'USD')
51
+ money = Money.new(500_00, 'USD')
50
52
  money.bank.should be_kind_of(Money::Bank::VariableExchange)
51
53
  lambda do
52
54
  money.exchange_to('EUR')
53
55
  end.should raise_error(Money::Bank::UnknownRate)
54
56
  end
57
+
58
+ it 'should allow currency change' do
59
+ Money.default_currency = Money::Currency.new('USD')
60
+ item = Item.create
61
+ item.price_currency.should == 'USD'
62
+ item.update_attributes(:price => '100', :price_currency => 'RUB')
63
+ item.reload.price.should == Money.new(100_00, 'RUB')
64
+ item.save
65
+ item.reload.price_currency.should == 'RUB'
66
+ end
55
67
  end
@@ -23,7 +23,7 @@ require File.expand_path('../../lib/counterfeit', __FILE__)
23
23
 
24
24
  db_filename = 'counterfeit.sqlite3'
25
25
 
26
- File.delete(db_filename)
26
+ File.delete(db_filename) if File.exists?(db_filename)
27
27
 
28
28
  active_record_configuration = { :adapter => 'sqlite3', :database => db_filename }
29
29
 
metadata CHANGED
@@ -1,128 +1,120 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: counterfeit
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
4
5
  prerelease:
5
- version: 0.0.1
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Pavel Pravosud
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-06-16 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
12
+ date: 2011-07-25 00:00:00.000000000 +07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
16
  name: rails
17
- prerelease: false
18
- requirement: &id001 !ruby/object:Gem::Requirement
17
+ requirement: &2158214320 !ruby/object:Gem::Requirement
19
18
  none: false
20
- requirements:
19
+ requirements:
21
20
  - - ~>
22
- - !ruby/object:Gem::Version
23
- version: "3.0"
21
+ - !ruby/object:Gem::Version
22
+ version: '3.0'
24
23
  type: :runtime
25
- version_requirements: *id001
26
- - !ruby/object:Gem::Dependency
27
- name: money
28
24
  prerelease: false
29
- requirement: &id002 !ruby/object:Gem::Requirement
25
+ version_requirements: *2158214320
26
+ - !ruby/object:Gem::Dependency
27
+ name: money
28
+ requirement: &2158213820 !ruby/object:Gem::Requirement
30
29
  none: false
31
- requirements:
30
+ requirements:
32
31
  - - ~>
33
- - !ruby/object:Gem::Version
32
+ - !ruby/object:Gem::Version
34
33
  version: 3.7.1
35
34
  type: :runtime
36
- version_requirements: *id002
37
- - !ruby/object:Gem::Dependency
38
- name: google_currency
39
35
  prerelease: false
40
- requirement: &id003 !ruby/object:Gem::Requirement
36
+ version_requirements: *2158213820
37
+ - !ruby/object:Gem::Dependency
38
+ name: google_currency
39
+ requirement: &2158213360 !ruby/object:Gem::Requirement
41
40
  none: false
42
- requirements:
41
+ requirements:
43
42
  - - ~>
44
- - !ruby/object:Gem::Version
43
+ - !ruby/object:Gem::Version
45
44
  version: 1.2.0
46
45
  type: :runtime
47
- version_requirements: *id003
48
- - !ruby/object:Gem::Dependency
49
- name: sqlite3
50
46
  prerelease: false
51
- requirement: &id004 !ruby/object:Gem::Requirement
47
+ version_requirements: *2158213360
48
+ - !ruby/object:Gem::Dependency
49
+ name: sqlite3
50
+ requirement: &2158212900 !ruby/object:Gem::Requirement
52
51
  none: false
53
- requirements:
52
+ requirements:
54
53
  - - ~>
55
- - !ruby/object:Gem::Version
54
+ - !ruby/object:Gem::Version
56
55
  version: 1.3.3
57
56
  type: :development
58
- version_requirements: *id004
59
- - !ruby/object:Gem::Dependency
60
- name: rspec
61
57
  prerelease: false
62
- requirement: &id005 !ruby/object:Gem::Requirement
58
+ version_requirements: *2158212900
59
+ - !ruby/object:Gem::Dependency
60
+ name: rspec
61
+ requirement: &2158212440 !ruby/object:Gem::Requirement
63
62
  none: false
64
- requirements:
63
+ requirements:
65
64
  - - ~>
66
- - !ruby/object:Gem::Version
65
+ - !ruby/object:Gem::Version
67
66
  version: 2.6.0
68
67
  type: :development
69
- version_requirements: *id005
68
+ prerelease: false
69
+ version_requirements: *2158212440
70
70
  description: Easy Money gem integration for rails 3.
71
- email:
71
+ email:
72
72
  - rwz@duckroll.ru
73
73
  executables: []
74
-
75
74
  extensions: []
76
-
77
75
  extra_rdoc_files: []
78
-
79
- files:
76
+ files:
80
77
  - .gitignore
81
78
  - Gemfile
82
79
  - README.md
83
80
  - Rakefile
84
81
  - counterfeit.gemspec
85
- - counterfeit.sqlite3
86
82
  - lib/counterfeit.rb
87
83
  - lib/counterfeit/active_record.rb
88
84
  - lib/counterfeit/money.rb
89
85
  - lib/counterfeit/schema.rb
90
86
  - lib/counterfeit/version.rb
91
87
  - spec/counterfeit_spec.rb
92
- - spec/debug.log
93
88
  - spec/models.rb
94
89
  - spec/schema.rb
95
90
  - spec/spec_helper.rb
91
+ has_rdoc: true
96
92
  homepage: https://github.com/rwz/counterfeit
97
93
  licenses: []
98
-
99
94
  post_install_message:
100
95
  rdoc_options: []
101
-
102
- require_paths:
96
+ require_paths:
103
97
  - lib
104
- required_ruby_version: !ruby/object:Gem::Requirement
98
+ required_ruby_version: !ruby/object:Gem::Requirement
105
99
  none: false
106
- requirements:
107
- - - ">="
108
- - !ruby/object:Gem::Version
109
- version: "0"
110
- required_rubygems_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ required_rubygems_version: !ruby/object:Gem::Requirement
111
105
  none: false
112
- requirements:
113
- - - ">="
114
- - !ruby/object:Gem::Version
115
- version: "0"
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
116
110
  requirements: []
117
-
118
111
  rubyforge_project: counterfeit
119
- rubygems_version: 1.8.5
112
+ rubygems_version: 1.6.2
120
113
  signing_key:
121
114
  specification_version: 3
122
115
  summary: Easy Money gem integration for rails 3.
123
- test_files:
116
+ test_files:
124
117
  - spec/counterfeit_spec.rb
125
- - spec/debug.log
126
118
  - spec/models.rb
127
119
  - spec/schema.rb
128
120
  - spec/spec_helper.rb
Binary file
@@ -1,63 +0,0 @@
1
- # Logfile created on 2011-06-16 20:34:50 +0700 by logger.rb/25413
2
- SQL (0.2ms)  SELECT name
3
- FROM sqlite_master
4
- WHERE type = 'table' AND NOT name = 'sqlite_sequence'
5
- 
6
- AREL (0.3ms) INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "money_in_cents", "money_currency") VALUES (0, 'RUB', 0, 'RUB', 0, 'RUB')
7
- AREL (0.2ms) INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "money_in_cents", "money_currency") VALUES (0, 'RUB', 0, 'RUB', 0, 'RUB')
8
- SQL (0.2ms)  SELECT name
9
- FROM sqlite_master
10
- WHERE type = 'table' AND NOT name = 'sqlite_sequence'
11
- 
12
- AREL (0.4ms) INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "money_in_cents", "money_currency") VALUES (0, 'RUB', 0, 'RUB', 0, 'RUB')
13
- AREL (0.4ms) INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "money_in_cents", "money_currency") VALUES (0, 'RUB', 0, 'RUB', 0, 'RUB')
14
- SQL (0.1ms)  SELECT name
15
- FROM sqlite_master
16
- WHERE type = 'table' AND NOT name = 'sqlite_sequence'
17
- 
18
- AREL (0.3ms) INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "money_in_cents", "money_currency") VALUES (0, 'RUB', 0, 'THB', 0, 'RUB')
19
- AREL (0.2ms) INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "money_in_cents", "money_currency") VALUES (0, 'RUB', 0, 'THB', 0, 'RUB')
20
- SQL (0.2ms)  SELECT name
21
- FROM sqlite_master
22
- WHERE type = 'table' AND NOT name = 'sqlite_sequence'
23
- 
24
- AREL (0.3ms) INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "money_in_cents", "money_currency") VALUES (0, 'RUB', 0, 'THB', 0, 'RUB')
25
- AREL (0.3ms) INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "money_in_cents", "money_currency") VALUES (0, 'RUB', 0, 'THB', 0, 'RUB')
26
- SQL (0.2ms)  SELECT name
27
- FROM sqlite_master
28
- WHERE type = 'table' AND NOT name = 'sqlite_sequence'
29
- 
30
- AREL (0.3ms) INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "money_in_cents", "money_currency") VALUES (0, 'RUB', 0, 'THB', 0, 'RUB')
31
- AREL (0.3ms) INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "money_in_cents", "money_currency") VALUES (0, 'RUB', 0, 'THB', 0, 'RUB')
32
- SQL (0.2ms)  SELECT name
33
- FROM sqlite_master
34
- WHERE type = 'table' AND NOT name = 'sqlite_sequence'
35
- 
36
- AREL (0.3ms) INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "custom_money_amount", "custom_money_currency") VALUES (0, 'RUB', 0, 'THB', NULL, NULL)
37
- AREL (0.3ms) INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "custom_money_amount", "custom_money_currency") VALUES (0, 'RUB', 0, 'THB', NULL, NULL)
38
- SQL (0.1ms)  SELECT name
39
- FROM sqlite_master
40
- WHERE type = 'table' AND NOT name = 'sqlite_sequence'
41
- 
42
- AREL (0.3ms) INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "custom_money_amount", "custom_money_currency") VALUES (0, 'RUB', 0, 'THB', NULL, NULL)
43
- AREL (0.3ms) INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "custom_money_amount", "custom_money_currency") VALUES (0, 'RUB', 0, 'THB', NULL, NULL)
44
- AREL (0.3ms) INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "custom_money_amount", "custom_money_currency") VALUES (0, 'RUB', 0, 'THB', 50000, 'RUB')
45
- SQL (0.1ms)  SELECT name
46
- FROM sqlite_master
47
- WHERE type = 'table' AND NOT name = 'sqlite_sequence'
48
- 
49
- AREL (0.3ms) INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "custom_money_amount", "custom_money_currency") VALUES (0, 'RUB', 0, 'THB', NULL, NULL)
50
- AREL (0.2ms) INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "custom_money_amount", "custom_money_currency") VALUES (0, 'RUB', 0, 'THB', NULL, NULL)
51
- AREL (0.3ms) INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "custom_money_amount", "custom_money_currency") VALUES (0, 'RUB', 0, 'THB', 50000, 'RUB')
52
- SQL (0.1ms)  SELECT name
53
- FROM sqlite_master
54
- WHERE type = 'table' AND NOT name = 'sqlite_sequence'
55
- 
56
- AREL (0.3ms) INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "custom_money_amount", "custom_money_currency") VALUES (0, 'RUB', 0, 'THB', NULL, NULL)
57
- AREL (0.2ms) INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "custom_money_amount", "custom_money_currency") VALUES (0, 'RUB', 0, 'THB', NULL, NULL)
58
- AREL (0.3ms) INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "custom_money_amount", "custom_money_currency") VALUES (0, 'RUB', 0, 'THB', 50000, 'RUB')
59
- SQL (0.1ms)  SELECT name
60
- FROM sqlite_master
61
- WHERE type = 'table' AND NOT name = 'sqlite_sequence'
62
- 
63
- AREL (0.3ms) INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "custom_money_amount", "custom_money_currency") VALUES (0, 'RUB', 0, 'THB', 50000, 'RUB')