bd_money 0.0.6 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.6
1
+ 0.0.7
data/bd_money.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{bd_money}
8
- s.version = "0.0.6"
8
+ s.version = "0.0.7"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Adrian Madrid"]
12
- s.date = %q{2012-03-10}
12
+ s.date = %q{2012-03-12}
13
13
  s.description = %q{This library makes it easier to deal with Money values, storing them as BigDecimal to avoid floating-point math errors.}
14
14
  s.email = %q{aemadrid@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -1,4 +1,5 @@
1
1
  require 'bigdecimal'
2
+ require 'yaml'
2
3
 
3
4
  class Money
4
5
 
@@ -21,6 +22,10 @@ class Money
21
22
  REMOVE_RE = %r{[$,_ ]} unless const_defined?(:REMOVE_RE)
22
23
  VALID_RE = %r{^(-)?(\d)+(\.\d{1,35})?$} unless const_defined?(:VALID_RE)
23
24
 
25
+ YAML_TYPE_CLASS = 'npadv.com,2012-03-12' unless const_defined?(:YAML_TYPE_CLASS)
26
+ YAML_TYPE_MODE = 'money' unless const_defined?(:YAML_TYPE_MODE)
27
+ YAML_TYPE_FULL = "#{YAML_TYPE_CLASS}/#{YAML_TYPE_MODE}" unless const_defined?(:YAML_TYPE_FULL)
28
+
24
29
  include Comparable
25
30
 
26
31
  class MoneyError < StandardError # :nodoc:
@@ -176,7 +181,7 @@ class Money
176
181
 
177
182
  def formatted(*args)
178
183
  defaults = args.first.is_a?(::Symbol) ? FORMATS[args.shift] : FORMATS[:default]
179
- options = args.last.is_a?(::Hash) ? args.pop : { }
184
+ options = args.last.is_a?(::Hash) ? args.pop : { }
180
185
 
181
186
  unit = options[:unit] || defaults[:unit]
182
187
  spacer = options[:spacer] || defaults[:spacer]
@@ -209,6 +214,21 @@ class Money
209
214
  end
210
215
  end
211
216
 
217
+ def to_yaml_type
218
+ "!#{YAML_TYPE_FULL}"
219
+ end
220
+
221
+ def to_yaml(options = { })
222
+ YAML.quick_emit(self.object_id, options) do |out|
223
+ out.map(taguri, to_yaml_style) do |map|
224
+ map.add 'amount', amount.to_s('F')
225
+ map.add 'precision', @precision unless @precision.nil?
226
+ map.add 'round_mode', @round_mode unless @round_mode.nil?
227
+ map.add 'format', @format unless @format.nil?
228
+ end
229
+ end
230
+ end
231
+
212
232
  class << self
213
233
 
214
234
  def precision=(value)
@@ -253,4 +273,8 @@ class Money
253
273
 
254
274
  end
255
275
 
276
+ end
277
+
278
+ YAML::add_domain_type(Money::YAML_TYPE_CLASS, Money::YAML_TYPE_MODE) do |_, map|
279
+ Money.new map['amount'], map['precision'], map['round_mode'], map['format']
256
280
  end
@@ -383,4 +383,11 @@ describe Money do
383
383
  end
384
384
  end
385
385
 
386
+ describe "YAML support" do
387
+ subject { Money.new amt, 2, :floor, :no_commas }
388
+ let(:yaml_str) { %{--- !npadv.com,2012-03-12/money \namount: "3.53"\nprecision: 2\nround_mode: :floor\nformat: :no_commas\n} }
389
+ it { subject.to_yaml.should == yaml_str }
390
+ it { YAML.load(yaml_str).should == subject }
391
+ end
392
+
386
393
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bd_money
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 6
10
- version: 0.0.6
9
+ - 7
10
+ version: 0.0.7
11
11
  platform: ruby
12
12
  authors:
13
13
  - Adrian Madrid
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-03-10 00:00:00 -07:00
18
+ date: 2012-03-12 00:00:00 -06:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency