maguire 0.1.2 → 0.1.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.
- data/README.md +3 -3
- data/lib/maguire/locale.rb +28 -3
- data/lib/maguire/locale.rb~ +56 -8
- data/lib/maguire/version.rb +1 -1
- data/lib/maguire/version.rb~ +1 -1
- metadata +2 -2
data/README.md
CHANGED
@@ -12,7 +12,7 @@ Maguire.locale_paths << "path/to/my/locales"
|
|
12
12
|
|
13
13
|
If you're adding a customization for French-speaking Canadians, the JSON file should be named `fr_CA.json`.
|
14
14
|
|
15
|
-
The file should *at least* have a layouts hash for providing information on how to format the currencies. The layout format should always be in US Dollars (using the code `USD`, and symbol `$`) and use the monetary value of `1234567890.12`.
|
15
|
+
The file should *at least* have a layouts hash for providing information on how to format the currencies. The layout format should always be in US Dollars (using the code `USD`, and symbol `$`) and use the monetary value of `1234567890.12`. In addition, there's an optional layout if there's a custom format when there's no minor units (cf. '$1.-"). The monetary value for the zero layout is `1.00`.
|
16
16
|
|
17
17
|
So a layout for use in Quebec might be:
|
18
18
|
|
@@ -20,7 +20,7 @@ So a layout for use in Quebec might be:
|
|
20
20
|
{
|
21
21
|
"layouts": {
|
22
22
|
"positive": "1.234.567.890,12 $",
|
23
|
-
"negative": "-1.234.567.890,12"
|
23
|
+
"negative": "-1.234.567.890,12 $"
|
24
24
|
}
|
25
25
|
}
|
26
26
|
```
|
@@ -54,6 +54,6 @@ A file for the Bitcoin currency would look like:
|
|
54
54
|
After doing this, you can format your Bitcoins:
|
55
55
|
|
56
56
|
```ruby
|
57
|
-
Maguire.format({ value: 400_000_00000000, currency: "BTC" })
|
57
|
+
Maguire.format({ value: 400_000_00000000, currency: "BTC" }, { strip_insignificant_zeros: true })
|
58
58
|
# ฿400,000
|
59
59
|
```
|
data/lib/maguire/locale.rb
CHANGED
@@ -9,8 +9,12 @@ module Maguire
|
|
9
9
|
def initialize(locale, locale_data={})
|
10
10
|
@locale = locale
|
11
11
|
|
12
|
-
|
13
|
-
@
|
12
|
+
layouts = locale_data[:layouts]
|
13
|
+
@positive_formatting = parse_layout(layouts[:positive])
|
14
|
+
@negative_formatting = parse_layout(layouts[:negative])
|
15
|
+
if layouts[:zero]
|
16
|
+
@zero_formatting = parse_zero_layout(layouts[:zero])
|
17
|
+
end
|
14
18
|
|
15
19
|
@currency_overlays = locale_data
|
16
20
|
end
|
@@ -46,8 +50,13 @@ module Maguire
|
|
46
50
|
minor_value = ""
|
47
51
|
decimal_symbol = ""
|
48
52
|
else
|
49
|
-
minor_value = minor_value.to_s.rjust(currency.minor_units, "0")
|
50
53
|
decimal_symbol = formatting[:decimal_symbol]
|
54
|
+
|
55
|
+
if minor_value == 0 && @zero_formatting
|
56
|
+
formatting = @zero_formatting
|
57
|
+
else
|
58
|
+
minor_value = minor_value.to_s.rjust(currency.minor_units, "0")
|
59
|
+
end
|
51
60
|
end
|
52
61
|
|
53
62
|
formatting[:layout] % {
|
@@ -115,6 +124,22 @@ module Maguire
|
|
115
124
|
}
|
116
125
|
end
|
117
126
|
|
127
|
+
def parse_zero_layout(layout)
|
128
|
+
layout = layout.dup
|
129
|
+
|
130
|
+
layout.gsub!("USD", "%{code}")
|
131
|
+
layout.gsub!("$", "%{symbol}")
|
132
|
+
layout.gsub!("1", "%{major_value}")
|
133
|
+
decimal_symbol = @positive_formatting[:decimal_symbol]
|
134
|
+
layout.gsub!(decimal_symbol, "%{decimal}")
|
135
|
+
|
136
|
+
{
|
137
|
+
layout: layout,
|
138
|
+
decimal_symbol: decimal_symbol,
|
139
|
+
digit_grouping_symbol: @positive_formatting[:digit_grouping_symbol]
|
140
|
+
}
|
141
|
+
end
|
142
|
+
|
118
143
|
def round(value)
|
119
144
|
value.to_i
|
120
145
|
end
|
data/lib/maguire/locale.rb~
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'json'
|
2
|
-
require 'pry'
|
3
2
|
|
4
3
|
module Maguire
|
5
4
|
class Locale
|
@@ -10,8 +9,12 @@ module Maguire
|
|
10
9
|
def initialize(locale, locale_data={})
|
11
10
|
@locale = locale
|
12
11
|
|
13
|
-
|
14
|
-
@
|
12
|
+
layouts = locale_data[:layouts]
|
13
|
+
@positive_formatting = parse_layout(layouts[:positive])
|
14
|
+
@negative_formatting = parse_layout(layouts[:negative])
|
15
|
+
if layouts[:zero]
|
16
|
+
@zero_formatting = parse_zero_layout([:zero])
|
17
|
+
end
|
15
18
|
|
16
19
|
@currency_overlays = locale_data
|
17
20
|
end
|
@@ -32,11 +35,35 @@ module Maguire
|
|
32
35
|
formatting = value >= 0 ?
|
33
36
|
@positive_formatting : @negative_formatting
|
34
37
|
|
38
|
+
symbol = currency.symbol
|
39
|
+
if options[:html] && currency.symbol_html
|
40
|
+
symbol = currency.symbol_html
|
41
|
+
end
|
42
|
+
|
43
|
+
strip_insignificant_zeros = options[:strip_insignificant_zeros]
|
44
|
+
if options[:no_minor_units] || currency.minor_units == 0
|
45
|
+
minor_value = 0
|
46
|
+
strip_insignificant_zeros = true
|
47
|
+
end
|
48
|
+
|
49
|
+
if strip_insignificant_zeros && minor_value == 0
|
50
|
+
minor_value = ""
|
51
|
+
decimal_symbol = ""
|
52
|
+
else
|
53
|
+
minor_value = minor_value.to_s.rjust(currency.minor_units, "0")
|
54
|
+
decimal_symbol = formatting[:decimal_symbol]
|
55
|
+
|
56
|
+
if minor_value == 0 && @zero_formatting
|
57
|
+
formatting = @zero_formatting
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
35
61
|
formatting[:layout] % {
|
36
|
-
symbol:
|
62
|
+
symbol: symbol,
|
37
63
|
code: currency.code,
|
64
|
+
decimal: decimal_symbol,
|
38
65
|
major_value: groups.join(formatting[:digit_grouping_symbol]),
|
39
|
-
minor_value: minor_value
|
66
|
+
minor_value: minor_value
|
40
67
|
}
|
41
68
|
end
|
42
69
|
|
@@ -46,7 +73,7 @@ module Maguire
|
|
46
73
|
GROUPS_OF_FOUR_RE = /([0-9]{4}[^0-9])+/
|
47
74
|
GROUPS_OF_THREE_RE = /([0-9]{3}[^0-9]){3}+/
|
48
75
|
|
49
|
-
def
|
76
|
+
def parse_groups_in_south_asian_style(layout)
|
50
77
|
@group_numbers_in_south_asian_style = true
|
51
78
|
digit_grouping_symbol = layout.match(/1([^0-9]*)23/)[1]
|
52
79
|
layout.gsub!(["1", "23", "45", "67", "890"].join(digit_grouping_symbol), "%{major_value}")
|
@@ -76,7 +103,7 @@ module Maguire
|
|
76
103
|
|
77
104
|
digit_grouping_symbol =
|
78
105
|
if layout =~ SOUTH_ASIAN_GROUPING_RE
|
79
|
-
|
106
|
+
parse_groups_in_south_asian_style(layout)
|
80
107
|
elsif layout =~ GROUPS_OF_FOUR_RE
|
81
108
|
parse_groups_of_four(layout)
|
82
109
|
elsif layout =~ GROUPS_OF_THREE_RE
|
@@ -86,19 +113,40 @@ module Maguire
|
|
86
113
|
layout.gsub!("USD", "%{code}")
|
87
114
|
layout.gsub!("$", "%{symbol}")
|
88
115
|
layout.gsub!("12", "%{minor_value}")
|
116
|
+
decimal_symbol = layout.match(/major_value}(.*)%{minor_value/)[1]
|
117
|
+
layout.gsub!(decimal_symbol, "%{decimal}")
|
89
118
|
|
90
119
|
{
|
91
120
|
layout: layout,
|
121
|
+
decimal_symbol: decimal_symbol,
|
92
122
|
digit_grouping_symbol: digit_grouping_symbol
|
93
123
|
}
|
94
124
|
end
|
95
125
|
|
126
|
+
def parse_zero_layout(layout)
|
127
|
+
layout = layout.dup
|
128
|
+
|
129
|
+
layout.gsub!("USD", "%{code}")
|
130
|
+
layout.gsub!("$", "%{symbol}")
|
131
|
+
layout.gsub!("1", "%{major_value}")
|
132
|
+
decimal_symbol = @positive_layout[:decimal_symbol]
|
133
|
+
layout.gsub!(decimal_symbol, "%{decimal}")
|
134
|
+
|
135
|
+
{
|
136
|
+
layout: layout,
|
137
|
+
decimal_symbol: decimal_symbol,
|
138
|
+
digit_grouping_symbol: @positive_layout[:digit_grouping_symbol]
|
139
|
+
}
|
140
|
+
end
|
141
|
+
|
96
142
|
def round(value)
|
97
143
|
value.to_i
|
98
144
|
end
|
99
145
|
|
100
146
|
def break_off(value, number)
|
101
|
-
|
147
|
+
len = value.length
|
148
|
+
number = len if number > len
|
149
|
+
[value.slice(0, len - number), value.slice(len - number, len)]
|
102
150
|
end
|
103
151
|
|
104
152
|
def split_value_into_groups_of(value, number)
|
data/lib/maguire/version.rb
CHANGED
data/lib/maguire/version.rb~
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: maguire
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-04-
|
12
|
+
date: 2014-04-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|