formatting 0.0.13 → 0.0.18

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
- YWI5ZTFkMTdmMTc0NGJhYTdlYzJjMTU2NDFhZTAwNTliNjUyYTRkZQ==
5
- data.tar.gz: !binary |-
6
- OGU1OWE2YWY5Y2ZmMThjYTZhMDQzMzgyNDQ1ZDNiOTNkMTFmYmY5Yw==
2
+ SHA256:
3
+ metadata.gz: bc0d48715ff358482643c0ab965fcd3965399fb78eec281e109142917d0e249c
4
+ data.tar.gz: 74079c3f59a8f5c7e925ba627f1213c7956a7be5b5e23a7e0f5a9ad7dee19447
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- NzQ5MGY5MDQ0ZDIxMzc3ZGE3YzcyNDQxZDU5MmJmM2IyNTBlYWIxYTgwYWNi
10
- YTdlMWMwOWZlNzI1Y2MzY2Q2MzUyMzNiMjIwOGYxMDg1MTdmYTEyMjgzZDgw
11
- MzQ4NmRmMTY5MjU2OTY1ODJkNmFhOWEyOGJiOTNlZmE3NGI0YmQ=
12
- data.tar.gz: !binary |-
13
- Yjc3MDk0NTY5YTM4ZmM5YWI1ZGM3ZTkyMTAzNTdiYmY3Y2UzNjk4YzhmNDUz
14
- MjNlZDA3ODc3MzkzZmFkMTVmZTQ4MzQ3MDMwNzEwNTEwNzQ1MDQ2NWY5ZGVj
15
- MTEzOTIxODkzYTJlMDc4ODFlYzAzNmI0Zjc5ZDJmNGU2NjIzOTk=
6
+ metadata.gz: 1fa29df5ceb15a52ff8630678295306dd88cc2de04f0aa2ca46bf2a636bfe56dcd0afd6fc7356ba68229e1c33ba7171bcdf6fe339bee209b7f407d44930aaf08
7
+ data.tar.gz: 5d43ba483c1d4b0c1e5805e70d6689242b8ff4261d8b4089372eac01115cb382a3f1cf147ad29c4667d35610cdba811a49be12d8173db58dd926c3a656349203
@@ -0,0 +1,26 @@
1
+ name: Ruby CI
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+ branches: [ master ]
8
+
9
+ jobs:
10
+ test:
11
+
12
+ runs-on: ubuntu-latest
13
+
14
+ strategy:
15
+ matrix:
16
+ ruby-version: ["3.0", "2.7", "2.6", "2.5"]
17
+
18
+ steps:
19
+ - uses: actions/checkout@v2
20
+ - name: Set up Ruby ${{ matrix.ruby-version }}
21
+ uses: ruby/setup-ruby@v1
22
+ with:
23
+ ruby-version: ${{ matrix.ruby-version }}
24
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
25
+ - name: Run tests
26
+ run: bundle exec rake
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ .rspec_results
data/.rubocop.yml ADDED
@@ -0,0 +1,5 @@
1
+ AllCops:
2
+ Exclude:
3
+ - "tmp/**/*"
4
+ inherit_gem:
5
+ barsoom_utils: shared_rubocop.yml
data/Gemfile CHANGED
@@ -1,4 +1,14 @@
1
- source 'https://rubygems.org'
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
2
4
 
3
5
  # Specify your gem's dependencies in formatting.gemspec
4
6
  gemspec
