d12n 0.0.2 → 0.0.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d7f5272c965cf1760fd4b29e164c5d29239a4bbc
4
- data.tar.gz: 6bdb55faf6a3398b75649e6c491a5d87866f21c6
3
+ metadata.gz: abcfcf50cfc7704732eb93a84fca8dacb37e6347
4
+ data.tar.gz: 7ef57e5988fd6d9185032db1dcaf1cfb48a602ce
5
5
  SHA512:
6
- metadata.gz: 99f69169106d94058ce9c73b85291217843168ade6f354f65b3a0decc2fb520f6a1f52d3fdabe57c8dd6d7bccf550ce1c518c45f2e88ece59ab863d6fb5f850c
7
- data.tar.gz: dd625aa1931466ddb5e968e09abfb406eea4be3bd066ff89a9ab221aa63f3463d1e7101d4bf57fb0d450c641c90690c50a368200d7bd436cc7efed29a1c1413d
6
+ metadata.gz: c8241902f3b72b64ed42ee7969b3eedf1165b988636f8508e467cd085f4dfa1cd179709c5021a2b410ef3ff0f204039c512f5bfe7345e613ac181381f3825bf6
7
+ data.tar.gz: 0a64084146dd829f4f1ae50140ff74d1bcb5edde9dc649964cd4eb4c1efa2b4c45903930ffa8ac90535616c474680b2186b76159d263498e80d3c67a89799aa8
data/README.md CHANGED
@@ -8,3 +8,44 @@ original user input can be validated and rendered back to the user during valida
8
8
 
9
9
  ```ruby
10
10
  gem 'd12n'
11
+ ```
12
+
13
+ Sample model
14
+
15
+ ```ruby
16
+ class Dummy
17
+ include D12n::ModelSupport
18
+
19
+ attr_accessor :amount
20
+ d12n_attribute :amount
21
+ end
22
+ ```
23
+
24
+ ```ruby
25
+ d = Dummy.new
26
+
27
+ d.amount = 1_234.56
28
+ d.local_amount # "1,234.56"
29
+
30
+ d.local_amount = '3,456.78'
31
+ d.amount.class # BigDecimal
32
+ d.amount.to_f # 3456.78
33
+
34
+ d.local_amount = 'invalid'
35
+ d.amount.to_f # 3456.78, did not change
36
+ ```
37
+
38
+ ## Configuration
39
+
40
+ ```ruby
41
+ D12n.config.strategy = D12n::Strategy::DecimalPoint # the default
42
+ D12n.config.strategy = D12n::Strategy::DecimalComma
43
+ ```
44
+
45
+ ### Custom method prefix
46
+
47
+ ```ruby
48
+ d12n_attribute :amount, prefix: 'localized'
49
+ ```
50
+
51
+ Would give you `localized_amount` instead of `local_amount`.
data/lib/d12n.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'active_support/configurable'
1
+ require 'active_support'
2
2
  require 'bigdecimal'
3
3
 
4
4
  module D12n
@@ -5,10 +5,29 @@ module D12n
5
5
  options = args.extract_options!
6
6
  prefix = options[:prefix] || 'local'
7
7
  args.each do |name|
8
- attr_reader "#{prefix}_#{name}"
9
- define_method "#{prefix}_#{name}=" do |val|
8
+ define_reader name, prefix
9
+ define_writer name, prefix
10
+ end
11
+ end
12
+
13
+ private
14
+
15
+ def define_reader(name, prefix)
16
+ define_method "#{prefix}_#{name}" do
17
+ local = instance_variable_get "@#{prefix}_#{name}"
18
+ return local if local
19
+ ActiveSupport::NumberHelper::NumberToDelimitedConverter.convert(send(name), {})
20
+ end
21
+ end
22
+
23
+ def define_writer(name, prefix)
24
+ define_method "#{prefix}_#{name}=" do |val|
25
+ begin
10
26
  instance_variable_set "@#{prefix}_#{name}", val
11
27
  send "#{name}=", D12n.strategy.number_to_bigdecimal(val)
28
+ val
29
+ rescue ArgumentError
30
+ val
12
31
  end
13
32
  end
14
33
  end
@@ -5,6 +5,7 @@ module D12n
5
5
  module DecimalComma
6
6
  extend self
7
7
 
8
+ # must raise ArgumentError when format is invalid
8
9
  def number_to_bigdecimal(formatted)
9
10
  BigDecimal.new formatted.tr('.', '').tr(',', '.')
10
11
  end
@@ -5,6 +5,7 @@ module D12n
5
5
  module DecimalPoint
6
6
  extend self
7
7
 
8
+ # must raise ArgumentError when format is invalid
8
9
  def number_to_bigdecimal(formatted)
9
10
  BigDecimal.new formatted.tr(',', '')
10
11
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: d12n
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - mkon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-09 00:00:00.000000000 Z
11
+ date: 2017-11-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport