Module: Unity::Fraction
- Extended by:
- ActiveSupport::Concern
- Included in:
- Conversion, Dimension::Vector
- Defined in:
- lib/unity/fraction.rb
Defined Under Namespace
Modules: ClassMethods
Instance Method Summary collapse
- #expanded_denominator ⇒ Object
- #expanded_numerator ⇒ Object
- #expression ⇒ Object
- #expression=(string) ⇒ Object
- #initialize(*args) ⇒ Object
- #inverse ⇒ Object
- #reduce ⇒ Object
- #unit ⇒ Object
Instance Method Details
#expanded_denominator ⇒ Object
53 54 55 |
# File 'lib/unity/fraction.rb', line 53 def denominator end |
#expanded_numerator ⇒ Object
49 50 51 |
# File 'lib/unity/fraction.rb', line 49 def numerator end |
#expression ⇒ Object
39 40 41 42 |
# File 'lib/unity/fraction.rb', line 39 def expression numertor_string = ([value] + (numerator || [])).join('*') denominator.empty? ? numertor_string : "#{numertor_string}/#{denominator.join('*')}" end |
#expression=(string) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/unity/fraction.rb', line 24 def expression=string unless string.blank? num_denom = string.split('/') raise(InvalidFormat, string) if num_denom.length > 2 self.numerator = num_denom[0].split('*').map(&:strip) self.denominator = (num_denom[1].nil? ? [] : num_denom[1].split('*')).map(&:strip) self.value = extract_value!(:numerator) / extract_value!(:denominator) reduce else self.value = 0.0 self.numerator = [] self.denominator = [] end end |
#initialize(*args) ⇒ Object
17 18 19 20 21 |
# File 'lib/unity/fraction.rb', line 17 def initialize *args self.value ||= 0.0 self.numerator ||= [] self.denominator ||= [] end |
#inverse ⇒ Object
57 58 59 60 |
# File 'lib/unity/fraction.rb', line 57 def inverse new_value = value == 0.0 ? 0.0 : 1.0 / value self.class.new :value => new_value, :numerator => denominator, :denominator => numerator end |
#reduce ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/unity/fraction.rb', line 62 def reduce self.denominator.delete_if do |unit| if nindex = self.numerator.index(unit) self.numerator.delete_at(nindex) end end self.numerator = reduce_unit_array(self.numerator) self.denominator = reduce_unit_array(self.denominator) end |
#unit ⇒ Object
44 45 46 47 |
# File 'lib/unity/fraction.rb', line 44 def unit numertor_string = (numerator.blank? && !denominator.blank?) ? '1.0' : (numerator || []).join('*') denominator.blank? ? numertor_string : "#{numertor_string}/#{denominator.join('*')}" end |