Module: MotionPrime::ModelBaseMixin

Extended by:
MotionSupport::Concern
Included in:
Model
Defined in:
motion-prime/models/_base_mixin.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



5
6
7
# File 'motion-prime/models/_base_mixin.rb', line 5

def self.included(base)
  base.class_attribute :default_sort_options
end

Instance Method Details

#assign_attribute(name, value) ⇒ Object

Assigns attribute to model

Returns:

  • (Object)

    assigned object if has been assigned



61
62
63
# File 'motion-prime/models/_base_mixin.rb', line 61

def assign_attribute(name, value)
  self.send("#{name}=", value) if has_attribute?(name)
end

#assign_attributes(new_attributes, options = {}) ⇒ Hash

Assigns attributes to model

Parameters:

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

    a customizable set of options

Options Hash (options):

  • :skip_nil_values (Boolean)

    Do not assign nil values

  • :validate_attribute_presence (Boolean)

    Raise error if model do not have attribute

Returns:

  • (Hash)

    attributes



43
44
45
46
47
48
49
50
51
52
53
54
# File 'motion-prime/models/_base_mixin.rb', line 43

def assign_attributes(new_attributes, options = {})
  attributes = new_attributes.symbolize_keys
  attributes.each do |k, v|
    if has_attribute?(k)
      assign_attribute(k, v) unless options[:skip_nil_values] && v.nil?
    elsif options[:validate_attribute_presence]
      raise(StoreError, "unknown attribute: '#{k}'")
    else
      NSLog("unknown attribute: #{k}")
    end
  end
end

#attributes_hashHash

Hash of all attributes in model

Returns:

  • (Hash)

    key-value hash



76
77
78
# File 'motion-prime/models/_base_mixin.rb', line 76

def attributes_hash
  self.info.to_hash.symbolize_keys
end

#deletePrime::Model

Removed model from default store.

Returns:

  • (Prime::Model)

    model

Raises:



23
24
25
26
27
28
29
30
# File 'motion-prime/models/_base_mixin.rb', line 23

def delete
  raise StoreError, 'No store provided' unless self.store

  error_ptr = Pointer.new(:id)
  self.store.removeObject(self, error: error_ptr)
  raise StoreError, error_ptr[0].description if error_ptr[0]
  self
end

#has_attribute?(name) ⇒ Boolean

Check if model has attribute

Returns:

  • (Boolean)

    result



69
70
71
# File 'motion-prime/models/_base_mixin.rb', line 69

def has_attribute?(name)
  respond_to?("#{name}=")
end

#inspectString

Returns json-formatted representation of model

Returns:

  • (String)

    model representation



104
105
106
# File 'motion-prime/models/_base_mixin.rb', line 104

def inspect
  "#<#{self.class}:0x#{self.object_id.to_s(16)}> " + MotionPrime::JSON.generate(info)
end

#model_nameString

Model class name

Returns:

  • (String)

    model class name



97
98
99
# File 'motion-prime/models/_base_mixin.rb', line 97

def model_name
  self.class_name_without_kvo.underscore
end

#new_record?Boolean

Checks if model has been saved in server (have an ID)

Returns:

  • (Boolean)

    true if model is not saved



83
84
85
# File 'motion-prime/models/_base_mixin.rb', line 83

def new_record?
  id.blank?
end

#persisted?Boolean

Checks if model has been saved in server (have an ID)

Returns:

  • (Boolean)

    true if model is saved



90
91
92
# File 'motion-prime/models/_base_mixin.rb', line 90

def persisted?
  !new_record?
end

#savePrime::Model

Saves model to default store.

Returns:

  • (Prime::Model)

    model

Raises:



12
13
14
15
16
17
18
# File 'motion-prime/models/_base_mixin.rb', line 12

def save
  raise StoreError, 'No store provided' unless self.store
  error_ptr = Pointer.new(:id)
  self.store.addObject(self, error: error_ptr)
  raise StoreError, error_ptr[0].description if error_ptr[0]
  self
end

#storeObject



32
33
34
# File 'motion-prime/models/_base_mixin.rb', line 32

def store
  super || self.class.store
end