fractify 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b7dee9a90b5b90e4e6b5279eadf795942cb424e3507d1e80c3d8fd2e95a1cc3b
4
- data.tar.gz: a564de039fbc57637c3be967797d26a5f7216e16d1b9000439fc6de38fcd53e9
3
+ metadata.gz: 6d6713db12a507f2f631b194aa35a55da4084fdf1a21983bc22b9639ed6b428d
4
+ data.tar.gz: 8758538741493267b7f6955fa40816b2f38edce26ccbc92591402481ee4bd273
5
5
  SHA512:
6
- metadata.gz: 57de8465352800e17149a1d216ac311169bdc679e47e732970a694130ea8274a0b3c2bb4929fa64a24d9ce67862e9290162c0fb6e557fb9ba623be4515303e85
7
- data.tar.gz: e28a9f15bf58ed3492fc8878400072fb8bbc22f3fea31b874fa5be9df76db6626dd03c7ee8c8b69fccc5b8a9128b8e12a84a0cfa2f4dc38a590c15ab56b33bca
6
+ metadata.gz: ca97e7525f6adaba3ce22a404466075dcb6b226986f33d4712f730c79b5dfcb555408e229331207e20dfea57bcad9d7722911472d8a810a399d6f5f64183644d
7
+ data.tar.gz: 7d62525a69facd0fb7abe352a0a883f6c76d473d7d86cfb76bd2282c6b943827539d735b82d564c822238e1556ac2940e829afaeb501fd737deecda3684cced8
data/.gitignore CHANGED
@@ -7,3 +7,4 @@
7
7
  /spec/reports/
8
8
  /tmp/
9
9
  .byebug_history
10
+ *.gem
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fractify (1.0.0)
4
+ fractify (1.0.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
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 few classes which make it possible to properly' \
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'
@@ -20,12 +20,14 @@ module Fractify
20
20
  end
21
21
  raise DividingByZeroError if denominator.zero? && numerator != 0
22
22
 
23
- @whole_part = whole_part
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
- fix_negativity!
49
- if !zero?
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
- if denominator == 1 && numerator != 1
56
- @whole_part += numerator
57
- @numerator = 1
58
- elsif numerator > denominator
59
- new_whole_part = numerator / denominator
60
- @whole_part += new_whole_part
61
- @numerator %= denominator
62
- end
63
- else
64
- @negative = false
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.simplify!
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 = first.abs
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
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Fractify
4
- VERSION = '1.0.0'
4
+ VERSION = '1.0.1'
5
5
  end
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.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-26 00:00:00.000000000 Z
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: '0'
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 few classes which make it possible to properly handle common fractions
143
- in Ruby
142
+ summary: A small gem which makes it possible to properly handle common fractions in
143
+ Ruby
144
144
  test_files: []