rich-acts_as_revisable 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -163,6 +163,10 @@ Then it can be installed as usual:
163
163
 
164
164
  sudo gem install rich-acts_as_revisable
165
165
 
166
+ Once the gem is installed you'll want to activate it in your Rails app by adding the following line to config/environment.rb:
167
+
168
+ config.gem "rich-acts_as_revisable", :lib => "acts_as_revisable", :source => "http://gems.github.com"
169
+
166
170
  == LICENSE:
167
171
 
168
172
  (The MIT License)
@@ -32,10 +32,16 @@ module FatJam
32
32
  def before_revisable_create
33
33
  self[:revisable_is_current] = true
34
34
  end
35
-
36
- def before_revisable_update
37
- return unless @aa_revisable_force_revision == true || (self.changed? && !(@aa_revisable_no_revision === true) && !(self.changed.map(&:downcase) & self.class.revisable_columns).blank?)
38
35
 
36
+ def should_revise?
37
+ return true if @aa_revisable_force_revision == true
38
+ return false if @aa_revisable_no_revision == true
39
+ return false unless self.changed?
40
+ !(self.changed.map(&:downcase) & self.class.revisable_columns).blank?
41
+ end
42
+
43
+ def before_revisable_update
44
+ return unless should_revise?
39
45
  return false unless run_callbacks(:before_revise) { |r, o| r == false}
40
46
 
41
47
  @revisable_revision = self.to_revision
@@ -88,7 +94,7 @@ module FatJam
88
94
  end
89
95
 
90
96
  options = args.extract_options!
91
-
97
+
92
98
  rev = case args.first
93
99
  when self.class.revision_class
94
100
  args.first
@@ -101,19 +107,19 @@ module FatJam
101
107
  when Time
102
108
  revisions.find(:first, :conditions => ["? >= ? and ? <= ?", :revisable_revised_at, args.first, :revisable_current_at, args.first])
103
109
  end
104
-
110
+
105
111
  unless rev.run_callbacks(:before_restore) { |r, o| r == false}
106
112
  raise ActiveRecord::RecordNotSaved
107
113
  end
108
-
114
+
109
115
  self.class.column_names.each do |col|
110
116
  next unless self.class.revisable_should_clone_column? col
111
117
  self[col] = rev[col]
112
118
  end
113
-
119
+
114
120
  @aa_revisable_no_revision = true if options.delete :without_revision
115
121
  @aa_revisable_new_params = options
116
-
122
+
117
123
  returning(@aa_revisable_no_revision ? save! : revise!) do
118
124
  rev.run_callbacks(:after_restore)
119
125
  run_callbacks(:after_revert)
@@ -129,9 +135,11 @@ module FatJam
129
135
  def revise!
130
136
  return if in_revision?
131
137
 
132
- @aa_revisable_force_revision = true
133
- in_revision!
134
- returning(save!) do
138
+ begin
139
+ @aa_revisable_force_revision = true
140
+ in_revision!
141
+ save!
142
+ ensure
135
143
  in_revision!(false)
136
144
  @aa_revisable_force_revision = false
137
145
  end
@@ -151,7 +159,7 @@ module FatJam
151
159
  aa_revisable_current_revisions[key] = val
152
160
  aa_revisable_current_revisions.delete(key) unless val
153
161
  end
154
-
162
+
155
163
  def changeset(&block)
156
164
  return unless block_given?
157
165
 
@@ -161,11 +169,14 @@ module FatJam
161
169
  raise ActiveRecord::RecordNotSaved
162
170
  end
163
171
 
164
- in_revision!
172
+ begin
173
+ in_revision!
165
174
 
166
- returning(yield(self)) do
167
- in_revision!(false)
168
- run_callbacks(:after_changeset)
175
+ returning(yield(self)) do
176
+ run_callbacks(:after_changeset)
177
+ end
178
+ ensure
179
+ in_revision!(false)
169
180
  end
170
181
  end
171
182
 
@@ -177,7 +188,7 @@ module FatJam
177
188
 
178
189
  module ClassMethods
179
190
  def with_scope_with_revisable(*args, &block)
180
- options = args.extract_options![:find]
191
+ options = (args.grep(Hash).first || {})[:find]
181
192
 
182
193
  if options && options.delete(:with_revisions)
183
194
  without_model_scope do
@@ -189,7 +200,7 @@ module FatJam
189
200
  end
190
201
 
191
202
  def find_with_revisable(*args)
192
- options = args.extract_options!
203
+ options = args.grep(Hash).first
193
204
 
194
205
  if options && options.delete(:with_revisions)
195
206
  without_model_scope do
@@ -201,9 +212,9 @@ module FatJam
201
212
  end
202
213
 
203
214
  def find_with_revisions(*args)
204
- options = args.extract_options!
205
- options.update({:with_revisions => true})
206
- find_with_revisable(*(args << options))
215
+ args << {} if args.grep(Hash).blank?
216
+ args.grep(Hash).first.update({:with_revisions => true})
217
+ find_with_revisable(*args)
207
218
  end
208
219
 
209
220
  def revision_class_name
@@ -10,7 +10,7 @@ module FatJam
10
10
  set_table_name(revisable_class.table_name)
11
11
  acts_as_scoped_model :find => {:conditions => {:revisable_is_current => false}}
12
12
 
13
- CloneAssociations.clone(revisable_class, self)
13
+ CloneAssociations.clone_associations(revisable_class, self)
14
14
 
15
15
  define_callbacks :before_restore, :after_restore
16
16
 
@@ -2,15 +2,14 @@ module FatJam
2
2
  module ActsAsRevisable
3
3
  module CloneAssociations
4
4
  class << self
5
- def clone(from, to)
6
- return unless from.is_a?(ActiveRecord::Base) && to.is_a?(ActiveRecord::Base)
7
-
8
- from.revision_cloned_associations.each do |key|
5
+ def clone_associations(from, to)
6
+ return unless from.descends_from_active_record? && to.descends_from_active_record?
7
+
8
+ to.revision_cloned_associations.each do |key|
9
9
  assoc = from.reflect_on_association(key)
10
10
  meth = "clone_#{assoc.macro.to_s}_association"
11
11
  meth = "clone_association" unless respond_to? meth
12
12
  send(meth, assoc, to)
13
-
14
13
  end
15
14
  end
16
15
 
@@ -2,7 +2,7 @@ module FatJam #:nodoc:
2
2
  module ActsAsRevisable
3
3
  module VERSION #:nodoc:
4
4
  MAJOR = 0
5
- MINOR = 5
5
+ MINOR = 6
6
6
  TINY = 0
7
7
 
8
8
  STRING = [MAJOR, MINOR, TINY].join('.')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rich-acts_as_revisable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rich Cavanaugh of FatJam, LLC.