fractify 1.0.1 → 1.0.2

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: 6d6713db12a507f2f631b194aa35a55da4084fdf1a21983bc22b9639ed6b428d
4
- data.tar.gz: 8758538741493267b7f6955fa40816b2f38edce26ccbc92591402481ee4bd273
3
+ metadata.gz: 815c6148fb1a168ecc92fc30a767b334d22b69bd01ec45d710528404a03962de
4
+ data.tar.gz: cf9d530bb686c30cfae00bd44ee24f22faff2cf800f11da8f67a08d0a030a140
5
5
  SHA512:
6
- metadata.gz: ca97e7525f6adaba3ce22a404466075dcb6b226986f33d4712f730c79b5dfcb555408e229331207e20dfea57bcad9d7722911472d8a810a399d6f5f64183644d
7
- data.tar.gz: 7d62525a69facd0fb7abe352a0a883f6c76d473d7d86cfb76bd2282c6b943827539d735b82d564c822238e1556ac2940e829afaeb501fd737deecda3684cced8
6
+ metadata.gz: f986edd971a9e04fdb4f66ec950748789372f7931117d75193512e62665b9bc18de3cc459591e1ff3e3f4df2b66e016743686b46deea21c54be8611f708ad1f1
7
+ data.tar.gz: b46f33911ed19b88cb92f8bca462a5f53aea4758710ef324075dab77d47b887db33c56a2c85b8fa122a9e3c1cdd3fe9cd06e309279f9f165f42798f59ede6ac3
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fractify (1.0.1)
4
+ fractify (1.0.2)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -32,7 +32,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
32
32
 
33
33
  ## Contributing
34
34
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/fractify.
35
+ Bug reports and pull requests are welcome on GitHub at https://gitlab.com/Verseth/fractify.
36
36
 
37
37
  ## License
38
38
 
@@ -7,15 +7,15 @@ module Fractify
7
7
  class Fraction
8
8
  attr_accessor :whole_part, :numerator, :denominator, :negative
9
9
 
10
- def initialize(whole_part: 0, numerator: 0, denominator: 1, string: '', number: false)
10
+ def initialize(whole_part: 0, numerator: 0, denominator: 1, string: '', numeric: false)
11
11
  unless string.strip.empty?
12
12
  to_zero!
13
13
  parse_fraction_string!(string)
14
14
  return
15
15
  end
16
16
 
17
- if number.is_a? Numeric
18
- convert_number!(number)
17
+ if numeric.is_a? Numeric
18
+ convert_number!(numeric)
19
19
  return
20
20
  end
21
21
  raise DividingByZeroError if denominator.zero? && numerator != 0
@@ -53,9 +53,11 @@ module Fractify
53
53
  end
54
54
 
55
55
  def simplify!
56
- return if integer?
56
+ return true if integer?
57
57
 
58
58
  if zero?
59
+ @denominator = 1
60
+ @whole_part = 0
59
61
  @negative = false
60
62
  else
61
63
  greatest_common_divisor = self.class.greatest_common_divisor(numerator, denominator)
@@ -63,10 +65,12 @@ module Fractify
63
65
  @denominator /= greatest_common_divisor
64
66
  @numerator /= greatest_common_divisor
65
67
  end
68
+
69
+ true
66
70
  end
67
71
 
68
72
  def to_proper_fraction!
69
- return if zero?
73
+ return true if zero?
70
74
 
71
75
  if denominator == 1 && numerator != 1
72
76
  @whole_part += numerator
@@ -76,6 +80,18 @@ module Fractify
76
80
  @whole_part += new_whole_part
77
81
  @numerator %= denominator
78
82
  end
83
+
84
+ true
85
+ end
86
+
87
+ def to_improper!
88
+ return true if whole_part.zero?
89
+
90
+ @numerator -= 1 if numerator == 1 && denominator == 1
91
+ @numerator += whole_part * denominator
92
+ @whole_part = 0
93
+
94
+ true
79
95
  end
