d12n 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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