controlled_versioning 0.7.2 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/app/models/controlled_versioning/version.rb +9 -5
- data/app/models/controlled_versioning/version_child.rb +4 -0
- data/{spec/dummy/db/migrate/20140206173607_create_controlled_versioning_versions.controlled_versioning.rb → db/migrate/20140206204853_create_controlled_versioning_versions.rb} +0 -0
- data/{spec/dummy/db/migrate/20140206173608_create_controlled_versioning_version_attributes.controlled_versioning.rb → db/migrate/20140206204910_create_controlled_versioning_version_attributes.rb} +0 -0
- data/{spec/dummy/db/migrate/20140206173609_create_controlled_versioning_version_children.controlled_versioning.rb → db/migrate/20140206204920_create_controlled_versioning_version_children.rb} +4 -0
- data/lib/controlled_versioning/change_tracker.rb +32 -0
- data/lib/controlled_versioning/initial_version/factory.rb +23 -14
- data/lib/controlled_versioning/revision/factory.rb +8 -6
- data/lib/controlled_versioning/revision.rb +0 -4
- data/lib/controlled_versioning/version.rb +4 -0
- data/lib/controlled_versioning/version_number.rb +1 -1
- data/lib/controlled_versioning.rb +20 -6
- data/spec/controlled_versioning_spec.rb +95 -33
- data/spec/dummy/db/schema.rb +3 -1
- data/spec/factories/child_resources.rb +1 -1
- data/spec/factories/parent_resources.rb +4 -2
- data/spec/factories/partially_exclusive_versionable_resources.rb +2 -0
- data/spec/factories/partially_inclusive_versionable_resources.rb +2 -0
- data/spec/factories/unversionable_resources.rb +2 -0
- data/spec/factories/versionable_resources.rb +2 -0
- data/spec/models/controlled_versioning/version_spec.rb +44 -0
- metadata +57 -59
- data/spec/factories/controlled_versioning_versions.rb +0 -7
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
Mjk3OGY1NzhhMTZjMzU0NzBkYjE1MjhhZWRiYTdlNmZhZTNiMzFiYg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MTg1MzA2ZDA3MzIzOGNkMGY0NDc3ZmM1MmEwYjljOGVjOGIzZjU2Nw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MmUzOTBhMmI3NThmOWM3NGFiYWNkMzUwNjJiYjMzN2E1OTJlZmI1ODIyYjRk
|
10
|
+
NTVkMmQzMWNiMzA5MmVhOTZlZDA1Yjg0NjU4M2U5YmNjNDQ5ZDIxOTc1Zjcy
|
11
|
+
NDJhMDBhMTgwZTg2OTRhMWIyODJjMzQxZmVkMzAyMzYzODYyYzM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
OWVkYTdhMGU5MGI0YzRjN2JmZDRjM2NmMWRhMzU1MjJmNzVjNGQ1OTM1Yzk4
|
14
|
+
OWNlYzFhYjIwODE0NWUyZjgyYTM0YTkxZWU2ZDcxNmQ3NDZlYjJjMGY5ZWFj
|
15
|
+
OGRhMWIzM2UxYzVkNjc0NTY3MzlkMGVjZTljY2Y2NDUyOGQzMzQ=
|
@@ -5,19 +5,23 @@ module ControlledVersioning
|
|
5
5
|
has_many :version_attributes, as: :version
|
6
6
|
has_many :version_children, as: :version
|
7
7
|
|
8
|
-
validates :versionable, presence: true
|
9
|
-
|
10
8
|
scope :pending, -> { where(pending: true) }
|
11
9
|
scope :accepted, -> { where(accepted: true) }
|
12
10
|
scope :declined, -> { where(declined: true) }
|
13
11
|
|
14
12
|
def accept
|
15
|
-
|
16
|
-
|
13
|
+
if pending?
|
14
|
+
Revision::Publisher.new(self).accept_revision unless initial?
|
15
|
+
update_attributes(pending: false, accepted: true)
|
16
|
+
end
|
17
17
|
end
|
18
18
|
|
19
19
|
def decline
|
20
|
-
update_attributes(pending: false, declined: true)
|
20
|
+
update_attributes(pending: false, declined: true) if pending?
|
21
|
+
end
|
22
|
+
|
23
|
+
def changes
|
24
|
+
ChangeTracker.new(self).get_changes
|
21
25
|
end
|
22
26
|
end
|
23
27
|
end
|
File without changes
|
File without changes
|
@@ -6,9 +6,13 @@ class CreateControlledVersioningVersionChildren < ActiveRecord::Migration
|
|
6
6
|
t.integer :version_id, null: false
|
7
7
|
t.string :versionable_type
|
8
8
|
t.integer :versionable_id
|
9
|
+
t.string :association_name, null: false
|
9
10
|
|
10
11
|
t.boolean :marked_for_removal, null: false, default: false
|
11
12
|
end
|
13
|
+
add_index :controlled_versioning_version_children,
|
14
|
+
:association_name,
|
15
|
+
name: "controlled_versioning_version_children_on_association"
|
12
16
|
add_index :controlled_versioning_version_children,
|
13
17
|
[:version_type, :version_id],
|
14
18
|
name: "controlled_versioning_version_children_on_version"
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class ChangeTracker < Version
|
2
|
+
|
3
|
+
attr_reader :version
|
4
|
+
def initialize(version)
|
5
|
+
@version = version
|
6
|
+
end
|
7
|
+
|
8
|
+
def get_changes
|
9
|
+
changed_attributes.merge(marked_for_removal).merge(changed_children)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
def changed_attributes
|
14
|
+
version_attributes.each_with_object({}) do |v, h|
|
15
|
+
h[v.name] = { new_value: v.new_value, old_value: v.old_value }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def marked_for_removal
|
20
|
+
version.marked_for_removal? ? { marked_for_removal: true } : {}
|
21
|
+
end
|
22
|
+
|
23
|
+
def changed_children
|
24
|
+
version_children.each_with_object({}) do |v, h|
|
25
|
+
if h[v.association_name].present?
|
26
|
+
h[v.association_name] += [{ id: v.versionable_id}.merge(v.changes)]
|
27
|
+
else
|
28
|
+
h[v.association_name] = [{ id: v.versionable_id}.merge(v.changes)]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -1,27 +1,18 @@
|
|
1
1
|
class InitialVersion::Factory < InitialVersion
|
2
2
|
|
3
3
|
attr_reader :versionable, :version
|
4
|
-
def initialize(
|
5
|
-
@versionable = versionable
|
6
|
-
@version =
|
4
|
+
def initialize(args)
|
5
|
+
@versionable = args[:versionable]
|
6
|
+
@version = args[:version]
|
7
7
|
end
|
8
8
|
|
9
9
|
def build
|
10
10
|
build_version_attributes
|
11
|
-
|
11
|
+
build_children
|
12
|
+
version
|
12
13
|
end
|
13
14
|
|
14
15
|
private
|
15
|
-
def build_version_type
|
16
|
-
if versionable_is_a_nested_association?
|
17
|
-
versionable_parent.initial_version.version_children.
|
18
|
-
build(versionable: versionable)
|
19
|
-
else
|
20
|
-
versionable.versions.build(initial: true, notes: versionable_notes, user:
|
21
|
-
versionable_user)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
16
|
def build_version_attributes
|
26
17
|
versionable_attributes.each do |attr|
|
27
18
|
attr = AttributeEncapsulator.new(attr)
|
@@ -35,4 +26,22 @@ class InitialVersion::Factory < InitialVersion
|
|
35
26
|
new_value: attr.value)
|
36
27
|
end
|
37
28
|
|
29
|
+
def build_children
|
30
|
+
versionable_nested_associations.each do |association|
|
31
|
+
versionable.public_send(association).each do |child|
|
32
|
+
build_child(child, association)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def build_child(child, association)
|
38
|
+
version_child = build_version_child(child, association)
|
39
|
+
InitialVersion::Factory.new(versionable: child,
|
40
|
+
version: version_child).build
|
41
|
+
end
|
42
|
+
|
43
|
+
def build_version_child(child, association)
|
44
|
+
version_children.build(association_name: association, versionable: child)
|
45
|
+
end
|
46
|
+
|
38
47
|
end
|
@@ -44,24 +44,26 @@ class Revision::Factory < Revision
|
|
44
44
|
def build_children
|
45
45
|
versionable_nested_associations.each do |association|
|
46
46
|
versionable.public_send(association).each do |child|
|
47
|
-
build_child(child)
|
47
|
+
build_child(child, association)
|
48
48
|
end
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
-
def build_child(child)
|
52
|
+
def build_child(child, association)
|
53
53
|
if Revision::Auditor.new(child).changes_original?
|
54
|
-
version_child = build_version_child(child)
|
54
|
+
version_child = build_version_child(child, association)
|
55
55
|
Revision::Factory.new(versionable: child, version: version_child).build
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
-
def build_version_child(child)
|
59
|
+
def build_version_child(child, association)
|
60
|
+
version_child = version_children.build(association_name: association)
|
60
61
|
if child.new_record?
|
61
|
-
|
62
|
+
version_child.versionable_type = child.class.name
|
62
63
|
else
|
63
|
-
|
64
|
+
version_child.versionable = child
|
64
65
|
end
|
66
|
+
version_child
|
65
67
|
end
|
66
68
|
|
67
69
|
end
|
@@ -3,6 +3,8 @@ require "controlled_versioning/engine"
|
|
3
3
|
# Core
|
4
4
|
require "controlled_versioning/version"
|
5
5
|
|
6
|
+
require "controlled_versioning/change_tracker"
|
7
|
+
|
6
8
|
require "controlled_versioning/initial_version"
|
7
9
|
require "controlled_versioning/initial_version/factory"
|
8
10
|
|
@@ -44,8 +46,6 @@ module ControlledVersioning
|
|
44
46
|
|
45
47
|
attr_accessor :user, :notes
|
46
48
|
|
47
|
-
after_create :create_initial_version
|
48
|
-
|
49
49
|
cattr_accessor :nested_within
|
50
50
|
self.nested_within = options[:nested_within]
|
51
51
|
|
@@ -68,6 +68,19 @@ module ControlledVersioning
|
|
68
68
|
self.versionable_attribute_names = options[:versionable_attributes] ||
|
69
69
|
set_versionable_attribute_names(
|
70
70
|
options[:nonversionable_attributes])
|
71
|
+
|
72
|
+
def new_with_version(attributes)
|
73
|
+
resource = self.new(attributes)
|
74
|
+
return resource.errors if resource.invalid?
|
75
|
+
resource.build_initial_version
|
76
|
+
resource
|
77
|
+
end
|
78
|
+
|
79
|
+
def create_with_version(attributes)
|
80
|
+
resource = new_with_version(attributes)
|
81
|
+
resource.save
|
82
|
+
resource
|
83
|
+
end
|
71
84
|
end
|
72
85
|
end
|
73
86
|
|
@@ -82,6 +95,11 @@ module ControlledVersioning
|
|
82
95
|
self.attributes.slice(*versionable_attributes)
|
83
96
|
end
|
84
97
|
|
98
|
+
def build_initial_version
|
99
|
+
version = versions.build(initial: true, notes: notes, user: user)
|
100
|
+
InitialVersion::Factory.new(versionable: self, version: version).build
|
101
|
+
end
|
102
|
+
|
85
103
|
def initial_version
|
86
104
|
if is_a_nested_association?
|
87
105
|
version_children.first
|
@@ -105,10 +123,6 @@ module ControlledVersioning
|
|
105
123
|
end
|
106
124
|
end
|
107
125
|
|
108
|
-
private
|
109
|
-
def create_initial_version
|
110
|
-
InitialVersion::Factory.new(self).build
|
111
|
-
end
|
112
126
|
end
|
113
127
|
end
|
114
128
|
end
|
@@ -53,38 +53,7 @@ describe "ControlledVersioning" do
|
|
53
53
|
r_float: 90.1)
|
54
54
|
expect(revision.notes).to be_nil
|
55
55
|
end
|
56
|
-
|
57
|
-
context 'has a scope that' do
|
58
|
-
before :each do
|
59
|
-
@resource = create(:versionable_resource)
|
60
|
-
@accepted_1 = @resource.submit_revision(r_string: "accepted 1")
|
61
|
-
@accepted_2 = @resource.submit_revision(r_string: "accepted 2")
|
62
|
-
@declined_1 = @resource.submit_revision(r_string: "declined 1")
|
63
|
-
@declined_2 = @resource.submit_revision(r_string: "declined 2")
|
64
|
-
@pending_1 = @resource.initial_version
|
65
|
-
@pending_2 = @resource.submit_revision(r_string: "pending 2")
|
66
|
-
@accepted_1.accept
|
67
|
-
@accepted_2.accept
|
68
|
-
@declined_1.decline
|
69
|
-
@declined_2.decline
|
70
|
-
end
|
71
|
-
|
72
|
-
it 'returns an array of pending versions' do
|
73
|
-
expect(@resource.versions.pending).to match_array(
|
74
|
-
[@pending_1, @pending_2])
|
75
|
-
end
|
76
|
-
|
77
|
-
it 'returns an array of accepted versions' do
|
78
|
-
expect(@resource.versions.accepted).to match_array(
|
79
|
-
[@accepted_1, @accepted_2])
|
80
|
-
end
|
81
|
-
|
82
|
-
it 'returns an array of declined versions' do
|
83
|
-
expect(@resource.versions.declined).to match_array(
|
84
|
-
[@declined_1, @declined_2])
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
56
|
+
|
88
57
|
context 'by default' do
|
89
58
|
before :each do
|
90
59
|
@resource = create(:versionable_resource)
|
@@ -169,7 +138,27 @@ describe "ControlledVersioning" do
|
|
169
138
|
|
170
139
|
context 'with nested attributes' do
|
171
140
|
before :each do
|
172
|
-
@resource =
|
141
|
+
@resource = ParentResource.create_with_version({ r_string: "my string",
|
142
|
+
r_float: 3.14, child_resources_attributes: [
|
143
|
+
{ r_string: "my string", r_float: 3.14,
|
144
|
+
grand_child_resources_attributes: [
|
145
|
+
{ r_string: "my string", r_float: 3.14 },
|
146
|
+
{ r_string: "my string", r_float: 3.14 },
|
147
|
+
{ r_string: "my string", r_float: 3.14 }
|
148
|
+
] },
|
149
|
+
{ r_string: "my string", r_float: 3.14,
|
150
|
+
grand_child_resources_attributes: [
|
151
|
+
{ r_string: "my string", r_float: 3.14 },
|
152
|
+
{ r_string: "my string", r_float: 3.14 },
|
153
|
+
{ r_string: "my string", r_float: 3.14 }
|
154
|
+
] },
|
155
|
+
{ r_string: "my string", r_float: 3.14,
|
156
|
+
grand_child_resources_attributes: [
|
157
|
+
{ r_string: "my string", r_float: 3.14 },
|
158
|
+
{ r_string: "my string", r_float: 3.14 },
|
159
|
+
{ r_string: "my string", r_float: 3.14 }
|
160
|
+
] }
|
161
|
+
] })
|
173
162
|
end
|
174
163
|
|
175
164
|
it 'creates version children' do
|
@@ -210,6 +199,56 @@ describe "ControlledVersioning" do
|
|
210
199
|
end
|
211
200
|
end
|
212
201
|
|
202
|
+
context 'handles revision for multiple children' do
|
203
|
+
before :each do
|
204
|
+
@first_child_resource = @resource.child_resources[0]
|
205
|
+
@second_child_resource = @resource.child_resources[1]
|
206
|
+
@version = @resource.submit_revision(child_resources_attributes: [
|
207
|
+
{id: @first_child_resource.id, r_string: "new string"},
|
208
|
+
{id: @second_child_resource.id, r_string: "second new string"}
|
209
|
+
])
|
210
|
+
end
|
211
|
+
|
212
|
+
it 'by creating versions for the full family' do
|
213
|
+
expect(@version.version_children.length).to eq 2
|
214
|
+
first_changed_attribute = @version.version_children.
|
215
|
+
find_by(versionable: @first_child_resource).
|
216
|
+
version_attributes.find_by(name: "r_string")
|
217
|
+
second_changed_attribute = @version.version_children.
|
218
|
+
find_by(versionable: @second_child_resource).
|
219
|
+
version_attributes.find_by(name: "r_string")
|
220
|
+
expect(first_changed_attribute.new_value).to eq "new string"
|
221
|
+
expect(first_changed_attribute.old_value).to eq "my string"
|
222
|
+
expect(second_changed_attribute.new_value).to eq "second new string"
|
223
|
+
expect(second_changed_attribute.old_value).to eq "my string"
|
224
|
+
end
|
225
|
+
|
226
|
+
it 'by updating all children if its revisions are approved' do
|
227
|
+
@version.accept
|
228
|
+
@first_child_resource.reload
|
229
|
+
@second_child_resource.reload
|
230
|
+
expect(@first_child_resource.r_string).to eq "new string"
|
231
|
+
expect(@second_child_resource.r_string).to eq "second new string"
|
232
|
+
end
|
233
|
+
|
234
|
+
it 'returns a hash of changed attributes for the full family' do
|
235
|
+
expect(@version.changes).to eq "child_resources" => [
|
236
|
+
{ id: @second_child_resource.id,
|
237
|
+
"r_string" => {
|
238
|
+
new_value: "second new string",
|
239
|
+
old_value: "my string"
|
240
|
+
}
|
241
|
+
},
|
242
|
+
{ id: @first_child_resource.id,
|
243
|
+
"r_string" => {
|
244
|
+
new_value: "new string",
|
245
|
+
old_value: "my string"
|
246
|
+
}
|
247
|
+
}
|
248
|
+
]
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
213
252
|
context 'handles revision for deeply nested children' do
|
214
253
|
before :each do
|
215
254
|
@first_child_resource = @resource.child_resources[0]
|
@@ -238,6 +277,15 @@ describe "ControlledVersioning" do
|
|
238
277
|
@first_grand_child_resource.reload
|
239
278
|
expect(@first_grand_child_resource.r_string).to eq "new string"
|
240
279
|
end
|
280
|
+
|
281
|
+
it 'returns a hash of changed attributes for the full family' do
|
282
|
+
expect(@version.changes).to eq "child_resources" => [{ id:
|
283
|
+
@first_child_resource.id, "grand_child_resources" => [{ id:
|
284
|
+
@first_grand_child_resource.id, "r_string" => { new_value:
|
285
|
+
"new string", old_value: "my string" }
|
286
|
+
}]
|
287
|
+
}]
|
288
|
+
end
|
241
289
|
end
|
242
290
|
|
243
291
|
context 'handles new children' do
|
@@ -264,6 +312,14 @@ describe "ControlledVersioning" do
|
|
264
312
|
@resource.reload
|
265
313
|
expect(@resource.child_resources.find_by(r_float: 14.0)).to_not be_nil
|
266
314
|
end
|
315
|
+
|
316
|
+
it 'returns a hash of attributes for new children' do
|
317
|
+
expect(@version.changes).to eq "child_resources" => [{ id:
|
318
|
+
nil, "r_float" => { new_value: "14.0", old_value: nil },
|
319
|
+
"parent_resource_id" => { new_value: @resource.id.to_s,
|
320
|
+
old_value: nil}
|
321
|
+
}]
|
322
|
+
end
|
267
323
|
end
|
268
324
|
|
269
325
|
context 'handles child destruction' do
|
@@ -294,6 +350,12 @@ describe "ControlledVersioning" do
|
|
294
350
|
@resource.reload
|
295
351
|
expect(@resource.child_resources.length).to eq 2
|
296
352
|
end
|
353
|
+
|
354
|
+
it 'returns a hash noting marked children' do
|
355
|
+
expect(@version.changes).to eq "child_resources" => [{ id:
|
356
|
+
@first_child_resource.id, marked_for_removal: true
|
357
|
+
}]
|
358
|
+
end
|
297
359
|
end
|
298
360
|
end
|
299
361
|
|
data/spec/dummy/db/schema.rb
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
#
|
12
12
|
# It's strongly recommended that you check this file into your version control system.
|
13
13
|
|
14
|
-
ActiveRecord::Schema.define(version:
|
14
|
+
ActiveRecord::Schema.define(version: 20140206204920) do
|
15
15
|
|
16
16
|
# These are extensions that must be enabled in order to support this database
|
17
17
|
enable_extension "plpgsql"
|
@@ -46,9 +46,11 @@ ActiveRecord::Schema.define(version: 20140206173609) do
|
|
46
46
|
t.integer "version_id", null: false
|
47
47
|
t.string "versionable_type"
|
48
48
|
t.integer "versionable_id"
|
49
|
+
t.string "association_name", null: false
|
49
50
|
t.boolean "marked_for_removal", default: false, null: false
|
50
51
|
end
|
51
52
|
|
53
|
+
add_index "controlled_versioning_version_children", ["association_name"], name: "controlled_versioning_version_children_on_association", using: :btree
|
52
54
|
add_index "controlled_versioning_version_children", ["version_type", "version_id"], name: "controlled_versioning_version_children_on_version", using: :btree
|
53
55
|
add_index "controlled_versioning_version_children", ["versionable_type", "versionable_id"], name: "controlled_versioning_version_children_on_versionable", using: :btree
|
54
56
|
|
@@ -15,7 +15,7 @@ FactoryGirl.define do
|
|
15
15
|
children_count 3
|
16
16
|
end
|
17
17
|
|
18
|
-
|
18
|
+
before(:create) do |parent, evaluator|
|
19
19
|
create_list(:child_resource, evaluator.children_count, parent_resource: parent)
|
20
20
|
end
|
21
21
|
end
|
@@ -25,11 +25,13 @@ FactoryGirl.define do
|
|
25
25
|
children_count 3
|
26
26
|
end
|
27
27
|
|
28
|
-
|
28
|
+
before(:create) do |parent, evaluator|
|
29
29
|
create_list(:child_with_grand_children, evaluator.children_count,
|
30
30
|
parent_resource: parent)
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
+
initialize_with { ParentResource.create_with_version(attribute_lists) }
|
35
|
+
|
34
36
|
end
|
35
37
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ControlledVersioning::Version do
|
4
|
+
|
5
|
+
it 'returns a hash of changed attributes' do
|
6
|
+
resource = create(:versionable_resource)
|
7
|
+
version = resource.submit_revision(r_string: "new string", r_float: 90.1)
|
8
|
+
expect(version.changes).to eq "r_string" => { new_value: "new string",
|
9
|
+
old_value: "my string" }, "r_float" => { new_value: "90.1",
|
10
|
+
old_value: "3.14" }
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'has a scope that' do
|
14
|
+
before :each do
|
15
|
+
@resource = create(:versionable_resource)
|
16
|
+
@accepted_1 = @resource.submit_revision(r_string: "accepted 1")
|
17
|
+
@accepted_2 = @resource.submit_revision(r_string: "accepted 2")
|
18
|
+
@declined_1 = @resource.submit_revision(r_string: "declined 1")
|
19
|
+
@declined_2 = @resource.submit_revision(r_string: "declined 2")
|
20
|
+
@pending_1 = @resource.initial_version
|
21
|
+
@pending_2 = @resource.submit_revision(r_string: "pending 2")
|
22
|
+
@accepted_1.accept
|
23
|
+
@accepted_2.accept
|
24
|
+
@declined_1.decline
|
25
|
+
@declined_2.decline
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'returns an array of pending versions' do
|
29
|
+
expect(@resource.versions.pending).to match_array(
|
30
|
+
[@pending_1, @pending_2])
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'returns an array of accepted versions' do
|
34
|
+
expect(@resource.versions.accepted).to match_array(
|
35
|
+
[@accepted_1, @accepted_2])
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'returns an array of declined versions' do
|
39
|
+
expect(@resource.versions.declined).to match_array(
|
40
|
+
[@declined_1, @declined_2])
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: controlled_versioning
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- timothythehuman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-02-
|
11
|
+
date: 2014-02-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -128,7 +128,11 @@ files:
|
|
128
128
|
- app/models/controlled_versioning/version_attribute.rb
|
129
129
|
- app/models/controlled_versioning/version_child.rb
|
130
130
|
- app/views/layouts/controlled_versioning/application.html.erb
|
131
|
+
- db/migrate/20140206204853_create_controlled_versioning_versions.rb
|
132
|
+
- db/migrate/20140206204910_create_controlled_versioning_version_attributes.rb
|
133
|
+
- db/migrate/20140206204920_create_controlled_versioning_version_children.rb
|
131
134
|
- lib/controlled_versioning.rb
|
135
|
+
- lib/controlled_versioning/change_tracker.rb
|
132
136
|
- lib/controlled_versioning/engine.rb
|
133
137
|
- lib/controlled_versioning/initial_version.rb
|
134
138
|
- lib/controlled_versioning/initial_version/factory.rb
|
@@ -185,16 +189,12 @@ files:
|
|
185
189
|
- spec/dummy/db/migrate/20140117222840_create_parent_resources.rb
|
186
190
|
- spec/dummy/db/migrate/20140117222841_create_child_resources.rb
|
187
191
|
- spec/dummy/db/migrate/20140117222842_create_grand_child_resources.rb
|
188
|
-
- spec/dummy/db/migrate/20140206173607_create_controlled_versioning_versions.controlled_versioning.rb
|
189
|
-
- spec/dummy/db/migrate/20140206173608_create_controlled_versioning_version_attributes.controlled_versioning.rb
|
190
|
-
- spec/dummy/db/migrate/20140206173609_create_controlled_versioning_version_children.controlled_versioning.rb
|
191
192
|
- spec/dummy/db/schema.rb
|
192
193
|
- spec/dummy/public/404.html
|
193
194
|
- spec/dummy/public/422.html
|
194
195
|
- spec/dummy/public/500.html
|
195
196
|
- spec/dummy/public/favicon.ico
|
196
197
|
- spec/factories/child_resources.rb
|
197
|
-
- spec/factories/controlled_versioning_versions.rb
|
198
198
|
- spec/factories/grand_child_resources.rb
|
199
199
|
- spec/factories/parent_resources.rb
|
200
200
|
- spec/factories/partially_exclusive_versionable_resources.rb
|
@@ -202,6 +202,7 @@ files:
|
|
202
202
|
- spec/factories/unversionable_resources.rb
|
203
203
|
- spec/factories/users.rb
|
204
204
|
- spec/factories/versionable_resources.rb
|
205
|
+
- spec/models/controlled_versioning/version_spec.rb
|
205
206
|
- spec/spec_helper.rb
|
206
207
|
homepage: https://github.com/timothythehuman/controlled_versioning
|
207
208
|
licenses: []
|
@@ -228,65 +229,62 @@ specification_version: 4
|
|
228
229
|
summary: Adds model versioning to a Rails app, with the ability to approve and declined
|
229
230
|
revisions.
|
230
231
|
test_files:
|
231
|
-
- spec/
|
232
|
+
- spec/spec_helper.rb
|
233
|
+
- spec/factories/parent_resources.rb
|
234
|
+
- spec/factories/partially_inclusive_versionable_resources.rb
|
235
|
+
- spec/factories/unversionable_resources.rb
|
236
|
+
- spec/factories/grand_child_resources.rb
|
237
|
+
- spec/factories/users.rb
|
238
|
+
- spec/factories/versionable_resources.rb
|
239
|
+
- spec/factories/child_resources.rb
|
240
|
+
- spec/factories/partially_exclusive_versionable_resources.rb
|
241
|
+
- spec/models/controlled_versioning/version_spec.rb
|
242
|
+
- spec/controlled_versioning_spec.rb
|
243
|
+
- spec/dummy/config/database.yml
|
244
|
+
- spec/dummy/config/initializers/session_store.rb
|
245
|
+
- spec/dummy/config/initializers/secret_token.rb
|
246
|
+
- spec/dummy/config/initializers/wrap_parameters.rb
|
247
|
+
- spec/dummy/config/initializers/filter_parameter_logging.rb
|
248
|
+
- spec/dummy/config/initializers/inflections.rb
|
249
|
+
- spec/dummy/config/initializers/mime_types.rb
|
250
|
+
- spec/dummy/config/initializers/backtrace_silencers.rb
|
251
|
+
- spec/dummy/config/application.rb
|
252
|
+
- spec/dummy/config/environment.rb
|
253
|
+
- spec/dummy/config/boot.rb
|
254
|
+
- spec/dummy/config/routes.rb
|
255
|
+
- spec/dummy/config/environments/development.rb
|
256
|
+
- spec/dummy/config/environments/test.rb
|
257
|
+
- spec/dummy/config/environments/production.rb
|
258
|
+
- spec/dummy/config/locales/en.yml
|
259
|
+
- spec/dummy/Rakefile
|
260
|
+
- spec/dummy/bin/rake
|
261
|
+
- spec/dummy/bin/bundle
|
262
|
+
- spec/dummy/bin/rails
|
263
|
+
- spec/dummy/public/422.html
|
264
|
+
- spec/dummy/public/favicon.ico
|
265
|
+
- spec/dummy/public/404.html
|
266
|
+
- spec/dummy/public/500.html
|
267
|
+
- spec/dummy/app/controllers/application_controller.rb
|
232
268
|
- spec/dummy/app/helpers/application_helper.rb
|
233
|
-
- spec/dummy/app/views/layouts/application.html.erb
|
234
|
-
- spec/dummy/app/assets/stylesheets/application.css
|
235
|
-
- spec/dummy/app/assets/javascripts/application.js
|
236
269
|
- spec/dummy/app/models/child_resource.rb
|
237
|
-
- spec/dummy/app/models/parent_resource.rb
|
238
270
|
- spec/dummy/app/models/nonversionable_resource.rb
|
239
|
-
- spec/dummy/app/models/partially_inclusive_versionable_resource.rb
|
240
|
-
- spec/dummy/app/models/partially_exclusive_versionable_resource.rb
|
241
|
-
- spec/dummy/app/models/grand_child_resource.rb
|
242
271
|
- spec/dummy/app/models/versionable_resource.rb
|
272
|
+
- spec/dummy/app/models/grand_child_resource.rb
|
273
|
+
- spec/dummy/app/models/partially_exclusive_versionable_resource.rb
|
274
|
+
- spec/dummy/app/models/parent_resource.rb
|
243
275
|
- spec/dummy/app/models/user.rb
|
244
|
-
- spec/dummy/app/
|
245
|
-
- spec/dummy/
|
276
|
+
- spec/dummy/app/models/partially_inclusive_versionable_resource.rb
|
277
|
+
- spec/dummy/app/views/layouts/application.html.erb
|
278
|
+
- spec/dummy/app/assets/javascripts/application.js
|
279
|
+
- spec/dummy/app/assets/stylesheets/application.css
|
280
|
+
- spec/dummy/config.ru
|
281
|
+
- spec/dummy/README.rdoc
|
282
|
+
- spec/dummy/db/schema.rb
|
283
|
+
- spec/dummy/db/migrate/20140117222815_create_partially_exclusive_versionable_resources.rb
|
284
|
+
- spec/dummy/db/migrate/20140117222808_create_versionable_resources.rb
|
246
285
|
- spec/dummy/db/migrate/20140117222840_create_parent_resources.rb
|
247
|
-
- spec/dummy/db/migrate/20140117222814_create_partially_inclusive_versionable_resources.rb
|
248
|
-
- spec/dummy/db/migrate/20140206173609_create_controlled_versioning_version_children.controlled_versioning.rb
|
249
|
-
- spec/dummy/db/migrate/20140206173607_create_controlled_versioning_versions.controlled_versioning.rb
|
250
286
|
- spec/dummy/db/migrate/20140117222800_create_users.rb
|
251
287
|
- spec/dummy/db/migrate/20140117222842_create_grand_child_resources.rb
|
252
|
-
- spec/dummy/db/migrate/20140117222815_create_partially_exclusive_versionable_resources.rb
|
253
|
-
- spec/dummy/db/migrate/20140117222828_create_nonversionable_resources.rb
|
254
|
-
- spec/dummy/db/migrate/20140117222808_create_versionable_resources.rb
|
255
288
|
- spec/dummy/db/migrate/20140117222841_create_child_resources.rb
|
256
|
-
- spec/dummy/db/
|
257
|
-
- spec/dummy/
|
258
|
-
- spec/dummy/public/404.html
|
259
|
-
- spec/dummy/public/favicon.ico
|
260
|
-
- spec/dummy/public/500.html
|
261
|
-
- spec/dummy/Rakefile
|
262
|
-
- spec/dummy/bin/rails
|
263
|
-
- spec/dummy/bin/bundle
|
264
|
-
- spec/dummy/bin/rake
|
265
|
-
- spec/dummy/config/initializers/mime_types.rb
|
266
|
-
- spec/dummy/config/initializers/inflections.rb
|
267
|
-
- spec/dummy/config/initializers/backtrace_silencers.rb
|
268
|
-
- spec/dummy/config/initializers/wrap_parameters.rb
|
269
|
-
- spec/dummy/config/initializers/session_store.rb
|
270
|
-
- spec/dummy/config/initializers/filter_parameter_logging.rb
|
271
|
-
- spec/dummy/config/initializers/secret_token.rb
|
272
|
-
- spec/dummy/config/application.rb
|
273
|
-
- spec/dummy/config/environments/test.rb
|
274
|
-
- spec/dummy/config/environments/development.rb
|
275
|
-
- spec/dummy/config/environments/production.rb
|
276
|
-
- spec/dummy/config/boot.rb
|
277
|
-
- spec/dummy/config/routes.rb
|
278
|
-
- spec/dummy/config/locales/en.yml
|
279
|
-
- spec/dummy/config/environment.rb
|
280
|
-
- spec/dummy/config/database.yml
|
281
|
-
- spec/dummy/config.ru
|
282
|
-
- spec/spec_helper.rb
|
283
|
-
- spec/controlled_versioning_spec.rb
|
284
|
-
- spec/factories/unversionable_resources.rb
|
285
|
-
- spec/factories/child_resources.rb
|
286
|
-
- spec/factories/users.rb
|
287
|
-
- spec/factories/parent_resources.rb
|
288
|
-
- spec/factories/partially_exclusive_versionable_resources.rb
|
289
|
-
- spec/factories/grand_child_resources.rb
|
290
|
-
- spec/factories/versionable_resources.rb
|
291
|
-
- spec/factories/partially_inclusive_versionable_resources.rb
|
292
|
-
- spec/factories/controlled_versioning_versions.rb
|
289
|
+
- spec/dummy/db/migrate/20140117222814_create_partially_inclusive_versionable_resources.rb
|
290
|
+
- spec/dummy/db/migrate/20140117222828_create_nonversionable_resources.rb
|