80
96
 
81
97
  def puts
@@ -87,6 +103,8 @@ module Fractify
87
103
  @numerator = 0
88
104
  @denominator = 1
89
105
  @negative = false
106
+
107
+ true
90
108
  end
91
109
 
92
110
  def to_f
@@ -111,73 +129,77 @@ module Fractify
111
129
  end
112
130
 
113
131
  def to_s(improper = false)
114
- to_proper_fraction! unless improper
132
+ fraction = dup
133
+ fraction.to_proper_fraction! unless improper
115
134
  fraction_string = '('
116
135
  fraction_string += '-' if negative?
117
136
 
118
- if zero?
137
+ if fraction.zero?
119
138
  fraction_string += '0'
120
- elsif one?
139
+ elsif fraction.one?
121
140
  fraction_string += '1'
122
141
  else
123
- fraction_string += whole_part.to_s if whole_part != 0
124
- if numerator != 1 || denominator != 1
125
- fraction_string += ' ' if whole_part != 0
126
- fraction_string += numerator.to_s + '/' + denominator.to_s
142
+ fraction_string += fraction.whole_part.to_s if fraction.whole_part != 0
143
+ if fraction.numerator != 1 || fraction.denominator != 1
144
+ fraction_string += ' ' if fraction.whole_part != 0
145
+ fraction_string += fraction.numerator.to_s + '/' + fraction.denominator.to_s
127
146
  end
128
147
  end
129
148
 
130
- to_improper!
131
149
  fraction_string + ')'
132
150
  end
133
151
 
134
152
  def -(other)
153
+ check_argument(other)
154
+
135
155
  fraction = dup
136
- object = other.dup
137
- if zero?
138
- fraction.whole_part = object.whole_part
139
- fraction.numerator = object.numerator
140
- fraction.denominator = object.denominator
141
- fraction.negative = !object.negative
142
- else
143
- fraction.to_common_denominator!(object) unless object.zero?
156
+ object = if other.is_a? Numeric
157
+ Fractify::Fraction.new(numeric: other)
158
+ else
159
+ other.dup
160
+ end
161
+ fraction.to_common_denominator!(object) unless object.zero?
144
162
 
145
- fraction.minus_to_numerator!
146
- object.minus_to_numerator!
163
+ fraction.minus_to_numerator!
164
+ object.minus_to_numerator!
147
165
 
148
- fraction.numerator -= object.numerator
149
- fraction.minus_to_negative_field!
150
- fraction.simplify!
151
- end
166
+ fraction.numerator -= object.numerator
167
+ fraction.minus_to_negative_field!
168
+ fraction.simplify!
152
169
 
153
170
  fraction
154
171
  end
155
172
 
156
173
  def +(other)
174
+ check_argument(other)
175
+
157
176
  fraction = dup
158
- object = other.dup
159
- if zero?
160
- fraction.whole_part = object.whole_part
161
- fraction.numerator = object.numerator
162
- fraction.denominator = object.denominator
163
- fraction.negative = object.negative
164
- else
165
- fraction.to_common_denominator!(object) unless object.zero?
177
+ object = if other.is_a? Numeric
178
+ Fractify::Fraction.new(numeric: other)
179
+ else
180
+ other.dup
181
+ end
182
+ fraction.to_common_denominator!(object) unless object.zero?
166
183
 
167
- fraction.minus_to_numerator!
168
- object.minus_to_numerator!
184
+ fraction.minus_to_numerator!
185
+ object.minus_to_numerator!
169
186
 
170
- fraction.numerator += object.numerator
171
- fraction.minus_to_negative_field!
172
- fraction.simplify!
173
- end
187
+ fraction.numerator += object.numerator
188
+ fraction.minus_to_negative_field!
189
+ fraction.simplify!
174
190
 
175
191
  fraction
176
192
  end
177
193
 
