draftsman 0.3.7 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -11,10 +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: 20150408234937) do
15
-
16
- # These are extensions that must be enabled in order to support this database
17
- enable_extension "plpgsql"
14
+ ActiveRecord::Schema.define(version: 20160328184419) do
18
15
 
19
16
  create_table "bastards", force: :cascade do |t|
20
17
  t.string "name"
@@ -56,6 +53,21 @@ ActiveRecord::Schema.define(version: 20150408234937) do
56
53
  t.string "user_agent"
57
54
  end
58
55
 
56
+ create_table "enumables", force: :cascade do |t|
57
+ t.integer "status", null: false
58
+ t.integer "draft_id"
59
+ t.datetime "published_at"
60
+ end
61
+
62
+ create_table "moneybags", force: :cascade do |t|
63
+ t.integer "price_cents", default: 0, null: false
64
+ t.string "price_currency", default: "USD", null: false
65
+ t.integer "draft_id"
66
+ t.datetime "published_at"
67
+ t.datetime "created_at", null: false
68
+ t.datetime "updated_at", null: false
69
+ end
70
+
59
71
  create_table "only_children", force: :cascade do |t|
60
72
  t.string "name"
61
73
  t.integer "parent_id"
@@ -85,6 +97,18 @@ ActiveRecord::Schema.define(version: 20150408234937) do
85
97
  t.datetime "updated_at"
86
98
  end
87
99
 
100
+ create_table "talkatives", force: :cascade do |t|
101
+ t.string "before_comment"
102
+ t.string "around_early_comment"
103
+ t.string "around_late_comment"
104
+ t.string "after_comment"
105
+ t.integer "draft_id"
106
+ t.datetime "trashed_at"
107
+ t.datetime "published_at"
108
+ t.datetime "created_at"
109
+ t.datetime "updated_at"
110
+ end
111
+
88
112
  create_table "trashables", force: :cascade do |t|
89
113
  t.string "name"
90
114
  t.string "title"
@@ -112,11 +136,4 @@ ActiveRecord::Schema.define(version: 20150408234937) do
112
136
  t.datetime "updated_at"
113
137
  end
114
138
 
115
- add_foreign_key "children", "drafts"
116
- add_foreign_key "only_children", "drafts"
117
- add_foreign_key "parents", "drafts"
118
- add_foreign_key "skippers", "drafts"
119
- add_foreign_key "trashables", "drafts"
120
- add_foreign_key "vanillas", "drafts"
121
- add_foreign_key "whitelisters", "drafts"
122
139
  end
@@ -50,8 +50,8 @@ describe Child, :type => :model do
50
50
  before do
51
51
  parent.save!
52
52
  child.save!
53
- child.draft_destroy
54
- parent.draft_destroy
53
+ child.draft_destruction
54
+ parent.draft_destruction
55
55
  end
56
56
 
57
57
  subject { child.draft.publish! }
@@ -104,8 +104,8 @@ describe Child, :type => :model do
104
104
  before do
105
105
  parent.save!
106
106
  child.save!
107
- child.draft_destroy
108
- parent.draft_destroy
107
+ child.draft_destruction
108
+ parent.draft_destruction
109
109
  end
110
110
 
111
111
  subject do
@@ -216,7 +216,7 @@ describe Child, :type => :model do
216
216
  context 'parent `destroy` draft with child `destroy` draft' do
217
217
  before do
218
218
  child.save!
219
- parent.draft_destroy
219
+ parent.draft_destruction
220
220
  child.reload
221
221
  end
222
222
 
@@ -245,7 +245,7 @@ describe Child, :type => :model do
245
245
  context 'parent `destroy` draft with child `destroy` draft' do
246
246
  before do
247
247
  child.save!
248
- parent.draft_destroy
248
+ parent.draft_destruction
249
249
  child.reload
250
250
  end
251
251
 
@@ -229,7 +229,7 @@ describe Draftsman::Draft do
229
229
  context 'without previous draft' do
230
230
  before do
231
231
  trashable.save!
232
- trashable.draft_destroy
232
+ trashable.draft_destruction
233
233
  end
234
234
 
235
235
  it 'does not identify as a `create` event' do
