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.
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