Module Cms::Behaviors::Versioning::InstanceMethods
In: lib/cms/behaviors/versioning.rb

Methods

Public Instance methods

[Source]

     # File lib/cms/behaviors/versioning.rb, line 202
202:         def as_of_draft_version
203:           as_of_version(draft.version)
204:         end

[Source]

     # File lib/cms/behaviors/versioning.rb, line 206
206:         def as_of_version(version)
207:           v = find_version(version)
208:           raise ActiveRecord::RecordNotFound.new("version #{version.inspect} does not exist for <#{self.class}:#{id}>") unless v
209:           obj = self.class.new
210: 
211:           (self.class.versioned_columns + [:version, :updated_at]).each do |a|
212:             obj.send("#{a}=", v.send(a))
213:           end
214:           obj.id = id
215:           obj.lock_version = lock_version
216: 
217:           # Need to do this so associations can be loaded
218:           obj.instance_variable_set("@new_record", false)
219: 
220:           # Callback to allow us to load other data when an older version is loaded
221:           obj.after_as_of_version if obj.respond_to?(:after_as_of_version)
222: 
223:           # Last but not least, clear the changed attributes
224:           if changed_attrs = obj.send(:changed_attributes)
225:             changed_attrs.clear
226:           end
227: 
228:           obj      
229:         end

[Source]

    # File lib/cms/behaviors/versioning.rb, line 76
76:         def build_new_version
77:           # First get the values from the draft
78:           attrs = draft_attributes
79: 
80:           # Now overwrite any changed values      
81:           self.class.versioned_columns.each do |col|
82:             if(send("#{col}_changed?"))
83:               attrs[col] = send(col)
84:             end
85:           end
86: 
87:           attrs[:version_comment] = @version_comment || default_version_comment
88:           @version_comment = nil            
89:           new_version = versions.build(attrs)
90:           new_version.version = new_record? ? 1 : (draft.version.to_i + 1)
91:           after_build_new_version(new_version) if respond_to?(:after_build_new_version)
92:           new_version
93:         end

[Source]

     # File lib/cms/behaviors/versioning.rb, line 194
194:         def current_version
195:           find_version(self.version)
196:         end

[Source]

     # File lib/cms/behaviors/versioning.rb, line 102
102:         def default_version_comment
103:           if new_record?
104:             "Created"
105:           else
106:             "Changed #{(changes.keys - %w[version created_by_id updated_by_id]).sort.join(', ')}"
107:           end
108:         end

[Source]

     # File lib/cms/behaviors/versioning.rb, line 178
178:         def draft
179:           versions.first(:order => "version desc")    
180:         end

[Source]

     # File lib/cms/behaviors/versioning.rb, line 95
 95:         def draft_attributes
 96:           # When there is no draft, we'll just copy the attibutes from this object
 97:           # Otherwise we need to use the draft
 98:           d = new_record? ? self : draft
 99:           self.class.versioned_columns.inject({}){|attrs, col| attrs[col] = d.send(col); attrs }
100:         end

[Source]

     # File lib/cms/behaviors/versioning.rb, line 182
182:         def draft_version?
183:           version == draft.version
184:         end

[Source]

     # File lib/cms/behaviors/versioning.rb, line 198
198:         def find_version(number)
199:           versions.first(:conditions => { :version => number })
200:         end

[Source]

    # File lib/cms/behaviors/versioning.rb, line 72
72:         def initialize_version
73:           self.version = 1
74:         end

[Source]

     # File lib/cms/behaviors/versioning.rb, line 186
186:         def live_version
187:           find_version(self.class.find(id).version)
188:         end

[Source]

     # File lib/cms/behaviors/versioning.rb, line 190
190:         def live_version?
191:           version == self.class.find(id).version
192:         end

[Source]

     # File lib/cms/behaviors/versioning.rb, line 231
231:         def revert
232:           draft_version = draft.version
233:           revert_to(draft_version - 1) unless draft_version == 1
234:         end

[Source]

     # File lib/cms/behaviors/versioning.rb, line 247
247:         def revert_to(version)
248:           revert_to_without_save(version)
249:           save
250:         end

[Source]

     # File lib/cms/behaviors/versioning.rb, line 236
236:         def revert_to_without_save(version)
237:           raise "Version parameter missing" if version.blank?
238:           self.revert_to_version = find_version(version)
239:           raise "Could not find version #{version}" unless revert_to_version
240:           (self.class.versioned_columns - ["version"]).each do |a|
241:             send("#{a}=", revert_to_version.send(a))
242:           end  
243:           self.version_comment = "Reverted to version #{version}"
244:           self            
245:         end

[Source]

     # File lib/cms/behaviors/versioning.rb, line 110
110:         def save(perform_validations=true)
111:           transaction do
112:             #logger.info "..... Calling valid?"
113:             return false unless valid?            
114:             
115:             if changed?
116:               #logger.info "..... Changes => #{changes.inspect}"
117:             else
118:               #logger.info "..... No Changes"
119:               return true
120:             end
121:             
122:             #logger.info "..... Calling before_save"
123:             return false if callback(:before_save) == false
124: 
125:             if new_record?
126:               #logger.info "..... Calling before_create"
127:               return false if callback(:before_create) == false
128:             else      
129:               #logger.info "..... Calling before_update"
130:               return false if callback(:before_update) == false
131:             end
132: 
133:             #logger.info "..... Calling build_new_version"
134:             new_version = build_new_version
135:             #logger.info "..... Is new version valid? #{new_version.valid?}"
136:             if new_record?
137:               self.version = 1
138:               #logger.info "..... Calling create_without_callbacks"
139:               if result = create_without_callbacks
140:                 #logger.info "..... Calling after_create"
141:                 if callback(:after_create) != false
142:                   #logger.info "..... Calling after_save"
143:                   callback(:after_save)
144:                 end
145:                 
146:                 if @publish_on_save
147:                   publish
148:                   @publish_on_save = nil
149:                 end                
150:                 changed_attributes.clear                                   
151:               end
152:               result
153:             elsif new_version
154:               #logger.info "..... Calling save"
155:               if result = new_version.save
156:                 #logger.info "..... Calling after_save"
157:                 if callback(:after_update) != false
158:                   #logger.info "..... Calling after_update"
159:                   callback(:after_save)
160:                 end
161:                 
162:                 if @publish_on_save
163:                   publish
164:                   @publish_on_save = nil
165:                 end 
166:                 changed_attributes.clear
167:               end
168:               result
169:             end
170:             true
171:           end
172:         end

[Source]

     # File lib/cms/behaviors/versioning.rb, line 174
174:         def save!(perform_validations=true)
175:           save || raise(ActiveRecord::RecordNotSaved.new(errors.full_messages))
176:         end

[Source]

     # File lib/cms/behaviors/versioning.rb, line 252
252:         def version_comment
253:           @version_comment
254:         end

[Source]

     # File lib/cms/behaviors/versioning.rb, line 256
256:         def version_comment=(version_comment)
257:           @version_comment = version_comment
258:           send(:changed_attributes)["version_comment"] = @version_comment
259:         end

[Validate]