percentage 1.0.0 → 1.1.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 3c32ff68bc5ee26ca6f82898ffb94d6aba49153d8187999d1206c2920a6d132b
4
+ data.tar.gz: 6c46179997da767a0cce9dba903d9b33b4ca5a00a7fe62e7ae8c2a5131c409bb
5
+ SHA512:
6
+ metadata.gz: 77c8e9753c605d8ff006d7c50db1fd78478eef8983a1020951fb8c46ec752438933f30829baee3d0d303877b8533b1be8c376001fc98a0ca6cce6826fb08d072
7
+ data.tar.gz: 51a800e6f7ebd074925b7cc91dc603fb1c064f5965026276645c0781ec92b95388cd5ba5708caa7dce3fc063a9b9802c8ad077d220502f869801a02a229551ca
@@ -0,0 +1,4 @@
1
+ Copyright (c) 2012-2018 TIMCRAFT
2
+
3
+ This is an Open Source project licensed under the terms of the LGPLv3 license.
4
+ Please see <http://www.gnu.org/licenses/lgpl-3.0.html> for license text.
data/README.md CHANGED
@@ -1,15 +1,20 @@
1
- Percentage
2
- ==========
1
+ # percentage
3
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/percentage.svg)](https://badge.fury.io/rb/percentage) [![Build Status](https://api.travis-ci.org/timcraft/percentage.svg?branch=master)](https://travis-ci.org/timcraft/percentage)
4
4
 
5
- A little library for working with percentages.
6
5
 
6
+ A little Ruby library for working with percentages.
7
7
 
8
- Feature Tour
9
- ------------
10
8
 
11
- The `Percentage` method converts Integer/BigDecimal/Rational objects
12
- to percentage objects with values that you would expect:
9
+ ## Installation
10
+
11
+ $ gem install percentage
12
+
13
+
14
+ ## Constructing Percentages
15
+
16
+ The `Percentage` method converts numeric objects to percentage objects
17
+ with values that you would expect:
13
18
 
14
19
  ```ruby
15
20
  Percentage(50) # => 50%
@@ -20,7 +25,7 @@ Percentage(Rational(25, 2)) # => 12.5%
20
25
  ```
21
26
 
22
27
  Percentage objects can also be constructed directly, but in this case
23
- BigDecimal/Rational values are treated as fractions, for example:
28
+ BigDecimal/Rational values are treated as fractions:
24
29
 
25
30
  ```ruby
26
31
  Percentage.new(50) # => 50%
@@ -30,6 +35,19 @@ Percentage.new(BigDecimal('0.175')) # => 17.5%
30
35
  Percentage.new(Rational(1, 8)) # => 12.5%
31
36
  ```
32
37
 
38
+ Some shortcut methods are defined on Integer and BigDecimal for convenience:
39
+
40
+ ```ruby
41
+ 50.percent # => 50%
42
+
43
+ 5.as_percentage_of(10) # => 50.0%
44
+
45
+ BigDecimal('2.9').to_percentage # => 2.9%
46
+ ```
47
+
48
+
49
+ ## Numeric features
50
+
33
51
  As with other numerics, percentage objects are conceptually immutable.
34
52
  Common numeric functionality like `to_i`, `to_f`, `to_s`, `to_r`, `zero?`,
35
53
  and equality/comparison methods are defined.
@@ -46,9 +64,9 @@ They can also be "scaled up" using the `scale` method:
46
64
  Percentage(10).scale(5) # => 50%
47
65
  ```
48
66
 
49
- Multiplication is then defined using the fractional value of the percentage.
50
- BigDecimal objects can't be coerced into rational objects, so the order of
51
- the multiplication will matter in some cases. For example:
67
+ Multiplication is defined using the fractional value of the percentage.
68
+ BigDecimal objects can't be coerced into rational objects, so the
69
+ multiplication order will matter in some cases, for example:
52
70
 
53
71
  ```ruby
54
72
  Percentage(50) * 10 # => (5/1)
@@ -61,23 +79,19 @@ Percentage(50) * BigDecimal('150.00') # raises TypeError
61
79
  ```
62
80
 
63
81
 
64
- Bonus Extras
65
- ------------
82
+ ## Bonus extras
66
83
 
67
- Some shortcut methods are defined on Integer/BigDecimal for convenience:
84
+ There's a #percent_of method defined on Integer and BigDecimal for percentage calculations:
68
85
 
69
86
  ```ruby
70
- 50.percent # => 50%
71
-
72
87
  50.percent_of(BigDecimal(150)) # => BigDecimal('75.00')
73
88
 
74
89
  10.percent_of(100) # => (10/1)
75
90
 
76
- 5.as_percentage_of(10) # => 50.0%
91
+ BigDecimal('0.5').percent_of(88) # => BigDecimal('0.44')
77
92
  ```
78
93
 
79
- And there's also a class method for calculating the percentage
80
- change between two values:
94
+ There's also a `Percentage.change` method for calculating the percentage change between two values:
81
95
 
82
96
  ```ruby
83
97
  Percentage.change(2, 3) # => 50.0%
@@ -4,4 +4,5 @@ task :default => :spec
4
4
 
5
5
  Rake::TestTask.new(:spec) do |t|
6
6
  t.test_files = FileList['spec/*_spec.rb']
7
+ t.warning = true
7
8
  end
@@ -1,4 +1,3 @@
1
- require 'rational'
2
1
  require 'bigdecimal'
3
2
 
4
3
  class Percentage
@@ -98,7 +97,7 @@ class Percentage
98
97
  elsif BigDecimal === @value
99
98
  (@value * 100).to_s('F')
100
99
  else
101
- BigDecimal(@value * 100, _precision=10).to_s('F')
100
+ (@value * 100).to_f.to_s
102
101
  end
103
102
  end
104
103
  end
@@ -112,18 +111,28 @@ def Percentage.change(a, b)
112
111
  end
113
112
 
114
113
  class BigDecimal
114
+ def to_percentage
115
+ Percentage(self)
116
+ end
117
+
118
+ def percent_of(n)
119
+ n * Percentage(self)
120
+ end
121
+
115
122
  def as_percentage_of(n)
116
123
  Percentage.new(self / n)
117
124
  end
118
125
  end
119
126
 
120
127
  class Integer
121
- def percent
122
- Percentage.new(self)
128
+ def to_percentage
129
+ Percentage(self)
123
130
  end
124
131
 
132
+ alias_method :percent, :to_percentage
133
+
125
134
  def percent_of(n)
126
- n * Percentage.new(self)
135
+ n * Percentage(self)
127
136
  end
128
137
 
129
138
  def as_percentage_of(n)
@@ -1,12 +1,16 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'percentage'
3
- s.version = '1.0.0'
3
+ s.version = '1.1.0'
4
+ s.license = 'LGPL-3.0'
4
5
  s.platform = Gem::Platform::RUBY
5
6
  s.authors = ['Tim Craft']
6
7
  s.email = ['mail@timcraft.com']
7
8
  s.homepage = 'http://github.com/timcraft/percentage'
8
9
  s.description = 'A little library for working with percentages'
9
10
  s.summary = 'See description'
10
- s.files = Dir.glob('{lib,spec}/**/*') + %w(README.md Rakefile.rb percentage.gemspec)
11
+ s.files = Dir.glob('{lib,spec}/**/*') + %w(LICENSE.txt README.md Rakefile.rb percentage.gemspec)
12
+ s.required_ruby_version = '>= 1.9.3'
13
+ s.add_development_dependency('rake', '~> 12')
14
+ s.add_development_dependency('minitest', '~> 5')
11
15
  s.require_path = 'lib'
12
16
  end
@@ -187,7 +187,7 @@ describe 'Percentage object initialized with a decimal value' do
187
187
 
188
188
  describe 'zero query method' do
189
189
  it 'returns true if the percentage has a zero value' do
190
- Percentage.new(BigDecimal(0)).zero?.must_equal(true)
190
+ Percentage.new(BigDecimal('0')).zero?.must_equal(true)
191
191
  end
192
192
 
193
193
  it 'returns false otherwise' do
@@ -319,6 +319,22 @@ describe 'Percentage change method' do
319
319
  end
320
320
  end
321
321
 
322
+ describe 'BigDecimal to_percentage method' do
323
+ it 'returns a percentage object with the value of the decimal as a percentage' do
324
+ percentage = BigDecimal(90).to_percentage
325
+ percentage.must_be_instance_of(Percentage)
326
+ percentage.value.must_equal(BigDecimal('0.9'))
327
+ end
328
+ end
329
+
330
+ describe 'BigDecimal percent_of method' do
331
+ it 'returns the value of the receiver as a percentage multiplied by the argument' do
332
+ BigDecimal(90).percent_of(100).must_equal(90)
333
+ BigDecimal(90).percent_of(BigDecimal('15')).must_equal(BigDecimal('13.5'))
334
+ BigDecimal(90).percent_of(Rational(150, 2)).must_equal(Rational(135, 2))
335
+ end
336
+ end
337
+
322
338
  describe 'BigDecimal as_percentage_of method' do
323
339
  it 'returns a percentage object with the value of the decimal divided by the argument' do
324
340
  percentage = BigDecimal('50.00').as_percentage_of(BigDecimal('100.00'))
@@ -327,6 +343,14 @@ describe 'BigDecimal as_percentage_of method' do
327
343
  end
328
344
  end
329
345
 
346
+ describe 'Integer to_percentage method' do
347
+ it 'returns a percentage object with the value of the integer' do
348
+ percentage = 10.to_percentage
349
+ percentage.must_be_instance_of(Percentage)
350
+ percentage.value.must_equal(10)
351
+ end
352
+ end
353
+
330
354
  describe 'Integer percent method' do
331
355
  it 'returns a percentage object with the value of the integer' do
332
356
  percentage = 10.percent
@@ -338,7 +362,7 @@ end
338
362
  describe 'Integer percent_of method' do
339
363
  it 'returns the value of the receiver as a percentage multiplied by the argument' do
340
364
  10.percent_of(100).must_equal(10)
341
- 10.percent_of(BigDecimal(15)).must_equal(BigDecimal('1.5'))
365
+ 10.percent_of(BigDecimal('15')).must_equal(BigDecimal('1.5'))
342
366
  10.percent_of(Rational(150, 2)).must_equal(Rational(15, 2))
343
367
  end
344
368
  end
metadata CHANGED
@@ -1,16 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: percentage
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
5
- prerelease:
4
+ version: 1.1.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Tim Craft
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-11-29 00:00:00.000000000 Z
13
- dependencies: []
11
+ date: 2018-08-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '12'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '12'
27
+ - !ruby/object:Gem::Dependency
28
+ name: minitest
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '5'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '5'
14
41
  description: A little library for working with percentages
15
42
  email:
16
43
  - mail@timcraft.com
@@ -18,34 +45,34 @@ executables: []
18
45
  extensions: []
19
46
  extra_rdoc_files: []
20
47
  files:
21
- - lib/percentage.rb
22
- - spec/percentage_spec.rb
48
+ - LICENSE.txt
23
49
  - README.md
24
50
  - Rakefile.rb
51
+ - lib/percentage.rb
25
52
  - percentage.gemspec
53
+ - spec/percentage_spec.rb
26
54
  homepage: http://github.com/timcraft/percentage
27
- licenses: []
55
+ licenses:
56
+ - LGPL-3.0
57
+ metadata: {}
28
58
  post_install_message:
29
59
  rdoc_options: []
30
60
  require_paths:
31
61
  - lib
32
62
  required_ruby_version: !ruby/object:Gem::Requirement
33
- none: false
34
63
  requirements:
35
- - - ! '>='
64
+ - - ">="
36
65
  - !ruby/object:Gem::Version
37
- version: '0'
66
+ version: 1.9.3
38
67
  required_rubygems_version: !ruby/object:Gem::Requirement
39
- none: false
40
68
  requirements:
41
- - - ! '>='
69
+ - - ">="
42
70
  - !ruby/object:Gem::Version
43
71
  version: '0'
44
72
  requirements: []
45
73
  rubyforge_project:
46
- rubygems_version: 1.8.24
74
+ rubygems_version: 2.7.6
47
75
  signing_key:
48
- specification_version: 3
76
+ specification_version: 4
49
77
  summary: See description
50
78
  test_files: []
51
- has_rdoc: