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 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: []