fractify 1.0.0 → 1.0.1
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/.gitignore +1 -0
- data/Gemfile.lock +1 -1
- data/fractify.gemspec +2 -1
- data/lib/fractify/fraction.rb +41 -37
- data/lib/fractify/version.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6d6713db12a507f2f631b194aa35a55da4084fdf1a21983bc22b9639ed6b428d
|
4
|
+
data.tar.gz: 8758538741493267b7f6955fa40816b2f38edce26ccbc92591402481ee4bd273
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ca97e7525f6adaba3ce22a404466075dcb6b226986f33d4712f730c79b5dfcb555408e229331207e20dfea57bcad9d7722911472d8a810a399d6f5f64183644d
|
7
|
+
data.tar.gz: 7d62525a69facd0fb7abe352a0a883f6c76d473d7d86cfb76bd2282c6b943827539d735b82d564c822238e1556ac2940e829afaeb501fd737deecda3684cced8
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
data/fractify.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.authors = ['Mateusz Drewniak']
|
11
11
|
spec.email = ['matmg24@gmail.com']
|
12
12
|
|
13
|
-
spec.summary = 'A
|
13
|
+
spec.summary = 'A small gem which makes it possible to properly' \
|
14
14
|
' handle common fractions in Ruby'
|
15
15
|
spec.homepage = 'https://gitlab.com/Verseth/fractify'
|
16
16
|
spec.license = 'MIT'
|
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
28
28
|
spec.require_paths = ['lib']
|
29
29
|
|
30
|
+
spec.required_ruby_version = '>=2.3'
|
30
31
|
spec.add_development_dependency 'bundler', '~> 1.17'
|
31
32
|
spec.add_development_dependency 'byebug'
|
32
33
|
spec.add_development_dependency 'minitest', '~> 5.0'
|
data/lib/fractify/fraction.rb
CHANGED
@@ -20,12 +20,14 @@ module Fractify
|
|
20
20
|
end
|
21
21
|
raise DividingByZeroError if denominator.zero? && numerator != 0
|
22
22
|
|
23
|
-
|
23
|
+
self.whole_part = whole_part
|
24
24
|
self.numerator = numerator
|
25
25
|
self.denominator = denominator
|
26
26
|
self.negative = false
|
27
27
|
|
28
|
+
fix_negativity!
|
28
29
|
simplify!
|
30
|
+
to_improper!
|
29
31
|
end
|
30
32
|
|
31
33
|
def negative?
|
@@ -38,6 +40,12 @@ module Fractify
|
|
38
40
|
false
|
39
41
|
end
|
40
42
|
|
43
|
+
def integer?
|
44
|
+
return true if denominator == 1 && !zero?
|
45
|
+
|
46
|
+
false
|
47
|
+
end
|
48
|
+
|
41
49
|
def one?
|
42
50
|
return true if numerator == 1 && denominator == 1 && whole_part.zero?
|
43
51
|
|
@@ -45,23 +53,28 @@ module Fractify
|
|
45
53
|
end
|
46
54
|
|
47
55
|
def simplify!
|
48
|
-
|
49
|
-
|
56
|
+
return if integer?
|
57
|
+
|
58
|
+
if zero?
|
59
|
+
@negative = false
|
60
|
+
else
|
50
61
|
greatest_common_divisor = self.class.greatest_common_divisor(numerator, denominator)
|
51
62
|
|
52
63
|
@denominator /= greatest_common_divisor
|
53
64
|
@numerator /= greatest_common_divisor
|
65
|
+
end
|
66
|
+
end
|
54
67
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
@
|
68
|
+
def to_proper_fraction!
|
69
|
+
return if zero?
|
70
|
+
|
71
|
+
if denominator == 1 && numerator != 1
|
72
|
+
@whole_part += numerator
|
73
|
+
@numerator = 1
|
74
|
+
elsif numerator > denominator
|
75
|
+
new_whole_part = numerator / denominator
|
76
|
+
@whole_part += new_whole_part
|
77
|
+
@numerator %= denominator
|
65
78
|
end
|
66
79
|
end
|
67
80
|
|
@@ -76,15 +89,6 @@ module Fractify
|
|
76
89
|
@negative = false
|
77
90
|
end
|
78
91
|
|
79
|
-
def to_improper!
|
80
|
-
return if whole_part.zero?
|
81
|
-
|
82
|
-
simplify!
|
83
|
-
@numerator -= 1 if numerator == 1 && denominator == 1
|
84
|
-
@numerator += whole_part * denominator
|
85
|
-
@whole_part = 0
|
86
|
-
end
|
87
|
-
|
88
92
|
def to_f
|
89
93
|
return 0.0 if zero?
|
90
94
|
|
@@ -97,17 +101,17 @@ module Fractify
|
|
97
101
|
|
98
102
|
def to_i
|
99
103
|
return 0 if zero?
|
100
|
-
|
101
104
|
fraction = dup
|
102
|
-
fraction.
|
105
|
+
fraction.to_proper_fraction!
|
103
106
|
|
104
|
-
result = whole_part
|
107
|
+
result = fraction.whole_part
|
105
108
|
result = -result if fraction.negative?
|
106
109
|
|
107
110
|
result
|
108
111
|
end
|
109
112
|
|
110
|
-
def to_s
|
113
|
+
def to_s(improper = false)
|
114
|
+
to_proper_fraction! unless improper
|
111
115
|
fraction_string = '('
|
112
116
|
fraction_string += '-' if negative?
|
113
117
|
|
@@ -123,6 +127,7 @@ module Fractify
|
|
123
127
|
end
|
124
128
|
end
|
125
129
|
|
130
|
+
to_improper!
|
126
131
|
fraction_string + ')'
|
127
132
|
end
|
128
133
|
|
@@ -244,18 +249,9 @@ module Fractify
|
|
244
249
|
end
|
245
250
|
|
246
251
|
def self.greatest_common_divisor(first, second)
|
247
|
-
first
|
248
|
-
second = second.abs
|
249
|
-
|
250
|
-
while first != second
|
251
|
-
if first > second
|
252
|
-
first -= second
|
253
|
-
else
|
254
|
-
second -= first
|
255
|
-
end
|
256
|
-
end
|
252
|
+
return first if second.zero?
|
257
253
|
|
258
|
-
first
|
254
|
+
greatest_common_divisor(second, first % second)
|
259
255
|
end
|
260
256
|
|
261
257
|
def self.numeric?(char)
|
@@ -429,6 +425,14 @@ module Fractify
|
|
429
425
|
|
430
426
|
protected
|
431
427
|
|
428
|
+
def to_improper!
|
429
|
+
return if whole_part.zero?
|
430
|
+
|
431
|
+
@numerator -= 1 if numerator == 1 && denominator == 1
|
432
|
+
@numerator += whole_part * denominator
|
433
|
+
@whole_part = 0
|
434
|
+
end
|
435
|
+
|
432
436
|
def minus_to_numerator!
|
433
437
|
return unless negative
|
434
438
|
|
data/lib/fractify/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fractify
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mateusz Drewniak
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-03-
|
11
|
+
date: 2020-03-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -129,7 +129,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
129
129
|
requirements:
|
130
130
|
- - ">="
|
131
131
|
- !ruby/object:Gem::Version
|
132
|
-
version: '
|
132
|
+
version: '2.3'
|
133
133
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
134
134
|
requirements:
|
135
135
|
- - ">="
|
@@ -139,6 +139,6 @@ requirements: []
|
|
139
139
|
rubygems_version: 3.0.6
|
140
140
|
signing_key:
|
141
141
|
specification_version: 4
|
142
|
-
summary: A
|
143
|
-
|
142
|
+
summary: A small gem which makes it possible to properly handle common fractions in
|
143
|
+
Ruby
|
144
144
|
test_files: []
|