nutella 0.12 → 0.13
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e07f31e4f5a8e7dd0f25336e3980dadc7bd5f132
|
4
|
+
data.tar.gz: 586916ef3fd71c40f40fd0ebf339b2520cd8928d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 912c094376824a9e09dff1e203c37d5b3989364d29cae9606d07e09ccef0c717089f8a35a764b6701e36de5120d220bb510c49a0344a6af49c8da81130759a10
|
7
|
+
data.tar.gz: 8b5a3d9c7803bb86c8b8ee86817f7bfdf549235fd3f9c31e8fc30e4a4f00deaf17f549980dc26bd4e2a3c80a149402635fa2f2d7d1f87c5e991499664dfe0350
|
@@ -0,0 +1,37 @@
|
|
1
|
+
class Numeric
|
2
|
+
# Formats a number as a currency string.
|
3
|
+
#
|
4
|
+
# @param [Hash] opts the options hash
|
5
|
+
# @option opts [String] :sign the currency sign
|
6
|
+
# @option opts [Symbol] :position the position of the currency sign
|
7
|
+
# @option opts [Integer] :precision amount of decimal places to display
|
8
|
+
# @option opts [String] :separator the separator between the ones and tenths
|
9
|
+
# @option opts [String] :delimiter the thousands delimiter
|
10
|
+
# @option opts [Boolean] :pretty sets 0 precision for whole amounts
|
11
|
+
#
|
12
|
+
# @return [String] the number in a currency format
|
13
|
+
def to_currency(opts = {})
|
14
|
+
opts = {
|
15
|
+
sign: "$",
|
16
|
+
position: :left,
|
17
|
+
precision: 2,
|
18
|
+
separator: ".",
|
19
|
+
delimiter: ",",
|
20
|
+
pretty: false
|
21
|
+
}.merge(opts)
|
22
|
+
|
23
|
+
opts[:precision] = 0 if opts[:pretty] && (self - self.floor).round(3) < 0.005
|
24
|
+
|
25
|
+
# Must round it outside also as the %f formatter always rounds down
|
26
|
+
("%.#{opts[:precision]}f" % self.round(opts[:precision])).
|
27
|
+
# Apply thousands delimiter
|
28
|
+
gsub(/(\d)(?=(\d{3})+(?!\d))/, "\\1#{opts[:delimiter]}").
|
29
|
+
# Apply unit separator
|
30
|
+
gsub(/\.(\d{#{opts[:precision]}})$/, "#{opts[:separator]}\\1").
|
31
|
+
# Now put the sign on with #prepend or #concat depending on which side
|
32
|
+
send(
|
33
|
+
{left: :prepend, right: :concat}[opts[:position]],
|
34
|
+
opts[:sign] || ""
|
35
|
+
)
|
36
|
+
end
|
37
|
+
end
|
@@ -13,12 +13,8 @@ class String
|
|
13
13
|
#
|
14
14
|
# @return [String] the string with excess leading whitespace stripped
|
15
15
|
def heredoc
|
16
|
-
gsub /^[ \t]{#{scan(/^[ \t]*(?=\S)/).min.size
|
16
|
+
gsub /^[ \t]{#{scan(/^[ \t]*(?=\S)/).min.size}}/, ""
|
17
17
|
end
|
18
18
|
alias format_heredoc heredoc
|
19
19
|
alias strip_heredoc heredoc
|
20
|
-
|
21
|
-
def in_heredoc indentation
|
22
|
-
lines[1..-1].map { |line| line.prepend " " * indentation }.join "\n"
|
23
|
-
end
|
24
20
|
end
|
data/lib/nutella/version.rb
CHANGED
data/nutella.gemspec
CHANGED
@@ -37,6 +37,60 @@ describe Numeric do
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
+
describe "#to_currency" do
|
41
|
+
context "when used with no options" do
|
42
|
+
it "returns a USD style string with 2 decimals precision" do
|
43
|
+
expect(5.to_currency).to eq("$5.00")
|
44
|
+
expect(5.25.to_currency).to eq("$5.25")
|
45
|
+
end
|
46
|
+
|
47
|
+
it "rounds properly" do
|
48
|
+
expect(5.254.to_currency).to eq("$5.25")
|
49
|
+
expect(5.255.to_currency).to eq("$5.26")
|
50
|
+
end
|
51
|
+
|
52
|
+
it "uses ',' as a thousands separator" do
|
53
|
+
expect(5000.to_currency).to eq("$5,000.00")
|
54
|
+
expect(5e6.to_currency).to eq("$5,000,000.00")
|
55
|
+
expect(5e5.to_currency).to eq("$500,000.00")
|
56
|
+
expect(5e4.to_currency).to eq("$50,000.00")
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context "when using pretty mode" do
|
61
|
+
it "strips decimals from whole numbers" do
|
62
|
+
expect(1.to_currency pretty: true).to eq("$1")
|
63
|
+
expect(1.to_currency pretty: true).to eq("$1")
|
64
|
+
end
|
65
|
+
|
66
|
+
it "keeps decimals if there are any cents" do
|
67
|
+
expect(1.01.to_currency pretty: true).to eq("$1.01")
|
68
|
+
expect(1.20.to_currency pretty: true).to eq("$1.20")
|
69
|
+
expect(1.21.to_currency pretty: true).to eq("$1.21")
|
70
|
+
end
|
71
|
+
|
72
|
+
it "only checks cents out to the hundredths" do
|
73
|
+
expect(5.004.to_currency pretty: true).to eq("$5")
|
74
|
+
expect(5.005.to_currency pretty: true).to eq("$5.01")
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
it "has an adjustable sign" do
|
79
|
+
expect(5.to_currency sign: "£").to eq("£5.00")
|
80
|
+
end
|
81
|
+
|
82
|
+
it "has adjustable unit separator and thousands delimiters" do
|
83
|
+
expect(5.to_currency separator: ",").to eq("$5,00")
|
84
|
+
expect(5e3.to_currency separator: ",", delimiter: ".").to eq("$5.000,00")
|
85
|
+
end
|
86
|
+
|
87
|
+
it "has adjustable sign position" do
|
88
|
+
expect(5000.5.to_currency sign: " €", position: :right,
|
89
|
+
separator: ",", delimiter: " ").
|
90
|
+
to eq("5 000,50 €")
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
40
94
|
describe "#sanity_check_min" do
|
41
95
|
it "returns the parameter if the number is lower" do
|
42
96
|
expect(5.sanity_check_min(7)).to eq(7)
|
@@ -45,32 +45,5 @@ This text should be left-aligned.
|
|
45
45
|
Left-aligned again.
|
46
46
|
EOS
|
47
47
|
end
|
48
|
-
|
49
|
-
=begin
|
50
|
-
it "works with string interpolation" do
|
51
|
-
short = "Test"
|
52
|
-
inner = <<-EOS.heredoc.strip
|
53
|
-
This text should be left-aligned.
|
54
|
-
This is indented by two.
|
55
|
-
Last line of the inner string, left-aligned.
|
56
|
-
EOS
|
57
|
-
|
58
|
-
test = <<-EOS.heredoc
|
59
|
-
Testing short in-line: #{short}
|
60
|
-
Testing next-line:
|
61
|
-
#{inner.in_heredoc 8}
|
62
|
-
Ending interpolation test.
|
63
|
-
EOS
|
64
|
-
|
65
|
-
test.should == <<EOS
|
66
|
-
Testing short in-line: Test
|
67
|
-
Testing next-line:
|
68
|
-
This text should be left-aligned.
|
69
|
-
This is indented by two.
|
70
|
-
Last line of the inner string, left-aligned.
|
71
|
-
Ending interpolation test.
|
72
|
-
EOS
|
73
|
-
end
|
74
|
-
=end
|
75
48
|
end
|
76
49
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nutella
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.13'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vinny Diehl
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-11-
|
11
|
+
date: 2014-11-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fuubar
|
@@ -121,6 +121,7 @@ files:
|
|
121
121
|
- lib/nutella/core_ext/numeric/sanity_check.rb
|
122
122
|
- lib/nutella/core_ext/numeric/bytes.rb
|
123
123
|
- lib/nutella/core_ext/numeric/percent.rb
|
124
|
+
- lib/nutella/core_ext/numeric/format.rb
|
124
125
|
- lib/nutella/core_ext/object.rb
|
125
126
|
- lib/nutella/core_ext/file.rb
|
126
127
|
- lib/nutella/core_ext/enumerable/map.rb
|
@@ -148,7 +149,7 @@ files:
|
|
148
149
|
- Rakefile
|
149
150
|
- README.md
|
150
151
|
- nutella.gemspec
|
151
|
-
homepage: https://github.com/
|
152
|
+
homepage: https://github.com/vinnydiehl/nutella
|
152
153
|
licenses:
|
153
154
|
- MIT
|
154
155
|
metadata: {}
|