Module: MotionPrime::NanoBagMixin
Class Method Summary collapse
Instance Method Summary collapse
-
#add(object_or_array, options = {}) ⇒ Object
(also: #+, #<<)
Add an object or array of objects to bag.
- #changed? ⇒ Boolean
-
#delete(object_or_array) ⇒ Object
(also: #-)
Remove an object or array of objects from bag.
-
#delete_all ⇒ Object
(also: #clear)
Clear content of the bag.
-
#delete_key(key) ⇒ Object
Remove object from bag with key.
- #originalClassString ⇒ Object
- #prepare_for_store(object, options = {}) ⇒ Object
- #reload ⇒ Object
- #save ⇒ Object
- #store=(store, retry_count = 0) ⇒ Object
-
#to_a ⇒ Object
Return all objects in bag.
- #undo ⇒ Object
Methods included from FilterMixin
Class Method Details
.included(base) ⇒ Object
6 7 8 9 10 11 12 13 14 15 |
# File 'motion-prime/models/_nano_bag_mixin.rb', line 6 def self.included(base) base.class_eval do alias_method :saved, :savedObjects alias_method :unsaved, :unsavedObjects alias_method :removed, :removedObjects alias_method :size, :count alias_method :inflate, :inflateBag alias_method :deflate, :deflateBag end end |
Instance Method Details
#add(object_or_array, options = {}) ⇒ Object Also known as: +, <<
Add an object or array of objects to bag
35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'motion-prime/models/_nano_bag_mixin.rb', line 35 def add(object_or_array, = {}) error_ptr = Pointer.new(:id) [:existed_ids] ||= [] [:existed_ids] += filter_array(self.to_a, bag_key: self.key).map(&:id) prepared = prepare_for_store(object_or_array, ) if object_or_array.is_a?(Array) self.addObjectsFromArray(prepared, error:error_ptr) else self.addObject(prepared, error:error_ptr) end raise StoreError, error_ptr[0].description if error_ptr[0] self end |
#changed? ⇒ Boolean
21 22 23 |
# File 'motion-prime/models/_nano_bag_mixin.rb', line 21 def changed? self.hasUnsavedChanges end |
#delete(object_or_array) ⇒ Object Also known as: -
Remove an object or array of objects from bag
82 83 84 85 86 87 88 89 90 91 |
# File 'motion-prime/models/_nano_bag_mixin.rb', line 82 def delete(object_or_array) error_ptr = Pointer.new(:id) if object_or_array.is_a?(Array) self.removeObjectsInArray(object_or_array, error: error_ptr) else self.removeObject(object_or_array, error_ptr) end raise StoreError, error_ptr[0].description if error_ptr[0] self end |
#delete_all ⇒ Object Also known as: clear
Clear content of the bag
97 98 99 100 101 102 103 104 |
# File 'motion-prime/models/_nano_bag_mixin.rb', line 97 def delete_all bag_copy = to_a.clone # this removes childrens from model delete(self.to_a) # this removes collection from db bag_copy.each(&:delete) self end |
#delete_key(key) ⇒ Object
Remove object from bag with key
69 70 71 72 73 74 75 76 |
# File 'motion-prime/models/_nano_bag_mixin.rb', line 69 def delete_key(key) if key.is_a?(Array) self.removeObjectsWithKeysInArray(key) else self.removeObjectWithKey(key) end self end |
#originalClassString ⇒ Object
17 18 19 |
# File 'motion-prime/models/_nano_bag_mixin.rb', line 17 def originalClassString 'NSFNanoBag' end |
#prepare_for_store(object, options = {}) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'motion-prime/models/_nano_bag_mixin.rb', line 52 def prepare_for_store(object, = {}) if object.is_a?(Array) object.map { |entity| prepare_for_store(entity, ) }.compact else object.bag_key = self.key if object.id.present? && Array.wrap([:existed_ids]).include?(object.id) return if [:silent_validation] raise StoreError, "duplicated item added `#{object.class_name_without_kvo}` with `id` = #{object.id}" end object end end |
#reload ⇒ Object
127 128 129 130 131 132 |
# File 'motion-prime/models/_nano_bag_mixin.rb', line 127 def reload error_ptr = Pointer.new(:id) result = self.reloadBagWithError(error_ptr) raise StoreError, error_ptr[0].description if error_ptr[0] result end |
#save ⇒ Object
119 120 121 122 123 124 125 |
# File 'motion-prime/models/_nano_bag_mixin.rb', line 119 def save self.store ||= MotionPrime::Store.shared_store error_ptr = Pointer.new(:id) result = self.saveAndReturnError(error_ptr) raise StoreError, error_ptr[0].description if error_ptr[0] result end |
#store=(store, retry_count = 0) ⇒ Object
108 109 110 111 112 113 114 115 116 117 |
# File 'motion-prime/models/_nano_bag_mixin.rb', line 108 def store=(store, retry_count = 0) store.addObject(self, error: nil) rescue Exception => e sleep(0.1) if retry_count == 3 raise StoreError, e.description else send(:store=, store, retry_count + 1) end end |
#to_a ⇒ Object
Return all objects in bag
28 29 30 |
# File 'motion-prime/models/_nano_bag_mixin.rb', line 28 def to_a self.savedObjects.values + self.unsavedObjects.values end |
#undo ⇒ Object
134 135 136 137 138 139 |
# File 'motion-prime/models/_nano_bag_mixin.rb', line 134 def undo error_ptr = Pointer.new(:id) result = self.undoChangesWithError(error_ptr) raise StoreError, error_ptr[0].description if error_ptr[0] result end |