Eman_Fraction 0.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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/eman_fraction.rb +35 -0
  3. metadata +44 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 1f9775b55104f7408dca08ceef4434c2001573e23e31b3244709340e48d7de52
4
+ data.tar.gz: aaea32b8b6de075a07999916691a84358c8c7d154013ba89d14eb2ae7ca9ef70
5
+ SHA512:
6
+ metadata.gz: c432bccaa4043a8fb73ed01ec86bdba0eb6f017761e8719b29531104c73f567a6ad26e8b1f4fbb9819586f40c62c995947fc6149e79d454d5cca12d6ac35143a
7
+ data.tar.gz: 909706ab213da6d82e40f4cfee0414b925b011eeb79d95cb2a0ee95a568d54043370317b48f9abd4704a59331d5b8038901486dae8044e1851d67882a1152e51
@@ -0,0 +1,35 @@
1
+ class Fraction < Numeric
2
+ attr_reader :numerator, :denominator
3
+ def initialize(numerator:, denominator:)
4
+ @numerator = numerator
5
+ @denominator = denominator
6
+ simplify
7
+ end
8
+
9
+ def +(other)
10
+ self_numerator = numerator * other.denominator
11
+ other_numerator = other.numerator * denominator
12
+ self.class.new(numerator: self_numerator + other_numerator, denominator: other.denominator * denominator)
13
+ end
14
+
15
+ def ==(other)
16
+ numerator == other.numerator && denominator == other.denominator
17
+ end
18
+
19
+ def coerce(other)
20
+ [self.class.new(numerator: other.to_i, denominator: 1), self]
21
+ end
22
+
23
+ def simplify
24
+ denon_factors = factors(denominator)
25
+ num_factors = factors(numerator)
26
+ common_factors = denon_factors & num_factors
27
+ return if common_factors.empty?
28
+ @numerator = @numerator / common_factors.last
29
+ @denominator = @denominator / common_factors.last
30
+ end
31
+
32
+ def factors(number)
33
+ (1..number).select {|x| number % x == 0 }
34
+ end
35
+ end
metadata ADDED
@@ -0,0 +1,44 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: Eman_Fraction
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Emmanuel Genard
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-11-06 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: 'This is part of the course:The World''s Best Intro to TDD, Level 1:
14
+ TDD Done Right'
15
+ email:
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/eman_fraction.rb
21
+ homepage:
22
+ licenses:
23
+ - MIT
24
+ metadata: {}
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ requirements: []
40
+ rubygems_version: 3.0.3
41
+ signing_key:
42
+ specification_version: 4
43
+ summary: A library that implements Faction arithmetic
44
+ test_files: []