mongo_mapper_acts_as_versioned 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -9,7 +9,7 @@ Basic MongoMapper port of technoweenie's [acts_as_versioned](http://github.com/t
9
9
  class Page
10
10
  include MongoMapper::Document
11
11
 
12
- plugin ActsAsVersioned
12
+ plugin MongoMapper::Acts::Versioned
13
13
 
14
14
  key :title, String
15
15
  end
@@ -60,6 +60,10 @@ Simply add `self.skipped_keys << 'new_skipped_key'` somewhere in your model.
60
60
  * Properly document those options
61
61
  * Support SCI
62
62
 
63
+ ## Bundler note
64
+
65
+ Make sure to specify `:require => 'acts_as_versioned'` in your Gemfile.
66
+
63
67
  ## Copyright
64
68
 
65
69
  Copyright (c) 2010 Gigamo &lt;gigamo@gmail.com&gt;. See LICENSE for details.
@@ -1,178 +1,182 @@
1
- module ActsAsVersioned
2
- CALLBACKS = [:set_new_version, :save_version, :save_version?]
3
-
4
- def self.configure(model)
5
- model.class_eval do
6
- const_set(:Version, Class.new).class_eval do
7
- include MongoMapper::Document
1
+ module MongoMapper
2
+ module Acts
3
+ module Versioned
4
+ CALLBACKS = [:set_new_version, :save_version, :save_version?]
5
+
6
+ def self.configure(model)
7
+ model.class_eval do
8
+ const_set(:Version, Class.new).class_eval do
9
+ include MongoMapper::Document
10
+
11
+ key :version, Integer
12
+ key :changed_attributes, Hash
13
+
14
+ def self.before(version)
15
+ where(
16
+ super_foreign_key => version[super_foreign_key],
17
+ :version.lt => version.version
18
+ ).sort(:version.desc).first
19
+ end
20
+
21
+ def self.after(version)
22
+ where(
23
+ super_foreign_key => version[super_foreign_key],
24
+ :version.gt => version.version
25
+ ).sort(:version.asc).first
26
+ end
27
+
28
+ def previous
29
+ self.class.before(self)
30
+ end
31
+
32
+ def next
33
+ self.class.after(self)
34
+ end
35
+
36
+ def self.super_foreign_key
37
+ original_class.to_s.foreign_key
38
+ end
39
+
40
+ class << self
41
+ protected :super_foreign_key
42
+ end
43
+ end
44
+
45
+ versioned_class.cattr_accessor :original_class
46
+ versioned_class.original_class = self
47
+ versioned_class.set_collection_name "#{self.collection_name.singularize}_versions"
48
+ versioned_class.belongs_to self.to_s.demodulize.underscore.to_sym,
49
+ :class_name => "::#{self}",
50
+ :foreign_key => self.to_s.foreign_key
51
+ end
8
52
 
9
- key :version, Integer
10
- key :changed_attributes, Hash
53
+ model.key :version, Integer
54
+ model.many :versions, :class_name => "#{model}::Version",
55
+ :foreign_key => model.to_s.foreign_key, :dependent => :destroy do
56
+ def earliest
57
+ query.sort(:version).first
58
+ end
11
59
 
12
- def self.before(version)
13
- where(
14
- super_foreign_key => version[super_foreign_key],
15
- :version.lt => version.version
16
- ).sort(:version.desc).first
60
+ def latest
61
+ query.sort(:version.desc).first
62
+ end
17
63
  end
64
+ model.before_save :set_new_version
65
+ model.after_save :save_version
66
+ end
18
67
 
19
- def self.after(version)
20
- where(
21
- super_foreign_key => version[super_foreign_key],
22
- :version.gt => version.version
23
- ).sort(:version.asc).first
68
+ module InstanceMethods
69
+ def save_version
70
+ if @saving_version
71
+ @saving_version = nil
72
+
73
+ rev = self.class.versioned_class.new
74
+ clone_versioned_model(self, rev)
75
+ rev.version = version
76
+ rev[self.class.to_s.foreign_key] = id
77
+ rev.save!
78
+ end
24
79
  end