@@ -268,7 +268,7 @@ describe Draftsman::Draft do
268
268
  context 'with previous `create` draft' do
269
269
  before do
270
270
  trashable.draft_creation
271
- trashable.draft_destroy
271
+ trashable.draft_destruction
272
272
  end
273
273
 
274
274
  it 'does not identify as a `create` event' do
@@ -422,7 +422,7 @@ describe Draftsman::Draft do
422
422
  context 'without previous draft' do
423
423
  before do
424
424
  trashable.save!
425
- trashable.draft_destroy
425
+ trashable.draft_destruction
426
426
  end
427
427
 
428
428
  subject { trashable.draft.publish! }
@@ -439,7 +439,7 @@ describe Draftsman::Draft do
439
439
  context 'with previous `create` draft' do
440
440
  before do
441
441
  trashable.draft_creation
442
- trashable.draft_destroy
442
+ trashable.draft_destruction
443
443
  end
444
444
 
445
445
  subject { trashable.draft.publish! }
@@ -515,7 +515,7 @@ describe Draftsman::Draft do
515
515
  context 'without previous draft' do
516
516
  before do
517
517
  trashable.save!
518
- trashable.draft_destroy
518
+ trashable.draft_destruction
519
519
  end
520
520
 
521
521
  subject { trashable.draft.revert!; return trashable.reload }
@@ -556,7 +556,7 @@ describe Draftsman::Draft do
556
556
  context 'with previous `create` draft' do
557
557
  before do
558
558
  trashable.draft_creation
559
- trashable.draft_destroy
559
+ trashable.draft_destruction
560
560
  end
561
561
 
562
562
  subject { trashable.draft.revert!; return trashable.reload }
@@ -666,7 +666,7 @@ describe Draftsman::Draft do
666
666
  context 'without previous draft' do
667
667
  before do
668
668
  trashable.save!
669
- trashable.draft_destroy
669
+ trashable.draft_destruction
670
670
  end
671
671
 
672
672
  it 'records the `name`' do
@@ -681,7 +681,7 @@ describe Draftsman::Draft do
681
681
  context 'with previous `create` draft' do
682
682
  before do
683
683
  trashable.draft_creation
684
- trashable.draft_destroy
684
+ trashable.draft_destruction
685
685
  end
686
686
 
687
687
  it 'records the `name`' do
@@ -700,7 +700,7 @@ describe Draftsman::Draft do
700
700
  trashable.title = 'My Title'
701
701
  trashable.draft_update
702
702
  # Typically, 2 draft operations won't happen in the same request, so reload before draft-destroying.
703
- trashable.reload.draft_destroy
703
+ trashable.reload.draft_destruction
704
704
  end
705
705
 
706
706
  it 'records the updated `name`' do
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Enumable, :type => :model do
4
+ let(:enumable) { Enumable.new(status: :active) }
5
+ describe '#draft' do
6
+ describe '#reify' do
7
+ before { enumable.draft_creation }
8
+
9
+ it 'does not raise an exception' do
10
+ expect { enumable.draft.reify }.to_not raise_error
11
+ end
12
+ end
13
+ end
14
+ end
@@ -45,8 +45,8 @@ describe Parent do
45
45
  context 'parent `destroy` draft with child `destroy` draft' do
46
46
  before do
47
47
  child.save!
48
- child.draft_destroy
49
- parent.draft_destroy
48
+ child.draft_destruction
49
+ parent.draft_destruction
50
50
  end
51
51
 
52
52
  subject { parent.draft.publish! }
@@ -90,8 +90,8 @@ describe Parent do
90
90
  context 'parent `destroy` draft with child `destroy` draft' do
91
91
  before do
92
92
  child.save!
93
- child.draft_destroy
94
- parent.draft_destroy
93
+ child.draft_destruction
94
+ parent.draft_destruction
95
95
  end
96
96
 
97
97
  subject do
@@ -169,7 +169,7 @@ describe Parent do
169
169
  context 'parent `destroy` draft with child `destroy` draft' do
170
170
  before do
171
171
  child.save!
172
- parent.draft_destroy
172
+ parent.draft_destruction
173
173
  child.reload
174
174
  end
175
175
 
@@ -206,7 +206,7 @@ describe Parent do
206
206
  context 'parent `destroy` draft with child `destroy` draft' do
