Class: EyeOfNewt::Units
- Inherits:
-
Object
- Object
- EyeOfNewt::Units
- Defined in:
- lib/eye_of_newt/units.rb
Instance Attribute Summary collapse
-
#conversions ⇒ Object
readonly
Returns the value of attribute conversions.
-
#default ⇒ Object
readonly
Returns the value of attribute default.
-
#unit_modifiers ⇒ Object
readonly
Returns the value of attribute unit_modifiers.
-
#units ⇒ Object
readonly
Returns the value of attribute units.
Class Method Summary collapse
Instance Method Summary collapse
- #[](unit) ⇒ Object
- #add_conversion(amount, unit, other_unit) ⇒ Object
- #add_unit(canonical, *variations, default: false, unquantified: false) ⇒ Object
- #add_unit_modifier(modifier) ⇒ Object
- #all ⇒ Object
- #conversion_rate(from, to) ⇒ Object
-
#initialize ⇒ Units
constructor
A new instance of Units.
- #setup(&block) ⇒ Object
- #unquantified?(unit) ⇒ Boolean
Constructor Details
#initialize ⇒ Units
Returns a new instance of Units.
7 8 9 10 11 12 13 |
# File 'lib/eye_of_newt/units.rb', line 7 def initialize @units = {} @conversions = Hash.new { |h, k| h[k] = {} } @unit_modifiers = [] @default = nil @unquantified = [] end |
Instance Attribute Details
#conversions ⇒ Object (readonly)
Returns the value of attribute conversions.
5 6 7 |
# File 'lib/eye_of_newt/units.rb', line 5 def conversions @conversions end |
#default ⇒ Object (readonly)
Returns the value of attribute default.
5 6 7 |
# File 'lib/eye_of_newt/units.rb', line 5 def default @default end |
#unit_modifiers ⇒ Object (readonly)
Returns the value of attribute unit_modifiers.
5 6 7 |
# File 'lib/eye_of_newt/units.rb', line 5 def unit_modifiers @unit_modifiers end |
#units ⇒ Object (readonly)
Returns the value of attribute units.
5 6 7 |
# File 'lib/eye_of_newt/units.rb', line 5 def units @units end |
Class Method Details
.defaults ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/eye_of_newt/units.rb', line 63 def self.defaults new.setup do # english volume units add_unit "cups", "c.", "c", "cup" add_unit "fl oz", "fl. oz.", "fluid ounces", "fluid ounce" add_unit "gallons", "gal", "gal.", "gallon" add_unit "pints", "pt", "pt.", "pint" add_unit "quarts", "qt", "qt.", "qts", "qts.", "quart" add_unit "tbsp", "tbsp.", "T", "T.", "tbs.", "tbs", "tablespoons", "tablespoon" add_unit "tsp", "tsp.", "t", "t.", "teaspoons", "teaspoon" # english mass units add_unit "lb", "lb.", "pounds", "pound" add_unit "oz", "oz.", "ounces", "ounce" # metric volume units add_unit "l", "l.", "liter", "liters", "litre", "litres" add_unit "ml", "ml.", "milliliter", "milliliters", "millilitre", "millilitres" # metric mass units add_unit "kg", "kg.", "kilogram", "kilograms" add_unit "g", "g.", "gr", "gr.", "gram", "grams" add_unit "mg", "mg", "mg.", "milligram", "milligrams" # nonstandard units add_unit "pinches", "pinch" add_unit "dashes", "dash" add_unit "touches", "touch" add_unit "handfuls", "handful" add_unit "cloves", "clove" add_unit "bunches", "bunch" add_unit "sprigs", "sprig" add_unit "cans", "can" add_unit_modifier "big" add_unit_modifier "large" add_unit_modifier "medium" add_unit_modifier "small" add_unit_modifier "heaping" add_unit_modifier "level" # unquantified units add_unit "to taste", unquantified: true add_unit "units", "unit", default: true add_conversion 16, "tbsp", "cup" add_conversion 8, "fl oz", "cup" add_conversion 235, "ml", "cup" add_conversion 4, "quarts", "gallon" add_conversion 2, "cups", "pint" add_conversion 2, "pints", "quart" add_conversion 3, "tsp", "tbsp" add_conversion 16, "oz", "pound" add_conversion 454, "grams", "pound" add_conversion 1000, "ml", "liter" add_conversion 1000, "g", "kg" add_conversion 1000, "mg", "g" end end |
Instance Method Details
#[](unit) ⇒ Object
19 20 21 |
# File 'lib/eye_of_newt/units.rb', line 19 def [](unit) units[unit] or raise UnknownUnit.new(unit) end |
#add_conversion(amount, unit, other_unit) ⇒ Object
35 36 37 38 39 40 41 |
# File 'lib/eye_of_newt/units.rb', line 35 def add_conversion(amount, unit, other_unit) unit = self[unit] other_unit = self[other_unit] new_conversion = {unit => {other_unit => amount.to_r}, other_unit => {unit => 1/amount.to_r}} conversions.deep_merge!(new_conversion) end |
#add_unit(canonical, *variations, default: false, unquantified: false) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/eye_of_newt/units.rb', line 23 def add_unit(canonical, *variations, default: false, unquantified: false) units[canonical] = canonical variations.each do |v| units[v] = canonical end @unquantified << canonical if unquantified @default = canonical if default conversions[canonical][canonical] = 1 end |
#add_unit_modifier(modifier) ⇒ Object
43 44 45 |
# File 'lib/eye_of_newt/units.rb', line 43 def add_unit_modifier(modifier) unit_modifiers << modifier end |
#all ⇒ Object
15 16 17 |
# File 'lib/eye_of_newt/units.rb', line 15 def all units.keys end |
#conversion_rate(from, to) ⇒ Object
47 48 49 50 51 52 |
# File 'lib/eye_of_newt/units.rb', line 47 def conversion_rate(from, to) f = self[from] t = self[to] r = search_conversion(f, t) or raise UnknownConversion.new(from, to) r.to_f end |
#setup(&block) ⇒ Object
58 59 60 61 |
# File 'lib/eye_of_newt/units.rb', line 58 def setup(&block) instance_eval &block self end |
#unquantified?(unit) ⇒ Boolean
54 55 56 |
# File 'lib/eye_of_newt/units.rb', line 54 def unquantified?(unit) @unquantified.include?(self[unit]) end |