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



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

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



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

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



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

def attributes_hash
  self.info.to_hash.symbolize_keys
end

#cloneObject

Returns a clone of the record with empty bags



115
116
117
# File 'motion-prime/models/_base_mixin.rb', line 115

def clone
  self.class.new(self.info.select { |key, value| !key.to_s.ends_with?('_bag') })
end

#deletePrime::Model

Removed model from default store.

Returns:

  • (Prime::Model)

    model

Raises:



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

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



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

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

#inspectString

Returns json-formatted representation of model

Returns:

  • (String)

    model representation



105
106
107
108
109
110
# File 'motion-prime/models/_base_mixin.rb', line 105

def inspect
  inspection = self.info.keys.map { |name|
    "#{name}: #{attribute_for_inspect(name)}"
  }.compact.join(", ")
  "#<#{self.class}:0x#{self.object_id.to_s(16)}> #{inspection}>"
end

#model_nameString

Model class name

Returns:

  • (String)

    model class name



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

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



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

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



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

def persisted?
  !new_record?
end

#savePrime::Model

Saves model to default store.

Returns:

  • (Prime::Model)

    model

Raises:



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

def save
  set_default_id_if_needed
  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



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

def store
  super || self.class.store
end