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



203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
# File 'motion-prime/models/_base_mixin.rb', line 203

def attribute(name, options = {})
  attributes << name.to_sym
  attributes.uniq!

  define_method(:"#{name}=") do |value, &block|
    track_changed_attributes do
      if options[:convert] || !options.has_key?(:convert)
        self.info[name] = attribute_convert_in(value, options[:type])
      else
        self.info[name] = value
      end
    end
  end

  define_method(name.to_sym) do
    if options[:convert] || !options.has_key?(:convert)
      attribute_convert_out(self.info[name], options[:type])
    else
      self.info[name]
    end
  end

  define_method("#{name}?") do
    self.info[name].present?
  end
end

#attributes(*attrs) ⇒ Object

Set and/or return all model attribute names



233
234
235
236
237
238
# File 'motion-prime/models/_base_mixin.rb', line 233

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

#countObject

Count of models



258
259
260
# File 'motion-prime/models/_base_mixin.rb', line 258

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)


188
189
190
191
192
# File 'motion-prime/models/_base_mixin.rb', line 188

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

#default_sort(sort_options) ⇒ Object



287
288
289
# File 'motion-prime/models/_base_mixin.rb', line 287

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.



269
270
271
272
273
274
275
# File 'motion-prime/models/_base_mixin.rb', line 269

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


283
284
285
# File 'motion-prime/models/_base_mixin.rb', line 283

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



175
176
177
178
179
# File 'motion-prime/models/_base_mixin.rb', line 175

def new(data = {}, options = {})
  object = self.nanoObjectWithDictionary({})
  object.assign_attributes(data, options)
  object
end

#storeObject

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



243
244
245
# File 'motion-prime/models/_base_mixin.rb', line 243

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

#store=(store) ⇒ Object

Define store associated with model class

Parameters:



251
252
253
# File 'motion-prime/models/_base_mixin.rb', line 251

def store=(store)
  @store = store
end