class Tanita::Api::Client::ClassBuilder

Public Class Methods

load() click to toggle source
# File lib/tanita/api/client/class_builder.rb, line 7
def self.load
  return if loaded

  create_class('Result', %i[birth_date height sex items])
  base_properties = %i[measured_at registered_at model]
  [Innerscan, Sphygmomanometer, Pedometer, Smug].each do |klass|
    klass_name = klass.to_s.split('::')[-1] + 'Item'
    properties = base_properties + klass.properties.keys
    create_class(klass_name, properties)
  end
  @loaded = true
end
properties() click to toggle source
# File lib/tanita/api/client/class_builder.rb, line 39
def self.properties
  @properties = [] if @properties.nil?
  @properties
end

Private Class Methods

create_class(class_name, property_names = []) click to toggle source
# File lib/tanita/api/client/class_builder.rb, line 25
def self.create_class(class_name, property_names = [])
  super_klass = Class.new(BaseEntity)
  klass = Tanita::Api::Client.const_set(class_name, super_klass)
  define_properties_reader(klass)
  property_names.each do |property_name|
    klass.properties << property_name
    define_getter_and_setter(klass, property_name)
  end
  klass.properties.freeze
end
define_getter_and_setter(klass, property_name) click to toggle source
# File lib/tanita/api/client/class_builder.rb, line 47
def self.define_getter_and_setter(klass, property_name)
  klass.class_eval do
    define_method(property_name.to_sym) do
      @cached_property_values[property_name.to_sym]
    end
    define_method("#{property_name}=".to_sym) do |value|
      @cached_property_values[property_name.to_sym] = value
    end
  end
end
define_properties_reader(klass) click to toggle source
# File lib/tanita/api/client/class_builder.rb, line 37
def self.define_properties_reader(klass)
  klass.class_eval do
    def self.properties
      @properties = [] if @properties.nil?
      @properties
    end
  end
end
loaded() click to toggle source
# File lib/tanita/api/client/class_builder.rb, line 20
def self.loaded
  @loaded || false
end