Class: Nike::Mash

Inherits:
Hashie::Mash
  • Object
show all
Defined in:
lib/nike/mash.rb

Constant Summary collapse

KM_TO_MILE =
0.621371192
CONVERTER_AVAILABILITY =
{
  distance: [:distance_in_kilometers, :distance_in_miles, :speed_in_mph, :speed_in_kph],
  duration: [:duration_in_seconds, :duration_in_minutes, :duration_in_hours, :duration_in_hms],
  pace:     [:pace_in_mpk, :pace_in_mpm]
}
CONVERTER_LOOKUP =
{
  distance_in_kilometers: :distance_to_kilometers,
  distance_in_miles: :distance_to_miles,
  duration_in_seconds: :duration_to_seconds,
  duration_in_minutes: :duration_to_minutes,
  duration_in_hours: :duration_to_hours,
  duration_in_hms: :duration_to_hms,
  speed_in_mph: :speed_to_mph,
  speed_in_kph: :speed_to_kph,
  pace_in_mpk: :pace_to_mpk,
  pace_in_mpm: :pace_to_mpm,
}

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args, &block) ⇒ Object



25
26
27
28
29
30
31
32
33
# File 'lib/nike/mash.rb', line 25

def method_missing(method, *args, &block)
  case method.to_s
  when /_time$|_time_utc$/
    Time.parse(super)
  else
    converter = CONVERTER_LOOKUP[method]
    converter ? self.send(converter) : super
  end
end

Instance Method Details

#conversion_helpersObject



39
40
41
42
43
# File 'lib/nike/mash.rb', line 39

def conversion_helpers
  CONVERTER_AVAILABILITY.inject([]) do |a, (m, converters)|
    self.include?(m.to_s) ? a += converters : a
  end
end

#respond_to_missing?(method, include_private = false) ⇒ Boolean

Returns:

  • (Boolean)


35
36
37
# File 'lib/nike/mash.rb', line 35

def respond_to_missing?(method, include_private = false)
  conversion_helpers.include?(method)
end