207
207
  before do
208
208
  child.save!
209
- parent.draft_destroy
209
+ parent.draft_destruction
210
210
  child.reload
211
211
  end
212
212
 
@@ -345,7 +345,7 @@ describe Skipper do
345
345
  end
346
346
 
347
347
  # Not applicable to this customization
348
- describe 'draft_destroy' do
348
+ describe 'draft_destruction' do
349
349
  end
350
350
 
351
351
  # Not applicable to this customization
@@ -0,0 +1,224 @@
1
+ require 'spec_helper'
2
+
3
+ # A Talkative has a call to `has_drafts` and all nine callbacks defined:
4
+ #
5
+ # - `before_draft_creation`
6
+ # - `around_draft_creation`
7
+ # - `after_draft_creation`
8
+ # - `before_draft_update`
9
+ # - `around_draft_update`
10
+ # - `after_draft_update`
11
+ # - `before_draft_destruction`
12
+ # - `around_draft_destruction`
13
+ # - `after_draft_destruction`
14
+ RSpec.describe Talkative do
15
+ let(:talkative) { subject }
16
+
17
+ describe '.draftable?' do
18
+ it 'is draftable' do
19
+ expect(talkative.class.draftable?).to eql true
20
+ end
21
+ end
22
+
23
+ describe '#draft_creation' do
24
+ before { talkative.draft_creation }
25
+
26
+ describe '`before_draft_creation` callback' do
27
+ it 'changes `before_comment` attribute' do
28
+ expect(talkative.before_comment).to eql "I changed before creation"
29
+ end
30
+
31
+ it 'persists updated `before_comment` attribute to draft' do
32
+ talkative.reload
33
+ expect(talkative.draft.reify.before_comment).to eql "I changed before creation"
34
+ end
35
+ end
36
+
37
+ describe 'around_draft_creation callback' do
38
+ it 'changes `around_early_comment` attribute (before yield)' do
39
+ expect(talkative.around_early_comment).to eql "I changed around creation (before yield)"
40
+ end
41
+
42
+ it 'persists updated `around_early_comment` attribute to draft' do
43
+ talkative.reload
44
+ expect(talkative.draft.reify.around_late_comment).to be_nil
45
+ end
46
+
47
+ it 'changes `around_late_comment` attribute (after yield)' do
48
+ expect(talkative.around_late_comment).to eql "I changed around creation (after yield)"
49
+ end
50
+
51
+ it 'does not persist updated `around_late_comment` attribute' do
52
+ talkative.reload
53
+ expect(talkative.around_late_comment).to be_nil
54
+ end
55
+
56
+ it 'does not persist updated `around_late_comment` attribute to draft' do
57
+ talkative.reload
58
+ expect(talkative.draft.reify.around_late_comment).to be_nil
59
+ end
60
+ end
61
+
62
+ describe '`after_draft_creation` callback' do
63
+ it 'changes `after_comment` attribute' do
64
+ expect(talkative.after_comment).to eql "I changed after creation"
65
+ end
66
+
67
+ it 'does not persist updated `after_comment` attribute' do
68
+ talkative.reload
69
+ expect(talkative.after_comment).to be_nil
70
+ end
71
+
72
+ it 'does not persist updated `after_comment` attribute to draft' do
73
+ talkative.reload
74
+ expect(talkative.draft.reify.after_comment).to be_nil
75
+ end
76
+ end
77
+ end
78
+
79
+ describe '#draft_update' do
80
+ before do
81
+ talkative.draft_creation
82
+ talkative.draft_update
83
+ end
84
+
85
+ describe '`before_draft_update` callback' do
86
+ it 'changes `before_comment` attribute' do
87
+ expect(talkative.before_comment).to eql "I changed before update"
88
+ end
89
+
90
+ it 'persists updated `before_comment` attribute to draft' do
91
+ talkative.reload
92
+ expect(talkative.draft.reify.before_comment).to eql "I changed before update"
93
+ end
94
+ end
95
+
96
+ describe '`around_draft_update` callback' do
97
+ it 'changes `around_early_comment` attribute (before yield)' do
98
+ expect(talkative.around_early_comment).to eql "I changed around update (before yield)"
99
+ end
100
+
101
+ it 'persists updated `around_early_comment` attribute' do
102
+ talkative.reload
103
+ expect(talkative.around_early_comment).to eql "I changed around update (before yield)"
104
+ end
105
+
106
+ it 'persists updated `around_early_comment` attribute to draft' do
107
+ talkative.reload
108
+ expect(talkative.draft.reify.around_early_comment).to eql "I changed around update (before yield)"
109
+ end
110
+
111
+ it 'changes `around_late_comment` attribute (after yield)' do
112
+ expect(talkative.around_late_comment).to eql "I changed around update (after yield)"
113
+ end
114
+
115
+ it 'does not persist updated `around_late_comment` attribute' do
116
+ talkative.reload
117
+ expect(talkative.around_late_comment).to eql 'I changed around creation (after yield)'
118
+ end
119
+
120
+ it 'does not persist updated `around_late_comment` attribute to draft' do
121
+ talkative.reload
122
+ expect(talkative.draft.reify.around_late_comment).to eql 'I changed around creation (after yield)'
123
+ end
124
+ end
125
+
126
+ describe 'after callback' do
127
+ it 'changes `after_comment` attribute' do
128
+ expect(talkative.after_comment).to eql "I changed after update"
129
+ end
130
+
131
+ it 'does not persist updated `after_comment` attribute' do
132
+ talkative.reload
133
+ expect(talkative.after_comment).to eql 'I changed after creation'
134
+ end
135
+
136
+ it 'does not persist updated `after_comment` attribute to draft' do
137
+ talkative.reload
138
+ expect(talkative.draft.reify.after_comment).to eql 'I changed after creation'
139
+ end
140
+ end
141
+ end
142
+
143
+ describe '#draft_destruction' do
144
+ before do
145
+ talkative.draft_creation
146
+ talkative.draft_destruction
147
+ end
148
+
149
+ describe '`before_draft_destruction` callback' do
150
+ it 'changes `before_comment` attribute' do
151
+ expect(talkative.before_comment).to eql "I changed before destroy"
152
+ end
153
+
154
+ it 'does not persist updated `before_comment` attribute' do
155
+ talkative.reload
156
+ expect(talkative.before_comment).to eql "I changed before creation"
157
+ end
158
+
159
+ it 'does not persist updated `before_comment` attribute to draft' do
160
+ talkative.reload
161
+ expect(talkative.draft.reify.before_comment).to eql "I changed before creation"
162
+ end
163
+ end
164
+
165
+ describe '`around_draft_destruction` callback' do
166
+ it 'changes `around_early_comment` attribute (before yield)' do
167
+ expect(talkative.around_early_comment).to eql "I changed around destroy (before yield)"
168
+ end
169
+
170
+ it 'does not persist `around_early_comment` attribute (before yield)' do
171
+ expect(talkative.around_early_comment).to eql "I changed around destroy (before yield)"
172
+ end
173
+
174
+ it 'does not persist updated `around_early_comment` attribute to draft' do
175
+ talkative.reload
176
+ expect(talkative.draft.reify.around_early_comment).to eql "I changed around creation (before yield)"
177
+ end
178
+
179
+ it 'changes `around_late_comment` attribute (after yield)' do
180
+ expect(talkative.around_late_comment).to eql "I changed around destroy (after yield)"
181
+ end
182
+
183
+ it 'does not persist updated `around_late_comment` attribute' do
184
+ talkative.reload
185
+ expect(talkative.around_late_comment).to be_nil
186
+ end
187
+
188
+ it 'does not persist updated `around_late_comment` attribute to draft' do
189
+ talkative.reload
190
+ expect(talkative.draft.reify.around_late_comment).to be_nil
191
+ end
192
+ end
193
+
194
+ describe '`after_draft_destruction` callback' do
195
+ it 'changes `before_comment` attribute' do
196
+ expect(talkative.before_comment).to eql "I changed before destroy"
197
+ end
198
+
199
+ it 'does not persist updated `before_comment` attribute' do
200
+ talkative.reload
201
+ expect(talkative.before_comment).to eql 'I changed before creation'
202
+ end
203
+
204
+ it 'does not persist updated `before_comment` attribute to draft' do
205
+ talkative.reload
206
+ expect(talkative.draft.reify.before_comment).to eql 'I changed before creation'
207
+ end
208
+
209
+ it 'changes `after_comment` attribute' do
210
+ expect(talkative.after_comment).to eql "I changed after destroy"
211
+ end
212
+
213
+ it 'does not persist updated `after_comment` attribute' do
214
+ talkative.reload
215
+ expect(talkative.after_comment).to be_nil
216
+ end
217
+
218
+ it 'does not persist updated `after_comment` attribute to draft' do
219
+ talkative.reload
220
+ expect(talkative.draft.reify.after_comment).to be_nil
221
+ end
222
+ end
223
+ end
224
+ end
@@ -5,22 +5,24 @@ require 'spec_helper'
5
5
  describe Trashable do
