Module: MotionPrime::ModelBaseMixin::ClassMethods

Defined in:
motion-prime/models/_base_mixin.rb

Instance Method Summary collapse

Instance Method Details

#attribute(name, options = {}) ⇒ Object

Define model attribute

@example:

class User < MotionPrime::Model
  attribute :name
  attribute :age
end

Returns:

  • Nil



155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# File 'motion-prime/models/_base_mixin.rb', line 155

def attribute(name, options = {})
  attributes << name

  define_method(name) do |*args, &block|
    value = self.info[name]
    case options[:type].to_s
    when 'time'
      value = Time.short_iso8601(value) if value
    end
    value
  end

  define_method((name + "=").to_sym) do |*args, &block|
    value = args[0]
    case options[:type].to_s
    when 'integer' 
      value = value.to_i
    when 'float'
      value = value.to_f
    when 'time'
      value = value.to_short_iso8601 unless value.is_a?(String)
    end unless value.nil?

    self.info[name] = value
  end

  if options[:type].to_s == 'boolean'
    define_method("#{name}?") do
      !!self.info[name]
    end
  end
end

#attributes(*attrs) ⇒ Object

Set and/or return all model attribute names



191
192
193
194
195
196
# File 'motion-prime/models/_base_mixin.rb', line 191

def attributes(*attrs)
  if attrs.size > 0
    attrs.each{|attr| attribute attr}
  end
  @attributes ||= []
end

#countObject

Count of models



216
217
218
# File 'motion-prime/models/_base_mixin.rb', line 216

def count
  self.store.count(self)
end

#create(data = {}) ⇒ Object

Initialize a new object and save it to store

@example:

User.create(name: "Bob", age: 10)


140
141
142
143
144
# File 'motion-prime/models/_base_mixin.rb', line 140

def create(data = {})
  object = self.new(data)
  object.save
  object
end

#default_sort(sort_options) ⇒ Object



245
246
247
# File 'motion-prime/models/_base_mixin.rb', line 245

def default_sort(sort_options)
  self.default_sort_options = sort_options
end

#delete(*args) ⇒ Object

Delete objects from store by given options

@example:

User.delete(:name => "Bob") #

Parameters:

  • options (Hash, Array, MotionPrime::Model)

    objects to delete. See find_keys for list of options.



227
228
229
230
231
232
233
# File 'motion-prime/models/_base_mixin.rb', line 227

def delete(*args)
  if args.blank?
    raise "Using delete with no args is not allowed. Please use delete_all to delete all records"
  end
  keys = find_keys(*args)
  self.store.delete_keys(keys)
end

#delete_allObject

Delete all objects with this Prime::Model

@example:

User.delete_all


241
242
243
# File 'motion-prime/models/_base_mixin.rb', line 241

def delete_all
  self.store.delete_keys(find_keys)
end

#new(data = {}, options = {}) ⇒ Object

Initialize a new object

@example:

User.new(name: "Bob", age: 10)

Parameters:

  • options (Hash) (defaults to: {})

    a customizable set of options

Options Hash (options):

  • :validate_attribute_presence (Boolean)

    Raise error if model do not have attribute

Returns:

  • MotionPrime::Model unsaved model



118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'motion-prime/models/_base_mixin.rb', line 118

def new(data = {}, options = {})
  data.keys.each do |key|
    unless self.attributes.member? key.to_sym
      if options[:validate_attribute_presence]
        raise StoreError, "unknown attribute: '#{key}'"
      else
        data.delete(key)
      end
    end
  end

  object = self.nanoObjectWithDictionary(data)
  object
end

#storeObject

Return store associated with model class, or shared store by default



201
202
203
# File 'motion-prime/models/_base_mixin.rb', line 201

def store
  @store ||= MotionPrime::Store.shared_store
end

#store=(store) ⇒ Object

Define store associated with model class

Parameters:



209
210
211
# File 'motion-prime/models/_base_mixin.rb', line 209

def store=(store)
  @store = store
end