Module: Yapper::Document::Persistence
- Extended by:
- MotionSupport::Concern
- Included in:
- Yapper::Document
- Defined in:
- lib/yapper/document/persistence.rb
Defined Under Namespace
Modules: ClassMethods
Instance Method Summary collapse
- #assign_attributes(attrs, options = {}) ⇒ Object (also: #attributes=)
- #destroy(options = {}) ⇒ Object
- #destroyed? ⇒ Boolean
- #initialize(attrs = {}, options = {}) ⇒ Object
- #new_record? ⇒ Boolean
- #persisted? ⇒ Boolean
- #reload ⇒ Object
- #save(options = {}) ⇒ Object
- #set_attribute(name, value) ⇒ Object
- #update_attributes(attrs, options = {}) ⇒ Object
- #was_new? ⇒ Boolean
Instance Method Details
#assign_attributes(attrs, options = {}) ⇒ Object Also known as: attributes=
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/yapper/document/persistence.rb', line 67 def assign_attributes(attrs, ={}) self.attributes ||= {} if [:pristine] self.attributes = {} end attrs.each do |k,v| if respond_to?("#{k}=") __send__("#{k}=", v) unless v.nil? else Log.warn "#{k} not defined on #{self.class}" end end end |
#destroy(options = {}) ⇒ Object
140 141 142 143 |
# File 'lib/yapper/document/persistence.rb', line 140 def destroy(={}) db.execute { |txn| txn.removeObjectForKey(self.id, inCollection: _type) } @destroyed = true end |
#destroyed? ⇒ Boolean
108 109 110 |
# File 'lib/yapper/document/persistence.rb', line 108 def destroyed? !!@destroyed end |
#initialize(attrs = {}, options = {}) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/yapper/document/persistence.rb', line 43 def initialize(attrs={}, ={}) super @new_record = [:new].nil? ? true : [:new] @changes = {} @queued_saves = [] assign_attributes({:id => generate_id}, ) if @new_record assign_attributes(attrs, ) set_defaults if [:pristine] self.changes = {} end self end |
#new_record? ⇒ Boolean
100 101 102 |
# File 'lib/yapper/document/persistence.rb', line 100 def new_record? @new_record end |
#persisted? ⇒ Boolean
112 113 114 |
# File 'lib/yapper/document/persistence.rb', line 112 def persisted? !new_record? && !destroyed? end |
#reload ⇒ Object
94 95 96 97 98 |
# File 'lib/yapper/document/persistence.rb', line 94 def reload reloaded = self.class.find(self.id) self.assign_attributes(reloaded.attributes, :pristine => true) self end |
#save(options = {}) ⇒ Object
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/yapper/document/persistence.rb', line 116 def save(={}) db.execute("#{self.model_name}:save" => self) do |txn| @queued_saves.each { |queued, | queued.save() } run_callbacks 'save' do txn.setObject(stringify_keys(attributes), forKey: self.id, inCollection: _type) @was_new = @new_record @new_record = false @queued_saves = [] self.previous_changes = self.changes self.changes = {} end unless [:embedded] # XXX Use middleware pattern instead of this ugliness sync_changes if defined? sync_changes end end true end |
#set_attribute(name, value) ⇒ Object
84 85 86 87 88 89 90 91 92 |
# File 'lib/yapper/document/persistence.rb', line 84 def set_attribute(name, value) if self.class.fields[name][:type] == Time value = Time.parse(value) unless value.is_a?(Time) end # XXX This should not be set if the object was created from a # selection @changes[name.to_s] = value self.attributes[name] = value end |
#update_attributes(attrs, options = {}) ⇒ Object
62 63 64 65 |
# File 'lib/yapper/document/persistence.rb', line 62 def update_attributes(attrs, ={}) self.assign_attributes(attrs, ) self.save() end |
#was_new? ⇒ Boolean
104 105 106 |
# File 'lib/yapper/document/persistence.rb', line 104 def was_new? @was_new end |