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 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
@@ -2,6 +2,6 @@ source 'http://rubygems.org'
2
2
 
3
3
  group :development do
4
4
  gem 'rails', '~> 3.2'
5
- gem 'pg', '~> 0.16'
6
- gem 'mysql', '2.8.1'
5
+ gem 'pg', '~> 0.17.1'
6
+ gem 'mysql2', '0.3.15'
7
7
  end
data/Rakefile CHANGED
@@ -60,7 +60,7 @@ task :coverage do
60
60
  sh "open coverage/index.html"
61
61
  end
62
62
 
63
- require 'rake/rdoctask'
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
@@ -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 = '1.0.0'
16
- s.date = '2013-08-15'
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('sqlite3-ruby', ["~> 1.3.1"])
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
@@ -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: postgres
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: rails
10
+ username: root
17
11
  password:
18
12
  database: acts_as_versioned_plugin_test
@@ -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
@@ -14,3 +14,4 @@ welcome_1:
14
14
  version: 23
15
15
  author_id: 2
16
16
  revisor_id: 2
17
+ version_status: draft
@@ -2,6 +2,7 @@ welcome:
2
2
  id: 1
3
3
  title: Welcome to the weblog
4
4
  body: Such a lovely day
5
+ state: published
5
6
  version: 24
6
7
  author_id: 1
7
8
  revisor_id: 1
@@ -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
@@ -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: 1.0.0
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: 2013-08-15 00:00:00.000000000 Z
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: sqlite3-ruby
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: 1.3.1
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: 1.3.1
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: 1.8.25
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