25
80
 
26
- def previous
27
- self.class.before(self)
28
- end
81
+ def revert_to(version)
82
+ if version.is_a?(self.class.versioned_class)
83
+ return false unless version[self.class.to_s.foreign_key] == id and !version.new_record?
84
+ else
85
+ return false unless version = versions.where(:version => version).first
86
+ end
29
87
 
30
- def next
31
- self.class.after(self)
32
- end
88
+ clone_versioned_model(version, self)
89
+ self.version = version.version
33
90
 
34
- def self.super_foreign_key
35
- original_class.to_s.foreign_key
91
+ true
36
92
  end
37
93
 
38
- class << self
39
- protected :super_foreign_key
94
+ def revert_to!(version)
95
+ revert_to(version) ? save_without_revision : false
40
96
  end
41
- end
42
-
43
- versioned_class.cattr_accessor :original_class
44
- versioned_class.original_class = self
45
- versioned_class.set_collection_name "#{self.collection_name.singularize}_versions"
46
- versioned_class.belongs_to self.to_s.demodulize.underscore.to_sym,
47
- :class_name => "::#{self}",
48
- :foreign_key => self.to_s.foreign_key
49
- end
50
-
51
- model.key :version, Integer
52
- model.many :versions, :class_name => "#{model}::Version",
53
- :foreign_key => model.to_s.foreign_key, :dependent => :destroy do
54
- def earliest
55
- query.sort(:version).first
56
- end
57
-
58
- def latest
59
- query.sort(:version.desc).first
60
- end
61
- end
62
- model.before_save :set_new_version
63
- model.after_save :save_version
64
- end
65
97
 
66
- module InstanceMethods
67
- def save_version
68
- if @saving_version
69
- @saving_version = nil
98
+ def save_without_revision
99
+ save_without_revision!
100
+ true
101
+ rescue
102
+ false
103
+ end
70
104
 
71
- rev = self.class.versioned_class.new
72
- clone_versioned_model(self, rev)
73
- rev.version = version
74
- rev[self.class.to_s.foreign_key] = id
75
- rev.save!
76
- end
77
- end
105
+ def save_without_revision!
106
+ without_revision do
107
+ save!
108
+ end
109
+ end
78
110
 
79
- def revert_to(version)
80
- if version.is_a?(self.class.versioned_class)
81
- return false unless version[self.class.to_s.foreign_key] == id and !version.new_record?
82
- else
83
- return false unless version = versions.where(:version => version).first
84
- end
111
+ def clone_versioned_model(orig_model, new_model)
112
+ if orig_model.is_a?(self.class.versioned_class)
113
+ orig_model = orig_model.changed_attributes
114
+ end
85
115
 
86
- clone_versioned_model(version, self)
87
- self.version = version.version
116
+ if new_model.is_a?(self.class.versioned_class)
117
+ new_model = new_model.changed_attributes
118
+ end
88
119
 
89
- true
90
- end
120
+ self.class.versioned_keys.each do |col|
121
+ new_model[col] = orig_model[col]
122
+ end
123
+ end
91
124
 
92
- def revert_to!(version)
93
- revert_to(version) ? save_without_revision : false
94
- end
125
+ def save_version?
126
+ (self.class.versioned_keys & changed).any?
127
+ end
95
128
 
96
- def save_without_revision
97
- save_without_revision!
98
- true
99
- rescue
100
- false
101
- end
129
+ def without_revision(&block)
130
+ self.class.without_revision(&block)
131
+ end
102
132
 
103
- def save_without_revision!
104
- without_revision do
105
- save!
106
- end
107
- end
133
+ def empty_callback
134
+ end
108
135
 
