meplato-money 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ # 0.2.0, released 2012-08-01
2
+
3
+ * Thread safety (remove autoload and class variables)
4
+ * Remove init.rb and use Rails initializer
5
+
1
6
  # 0.1.3, released 2011-10-11
2
7
 
3
8
  * Published gem as meplato-money.
data/lib/money.rb CHANGED
@@ -6,10 +6,11 @@
6
6
 
7
7
  # This library is for parsing and formatting monetary values.
8
8
 
9
- module Money
10
- autoload :CoreExt, 'money/core_ext.rb'
11
- autoload :Money, 'money/money.rb'
12
- autoload :MoneyFormatter, 'money/money_formatter.rb'
13
- autoload :FixedBank, 'money/fixed_bank.rb'
14
- autoload :MeplatoBank, 'money/meplato_bank.rb'
15
- end
9
+ require 'money/core_ext'
10
+ require 'money/currencies'
11
+ require 'money/formats'
12
+ require 'money/money_formatter'
13
+ require 'money/fixed_bank'
14
+ require 'money/meplato_bank'
15
+ require 'money/money'
16
+ require 'money/rails' if defined?(::Rails::Engine)
data/lib/money/money.rb CHANGED
@@ -1,7 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'money/currencies'
4
- require 'money/formats'
5
3
 
6
4
  module Money
7
5
 
@@ -26,23 +24,35 @@ module Money
26
24
 
27
25
  attr_reader :amount, :currency, :bank
28
26
 
29
- class << self
30
- attr_accessor :default_bank
31
- attr_accessor :default_currency
32
- attr_accessor :default_locale
27
+ def initialize(amount, currency = nil, bank = nil)
28
+ @amount = amount
29
+ @currency = currency || self.class.default_currency
30
+ @bank = bank || self.class.default_bank
31
+ raise UnknownCurrency unless CURRENCIES[@currency]
32
+ end
33
33
 
34
- def same_currency?(source, target)
35
- source.upcase == target.upcase
36
- end
34
+ def self.default_bank
35
+ Thread.current[:money_default_bank] || MeplatoBank.instance
36
+ end
37
+
38
+ def self.default_bank=(bank)
39
+ Thread.current[:money_default_bank] = bank
37
40
  end
38
41
 
39
- self.default_bank = MeplatoBank.instance
40
- self.default_currency = "USD"
41
- self.default_locale = "en"
42
+ def self.default_currency
43
+ Thread.current[:money_default_currency] || "USD"
44
+ end
42
45
 
43
- def initialize(amount, currency = Money.default_currency, bank = Money.default_bank)
44
- @amount, @currency, @bank = amount, currency || Money.default_currency, bank || Money.default_bank
45
- raise UnknownCurrency unless CURRENCIES[@currency]
46
+ def self.default_currency=(currency)
47
+ Thread.current[:money_default_currency] = currency
48
+ end
49
+
50
+ def self.default_locale
51
+ Thread.current[:money_default_locale] || "en"
52
+ end
53
+
54
+ def self.default_locale=(locale)
55
+ Thread.current[:money_default_locale] = locale
46
56
  end
47
57
 
48
58
  def positive?
@@ -62,11 +72,11 @@ module Money
62
72
  end
63
73
 
64
74
  def ==(other)
65
- self.amount == other.amount && Money.same_currency?(self.currency, other.currency)
75
+ self.amount == other.amount && self.class.same_currency?(self.currency, other.currency)
66
76
  end
67
77
 
68
78
  def <=>(other)
69
- if Money.same_currency?(@currency, other.currency)
79
+ if self.class.same_currency?(@currency, other.currency)
70
80
  @amount <=> other.amount
71
81
  else
72
82
  @amount <=> other.exchange_to(@currency).amount
@@ -74,7 +84,7 @@ module Money
74
84
  end
75
85
 
76
86
  def +(other)
77
- if Money.same_currency?(@currency, other.currency)
87
+ if self.class.same_currency?(@currency, other.currency)
78
88
  Money.new(@amount + other.amount, @currency)
79
89
  else
80
90
  Money.new(@amount + other.exchange_to(@currency).amount, @currency)
@@ -82,7 +92,7 @@ module Money
82
92
  end
83
93
 
84
94
  def -(other)
85
- if Money.same_currency?(@currency, other.currency)
95
+ if self.class.same_currency?(@currency, other.currency)
86
96
  Money.new(@amount - other.amount, @currency)
87
97
  else
88
98
  Money.new(@amount - other.exchange_to(@currency).amount, @currency)
@@ -90,7 +100,7 @@ module Money
90
100
  end
91
101
 
92
102
  def exchange_to(target)
93
- unless Money.same_currency?(@currency, target)
103
+ unless self.class.same_currency?(@currency, target)
94
104
  rate = self.bank.get_rate(@currency, target)
95
105
  if !rate
96
106
  raise UnknownRate, "No conversion from #{@currency} to #{target}"
@@ -118,6 +128,10 @@ module Money
118
128
  self.format(options)
119
129
  end
120
130
 
131
+ def self.same_currency?(source, target)
132
+ source.upcase == target.upcase
133
+ end
134
+
121
135
  def self.parse(value, currency, options = {})
122
136
  return Money.new(0, currency, options) if value.nil?
123
137
  opts = {
@@ -131,8 +145,5 @@ module Money
131
145
  s.gsub!(format[:decimal_sep], '.')
132
146
  Money.new(s.to_f, opts[:currency], opts)
133
147
  end
134
-
135
- private
136
-
137
148
  end
138
149
  end
@@ -0,0 +1,9 @@
1
+ module Money
2
+ class Rails < ::Rails::Engine
3
+ initializer 'money' do
4
+ if defined?(ActiveRecord)
5
+ ActiveRecord::Base.send(:include, ::Money)
6
+ end
7
+ end
8
+ end if defined?(::Rails)
9
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: meplato-money
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-10-12 00:00:00.000000000 Z
12
+ date: 2012-08-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
16
- requirement: &70300784862420 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '1.0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70300784862420
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: rdoc
27
- requirement: &70300784861960 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ~>
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: '2.5'
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *70300784861960
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '2.5'
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: rake
38
- requirement: &70300784861500 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ! '>='
@@ -43,7 +53,12 @@ dependencies:
43
53
  version: '0.8'
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *70300784861500
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0.8'
47
62
  description: Working with monetary values as well as performing currency exchange.
48
63
  email:
49
64
  - oliver.eilhard@gmail.com
@@ -64,6 +79,7 @@ files:
64
79
  - lib/money/meplato_bank.rb
65
80
  - lib/money/money.rb
66
81
  - lib/money/money_formatter.rb
82
+ - lib/money/rails.rb
67
83
  - CHANGELOG.md
68
84
  - LICENSE
69
85
  - README.md
@@ -88,7 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
88
104
  version: 1.3.6
89
105
  requirements: []
90
106
  rubyforge_project:
91
- rubygems_version: 1.8.10
107
+ rubygems_version: 1.8.23
92
108
  signing_key:
93
109
  specification_version: 3
94
110
  summary: Working with monetary values as well as performing currency exchange.