class Tins::Unit::UnitParser
Constants
- NUMBER
Attributes
number[R]
Public Class Methods
new(source, unit, prefixes = nil)
click to toggle source
Calls superclass method
# File lib/tins/unit.rb, line 62 def initialize(source, unit, prefixes = nil) super source if prefixes @unit_re = unit_re(Tins::Unit.prefixes(prefixes), unit) @unit_lc_re = @unit_uc_re = nil else @unit_lc_re = unit_re(Tins::Unit.prefixes(:lc), unit) @unit_uc_re = unit_re(Tins::Unit.prefixes(:uc), unit) @unit_re = nil end @number = 1.0 end
Public Instance Methods
parse()
click to toggle source
# File lib/tins/unit.rb, line 117 def parse raise NotImplementedError end
scan(re)
click to toggle source
Calls superclass method
# File lib/tins/unit.rb, line 89 def scan(re) re.nil? and return super end
scan_char(char)
click to toggle source
# File lib/tins/unit.rb, line 113 def scan_char(char) scan(/#{char}/) or return end
scan_number()
click to toggle source
# File lib/tins/unit.rb, line 94 def scan_number scan(NUMBER) or return @number *= BigDecimal(self[1]) end
scan_unit()
click to toggle source
# File lib/tins/unit.rb, line 99 def scan_unit case when scan(@unit_re) prefix = @unit_re.prefixes.find { |pre| pre.name == self[1] } or return @number *= prefix.multiplier when scan(@unit_lc_re) prefix = @unit_lc_re.prefixes.find { |pre| pre.name == self[1] } or return @number *= prefix.multiplier when scan(@unit_uc_re) prefix = @unit_uc_re.prefixes.find { |pre| pre.name == self[1] } or return @number *= prefix.multiplier end end
Private Instance Methods
unit_re(prefixes, unit)
click to toggle source
# File lib/tins/unit.rb, line 75 def unit_re(prefixes, unit) re = Regexp.new( "(#{prefixes.reverse.map { |pre| Regexp.quote(pre.name) } * ?|})(#{unit})" ) re.singleton_class.class_eval do define_method(:prefixes) { prefixes } end re end