module GxG::Units
Public Class Methods
interpret_units(params={})
click to toggle source
# File lib/gxg/gxg_units.rb, line 40 def self.interpret_units(params={}) # {:text => quanta,:categories => categories,:locale => locale} quanta_string = (params[:text] || "") categories = (params[:categories] || :any) locale = (params[:locale] || :en_US) numeric_base = (params[:base] || 10) unless categories == :any unless categories.is_a?(Array) categories = [(categories)] end end results = [] @@interpreters.to_enum.each do |interpreter| entry = nil if categories == :any entry = interpreter::interpret(quanta_string.to_s,locale,numeric_base) else categories.to_enum.each do |category| if interpreter::categories.include?(category) entry = interpreter.interpret(quanta_string.to_s,locale,numeric_base) end end end if entry results << entry end end {:result => results} end
refresh_units_registry()
click to toggle source
# File lib/gxg/gxg_units.rb, line 35 def self.refresh_units_registry() # SOMEDAY: Thread-safety? @@interpreters = self.unit_interpreters() end
unit_interpreters(categories=:any)
click to toggle source
this module is used for interpreting text into denominations and multipliers., and general support for various units of measure
# File lib/gxg/gxg_units.rb, line 10 def self.unit_interpreters(categories=:any) unless categories == :any unless categories.is_a?(Array) categories = [(categories)] end end unit_list = [] GxG::Units.constants.to_enum.each do |unit_handler| unit_handler = GxG::Units.const_get(unit_handler) if (unit_handler.is_any?([Class, Module]) && unit_handler.respond_to?(:interpret) && unit_handler.respond_to?(:categories)) if categories == :any unit_list << unit_handler else categories.to_enum.each do |category| if unit_handler::categories.include?(category) unit_list << unit_handler end end end end end # unit_list end