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.
Files changed (24) hide show
  1. checksums.yaml +8 -8
  2. data/app/models/controlled_versioning/version.rb +9 -5
  3. data/app/models/controlled_versioning/version_child.rb +4 -0
  4. data/{spec/dummy/db/migrate/20140206173607_create_controlled_versioning_versions.controlled_versioning.rb → db/migrate/20140206204853_create_controlled_versioning_versions.rb} +0 -0
  5. 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
  6. 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
  7. data/lib/controlled_versioning/change_tracker.rb +32 -0
  8. data/lib/controlled_versioning/initial_version/factory.rb +23 -14
  9. data/lib/controlled_versioning/revision/factory.rb +8 -6
  10. data/lib/controlled_versioning/revision.rb +0 -4
  11. data/lib/controlled_versioning/version.rb +4 -0
  12. data/lib/controlled_versioning/version_number.rb +1 -1
  13. data/lib/controlled_versioning.rb +20 -6
  14. data/spec/controlled_versioning_spec.rb +95 -33
  15. data/spec/dummy/db/schema.rb +3 -1
  16. data/spec/factories/child_resources.rb +1 -1
  17. data/spec/factories/parent_resources.rb +4 -2
  18. data/spec/factories/partially_exclusive_versionable_resources.rb +2 -0
  19. data/spec/factories/partially_inclusive_versionable_resources.rb +2 -0
  20. data/spec/factories/unversionable_resources.rb +2 -0
  21. data/spec/factories/versionable_resources.rb +2 -0
  22. data/spec/models/controlled_versioning/version_spec.rb +44 -0
  23. metadata +57 -59
  24. 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
- NDg0NzM1MTM3ZWQxODQ0NWE0OWFlYTlmZDYzOThjYThkOGUxYmY4ZA==
4
+ Mjk3OGY1NzhhMTZjMzU0NzBkYjE1MjhhZWRiYTdlNmZhZTNiMzFiYg==
5
5
  data.tar.gz: !binary |-
6
- NzVkOTAwNTMxZWNkMDU0YzNmNzE5NmZhNTc1ZDk4ZGI4MmRhM2E1Mw==
6
+ MTg1MzA2ZDA3MzIzOGNkMGY0NDc3ZmM1MmEwYjljOGVjOGIzZjU2Nw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ODY3N2JiYzZkMTI4NWQ1YWViODA0NjAzMmM4NjExM2QyYTdiNDc5ZDIxZjUz
10
- NTliZmVmNTFlYWI4NzFhY2M3YTk0MWJjZGRlNDUzYTM3YzQ2MTRmMTQ0NmE0
11
- MTk4MWVmYmE3NDQzMzYxN2RiYjFjOTU2OWZiMDdiOTZlOTgyYjU=
9
+ MmUzOTBhMmI3NThmOWM3NGFiYWNkMzUwNjJiYjMzN2E1OTJlZmI1ODIyYjRk
10
+ NTVkMmQzMWNiMzA5MmVhOTZlZDA1Yjg0NjU4M2U5YmNjNDQ5ZDIxOTc1Zjcy
11
+ NDJhMDBhMTgwZTg2OTRhMWIyODJjMzQxZmVkMzAyMzYzODYyYzM=
12
12
  data.tar.gz: !binary |-
13
- OWJhOTE5MTNjNDkwM2JlZjNiYjM3ZTQxZTljZjYzNjRkZjlhYjY0OWUzMDc5
14
- NmJmY2FiN2E0Zjk4NTU5MGI5NmE1Y2U1ODY1YzlkY2VmMmEwMjFjODU4MGEy
15
- NmI0ZDc5MTQxNzhiYWVkMTJiOTE4NDdjY2YxODIxNjY5M2MyMjE=
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
- Revision::Publisher.new(self).accept_revision unless initial?
16
- update_attributes(pending: false, accepted: true)
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
@@ -5,5 +5,9 @@ module ControlledVersioning
5
5
  belongs_to :version, polymorphic: true
