Module: MotionPrime::NanoBagMixin
- Included in:
- NSFNanoBag
- Defined in:
- motion-prime/models/_nano_bag_mixin.rb
Class Method Summary collapse
Instance Method Summary collapse
-
#add(object_or_array) ⇒ 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) ⇒ Object
- #reload ⇒ Object
- #save ⇒ Object
- #store=(store, retry_count = 0) ⇒ Object
-
#to_a ⇒ Object
Return all objects in bag.
- #undo ⇒ Object
Class Method Details
.included(base) ⇒ Object
4 5 6 7 8 9 10 11 12 13 |
# File 'motion-prime/models/_nano_bag_mixin.rb', line 4 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) ⇒ Object Also known as: +, <<
Add an object or array of objects to bag
33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'motion-prime/models/_nano_bag_mixin.rb', line 33 def add(object_or_array) error_ptr = Pointer.new(: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
19 20 21 |
# File 'motion-prime/models/_nano_bag_mixin.rb', line 19 def changed? self.hasUnsavedChanges end |
#delete(object_or_array) ⇒ Object Also known as: -
Remove an object or array of objects from bag
77 78 79 80 81 82 83 84 85 86 |
# File 'motion-prime/models/_nano_bag_mixin.rb', line 77 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
92 93 94 95 96 97 98 99 |
# File 'motion-prime/models/_nano_bag_mixin.rb', line 92 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
64 65 66 67 68 69 70 71 |
# File 'motion-prime/models/_nano_bag_mixin.rb', line 64 def delete_key(key) if key.is_a?(Array) self.removeObjectsWithKeysInArray(key) else self.removeObjectWithKey(key) end self end |
#originalClassString ⇒ Object
15 16 17 |
# File 'motion-prime/models/_nano_bag_mixin.rb', line 15 def originalClassString 'NSFNanoBag' end |
#prepare_for_store(object) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 |
# File 'motion-prime/models/_nano_bag_mixin.rb', line 48 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? && self.store && self.find(id: object.id, bag_key: self.key).any? raise StoreError, "duplicated item added `#{object.class_name_without_kvo}` with `id` = #{object.id}" end object end end |
#reload ⇒ Object
122 123 124 125 126 127 |
# File 'motion-prime/models/_nano_bag_mixin.rb', line 122 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
114 115 116 117 118 119 120 |
# File 'motion-prime/models/_nano_bag_mixin.rb', line 114 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
103 104 105 106 107 108 109 110 111 112 |
# File 'motion-prime/models/_nano_bag_mixin.rb', line 103 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
26 27 28 |
# File 'motion-prime/models/_nano_bag_mixin.rb', line 26 def to_a self.savedObjects.values + self.unsavedObjects.values end |
#undo ⇒ Object
129 130 131 132 133 134 |
# File 'motion-prime/models/_nano_bag_mixin.rb', line 129 def undo error_ptr = Pointer.new(:id) result = self.undoChangesWithError(error_ptr) raise StoreError, error_ptr[0].description if error_ptr[0] result end |