lib/ruby-measurement/unit.rb in ruby-measurement-1.2.2 vs lib/ruby-measurement/unit.rb in ruby-measurement-1.2.3

- old
+ new

@@ -1,88 +1,88 @@ require 'set' class Measurement class Unit attr_reader :name, :aliases, :conversions - + @definitions = {} - + def initialize(name) @name = name.to_s @aliases = Set.new @conversions = {} add_alias(name) end - + def add_alias(*args) args.each do |unit_alias| @aliases << unit_alias.to_s self.class[unit_alias] = self end end - + def add_conversion(unit_name, &block) @conversions[unit_name.to_s] = block end - + def conversion(unit_name) unit = self.class[unit_name] return nil unless unit - + unit.aliases.each do |unit_alias| conversion = @conversions[unit_alias.to_s] return conversion if conversion end - + nil end - + def inspect to_s end - + def to_s name end - + def ==(obj) obj.kind_of?(self.class) && name == obj.name && aliases == obj.aliases && conversions.all? do |key, proc| [-2.5, -1, 0, 1, 2.5].all? { |n| proc.call(n) == obj.conversions[key].call(n) } end end - - def self.define(unit_name, &block) - Builder.new(unit_name, &block) + + class << self + def define(unit_name, &block) + Builder.new(unit_name, &block) + end + + def [](unit_name) + @definitions[unit_name.to_s.downcase] + end + + def []=(unit_name, unit) + @definitions[unit_name.to_s.downcase] = unit + end + + def names + @definitions.keys + end end - - def self.[](unit_name) - @definitions[unit_name.to_s.downcase] - end - - def self.names - @definitions.keys - end - - private - - def self.[]=(unit_name, unit) - @definitions[unit_name.to_s.downcase] = unit - end - + class Builder def initialize(unit_name, &block) @unit = Unit.new(unit_name) block.call(self) if block_given? end - + def alias(*args) @unit.add_alias(*args) end - + def convert_to(unit_name, &block) @unit.add_conversion(unit_name, &block) end - + def to_unit @unit end end end