6
6
  let(:trashable) { Trashable.new :name => 'Bob' }
7
7
 
8
- it 'is draftable' do
9
- expect(subject.class.draftable?).to eql true
8
+ describe '.draftable?' do
9
+ it 'is draftable' do
10
+ expect(subject.class.draftable?).to eql true
11
+ end
10
12
  end
11
13
 
12
14
  # Not affected by this customization
13
- describe 'draft_creation' do
15
+ describe '#draft_creation' do
14
16
  end
15
17
 
16
18
  # Not affected by this customization
17
- describe 'draft_update' do
19
+ describe '#draft_update' do
18
20
  end
19
21
 
20
- describe 'draft_destroy' do
22
+ describe '#draft_destruction' do
21
23
  context 'with `:create` draft' do
22
24
  before { trashable.draft_creation }
23
- subject { trashable.draft_destroy; return trashable }
25
+ subject { trashable.draft_destruction; return trashable }
24
26
 
25
27
  it 'is persisted' do
26
28
  expect(subject).to be_persisted
@@ -84,7 +86,7 @@ describe Trashable do
84
86
  trashable.draft_update
85
87
  end
86
88
 
87
- subject { trashable.draft_destroy; return trashable.reload }
89
+ subject { trashable.draft_destruction; return trashable.reload }
88
90
 
