ons-numbers 1.0.0
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 +7 -0
- data/README.md +30 -0
- data/lib/ons-numbers/numbers.rb +46 -0
- data/lib/ons-numbers/version.rb +10 -0
- data/lib/ons-numbers.rb +3 -0
- metadata +91 -0
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
|
data/lib/ons-numbers.rb
ADDED
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: []
|