Module: Measured

Defined in:
lib/measured/base.rb,
lib/measured/version.rb,
lib/measured/unit_error.rb,
lib/measured/cycle_detected.rb,
lib/measured/unit_already_added.rb,
lib/measured/missing_conversion_path.rb

Defined Under Namespace

Modules: Arithmetic, Cache, Parser Classes: ConversionTableBuilder, CycleDetected, Measurable, MissingConversionPath, Unit, UnitAlreadyAdded, UnitError, UnitSystem, UnitSystemBuilder

Constant Summary collapse

VERSION =
"2.8.2"
Length =
Measured.build do
  si_unit :m, aliases: [:meter, :metre, :meters, :metres]

  unit :in, value: "0.0254 m", aliases: [:inch, :inches]
  unit :ft, value: "12 in", aliases: [:foot, :feet]
  unit :yd, value: "3 ft", aliases: [:yard, :yards]
  unit :mi, value: "5280 ft", aliases: [:mile, :miles]

  cache Measured::Cache::Json, "length.json"
end
Volume =
Measured.build do
  si_unit :l, aliases: [:liter, :litre, :liters, :litres]

  unit :m3, value: "1000 l", aliases: [:cubic_meter, :cubic_metre, :cubic_meters, :cubic_metres]
  unit :cm3, value: "0.001 l", aliases: [:cubic_centimeter, :cubic_centimetre, :cubic_centimeters, :cubic_centimetres]
  unit :mm3, value: "0.000001 l", aliases: [:cubic_millimeter, :cubic_millimetre, :cubic_millimeters, :cubic_millimetres]
  unit :in3, value: "0.016387064 l", aliases: [:cubic_inch, :cubic_inches]
  unit :ft3, value: "1728 in3", aliases: [:cubic_foot, :cubic_feet]
  unit :gal, value: "4.54609 l", aliases: [:imp_gal, :imperial_gallon, :imp_gals, :imperial_gallons]
  unit :us_gal, value: "231 in3", aliases: [:us_gallon, :us_gals, :us_gallons]
  unit :qt, value: "0.25 gal", aliases: [:imp_qt, :imperial_quart, :imp_qts, :imperial_quarts]
  unit :us_qt, value: "0.25 us_gal", aliases: [:us_quart, :us_quarts]
  unit :pt, value: "0.125 gal", aliases: [:imp_pt, :imperial_pint, :imp_pts, :imperial_pints]
  unit :us_pt, value: "0.125 us_gal", aliases: [:us_pint, :us_pints]
  unit :oz, value: "0.00625 gal", aliases: [:fl_oz, :imp_fl_oz, :imperial_fluid_ounce, :imperial_fluid_ounces]
  unit :us_oz, value: "0.0078125 us_gal", aliases: [:us_fl_oz, :us_fluid_ounce, :us_fluid_ounces]

  cache Measured::Cache::Json, "volume.json"
end
Weight =
Measured.build do
  si_unit :g, aliases: [:gram, :grams]

  unit :t, value: "1000 kg", aliases: [:metric_ton, :metric_tons]
  unit :slug, value: "14.593903 kg", aliases: [:slugs]
  unit :N, value: "0.10197162129779283 kg", aliases: [:newtons, :newton]
  unit :long_ton, value: "2240 lb", aliases: [:long_tons, :weight_ton, :weight_tons, 'W/T', :imperial_ton, :imperial_tons, :displacement_ton, :displacement_tons]
  unit :short_ton, value: "2000 lb", aliases: [:short_tons]
  unit :lb, value: "0.45359237 kg", aliases: [:lbs, :pound, :pounds]
  unit :oz, value: "1/16 lb", aliases: [:ounce, :ounces]

  cache Measured::Cache::Json, "weight.json"
end

Class Method Summary collapse

Class Method Details

.build(&block) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/measured/base.rb', line 10

def build(&block)
  builder = UnitSystemBuilder.new
  builder.instance_eval(&block)

  Class.new(Measurable) do
    class << self
      attr_reader :unit_system
    end

    @unit_system = builder.build
  end
end

.method_missing(method, *args) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/measured/base.rb', line 23

def method_missing(method, *args)
  class_name = "Measured::#{ method }"
  klass = class_name.safe_constantize

  if klass && klass < Measurable
    Measured.define_singleton_method(method) do |value, unit|
      klass.new(value, unit)
    end

    klass.new(*args)
  else
    super
  end
end