7
+
8
+ group :development do
9
+ gem "barsoom_utils", github: "barsoom/barsoom_utils"
10
+ gem "bundler"
11
+ gem "rake"
12
+ gem "rspec"
13
+ gem "rubocop"
14
+ end
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ [![Ruby CI](https://github.com/barsoom/formatting/actions/workflows/ci.yml/badge.svg)](https://github.com/barsoom/formatting/actions/workflows/ci.yml)
2
+
1
3
  # Formatting
2
4
 
3
5
  Rails-less formatting for your unit-testable code.
@@ -7,6 +9,7 @@ Will use the `i18n` library for formatting defaults if present, but it's not a r
7
9
  Formats:
8
10
  * Numbers
9
11
  * Currency
12
+ * Percent
10
13
 
11
14
 
12
15
  ## Usage
@@ -25,6 +28,9 @@ format_number(1234) # => "1,234.00"
25
28
 
26
29
  include Formatting::Currency
27
30
  format_currency(item, :price) # => "1,234.00 SEK"
31
+
32
+ include Formatting::Percent
33
+ format_percent(12.3) # => "12.30%"
28
34
  ```
29
35
 
30
36
 
@@ -40,14 +46,16 @@ Formatting.format_number(1, explicit_sign: true) # => "+1.00"
40
46
 
41
47
  #### Options
42
48
 
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`.
49
+ name | default | explanation
50
+ -------------------------------|----------------------------------------------------------------------------------|------------
51
+ thousands_separator | `I18n.t("number.format.delimiter")` if available, otherwise a non-breaking space |
52
+ decimal_separator | `I18n.t("number.format.separator")` if available, otherwise `"."` |
53
+ round | `2` | Round to the given number of decimals. Don't round if given `false`.
54
+ blank_when_zero | `false` | If `true`, returns `""` for a zero value.
55
+ min_decimals | `2` | Show at least that number of decimals. Don't enforce if given `false`.
56
+ explicit_sign | `false` | If `true`, prefixes positive values with a `"+"`. Doesn't prefix `0`.
57
+ decimals_on_integers | `true` | If `false`, integers won't include decimals.
58
+ treat_zero_decimals_as_integer | `false` | If `true`, a zero value in the decimal column formats the number like an integer.
51
59
 
52
60
 
53
61
  ### Currency
@@ -82,6 +90,24 @@ format | `"<amount> <currency>"`
82
90
  skip_currency | `false` | If `true`, doesn't add the currency to the amount.
83
91
 
84
92
 
93
+ ### Percent
94
+
95
+ #### Example usage
96
+
97
+ ``` ruby
98
+ Formatting.format_percent(12.3) # => "12.3%"
99
+ ```
100
+
101
+
102
+ #### Options
103
+
104
+ Passes on all the number options and also takes these:
105
+
106
+ name | default | explanation
107
+ ----------------|---------------------------------------------------|------------
108
+ format | `"<number>%"` or `<number> %` depending on locale | A format string.
109
+
110
+
85
111
  ## Installation
86
112
 
87
113
  Add this line to your application's Gemfile:
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "bundler/gem_tasks"
2
4
  require "rspec/core/rake_task"
3
5
 
4
6
  RSpec::Core::RakeTask.new(:spec)
5
7
 
6
- task :default => :spec
8
+ task default: :spec
data/formatting.gemspec CHANGED
@@ -1,24 +1,22 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path("lib", __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'formatting/version'
5
+ require "formatting/version"
5
6
 
6
7
  Gem::Specification.new do |spec|
7
8
  spec.name = "formatting"
8
9
  spec.version = Formatting::VERSION
9
- spec.authors = ["Henrik Nyh", "Tomas Skogberg"]
10
- spec.email = ["henrik@barsoom.se", "tomas@barsoom.se"]
10
+ spec.authors = [ "Henrik Nyh", "Tomas Skogberg" ]
11
+ spec.email = [ "henrik@barsoom.se", "tomas@barsoom.se" ]
11
12
  spec.summary = %q{Rails-less formatting for your unit-testable code.}
12
13
  spec.homepage = ""
13
14
  spec.license = "MIT"
15
+ spec.metadata = { "rubygems_mfa_required" => "true" }
14
16
 
15
17
  spec.files = `git ls-files`.split($/)
16
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
- spec.require_paths = ["lib"]
19
+ spec.require_paths = [ "lib" ]
19
20
 
20
21
  spec.add_dependency "attr_extras"
21
- spec.add_development_dependency "bundler", "~> 1.3"
22
- spec.add_development_dependency "rake"
23
- spec.add_development_dependency "rspec"
24
22
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "attr_extras"
2
4
 
3
5
  module Formatting
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "attr_extras"
2
4
 
3
5
  module Formatting
@@ -10,22 +12,28 @@ module Formatting
10
12
  class FormatNumber
11
13
  attr_private :input_number,
12
14
  :thousands_separator, :decimal_separator,
13
- :round, :min_decimals, :explicit_sign, :blank_when_zero
15
+ :round, :min_decimals, :decimals_on_integers, :treat_zero_decimals_as_integer, :explicit_sign, :blank_when_zero
14
16
 
15
17
  def initialize(input_number, opts)
16
18
  @input_number = input_number
17
19
 
18
- @thousands_separator = opts.fetch(:thousands_separator) { default_thousands_separator }
19
- @decimal_separator = opts.fetch(:decimal_separator) { default_decimal_separator }
20
- @round = opts.fetch(:round, 2)
21
- @min_decimals = opts.fetch(:min_decimals, 2)
22
- @explicit_sign = opts.fetch(:explicit_sign, false)
23
- @blank_when_zero = opts.fetch(:blank_when_zero, false)
20
+ @thousands_separator = opts.fetch(:thousands_separator) { default_thousands_separator }
21
+ @decimal_separator = opts.fetch(:decimal_separator) { default_decimal_separator }
22
+ @round = opts.fetch(:round, 2)
23
+ @min_decimals = opts.fetch(:min_decimals, 2)
24
+ @decimals_on_integers = opts.fetch(:decimals_on_integers, true)
25
+ @treat_zero_decimals_as_integer = opts.fetch(:treat_zero_decimals_as_integer, false)
26
+ @explicit_sign = opts.fetch(:explicit_sign, false)
27
+ @blank_when_zero = opts.fetch(:blank_when_zero, false)
24
28
  end
25
29
 
26
30
  def format
27
31
  number = input_number
28
32
 
33
+ if treat_zero_decimals_as_integer && number.modulo(1).zero?
34
+ number = number.to_i
35
+ end
36
+
29
37
  has_decimals = number.to_s.include?(".")
30
38
 
31
39
  if blank_when_zero
@@ -33,7 +41,7 @@ module Formatting
33
41
  end
34
42
 
35
43
  # Avoid negative zero.
36
- number = 0 if number.zero?
44
+ number = number.abs if number.zero?
37
45
 
38
46
  if round
39
47
  number = number.round(round) if has_decimals
@@ -48,12 +56,12 @@ module Formatting
48
56
  integer = "+#{integer}" if number > 0
49
57
  end
50
58
 
51
- if min_decimals
59
+ if min_decimals && (has_decimals || decimals_on_integers)
52
60
  decimals ||= "0"
53
61
  decimals = decimals.ljust(min_decimals, "0")
54
62
  end
55
63
 
56
- [integer, decimals].compact.join(decimal_separator)
64
+ [ integer, decimals ].compact.join(decimal_separator)
57
65
  end
58
66
 
59
67
  private
@@ -67,7 +75,7 @@ module Formatting
67
75
  end
68
76
 
69
77
  def t_format(key, default)
70
- if defined?(I18n)
78
+ if defined?(I18n) && I18n.respond_to?(:t)
71
79
  I18n.t(key, scope: "number.format", default: default)
72
80
  else
73
81
  default
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "attr_extras"
4
+
5
+ module Formatting
6
+ module Percent
7
+ def format_percent(number, opts = {})
8
+ format_string = opts.fetch(:format) { default_percent_format_string }
9
+ formatted_number = Formatting.format_number(number, opts)
10
+ format_string.gsub("<number>", formatted_number)
11
+ end
12
+
13
+ private
14
+
15
+ # http://en.wikipedia.org/wiki/Percent_sign#Spacing
16
+ # Rails i18n doesn't have a conventional format string for this.
17
+ def default_percent_format_string
18
+ locale = defined?(I18n) && I18n.locale
19
+
20
+ case locale
21
+ when :sv, :fi, :fr, :de
22
+ "<number>#{Formatting::NON_BREAKING_SPACE}%"
23
+ else
24
+ "<number>%"
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Formatting
2
- VERSION = "0.0.13"
4
+ VERSION = "0.0.18"
3
5
  end
data/lib/formatting.rb CHANGED
@@ -1,13 +1,16 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  # ^ so NON_BREAKING_SPACE is treated as UTF-8 in Ruby 1.9.
3
4
 
4
5
  require "formatting/version"
5
6
  require "formatting/number"
6
7
  require "formatting/currency"
8
+ require "formatting/percent"
7
9
 
8
10
  module Formatting
9
11
  NON_BREAKING_SPACE = "\xc2\xa0"
10
12
 
11
13
  extend Number
12
14
  extend Currency
15
+ extend Percent
13
16
  end
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
- describe Formatting::Currency do
5
+ RSpec.describe Formatting::Currency do
4
6
  it "can be included as a module" do
5
7
  object = Object.new
6
8
  object.extend Formatting::Currency
@@ -8,7 +10,7 @@ describe Formatting::Currency do
8
10
  end
9
11
  end
10
12
 
11
- describe Formatting do
13
+ RSpec.describe Formatting do
12
14
  describe ".format_currency" do
13
15
  let(:item) { double }
14
16
 
@@ -18,7 +20,7 @@ describe Formatting do
18
20
  end
19
21
 
20
22
  it "can take a record and a method name" do
21
- item.stub(price: 2)
23
+ allow(item).to receive(:price).and_return(2)
22
24
  expect_formatted(item, :price).to eq space_to_nbsp("2.00")
23
25
  end
24
26
 
@@ -48,12 +50,12 @@ describe Formatting do
48
50
  end
49
51
 
50
52
  it "is read from the record's #currency if present" do
51
- item.stub(currency: "SEK")
53
+ allow(item).to receive(:currency).and_return("SEK")
52
54
  expect_formatted(item, 1).to eq space_to_nbsp("1.00 SEK")
53
55
  end
54
56
 
55
57
  it "is not added if the record's #currency is blank" do
56
- item.stub(currency: "")
58
+ allow(item).to receive(:currency).and_return("")
57
59
  expect_formatted(item, 1).to eq space_to_nbsp("1.00")
58
60
  end
59
61
 
@@ -68,8 +70,8 @@ describe Formatting do
68
70
 
69
71
  context "format string option" do
70
72
  it "is used if provided" do
71
- expect_formatted(item, 123, format: "C: <currency> A: <amount>", currency: "XYZ").
72
- to eq space_to_nbsp("C: XYZ A: 123.00")
73
+ expect_formatted(item, 123, format: "C: <currency> A: <amount>", currency: "XYZ")
74
+ .to eq space_to_nbsp("C: XYZ A: 123.00")
73
75
  end
74
76
 
75
77
  it "will have spaces turned into non-breaking spaces" do
@@ -79,8 +81,8 @@ describe Formatting do
79
81
  end
80
82
 
81
83
  it "is stripped" do
82
- expect_formatted(item, 123, format: "<amount> <currency>", currency: nil).
83
- to eq space_to_nbsp("123.00")
84
+ expect_formatted(item, 123, format: "<amount> <currency>", currency: nil)
85
+ .to eq space_to_nbsp("123.00")
84
86
  end
85
87
  end
86
88
 
data/spec/number_spec.rb CHANGED
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
- describe Formatting::Number do
5
+ RSpec.describe Formatting::Number do
4
6
  it "can be included as a module" do
5
7
  object = Object.new
6
8
  object.extend Formatting::Number
@@ -8,7 +10,7 @@ describe Formatting::Number do
8
10
  end
9
11
  end
10
12
 
11
- describe Formatting do
13
+ RSpec.describe Formatting do
12
14
  describe ".format_number" do
13
15
  it "formats a number" do
14
16
  expect_formatted(1234567.89).to eq space_to_nbsp("1 234 567.89")
@@ -25,9 +27,9 @@ describe Formatting do
25
27
 
26
28
  it "uses I18n.t('number.format.delimiter') if present" do
27
29
  allow(i18n).to receive(:t).with(:separator, instance_of(Hash))
28
- expect(i18n).to receive(:t).
29
- with(:delimiter, scope: "number.format", default: space_to_nbsp(" ")).
30
- and_return(";")
30
+ expect(i18n).to receive(:t)
31
+ .with(:delimiter, scope: "number.format", default: space_to_nbsp(" "))
32
+ .and_return(";")
31
33
  expect_formatted(1234).to include "1;234"
32
34
  end
33
35
  end
@@ -90,7 +92,6 @@ describe Formatting do
90
92
  end
91
93
  end
92
94
 
93
-
94
95
  context "minimum number of decimals" do
95
96
  it "defaults to two decimals" do
96
97
  expect_formatted(12).to eq "12.00"
@@ -110,6 +111,26 @@ describe Formatting do
110
111
  end
111
112
  end
112
113
 
114
+ context "decimals on integers" do
115
+ it "defaults to adding decimals" do
116
+ expect_formatted(12).to eq "12.00"
117
+ end
118
+
119
+ it "can be turned off" do
120
+ expect_formatted(12, decimals_on_integers: false).to eq "12"
121
+ end
122
+ end
123
+
124
+ context "treat_zero_decimals_as_integer" do
125
+ it "defaults to false" do
126
+ expect_formatted(12.0, decimals_on_integers: false).to eq "12.00"
127
+ end
128
+
129
+ it "can be turned off" do
130
+ expect_formatted(12.0, decimals_on_integers: false, treat_zero_decimals_as_integer: true).to eq "12"
131
+ end
132
+ end
133
+
113
134
  context "explicit sign" do
114
135
  it "is not included by default" do
115
136
  expect_formatted(1).to eq "1.00"
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ RSpec.describe Formatting::Percent do
6
+ it "can be included as a module" do
7
+ object = Object.new
8
+ object.extend Formatting::Percent
9
+ expect(object).to respond_to(:format_percent)
10
+ end
11
+ end
12
+
13
+ RSpec.describe Formatting, ".format_percent" do
14
+ it "formats a number" do
15
+ expect_formatted(1.2).to eq "1.20%"
16
+ end
17
+
18
+ it "passes on number formatting options" do
19
+ expect_formatted(1.567, round: 1).to include "1.6"
20
+ end
21
+
22
+ context "format string option" do
23
+ it "is used if provided" do
24
+ expect_formatted(1, format: "%<number>%").to eq "%1.00%"
25
+ end
26
+
27
+ context "if I18n.locale is available" do
28
+ let(:i18n) { stub_const("I18n", double) }
29
+
30
+ it "defaults sensibly for some locales that require spacing the sign" do
31
+ allow(i18n).to receive(:locale).and_return(:sv)
32
+ expect_formatted(1).to eq space_to_nbsp("1.00 %")
33
+ end
34
+ end
35
+ end
36
+
37
+ def expect_formatted(number, opts = {})
38
+ expect(Formatting.format_percent(number, opts))
39
+ end
40
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "formatting"
2
4
 
3
5
  module Helpers
@@ -8,4 +10,10 @@ end
8
10
 
9
11
  RSpec.configure do |config|
10
12
  config.include Helpers
13
+
14
+ config.example_status_persistence_file_path = ".rspec_results"
15
+ config.disable_monkey_patching!
16
+
17
+ config.order = :random
18
+ Kernel.srand config.seed
11
19
  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.13
4
+ version: 0.0.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henrik Nyh
@@ -9,62 +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: 2021-11-19 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
- - - ! '>='
26
- - !ruby/object:Gem::Version
27
- version: '0'
28
- - !ruby/object:Gem::Dependency
29
- name: bundler
30
- requirement: !ruby/object:Gem::Requirement
31
- requirements:
32
- - - ~>
33
- - !ruby/object:Gem::Version
34
- version: '1.3'
35
- type: :development
36
- prerelease: false
37
- version_requirements: !ruby/object:Gem::Requirement
38
- requirements:
39
- - - ~>
40
- - !ruby/object:Gem::Version
41
- version: '1.3'
42
- - !ruby/object:Gem::Dependency
43
- name: rake
44
- requirement: !ruby/object:Gem::Requirement
45
- requirements:
46
- - - ! '>='
47
- - !ruby/object:Gem::Version
48
- version: '0'
49
- type: :development
50
- prerelease: false
51
- version_requirements: !ruby/object:Gem::Requirement
52
- requirements:
53
- - - ! '>='
54
- - !ruby/object:Gem::Version
55
- version: '0'
56
- - !ruby/object:Gem::Dependency
57
- name: rspec
58
- requirement: !ruby/object:Gem::Requirement
59
- requirements:
60
- - - ! '>='
61
- - !ruby/object:Gem::Version
62
- version: '0'
63
- type: :development
64
- prerelease: false
65
- version_requirements: !ruby/object:Gem::Requirement
66
- requirements:
67
- - - ! '>='
25
+ - - ">="
68
26
  - !ruby/object:Gem::Version
69
27
  version: '0'
70
28
  description:
@@ -75,7 +33,9 @@ executables: []
75
33
  extensions: []
76
34
  extra_rdoc_files: []
77
35
  files:
78
- - .gitignore
36
+ - ".github/workflows/ci.yml"
37
+ - ".gitignore"
38
+ - ".rubocop.yml"
79
39
  - Gemfile
80
40
  - LICENSE.txt
81
41
  - README.md
@@ -84,35 +44,38 @@ files:
84
44
  - lib/formatting.rb
85
45
  - lib/formatting/currency.rb
86
46
  - lib/formatting/number.rb
47
+ - lib/formatting/percent.rb
87
48
  - lib/formatting/version.rb
88
49
  - spec/currency_spec.rb
89
50
  - spec/number_spec.rb
51
+ - spec/percent_spec.rb
90
52
  - spec/spec_helper.rb
91
53
  homepage: ''
92
54
  licenses:
93
55
  - MIT
94
- metadata: {}
56
+ metadata:
57
+ rubygems_mfa_required: 'true'
95
58
  post_install_message:
96
59
  rdoc_options: []
97
60
  require_paths:
98
61
  - lib
99
62
  required_ruby_version: !ruby/object:Gem::Requirement
100
63
  requirements:
101
- - - ! '>='
64
+ - - ">="
102
65
  - !ruby/object:Gem::Version
103
66
  version: '0'
104
67
  required_rubygems_version: !ruby/object:Gem::Requirement
105
68
  requirements:
106
- - - ! '>='
69
+ - - ">="
107
70
  - !ruby/object:Gem::Version
108
71
  version: '0'
109
72
  requirements: []
110
- rubyforge_project:
111
- rubygems_version: 2.2.1
73
+ rubygems_version: 3.2.31
112
74
  signing_key:
113
75
  specification_version: 4
114
76
  summary: Rails-less formatting for your unit-testable code.
115
77
  test_files:
116
78
  - spec/currency_spec.rb
117
79
  - spec/number_spec.rb
80
+ - spec/percent_spec.rb
118
81
  - spec/spec_helper.rb