ons-numbers 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 4bbbbb61c50526f46185a58cb58c3e8a496b15a3dd769de5e26b9f22ef225193
4
+ data.tar.gz: d6a5ca3b510c5a142549a7b37d16ff6ea9e2afa73b0966b7dfc118a7fdb83af9
5
+ SHA512:
6
+ metadata.gz: c481ef0423bd833e09aee1c8bb84de5fa4bb7078211c82df9443ea47d79019222b5830e65c2a65b319e0f855f0af569a3d78fb56025e2da83266ef625272523b
7
+ data.tar.gz: a73d32bf1f28924607320255c9fc334255f0678d4167f55f8a31227c860ecac4c048572728923d5e1b121f391eff48efb6a94ef463497b563f24dcf6acc968f4
data/README.md ADDED
@@ -0,0 +1,30 @@
1
+ # ONS Numbers RubyGem
2
+ A utility class for formatting numbers in common ways. Note that this gem targets Ruby 3.0 and above.
3
+
4
+ ## Installation
5
+
6
+ ```
7
+ gem install ons-numbers
8
+ ```
9
+
10
+ ## Examples
11
+
12
+ ```ruby
13
+ require 'ons-numbers'
14
+
15
+ Numbers.currency(1234.56) # => "£1,234.56"
16
+ Numbers.grouped(1234567) # => "1,234,567"
17
+ Numbers.percentage(75, 100) # => "75.0%"
18
+ ```
19
+
20
+ ## Testing
21
+
22
+ ```
23
+ rake test
24
+ ```
25
+
26
+ ## Licence
27
+ This library is licensed under the MIT licence. Full licence text is available in [LICENCE](LICENCE).
28
+
29
+ ## Copyright
30
+ Copyright (C) 2022 Crown Copyright (Office for National Statistics)
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Class to format numbers in common ways.
4
+ class Numbers
5
+ class << self
6
+ # Returns the passed number formatted as GBP currency e.g. £1,234.56.
7
+ #
8
+ # Params:
9
+ # - number: The number to format.
10
+ def currency(number)
11
+ return '£0' if number.nil?
12
+
13
+ "£#{grouped(format('%.2f', number))}"
14
+ end
15
+
16
+ # Returns the passed number formatted in groups of 1000 e.g 1,000,000. Note that any numbers
17
+ # after the decimal point are preserved unformatted.
18
+ #
19
+ # Params:
20
+ # - number: The number to format.
21
+ #
22
+ # An Argument error is raised if number is nil.
23
+ def grouped(number)
24
+ raise ArgumentError.new('number cannot be nil') if number.nil?
25
+
26
+ whole, decimal = number.to_s.split('.')
27
+ count_groups = whole.to_s.chars.to_a.reverse.each_slice(3)
28
+ whole_with_commas = count_groups.map(&:join).join(',').reverse
29
+ [whole_with_commas, decimal].compact.join('.')
30
+ end
31
+
32
+ # Returns the passed number formatted as a percentage of the passed total.
33
+ #
34
+ # Params:
35
+ # - number: The number which is a percentage of the total.
36
+ # - total: The total.
37
+ #
38
+ # An Argument error is raised if number or total are nil.
39
+ def percentage(number, total)
40
+ raise ArgumentError.new('number cannot be nil') if number.nil?
41
+ raise ArgumentError.new('total cannot be nil') if total.nil?
42
+
43
+ "#{((number.to_f / total.to_f) * 100).round(2)}%"
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ONSNumbers
4
+ module Version
5
+ MAJOR = 1
6
+ MINOR = 0
7
+ TINY = 0
8
+ end
9
+ VERSION = [Version::MAJOR, Version::MINOR, Version::TINY].compact * '.'
10
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'ons-numbers/numbers'
metadata ADDED
@@ -0,0 +1,91 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ons-numbers
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - John Topley
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-04-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '13.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '13.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubocop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.17'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.17'
55
+ description: 'A utility class for formatting numbers in common ways.
56
+
57
+ '
58
+ email:
59
+ - john.topley@ons.gov.uk
60
+ executables: []
61
+ extensions: []
62
+ extra_rdoc_files: []
63
+ files:
64
+ - README.md
65
+ - lib/ons-numbers.rb
66
+ - lib/ons-numbers/numbers.rb
67
+ - lib/ons-numbers/version.rb
68
+ homepage: https://github.com/ONSdigital/ons-numbers
69
+ licenses:
70
+ - MIT
71
+ metadata: {}
72
+ post_install_message:
73
+ rdoc_options: []
74
+ require_paths:
75
+ - lib
76
+ required_ruby_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: 3.0.0
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ requirements: []
87
+ rubygems_version: 3.3.3
88
+ signing_key:
89
+ specification_version: 4
90
+ summary: A number formatting library.
91
+ test_files: []