89
91
  it 'is persisted' do
90
92
  expect(subject).to be_persisted
@@ -145,8 +147,8 @@ describe Trashable do
145
147
  trashable.update_attributes! :published_at => Time.now
146
148
  end
147
149
 
148
- subject { trashable.draft_destroy; return trashable.reload }
149
-
150
+ subject { trashable.draft_destruction; return trashable.reload }
151
+
150
152
  it 'is persisted' do
151
153
  expect(subject).to be_persisted
152
154
  end
@@ -203,11 +205,11 @@ describe Trashable do
203
205
  let!(:trashed_trashable) { Trashable.create :name => 'Ralph' }
204
206
 
205
207
  # Not affected by this customization
206
- describe 'drafted' do
208
+ describe '.drafted' do
207
209
  end
208
210
 
209
- describe 'live' do
210
- before { trashed_trashable.draft_destroy }
211
+ describe '.live' do
212
+ before { trashed_trashable.draft_destruction }
211
213
  subject { Trashable.live }
212
214
 
213
215
  it 'returns 2 records' do
@@ -232,11 +234,11 @@ describe Trashable do
232
234
  end
233
235
 
234
236
  # Not affected by this customization
235
- describe 'published' do
237
+ describe '.published' do
236
238
  end
237
239
 
238
- describe 'trashed' do
239
- before { trashed_trashable.draft_destroy }
240
+ describe '.trashed' do
241
+ before { trashed_trashable.draft_destruction }
240
242
  subject { Trashable.trashed }
241
243
 
242
244
  it 'returns 1 record' do
@@ -260,7 +260,7 @@ describe Vanilla do
260
260
  end
261
261
 
262
262
  # Not applicable to this customization
263
- describe 'draft_destroy' do
263
+ describe 'draft_destruction' do
264
264
  end
265
265
 
266
266
  describe 'scopes' do
@@ -432,7 +432,7 @@ describe Whitelister do
432
432
  end
433
433
 
434
434
  # Not affected by this customization
435
- describe 'draft_destroy' do
435
+ describe 'draft_destruction' do
436
436
  end
437
437
 
438
438
  # Not affected by this customization