formatting 0.0.14 → 0.0.16

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,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- YzE3NDZkOGE2ODY0ZDgxNWViNGEzNGY0NTMyNjBmMjg5MTBhNTI1MA==
5
- data.tar.gz: !binary |-
6
- NmM1M2JjNjQ1NDA0N2FjYzI0NmU3ZTc1YWQ4M2FlYTgxZGJlNWEyNQ==
2
+ SHA1:
3
+ metadata.gz: f8a92f61e13526876dc609e99cabc25252e14303
4
+ data.tar.gz: 804ee6b74f3f1521075dd601a8d90b169c2fa0f8
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- NTBiNDc1MTMzNzg5NmU2YjliNjhjZDYyOThjODhhMDVmM2ExNTAzZmQ3NDg4
10
- MWU4YmNiNDcyODNhZjgwZDNmYzhiNDE3ZmI0OGQ5ZTNiMzU5OWYzNmNlNDBh
11
- Y2YzYTQ3YTlhZjdkNDMzY2Y0MWM1ODllN2Y1NzllYzAxY2JmMzU=
12
- data.tar.gz: !binary |-
13
- YjI2YWRiYTBlZTY4ZjBlOWZkZDdiYTgwYTlhNDQ1NTA0YjE3MmI4MTM4Mjhk
14
- NzhhMTk1OGUzYzNhM2NmNjc3MGJhNzEyMmFhYTE3OWZhYWNkYzZjYjZkNzQw
15
- YWM1MzYzMDA5N2IyOWQxNDhkOGQwNzFkOTM3NzQxZTA4YmY4NDI=
6
+ metadata.gz: c3d5b1625686c2dc865841a1800d2b971604f951086570c80961acf75a72154dcd0747c54b54a11380fcd45f0be29163510a971ec99f9346846300d4093322c7
7
+ data.tar.gz: 591e74fcd72914b2f3afe535e13c0d31e6935b5930495f373ce1fd16194e158bd8204153b6cb7c5dc10992dfcd2f9e253814f6dca37c9afd91db888a33a42fb6
data/README.md CHANGED
@@ -7,6 +7,7 @@ Will use the `i18n` library for formatting defaults if present, but it's not a r
7
7
  Formats:
8
8
  * Numbers
9
9
  * Currency
10
+ * Percent
10
11
 
11
12
 
12
13
  ## Usage
@@ -25,6 +26,9 @@ format_number(1234) # => "1,234.00"
25
26
 
26
27
  include Formatting::Currency
27
28
  format_currency(item, :price) # => "1,234.00 SEK"
