percentable 0.1.0 → 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 +4 -4
- data/README.md +13 -3
- data/lib/percentable.rb +1 -0
- data/lib/percentable/applied_percent.rb +17 -0
- data/lib/percentable/percent.rb +18 -19
- data/lib/percentable/version.rb +1 -1
- data/spec/lib/percentable/percent_spec.rb +17 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d9096b94ae18a9333ed3c0c62c5e073c25cd0fdc
|
4
|
+
data.tar.gz: 147fe75ef459749f6ac2761ea89e27db2ad99412
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eff8be4785754451bb00d48688e43674e114e09eb79ab568534db8134055a0ecae5e036c094f73cf9a686ebdd7112ea7754329ef3c3e246639adec174462135b
|
7
|
+
data.tar.gz: 28295c08b4d64035a69b91ed21e1afab836b274d9fd2a7f3ae904d31291c82353e52ee6fa5c02868e6d034d1e77fe7128c3372edbb69d32a5834a945355207fd
|
data/README.md
CHANGED
@@ -68,7 +68,7 @@ percent = Percent.new(50)
|
|
68
68
|
|
69
69
|
Repeat steps above for Floats, BigDecimals, etc. It should all work.
|
70
70
|
|
71
|
-
### Can I turn
|
71
|
+
### Can I turn Numerics into Percents?
|
72
72
|
|
73
73
|
Yes, yes you can.
|
74
74
|
|
@@ -76,6 +76,14 @@ Yes, yes you can.
|
|
76
76
|
10.to_percent #=> Percent.new(10)
|
77
77
|
```
|
78
78
|
|
79
|
+
### What if I want to turn my Numeric into what it would actually be as a percent?
|
80
|
+
|
81
|
+
Sometimes 10.to_percent is not what you want. That returns you `Percent.new(10)` which is equal only to 0.1. If you have 0.1 and want to turn that into a percent representation, use the code below:
|
82
|
+
|
83
|
+
``` ruby
|
84
|
+
Percent.from_numeric(1) #=> Percent.new(100)
|
85
|
+
```
|
86
|
+
|
79
87
|
### How do I use this with Rails?
|
80
88
|
|
81
89
|
Well let's say you have a User model, and on that user model you have a health attribute. You want to set that to a number that represents the percent. Just use the extend Percentable::Percentize method, and then use the percentize method to make sure you are returned percent objects always. Example below:
|
@@ -112,7 +120,9 @@ percentize_object = PercentizedClass.new
|
|
112
120
|
percentize_object.returns_a_percent #=> Percent.new(10)
|
113
121
|
```
|
114
122
|
|
115
|
-
|
123
|
+
### What else can percentize do?
|
124
|
+
|
125
|
+
You can percentize multiple methods at a time:
|
116
126
|
|
117
127
|
``` ruby
|
118
128
|
class PercentizedClass < OriginalClass
|
@@ -122,7 +132,7 @@ class PercentizedClass < OriginalClass
|
|
122
132
|
end
|
123
133
|
```
|
124
134
|
|
125
|
-
You can define defaults for when the percentized method returns nil:
|
135
|
+
You can also define defaults for when the percentized method returns nil:
|
126
136
|
|
127
137
|
``` ruby
|
128
138
|
class PercentizedClass < OriginalClass
|
data/lib/percentable.rb
CHANGED
data/lib/percentable/percent.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
module Percentable
|
2
2
|
class Percent < ::Numeric
|
3
3
|
def initialize(value)
|
4
|
-
|
4
|
+
if value.is_a? Percent
|
5
|
+
@value = value.value
|
6
|
+
else
|
7
|
+
@value = value.to_f
|
8
|
+
end
|
5
9
|
end
|
6
10
|
|
7
11
|
def value
|
@@ -20,24 +24,6 @@ module Percentable
|
|
20
24
|
value.to_i
|
21
25
|
end
|
22
26
|
|
23
|
-
def coerce other
|
24
|
-
method = caller[0].match("`(.+)'")[1].to_sym
|
25
|
-
|
26
|
-
case other
|
27
|
-
when Numeric
|
28
|
-
case method
|
29
|
-
when :+
|
30
|
-
[to_f * other, other]
|
31
|
-
when :-
|
32
|
-
[other, to_f * other]
|
33
|
-
else
|
34
|
-
[other, to_f]
|
35
|
-
end
|
36
|
-
else
|
37
|
-
fail TypeError, "#{self.class} can't be coerced into #{other.class}"
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
27
|
def == other
|
42
28
|
(other.class == self.class && other.value == self.value) || other == self.to_f
|
43
29
|
end
|
@@ -70,6 +56,10 @@ module Percentable
|
|
70
56
|
end
|
71
57
|
end
|
72
58
|
|
59
|
+
def to_percent
|
60
|
+
self
|
61
|
+
end
|
62
|
+
|
73
63
|
def self.from_numeric(numeric)
|
74
64
|
case numeric
|
75
65
|
when Numeric
|
@@ -78,6 +68,15 @@ module Percentable
|
|
78
68
|
fail TypeError, 'must inherit from Numeric'
|
79
69
|
end
|
80
70
|
end
|
71
|
+
|
72
|
+
def coerce other
|
73
|
+
case other
|
74
|
+
when Numeric
|
75
|
+
[AppliedPercent.new(self), other]
|
76
|
+
else
|
77
|
+
fail TypeError, "#{self.class} can't be coerced into #{other.class}"
|
78
|
+
end
|
79
|
+
end
|
81
80
|
end
|
82
81
|
end
|
83
82
|
|
data/lib/percentable/version.rb
CHANGED
@@ -14,6 +14,15 @@ describe Percentable::Percent do
|
|
14
14
|
expect(subject.value).to eq 50
|
15
15
|
end
|
16
16
|
end
|
17
|
+
|
18
|
+
context 'with percent value' do
|
19
|
+
let(:value) { percent }
|
20
|
+
let(:percent) { Percentable::Percent.new(50) }
|
21
|
+
|
22
|
+
it 'should return an equivalent percent' do
|
23
|
+
expect(subject).to eq percent
|
24
|
+
end
|
25
|
+
end
|
17
26
|
end
|
18
27
|
|
19
28
|
describe '#to_s' do
|
@@ -277,6 +286,14 @@ describe Percentable::Percent do
|
|
277
286
|
end
|
278
287
|
end
|
279
288
|
|
289
|
+
describe '#to_percent' do
|
290
|
+
let(:value) { 50 }
|
291
|
+
|
292
|
+
it 'should return self' do
|
293
|
+
expect(subject.to_percent).to eq subject
|
294
|
+
end
|
295
|
+
end
|
296
|
+
|
280
297
|
describe '.from_numeric' do
|
281
298
|
let(:n) { 0.5 }
|
282
299
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: percentable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Roberts
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-08-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -82,6 +82,7 @@ files:
|
|
82
82
|
- README.md
|
83
83
|
- Rakefile
|
84
84
|
- lib/percentable.rb
|
85
|
+
- lib/percentable/applied_percent.rb
|
85
86
|
- lib/percentable/numeric.rb
|
86
87
|
- lib/percentable/percent.rb
|
87
88
|
- lib/percentable/percentize.rb
|