controlled_versioning 0.7.2 → 0.8.0
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.
- 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
|