178
194
  def *(other)
195
+ check_argument(other)
196
+
179
197
  fraction = dup
180
- object = other.dup
198
+ object = if other.is_a? Numeric
199
+ Fractify::Fraction.new(numeric: other)
200
+ else
201
+ other.dup
202
+ end
181
203
 
182
204
  fraction.to_improper!
183
205
  object.to_improper!
@@ -198,8 +220,15 @@ module Fractify
198
220
  end
199
221
 
200
222
  def /(other)
223
+ check_argument(other)
224
+ raise DividingByZeroError if other.zero?
225
+
201
226
  fraction = dup
202
- object = other.dup
227
+ object = if other.is_a? Numeric
228
+ Fractify::Fraction.new(numeric: other)
229
+ else
230
+ other.dup
231
+ end
203
232
 
204
233
  object.to_reciprocal!
205
234
  fraction *= object
@@ -208,13 +237,12 @@ module Fractify
208
237
  end
209
238
 
210
239
  def **(other)
240
+ check_argument(other)
211
241
  if other.is_a? Numeric
212
242
  power(other)
213
- elsif other.is_a? Fractify::Fraction
243
+ else
214
244
  x = other.to_f
215
245
  power(x)
216
- else
217
- raise IncorrectArgumentsError
218
246
  end
219
247
  end
220
248
 
@@ -414,6 +442,8 @@ module Fractify
414
442
  numerator_multiplication = least_common_multiple / other.denominator
415
443
  other.numerator *= numerator_multiplication
416
444
  other.denominator = least_common_multiple
445
+
446
+ true
417
447
  end
418
448
 
419
449
  def to_reciprocal!
@@ -421,37 +451,41 @@ module Fractify
421
451
  aux = denominator
422
452
  @denominator = numerator
423
453
  @numerator = aux
454
+
455
+ true
424
456
  end
425
457
 
426
458
  protected
427
459
 
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
-
436
460
  def minus_to_numerator!
437
- return unless negative
461
+ return true unless negative
438
462
 
439
463
  @negative = false
440
464
  @numerator = -numerator
465
+
466
+ true
441
467
  end
442
468
 
443
469
  def minus_to_negative_field!
444
- return unless numerator.negative?
470
+ return true unless numerator.negative?
445
471
 
446
472
  @negative = true
447
473
  @numerator = numerator.abs
474
+
475
+ true
448
476
  end
449
477
 
450
478
  private
451
479
 
480
+ def check_argument(other)
481
+ return unless !other.is_a?(Numeric) && !other.is_a?(Fractify::Fraction)
482
+
483
+ raise IncorrectArgumentsError
484
+ end
485
+
452
486
  def power(x)
453
487
  fraction = dup
454
- fraction.negative = false if x % 2 == 0
488
+ fraction.negative = false if (x % 2).zero?
455
489
 
456
490
  if x.negative?
457
491
  fraction.to_reciprocal!
@@ -468,7 +502,7 @@ module Fractify
468
502
  float = fraction.to_f.abs
469
503
  float **= x
470
504
  float = -float if fraction.negative?
471
- fraction = Fractify::Fraction.new(number: float)
505
+ fraction = Fractify::Fraction.new(numeric: float)
472
506
  end
473
507
 
474
508
  fraction
@@ -480,6 +514,8 @@ module Fractify
480
514
  @whole_part = whole_part.abs
481
515
  @numerator = numerator.abs
482
516
  @denominator = denominator.abs
517
+
518
+ true
483
519
  end
484
520
 
485
521
  def arguments_make_negative?
@@ -682,6 +718,7 @@ module Fractify
682
718
  @numerator = 1 if numerator.zero?
683
719
 
684
720
  simplify!
721
+ to_improper!
685
722
  end
686
723
  end
687
724
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Fractify
4
- VERSION = '1.0.1'
4
+ VERSION = '1.0.2'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fractify
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mateusz Drewniak