109
- def clone_versioned_model(orig_model, new_model)
110
- if orig_model.is_a?(self.class.versioned_class)
111
- orig_model = orig_model.changed_attributes
112
- end
136
+ protected
113
137
 
114
- if new_model.is_a?(self.class.versioned_class)
115
- new_model = new_model.changed_attributes
116
- end
138
+ def set_new_version
139
+ @saving_version = new_record? || save_version?
140
+ self.version = next_version if @saving_version
141
+ end
117
142
 
118
- self.class.versioned_keys.each do |col|
119
- new_model[col] = orig_model[col]
143
+ def next_version
144
+ (new_record? ? 0 : versions.map(&:version).max) + 1
145
+ end
120
146
  end
121
- end
122
-
123
- def save_version?
124
- (self.class.versioned_keys & changed).any?
125
- end
126
-
127
- def without_revision(&block)
128
- self.class.without_revision(&block)
129
- end
130
-
131
- def empty_callback
132
- end
133
-
134
- protected
135
147
 
136
- def set_new_version
137
- @saving_version = new_record? || save_version?
138
- self.version = next_version if @saving_version
139
- end
140
-
141
- def next_version
142
- (new_record? ? 0 : versions.map(&:version).max) + 1
143
- end
144
- end
145
-
146
- module ClassMethods
147
- def versioned_class
148
- const_get(:Version)
149
- end
148
+ module ClassMethods
149
+ def versioned_class
150
+ const_get(:Version)
151
+ end
150
152
 
151
- def versioned_keys
152
- keys.keys - skipped_keys
153
- end
153
+ def versioned_keys
154
+ keys.keys - skipped_keys
155
+ end
154
156
 
155
- def without_revision
156
- class_eval do
157
- CALLBACKS.each do |attr_name|
158
- alias_method :"orig_#{attr_name}", attr_name
159
- alias_method attr_name, :empty_callback
157
+ def without_revision
158
+ class_eval do
159
+ CALLBACKS.each do |attr_name|
160
+ alias_method :"orig_#{attr_name}", attr_name
161
+ alias_method attr_name, :empty_callback
162
+ end
163
+ end
164
+ yield
165
+ ensure
166
+ class_eval do
167
+ CALLBACKS.each do |attr_name|
168
+ alias_method attr_name, :"orig_#{attr_name}"
169
+ end
170
+ end
160
171
  end
161
- end
162
- yield
163
- ensure
164
- class_eval do
165
- CALLBACKS.each do |attr_name|
166
- alias_method attr_name, :"orig_#{attr_name}"
172
+
173
+ def skipped_keys
174
+ @skipped_keys ||= [
175
+ '_id', 'created_at', 'updated_at', 'creator_id',
176
+ 'updater_id', 'version', self.class.to_s.foreign_key
177
+ ]
167
178
  end
168
179
  end
169
180
  end
170
-
171
- def skipped_keys
172
- @skipped_keys ||= [
173
- '_id', 'created_at', 'updated_at', 'creator_id',
174
- 'updater_id', 'version', self.class.to_s.foreign_key
175
- ]
176
- end
177
181
  end
178
182
  end
@@ -1,3 +1,7 @@
1
- module ActsAsVersioned
2
- VERSION = '0.0.2'
1
+ module MongoMapper
2
+ module Acts
3
+ module Versioned
4
+ VERSION = '0.0.3'
5
+ end
6
+ end
3
7
  end
@@ -1,11 +1,11 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe ActsAsVersioned do
3
+ describe MongoMapper::Acts::Versioned do
4
4
  before :all do
5
5
  class Landmark
6
6
  include MongoMapper::Document
7
7
 
8
- plugin ActsAsVersioned
8
+ plugin MongoMapper::Acts::Versioned
9
9
 
10
10
  self.skipped_keys << 'depth'
11
11
 
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 2
9
- version: 0.0.2
8
+ - 3
9
+ version: 0.0.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Gigamo