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



66
67
68
# File 'motion-prime/models/_base_mixin.rb', line 66

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



48
49
50
51
52
53
54
55
56
57
58
59
# File 'motion-prime/models/_base_mixin.rb', line 48

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
      Prime.logger.info("unknown attribute: #{k}")
    end
  end
end

#attributes_hashHash

Hash of all attributes in model

Returns:

  • (Hash)

    key-value hash



81
82
83
# File 'motion-prime/models/_base_mixin.rb', line 81

def attributes_hash
  self.info.to_hash.symbolize_keys
end

#cloneObject

Returns a clone of the record with empty bags



119
120
121
# File 'motion-prime/models/_base_mixin.rb', line 119

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:



28
29
30
31
32
33
34
35
# File 'motion-prime/models/_base_mixin.rb', line 28

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



74
75
76
# File 'motion-prime/models/_base_mixin.rb', line 74

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

#inspectString

Returns json-formatted representation of model

Returns:

  • (String)

    model representation



109
110
111
112
113
114
# File 'motion-prime/models/_base_mixin.rb', line 109

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



102
103
104
# File 'motion-prime/models/_base_mixin.rb', line 102

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



88
89
90
# File 'motion-prime/models/_base_mixin.rb', line 88

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



95
96
97
# File 'motion-prime/models/_base_mixin.rb', line 95

def persisted?
  !new_record?
end

#saveObject



9
10
11
# File 'motion-prime/models/_base_mixin.rb', line 9

def save
  self.performSelectorOnMainThread :save!, withObject: nil, waitUntilDone: true
end

#save!Prime::Model

Saves model to default store.

Returns:

  • (Prime::Model)

    model

Raises:



16
17
18
19
20
21
22
23
# File 'motion-prime/models/_base_mixin.rb', line 16

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



37
38
39
# File 'motion-prime/models/_base_mixin.rb', line 37

def store
  super || self.class.store
end