freerange_acts_as_versioned 1.0.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/Gemfile +2 -2
- data/Rakefile +2 -2
- data/acts_as_versioned.gemspec +3 -3
- data/lib/acts_as_versioned.rb +28 -2
- data/test/database.yml +2 -8
- data/test/fixtures/page.rb +1 -1
- data/test/fixtures/page_versions.yml +1 -0
- data/test/fixtures/pages.yml +1 -0
- data/test/migration_test.rb +4 -0
- data/test/schema.rb +3 -0
- data/test/versioned_test.rb +8 -1
- metadata +7 -13
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MjU0YjJhY2E5NWNkYTZjMGEwZWRmMjkwOWNiYTZiOTZmYTI1ZmI2MA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
NTBhOTc4ZDExOGI2Y2NlNDM4MDAyMzg5ZTQxNzA5N2JjY2Y4NmU1Ng==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
YjZiMzg0NzQ3ODM5NjE3NDIyYmFmODY5OWZlOTgxYmMxMmU5MDAzZGQ2Njk2
|
10
|
+
ZmVmZDFhOGIxM2ViNTZiYjIxYjA0NmVkZWYzNTQwNmY3MDMwNjNjYWU4Njk0
|
11
|
+
YWZiYjQxZDBjMmQyZDU2ZTVlNjU5ZmM0NmU1NmEyOTBhYWY5NmU=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NTMzMjQ2NDhiMTcxYmRjMWY2YjEwNTg0MWY3MGFhZjFiNTYxZTk4NmFmYzc0
|
14
|
+
MTdmYWZmZjRlN2YxYzAxMTJiZDY4NTAxMGQwYzBjNmIyYjA5NjRlZGQ0OWY3
|
15
|
+
YjUzYzk2NTViZmYyODhkN2M4ZmRmYWYxYzAwNGY0MTQ2MjhhZWE=
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -60,7 +60,7 @@ task :coverage do
|
|
60
60
|
sh "open coverage/index.html"
|
61
61
|
end
|
62
62
|
|
63
|
-
require '
|
63
|
+
require 'rdoc/task'
|
64
64
|
Rake::RDocTask.new do |rdoc|
|
65
65
|
rdoc.rdoc_dir = 'rdoc'
|
66
66
|
rdoc.title = "#{name} #{version}"
|
@@ -143,4 +143,4 @@ task :validate do
|
|
143
143
|
puts "A `VERSION` file at root level violates Gem best practices."
|
144
144
|
exit!
|
145
145
|
end
|
146
|
-
end
|
146
|
+
end
|
data/acts_as_versioned.gemspec
CHANGED
@@ -12,8 +12,8 @@ Gem::Specification.new do |s|
|
|
12
12
|
## If your rubyforge_project name is different, then edit it and comment out
|
13
13
|
## the sub! line in the Rakefile
|
14
14
|
s.name = 'freerange_acts_as_versioned'
|
15
|
-
s.version = '
|
16
|
-
s.date = '
|
15
|
+
s.version = '2.0.0'
|
16
|
+
s.date = '2014-02-07'
|
17
17
|
s.rubyforge_project = 'freerange_acts_as_versioned'
|
18
18
|
|
19
19
|
## Make sure your summary is short. The description may be as long
|
@@ -43,7 +43,7 @@ Gem::Specification.new do |s|
|
|
43
43
|
|
44
44
|
## List your development dependencies here. Development dependencies are
|
45
45
|
## those that are only needed during development
|
46
|
-
s.add_development_dependency('
|
46
|
+
s.add_development_dependency('pg', ["~> 0.17.1"])
|
47
47
|
|
48
48
|
## Leave this section as-is. It will be automatically generated from the
|
49
49
|
## contents of your Git repository via the gemspec task. DO NOT REMOVE
|
data/lib/acts_as_versioned.rb
CHANGED
@@ -166,13 +166,16 @@ module ActiveRecord #:nodoc:
|
|
166
166
|
|
167
167
|
cattr_accessor :versioned_class_name, :versioned_foreign_key, :versioned_table_name, :versioned_inheritance_column,
|
168
168
|
:version_column, :max_version_limit, :track_altered_attributes, :version_condition, :version_sequence_name, :non_versioned_columns,
|
169
|
-
:version_association_options, :version_if_changed
|
169
|
+
:version_association_options, :version_if_changed, :version_status_column, :version_user_id_column
|
170
170
|
|
171
|
+
attr_accessor :loaded_version
|
171
172
|
self.versioned_class_name = options[:class_name] || "Version"
|
172
173
|
self.versioned_foreign_key = options[:foreign_key] || self.to_s.foreign_key
|
173
174
|
self.versioned_table_name = options[:table_name] || "#{table_name_prefix}#{base_class.name.demodulize.underscore}_versions#{table_name_suffix}"
|
174
175
|
self.versioned_inheritance_column = options[:inheritance_column] || "versioned_#{inheritance_column}"
|
175
176
|
self.version_column = options[:version_column] || 'version'
|
177
|
+
self.version_status_column = options[:version_status_column] || 'version_status'
|
178
|
+
self.version_user_id_column = options[:version_user_id_column] || 'version_user_id'
|
176
179
|
self.version_sequence_name = options[:sequence_name]
|
177
180
|
self.max_version_limit = options[:limit].to_i
|
178
181
|
self.version_condition = options[:if] || true
|
@@ -255,6 +258,8 @@ module ActiveRecord #:nodoc:
|
|
255
258
|
:foreign_key => versioned_foreign_key
|
256
259
|
versioned_class.send :include, options[:extend] if options[:extend].is_a?(Module)
|
257
260
|
versioned_class.sequence_name = version_sequence_name if version_sequence_name
|
261
|
+
versioned_class.belongs_to :user,
|
262
|
+
:foreign_key => version_user_id_column if version_user_id_column
|
258
263
|
end
|
259
264
|
|
260
265
|
module Behaviors
|
@@ -276,7 +281,25 @@ module ActiveRecord #:nodoc:
|
|
276
281
|
clone_versioned_model(self, rev)
|
277
282
|
rev.send("#{self.class.version_column}=", send(self.class.version_column))
|
278
283
|
rev.send("#{self.class.versioned_foreign_key}=", id)
|
284
|
+
if rev.respond_to?(self.class.version_status_column)
|
285
|
+
rev.send("#{self.class.version_status_column}=", self._publish_status) if self.respond_to?(:_publish_status)
|
286
|
+
rev.send("#{self.class.version_status_column}=", self.state) if self.respond_to?(:state) && rev.send(self.class.version_status_column).blank?
|
287
|
+
end
|
288
|
+
if rev.respond_to?(self.class.version_user_id_column)
|
289
|
+
rev.send("#{self.class.version_user_id_column}=", self.current_user_id) if self.respond_to?(:current_user_id)
|
290
|
+
end
|
279
291
|
rev.save
|
292
|
+
revert_to_published_version(rev)
|
293
|
+
end
|
294
|
+
end
|
295
|
+
|
296
|
+
def revert_to_published_version(rev)
|
297
|
+
if rev.respond_to?(self.class.version_status_column) && ["revision", "submitted_for_approval"].include?(rev.send(self.class.version_status_column))
|
298
|
+
published_version = self.versions.where(:version_status => 'published').order("version DESC").first
|
299
|
+
unless published_version.blank?
|
300
|
+
self.reload
|
301
|
+
self.revert_to!(published_version)
|
302
|
+
end
|
280
303
|
end
|
281
304
|
end
|
282
305
|
|
@@ -299,6 +322,7 @@ module ActiveRecord #:nodoc:
|
|
299
322
|
end
|
300
323
|
self.clone_versioned_model(version, self)
|
301
324
|
send("#{self.class.version_column}=", version.send(self.class.version_column))
|
325
|
+
self.loaded_version = version
|
302
326
|
true
|
303
327
|
end
|
304
328
|
|
@@ -347,7 +371,7 @@ module ActiveRecord #:nodoc:
|
|
347
371
|
|
348
372
|
# Checks whether a new version shall be saved or not. Calls <tt>version_condition_met?</tt> and <tt>changed?</tt>.
|
349
373
|
def save_version?
|
350
|
-
version_condition_met? && altered?
|
374
|
+
version_condition_met? && altered? || (self.respond_to?(:_publish_status) && (self.state_changed?) )
|
351
375
|
end
|
352
376
|
|
353
377
|
# Checks condition set in the :if option to check whether a revision should be created or not. Override this for
|
@@ -424,6 +448,8 @@ module ActiveRecord #:nodoc:
|
|
424
448
|
self.connection.create_table(versioned_table_name, create_table_options) do |t|
|
425
449
|
t.column versioned_foreign_key, :integer
|
426
450
|
t.column version_column, :integer
|
451
|
+
t.column version_status_column, :string #this field is used for publishing status
|
452
|
+
t.column version_user_id_column, :integer #this field used who has modified this version
|
427
453
|
end
|
428
454
|
|
429
455
|
self.versioned_columns.each do |col|
|
data/test/database.yml
CHANGED
@@ -1,18 +1,12 @@
|
|
1
|
-
sqlite:
|
2
|
-
adapter: sqlite
|
3
|
-
dbfile: acts_as_versioned_plugin.sqlite.db
|
4
|
-
sqlite3:
|
5
|
-
adapter: sqlite3
|
6
|
-
database: acts_as_versioned_plugin.sqlite3.db
|
7
1
|
postgresql:
|
8
2
|
adapter: postgresql
|
9
3
|
username: postgres
|
10
|
-
password:
|
4
|
+
password:
|
11
5
|
database: acts_as_versioned_plugin_test
|
12
6
|
min_messages: ERROR
|
13
7
|
mysql:
|
14
8
|
adapter: mysql
|
15
9
|
host: localhost
|
16
|
-
username:
|
10
|
+
username: root
|
17
11
|
password:
|
18
12
|
database: acts_as_versioned_plugin_test
|
data/test/fixtures/page.rb
CHANGED
@@ -3,7 +3,7 @@ class Page < ActiveRecord::Base
|
|
3
3
|
has_many :authors, :through => :versions, :order => 'name'
|
4
4
|
belongs_to :revisor, :class_name => 'Author'
|
5
5
|
has_many :revisors, :class_name => 'Author', :through => :versions, :order => 'name'
|
6
|
-
acts_as_versioned :if => :feeling_good? do
|
6
|
+
acts_as_versioned :non_versioned_columns => [:state], :if => :feeling_good? do
|
7
7
|
def self.included(base)
|
8
8
|
base.cattr_accessor :feeling_good
|
9
9
|
base.feeling_good = true
|
data/test/fixtures/pages.yml
CHANGED
data/test/migration_test.rb
CHANGED
@@ -38,6 +38,10 @@ if ActiveRecord::Base.connection.supports_migrations?
|
|
38
38
|
assert_equal 7, Thing::Version.columns.find{|c| c.name == "price"}.precision
|
39
39
|
assert_equal 2, Thing::Version.columns.find{|c| c.name == "price"}.scale
|
40
40
|
|
41
|
+
# make sure freerange version additional fields are also created
|
42
|
+
assert_equal :integer, Thing::Version.columns.find{|c| c.name == "version_user_id"}.type
|
43
|
+
assert_equal :string, Thing::Version.columns.find{|c| c.name == "version_status"}.type
|
44
|
+
|
41
45
|
# now lets take 'er back down
|
42
46
|
ActiveRecord::Migrator.down(File.dirname(__FILE__) + '/fixtures/migrations/')
|
43
47
|
assert_raises(ActiveRecord::StatementInvalid) { Thing.create :title => 'blah blah' }
|
data/test/schema.rb
CHANGED
@@ -3,6 +3,7 @@ ActiveRecord::Schema.define(:version => 0) do
|
|
3
3
|
t.column :version, :integer
|
4
4
|
t.column :title, :string, :limit => 255
|
5
5
|
t.column :body, :text
|
6
|
+
t.column :state, :string #Freerange extension for publishable
|
6
7
|
t.column :created_on, :datetime
|
7
8
|
t.column :updated_on, :datetime
|
8
9
|
t.column :author_id, :integer
|
@@ -18,6 +19,8 @@ ActiveRecord::Schema.define(:version => 0) do
|
|
18
19
|
t.column :updated_on, :datetime
|
19
20
|
t.column :author_id, :integer
|
20
21
|
t.column :revisor_id, :integer
|
22
|
+
t.column :version_status, :string
|
23
|
+
t.column :version_user_id, :integer
|
21
24
|
end
|
22
25
|
|
23
26
|
add_index :page_versions, [:page_id, :version], :unique => true
|
data/test/versioned_test.rb
CHANGED
@@ -35,6 +35,12 @@ class VersionedTest < ActiveSupport::TestCase
|
|
35
35
|
assert p.revert_to!(23), "Couldn't revert to 23"
|
36
36
|
assert_equal 23, p.version
|
37
37
|
assert_equal 'Welcome to the weblg', p.title
|
38
|
+
|
39
|
+
#Freerange extension
|
40
|
+
#test loaded_version
|
41
|
+
assert_equal p.loaded_version.version , p.version
|
42
|
+
#test status
|
43
|
+
assert_equal p.loaded_version.version_status , 'draft'
|
38
44
|
end
|
39
45
|
|
40
46
|
def test_versioned_class_name
|
@@ -145,9 +151,10 @@ class VersionedTest < ActiveSupport::TestCase
|
|
145
151
|
alias_method :feeling_good?, :new_feeling_good
|
146
152
|
end
|
147
153
|
|
148
|
-
p = Page.create! :title => "title"
|
154
|
+
p = Page.create! :title => "title", :state => "published"
|
149
155
|
assert_equal 1, p.version # version does not increment
|
150
156
|
assert_equal 1, p.versions.count
|
157
|
+
assert_equal "published", p.versions.first.version_status
|
151
158
|
|
152
159
|
p.update_attributes(:title => 'new title')
|
153
160
|
assert_equal 1, p.version # version does not increment
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: freerange_acts_as_versioned
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
prerelease:
|
4
|
+
version: 2.0.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Abdul Rauf
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-02-07 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: activerecord
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,27 +20,24 @@ dependencies:
|
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '3.2'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
|
-
name:
|
28
|
+
name: pg
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ~>
|
36
32
|
- !ruby/object:Gem::Version
|
37
|
-
version:
|
33
|
+
version: 0.17.1
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ~>
|
44
39
|
- !ruby/object:Gem::Version
|
45
|
-
version:
|
40
|
+
version: 0.17.1
|
46
41
|
description: Add simple versioning to ActiveRecord models. rails 3.2
|
47
42
|
email: abdul.rauf.au@gmail.com
|
48
43
|
executables: []
|
@@ -79,26 +74,25 @@ files:
|
|
79
74
|
- test/versioned_test.rb
|
80
75
|
homepage: http://github.com/abdulrauf/acts_as_versioned
|
81
76
|
licenses: []
|
77
|
+
metadata: {}
|
82
78
|
post_install_message:
|
83
79
|
rdoc_options:
|
84
80
|
- --charset=UTF-8
|
85
81
|
require_paths:
|
86
82
|
- lib
|
87
83
|
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
-
none: false
|
89
84
|
requirements:
|
90
85
|
- - ! '>='
|
91
86
|
- !ruby/object:Gem::Version
|
92
87
|
version: '0'
|
93
88
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
|
-
none: false
|
95
89
|
requirements:
|
96
90
|
- - ! '>='
|
97
91
|
- !ruby/object:Gem::Version
|
98
92
|
version: '0'
|
99
93
|
requirements: []
|
100
94
|
rubyforge_project: freerange_acts_as_versioned
|
101
|
-
rubygems_version:
|
95
|
+
rubygems_version: 2.2.1
|
102
96
|
signing_key:
|
103
97
|
specification_version: 2
|
104
98
|
summary: Add simple versioning to ActiveRecord models. This version supports rails
|