Module: Measured

Defined in:
lib/measured/base.rb,
lib/measured/version.rb

Defined Under Namespace

Modules: Arithmetic, ConversionTable, Parser Classes: Measurable, Unit, UnitError, UnitSystem, UnitSystemBuilder

Constant Summary collapse

VERSION =
"2.2.0"
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]
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]
end

Class Method Summary collapse

Class Method Details

.build(&block) ⇒ Object



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

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



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

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

  if Measurable.subclasses.map(&:to_s).include?(class_name)
    klass = class_name.constantize

    Measured.define_singleton_method(method) do |value, unit|
      klass.new(value, unit)
    end

    klass.new(*args)
  else
    super
  end
end