6
6
  has_many :version_attributes, as: :version
7
7
  has_many :version_children, as: :version
8
+
9
+ def changes
10
+ ChangeTracker.new(self).get_changes
11
+ end
8
12
  end
9
13
  end
@@ -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(versionable)
5
- @versionable = versionable
6
- @version = build_version_type
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
- version.save
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
- version_children.build(versionable_type: child.class.name)
62
+ version_child.versionable_type = child.class.name
62
63
  else
63
- version_children.build(versionable: child)
64
+ version_child.versionable = child
64
65
  end
66
+ version_child
65
67
  end
66
68
 
67
69
  end
@@ -5,10 +5,6 @@ class Revision < Version
5
5
  versionable.changed_attributes
6
6
  end
7
7
 
8
- def version_children
9
- version.version_children
10
- end
11
-
12
8
  def versionable_changes(key)
13
9
  values = versionable.changes[key]
14
10
  ValueChange.new(values[0], values[1])
@@ -17,6 +17,10 @@ class Version
17
17
  versionable.class.nested_associations
18
18
  end
19
19
 
20
+ def version_children
21
+ version.version_children
22
+ end
23
+
20
24
  def versionable_notes
21
25
  versionable.notes
22
26
  end
@@ -1,3 +1,3 @@
1
1
  module ControlledVersioning
2
- VERSION_NUMBER = "0.7.2"
2
+ VERSION_NUMBER = "0.8.0"
3
3
  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 = create(:parent_with_grand_children)
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
 
@@ -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: 20140206173609) do
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
 
@@ -18,7 +18,7 @@ FactoryGirl.define do
18
18
  grand_children_count 3
19
19
  end
20
20
 
21
- after(:create) do |child, evaluator|
21
+ before(:create) do |child, evaluator|
22
22
  create_list(:grand_child_resource, evaluator.grand_children_count,
23
23
  child_resource: child)
24
24
  end
@@ -15,7 +15,7 @@ FactoryGirl.define do
15
15
  children_count 3
16
16
  end
17
17
 
18
- after(:create) do |parent, evaluator|
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
- after(:create) do |parent, evaluator|
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
@@ -10,5 +10,7 @@ FactoryGirl.define do
10
10
  r_text "my text"
11
11
  r_time Time.now
12
12
 
13
+ initialize_with { PartiallyExclusiveVersionableResource.create_with_version(attributes) }
14
+
13
15
  end
14
16
  end
@@ -10,5 +10,7 @@ FactoryGirl.define do
10
10
  r_text "my text"
11
11
  r_time Time.now
12
12
 
13
+ initialize_with { PartiallyInclusiveVersionableResource.create_with_version(attributes) }
14
+
13
15
  end
14
16
  end
@@ -10,5 +10,7 @@ FactoryGirl.define do
10
10
  r_text "my text"
11
11
  r_time Time.now
12
12
 
13
+ initialize_with { NonVersionableResource.create_with_version(attributes) }
14
+
13
15
  end
14
16
  end
@@ -10,5 +10,7 @@ FactoryGirl.define do
10
10
  r_text "my text"
11
11
  r_time Time.now
12
12
 
13
+ initialize_with { VersionableResource.create_with_version(attributes) }
14
+
13
15
  end
14
16
  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.7.2
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-06 00:00:00.000000000 Z
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/dummy/README.rdoc
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/controllers/application_controller.rb
245
- - spec/dummy/db/migrate/20140206173608_create_controlled_versioning_version_attributes.controlled_versioning.rb
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/schema.rb
257
- - spec/dummy/public/422.html
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
@@ -1,7 +0,0 @@
1
- # Read about factories at https://github.com/thoughtbot/factory_girl
2
-
3
- FactoryGirl.define do
4
- factory :controlled_versioning_version, :class => 'Version' do
5
- pending false
6
- end
7
- end