Module: MotionPrime::ModelBaseMixin::ClassMethods
- Defined in:
- motion-prime/models/_base_mixin.rb
Instance Method Summary collapse
-
#attribute(name, options = {}) ⇒ Object
Define model attribute.
-
#attributes(*attrs) ⇒ Object
Set and/or return all model attribute names.
-
#count ⇒ Object
Count of models.
-
#create(data = {}) ⇒ Object
Initialize a new object and save it to store.
- #default_sort(sort_options) ⇒ Object
-
#delete(*args) ⇒ Object
Delete objects from store by given options.
-
#delete_all ⇒ Object
Delete all objects with this Prime::Model.
-
#new(data = {}, options = {}) ⇒ Object
Initialize a new object.
-
#store ⇒ Object
Return store associated with model class, or shared store by default.
-
#store=(store) ⇒ Object
Define store associated with model class.
Instance Method Details
#attribute(name, options = {}) ⇒ Object
155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
# File 'motion-prime/models/_base_mixin.rb', line 155 def attribute(name, = {}) attributes << name define_method(name) do |*args, &block| value = self.info[name] case [:type].to_s when 'time' value = Time.short_iso8601(value) if value end value end define_method((name + "=").to_sym) do |*args, &block| value = args[0] case [:type].to_s when 'integer' value = value.to_i when 'float' value = value.to_f when 'time' value = value.to_short_iso8601 unless value.is_a?(String) end unless value.nil? self.info[name] = value end if [:type].to_s == 'boolean' define_method("#{name}?") do !!self.info[name] end end end |
#attributes(*attrs) ⇒ Object
Set and/or return all model attribute names
191 192 193 194 195 196 |
# File 'motion-prime/models/_base_mixin.rb', line 191 def attributes(*attrs) if attrs.size > 0 attrs.each{|attr| attribute attr} end @attributes ||= [] end |
#count ⇒ Object
Count of models
216 217 218 |
# File 'motion-prime/models/_base_mixin.rb', line 216 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)
140 141 142 143 144 |
# File 'motion-prime/models/_base_mixin.rb', line 140 def create(data = {}) object = self.new(data) object.save object end |
#default_sort(sort_options) ⇒ Object
245 246 247 |
# File 'motion-prime/models/_base_mixin.rb', line 245 def default_sort() self. = end |
#delete(*args) ⇒ Object
Delete objects from store by given options
@example:
User.delete(:name => "Bob") #
227 228 229 230 231 232 233 |
# File 'motion-prime/models/_base_mixin.rb', line 227 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_all ⇒ Object
Delete all objects with this Prime::Model
@example:
User.delete_all
241 242 243 |
# File 'motion-prime/models/_base_mixin.rb', line 241 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)
118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'motion-prime/models/_base_mixin.rb', line 118 def new(data = {}, = {}) data.keys.each do |key| unless self.attributes.member? key.to_sym if [:validate_attribute_presence] raise StoreError, "unknown attribute: '#{key}'" else data.delete(key) end end end object = self.nanoObjectWithDictionary(data) object end |
#store ⇒ Object
Return store associated with model class, or shared store by default
201 202 203 |
# File 'motion-prime/models/_base_mixin.rb', line 201 def store @store ||= MotionPrime::Store.shared_store end |
#store=(store) ⇒ Object
Define store associated with model class
209 210 211 |
# File 'motion-prime/models/_base_mixin.rb', line 209 def store=(store) @store = store end |