Module: Pupa::Model
- Extended by:
- ActiveSupport::Concern
- Included in:
- Area, Membership, Motion, Organization, Person, Post, Vote, VoteEvent
- Defined in:
- lib/pupa/models/model.rb
Overview
Adds methods expected by Pupa processors.
Defined Under Namespace
Modules: ClassMethods
Instance Method Summary collapse
-
#==(other) ⇒ Boolean
Returns whether two objects are identical, ignoring any differences in the objects' machine IDs.
-
#[](property) ⇒ Object
Returns the value of a property.
-
#[]=(property, value) ⇒ Object
Sets the value of a property.
-
#_id=(id) ⇒ Object
Sets the object's ID.
-
#add_extra(key, value) ⇒ Object
Adds a key-value pair to the object.
-
#extras=(extras) ⇒ Object
Sets the extras.
-
#fingerprint ⇒ Hash
Returns a subset of the object's properties that should uniquely identify the object.
-
#foreign_properties ⇒ Hash
Returns the object's foreign keys and foreign objects.
- #initialize(properties = {}) ⇒ Object
-
#to_h(persist: false) ⇒ Hash
Returns the object as a hash.
-
#validate! ⇒ Object
Validates the object against the schema.
Instance Method Details
#==(other) ⇒ Boolean
Returns whether two objects are identical, ignoring any differences in the objects' machine IDs.
203 204 205 206 207 208 209 |
# File 'lib/pupa/models/model.rb', line 203 def ==(other) a = to_h b = other.to_h a.delete(:_id) b.delete(:_id) a == b end |
#[](property) ⇒ Object
Returns the value of a property.
111 112 113 114 115 116 117 |
# File 'lib/pupa/models/model.rb', line 111 def [](property) if properties.include?(property.to_sym) send(property) else raise Errors::MissingAttributeError, "missing attribute: #{property}" end end |
#[]=(property, value) ⇒ Object
Sets the value of a property.
124 125 126 127 128 129 130 |
# File 'lib/pupa/models/model.rb', line 124 def []=(property, value) if properties.include?(property.to_sym) send("#{property}=", value) else raise Errors::MissingAttributeError, "missing attribute: #{property}" end end |
#_id=(id) ⇒ Object
Sets the object's ID.
135 136 137 |
# File 'lib/pupa/models/model.rb', line 135 def _id=(id) @_id = id.to_s # in case of BSON::ObjectId end |
#add_extra(key, value) ⇒ Object
Adds a key-value pair to the object.
150 151 152 |
# File 'lib/pupa/models/model.rb', line 150 def add_extra(key, value) @extras[key] = value end |
#extras=(extras) ⇒ Object
Sets the extras.
142 143 144 |
# File 'lib/pupa/models/model.rb', line 142 def extras=(extras) @extras = symbolize_keys(extras) end |
#fingerprint ⇒ Hash
Returns a subset of the object's properties that should uniquely identify the object.
158 159 160 |
# File 'lib/pupa/models/model.rb', line 158 def fingerprint to_h(persist: true).except(:_id) end |
#foreign_properties ⇒ Hash
Returns the object's foreign keys and foreign objects.
165 166 167 |
# File 'lib/pupa/models/model.rb', line 165 def foreign_properties to_h.slice(*foreign_keys + foreign_objects) end |
#initialize(properties = {}) ⇒ Object
97 98 99 100 101 102 103 104 105 |
# File 'lib/pupa/models/model.rb', line 97 def initialize(properties = {}) @_type = self.class.to_s.underscore @_id = SecureRandom.uuid @extras = {} properties.each do |key,value| self[key] = value end end |
#to_h(persist: false) ⇒ Hash
Returns the object as a hash.
187 188 189 190 191 192 193 194 195 196 |
# File 'lib/pupa/models/model.rb', line 187 def to_h(persist: false) {}.tap do |hash| (persist ? properties - foreign_objects : properties).each do |property| value = self[property] if value == false || value.present? hash[property] = value end end end end |
#validate! ⇒ Object
Validates the object against the schema.
172 173 174 175 176 177 178 179 |
# File 'lib/pupa/models/model.rb', line 172 def validate! if self.class.json_schema self.class.validator.instance_variable_set('@errors', []) self.class.validator.instance_variable_set('@data', stringify_keys(to_h(persist: true))) self.class.validator.validate true end end |