Module: MiniStrava::Model::ClassMethods

Defined in:
lib/mini_strava/model.rb

Instance Method Summary collapse

Instance Method Details

#build(attributes) ⇒ Object



17
18
19
20
21
22
23
# File 'lib/mini_strava/model.rb', line 17

def build attributes
  object = self.new
  model_attributes.each do |attr|
    object.send "#{attr[:name]}=", attributes[attr[:name]]
  end
  object
end

#define_model_att_reader(name) ⇒ Object



39
40
41
42
43
# File 'lib/mini_strava/model.rb', line 39

def define_model_att_reader name
  define_method name do
    attributes[name]
  end
end

#define_model_att_writer(name, type, default) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/mini_strava/model.rb', line 45

def define_model_att_writer name, type, default
  define_method "#{name}=" do |value|
    value = default if value.nil?
    if type != DefaultAttrType
      klass = Models.const_get type.to_s
      value = if value.is_a? Array
        value.collect do |v|
          klass.build v || {}
        end
      else
        klass.build value || {}
      end
    end

    attributes[name] = value
  end
end

#model_attr(name, type: DefaultAttrType, default: nil) ⇒ Object



29
30
31
32
33
34
35
36
37
# File 'lib/mini_strava/model.rb', line 29

def model_attr name, type: DefaultAttrType, default: nil
  model_attributes << {
    name:     name.to_s,
    type:     type,
    default:  default
  }
  define_model_att_reader name
  define_model_att_writer name, type, default
end

#model_attributesObject



25
26
27
# File 'lib/mini_strava/model.rb', line 25

def model_attributes
  @model_attributes ||= []
end