29
+
30
+ include Formatting::Percent
31
+ format_percent(12.3) # => "12.30%"
28
32
  ```
29
33
 
30
34
 
@@ -40,15 +44,16 @@ Formatting.format_number(1, explicit_sign: true) # => "+1.00"
40
44
 
41
45
  #### Options
42
46
 
43
- name | default | explanation
44
- ------------------------|----------------------------------------------------------------------------------|------------
45
- thousands_separator | `I18n.t("number.format.delimiter")` if available, otherwise a non-breaking space |
46
- decimal_separator | `I18n.t("number.format.separator")` if available, otherwise `"."` |
47
- round | `2` | Round to the given number of decimals. Don't round if given `false`.
48
- blank_when_zero | `false` | If `true`, returns `""` for a zero value.
49
- min_decimals | `2` | Show at least that number of decimals. Don't enforce if given `false`.
50
- explicit_sign | `false` | If `true`, prefixes positive values with a `"+"`. Doesn't prefix `0`.
51
- decimals_on_integers | `true` | If `false`, integers won't include decimals.
47
+ name | default | explanation
48
+ -------------------------------|----------------------------------------------------------------------------------|------------
49
+ thousands_separator | `I18n.t("number.format.delimiter")` if available, otherwise a non-breaking space |
50
+ decimal_separator | `I18n.t("number.format.separator")` if available, otherwise `"."` |
51
+ round | `2` | Round to the given number of decimals. Don't round if given `false`.
52
+ blank_when_zero | `false` | If `true`, returns `""` for a zero value.
53
+ min_decimals | `2` | Show at least that number of decimals. Don't enforce if given `false`.
54
+ explicit_sign | `false` | If `true`, prefixes positive values with a `"+"`. Doesn't prefix `0`.
55
+ decimals_on_integers | `true` | If `false`, integers won't include decimals.
56
+ treat_zero_decimals_as_integer | `false` | If `true`, a zero value in the decimal column formats the number like an integer.
52
57
 
53
58
 
54
59
  ### Currency
@@ -83,6 +88,20 @@ format | `"<amount> <currency>"`
83
88
  skip_currency | `false` | If `true`, doesn't add the currency to the amount.
84
89
 
85
90
 
91
+ ### Percent
92
+
93
+ #### Example usage
94
+
95
+ ``` ruby
96
+ Formatting.format_percent(12.3) # => "12.3%"
97
+ ```
98
+
99
+
100
+ #### Options
101
+
102
+ Passes on all the number options.
103
+
104
+
86
105
  ## Installation
87
106
 
88
107
  Add this line to your application's Gemfile:
data/lib/formatting.rb CHANGED
@@ -4,10 +4,12 @@
4
4
  require "formatting/version"
5
5
  require "formatting/number"
6
6
  require "formatting/currency"
7
+ require "formatting/percent"
7
8
 
8
9
  module Formatting
9
10
  NON_BREAKING_SPACE = "\xc2\xa0"
10
11
 
11
12
  extend Number
12
13
  extend Currency
14
+ extend Percent
13
15
  end
@@ -10,7 +10,7 @@ module Formatting
10
10
  class FormatNumber
11
11
  attr_private :input_number,
12
12
  :thousands_separator, :decimal_separator,
13
- :round, :min_decimals, :decimals_on_integers, :explicit_sign, :blank_when_zero
13
+ :round, :min_decimals, :decimals_on_integers, :treat_zero_decimals_as_integer, :explicit_sign, :blank_when_zero
14
14
 
15
15
  def initialize(input_number, opts)
16
16
  @input_number = input_number
@@ -20,6 +20,7 @@ module Formatting
20
20
  @round = opts.fetch(:round, 2)
21
21
  @min_decimals = opts.fetch(:min_decimals, 2)
22
22
  @decimals_on_integers = opts.fetch(:decimals_on_integers, true)
23
+ @treat_zero_decimals_as_integer = opts.fetch(:treat_zero_decimals_as_integer, false)
23
24
  @explicit_sign = opts.fetch(:explicit_sign, false)
24
25
  @blank_when_zero = opts.fetch(:blank_when_zero, false)
25
26
  end
@@ -27,6 +28,10 @@ module Formatting
27
28
  def format
28
29
  number = input_number
29
30
 
31
+ if treat_zero_decimals_as_integer && number.modulo(1).zero?
32
+ number = number.to_i
33
+ end
34
+
30
35
  has_decimals = number.to_s.include?(".")
31
36
 
32
37
  if blank_when_zero
@@ -0,0 +1,12 @@
1
+ # http://en.wikipedia.org/wiki/Percent_sign#Spacing
2
+
3
+ require "attr_extras"
4
+
5
+ module Formatting
6
+ module Percent
7
+ def format_percent(number, opts = {})
8
+ formatted_number = Formatting.format_number(number, opts)
9
+ "#{formatted_number}%"
10
+ end
11
+ end
12
+ end
@@ -1,3 +1,3 @@
1
1
  module Formatting
2
- VERSION = "0.0.14"
2
+ VERSION = "0.0.16"
3
3
  end
data/spec/number_spec.rb CHANGED
@@ -120,6 +120,16 @@ describe Formatting do
120
120
  end
121
121
  end
122
122
 
123
+ context "treat_zero_decimals_as_integer" do
124
+ it "defaults to false" do
125
+ expect_formatted(12.0, decimals_on_integers: false).to eq "12.00"
126
+ end
127
+
128
+ it "can be turned off" do
129
+ expect_formatted(12.0, decimals_on_integers: false, treat_zero_decimals_as_integer: true).to eq "12"
130
+ end
131
+ end
132
+
123
133
  context "explicit sign" do
124
134
  it "is not included by default" do
125
135
  expect_formatted(1).to eq "1.00"
@@ -0,0 +1,23 @@
1
+ require "spec_helper"
2
+
3
+ describe Formatting::Percent do
4
+ it "can be included as a module" do
5
+ object = Object.new
6
+ object.extend Formatting::Percent
7
+ expect(object).to respond_to(:format_percent)
8
+ end
9
+ end
10
+
11
+ describe Formatting, ".format_percent" do
12
+ it "formats a number" do
13
+ expect_formatted(1.2).to eq "1.20%"
14
+ end
15
+
16
+ it "passes on number formatting options" do
17
+ expect_formatted(1.567, round: 2).to include "1.57"
18
+ end
19
+
20
+ def expect_formatted(number, opts = {})
21
+ expect(Formatting.format_percent(number, opts))
22
+ end
23
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: formatting
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.14
4
+ version: 0.0.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henrik Nyh
@@ -9,20 +9,20 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-13 00:00:00.000000000 Z
12
+ date: 2014-03-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: attr_extras
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ! '>='
18
+ - - '>='
19
19
  - !ruby/object:Gem::Version
20
20
  version: '0'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - ! '>='
25
+ - - '>='
26
26
  - !ruby/object:Gem::Version
27
27
  version: '0'
28
28
  - !ruby/object:Gem::Dependency
@@ -43,28 +43,28 @@ dependencies:
43
43
  name: rake
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - ! '>='
46
+ - - '>='
47
47
  - !ruby/object:Gem::Version
48
48
  version: '0'
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - ! '>='
53
+ - - '>='
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: rspec
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - ! '>='
60
+ - - '>='
61
61
  - !ruby/object:Gem::Version
62
62
  version: '0'
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - ! '>='
67
+ - - '>='
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0'
70
70
  description:
@@ -84,9 +84,11 @@ files:
84
84
  - lib/formatting.rb
85
85
  - lib/formatting/currency.rb
86
86
  - lib/formatting/number.rb
87
+ - lib/formatting/percent.rb
87
88
  - lib/formatting/version.rb
88
89
  - spec/currency_spec.rb
89
90
  - spec/number_spec.rb
91
+ - spec/percent_spec.rb
90
92
  - spec/spec_helper.rb
91
93
  homepage: ''
92
94
  licenses:
@@ -98,21 +100,22 @@ require_paths:
98
100
  - lib
99
101
  required_ruby_version: !ruby/object:Gem::Requirement
100
102
  requirements:
101
- - - ! '>='
103
+ - - '>='
102
104
  - !ruby/object:Gem::Version
103
105
  version: '0'
104
106
  required_rubygems_version: !ruby/object:Gem::Requirement
105
107
  requirements:
106
- - - ! '>='
108
+ - - '>='
107
109
  - !ruby/object:Gem::Version
108
110
  version: '0'
109
111
  requirements: []
110
112
  rubyforge_project:
111
- rubygems_version: 2.2.1
113
+ rubygems_version: 2.2.0
112
114
  signing_key:
113
115
  specification_version: 4
114
116
  summary: Rails-less formatting for your unit-testable code.
115
117
  test_files:
116
118
  - spec/currency_spec.rb
117
119
  - spec/number_spec.rb
120
+ - spec/percent_spec.rb
118
121
  - spec/spec_helper.rb