card 1.16.10 → 1.16.11

Sign up to get free protection for your applications and to get access to all the features.
@@ -143,12 +143,10 @@ event :expire_related, after: :store do
143
143
  Card.expire name, true
144
144
  end
145
145
  end
146
+ end
146
147
 
147
- # FIXME: really shouldn't be instantiating all the following bastards.
148
- # Just need the key.
149
- # fix in id_cache branch
150
- dependents.each { |c| c.expire(true) }
151
- # self.referencers.each { |c| c.expire(true) }
148
+ event :expire_related_names, before: :expire_related, changed: :name do
149
+ # FIXME: look for opportunities to avoid instantiating the following
150
+ descendants.each { |c| c.expire(true) }
152
151
  name_referencers.each { |c| c.expire(true) }
153
- # FIXME: this will need review when we do the new defaults/templating system
154
152
  end
@@ -28,7 +28,10 @@ event :validate_delete, before: :approve, on: :delete do
28
28
  errors.add :delete, "#{name} is is a system card. (#{codename})"
29
29
  end
30
30
 
31
- undeletable_all_rules_tags = %w{ default style layout create read update delete }
31
+ undeletable_all_rules_tags =
32
+ %w{ default style layout create read update delete }
33
+ # FIXME: HACK! should be configured in the rule
34
+
32
35
  if junction? && (l = left) && l.codename == 'all' &&
33
36
  undeletable_all_rules_tags.member?(right.codename)
34
37
  errors.add :delete, "#{name} is an indestructible rule"
@@ -79,20 +79,21 @@ describe Card::Set::All::Fetch do
79
79
 
80
80
  # expires the saved card
81
81
  expect(Card.cache).to receive(:delete).with('a').and_call_original
82
- expect(Card.cache).to receive(:delete).with(/~\d+/).at_least(12)
82
+ expect(Card.cache).to receive(:delete).with(/~\d+/).at_least(1)
83
83
  # expires plus cards
84
- expect(Card.cache).to receive(:delete).with('c+a')
85
- expect(Card.cache).to receive(:delete).with('d+a')
86
- expect(Card.cache).to receive(:delete).with('f+a')
87
- expect(Card.cache).to receive(:delete).with('a+b')
88
- expect(Card.cache).to receive(:delete).with('a+c')
89
- expect(Card.cache).to receive(:delete).with('a+d')
90
- expect(Card.cache).to receive(:delete).with('a+e')
91
- expect(Card.cache).to receive(:delete).with('a+b+c')
84
+ #expect(Card.cache).to receive(:delete).with('c+a')
85
+ #expect(Card.cache).to receive(:delete).with('d+a')
86
+ #expect(Card.cache).to receive(:delete).with('f+a')
87
+ #expect(Card.cache).to receive(:delete).with('a+b')
88
+ #expect(Card.cache).to receive(:delete).with('a+c')
89
+ #expect(Card.cache).to receive(:delete).with('a+d')
90
+ #expect(Card.cache).to receive(:delete).with('a+e')
91
+ #expect(Card.cache).to receive(:delete).with('a+b+c')
92
92
 
93
93
  # expired including? cards
94
- expect(Card.cache).to receive(:delete).with('x').exactly(2).times
95
- expect(Card.cache).to receive(:delete).with('y').exactly(2).times
94
+ #expect(Card.cache).to receive(:delete).with('x').exactly(2).times
95
+ #expect(Card.cache).to receive(:delete).with('y').exactly(2).times
96
+
96
97
  a.save!
97
98
  end
98
99
  end
@@ -1,44 +1,39 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
-
4
3
  module RenameMethods
5
4
  def name_invariant_attributes card
6
5
  {
7
6
  content: card.content,
8
- #updater_id: card.updater_id,
9
- #revisions: card.actions.count,
7
+ # updater_id: card.updater_id,
8
+ # revisions: card.actions.count,
10
9
  referencers: card.referencers.map(&:name).sort,
11
10
  referees: card.referees.map(&:name).sort,
12
- dependents: card.dependents.map(&:id).sort
11
+ descendants: card.descendants.map(&:id).sort
13
12
  }
14
13
  end
15
14
 
16
15
  def assert_rename card, new_name
17
- attrs_before = name_invariant_attributes( card )
16
+ attrs_before = name_invariant_attributes(card)
18
17
  actions_count_before = card.actions.count
19
- card.name=new_name
18
+ card.name = new_name
20
19
  card.update_referencers = true
21
20
  card.save!
22
- expect(card.actions.count).to eq(actions_count_before+1)
21
+ expect(card.actions.count).to eq(actions_count_before + 1)
23
22
  assert_equal attrs_before, name_invariant_attributes(card)
24
23
  assert_equal new_name, card.name
25
24
  assert Card[new_name]
26
25
  end
27
26
 
28
27
  def card name
29
- Card[name].refresh or raise "Couldn't find card named #{name}"
28
+ Card[name].refresh || raise("Couldn't find card named #{name}")
30
29
  end
31
30
  end
32
31
 
33
32
  include RenameMethods
34
33
 
35
-
36
34
  describe Card::Set::All::TrackedAttributes do
37
-
38
-
39
35
  describe 'set_name' do
40
-
41
- it "should handle case variants" do
36
+ it 'should handle case variants' do
42
37
  @c = Card.create! name: 'chump'
43
38
  expect(@c.name).to eq('chump')
44
39
  @c.name = 'Chump'
@@ -46,7 +41,7 @@ describe Card::Set::All::TrackedAttributes do
46
41
  expect(@c.name).to eq('Chump')
47
42
  end
48
43
 
49
- it "should handle changing from plus card to simple" do
44
+ it 'should handle changing from plus card to simple' do
50
45
  c = Card.create! name: 'four+five'
51
46
  c.name = 'nine'
52
47
  c.save!
@@ -55,43 +50,44 @@ describe Card::Set::All::TrackedAttributes do
55
50
  expect(c.right_id).to eq(nil)
56
51
  end
57
52
 
58
- #FIXME - following tests more about fetch than set_name. this spec still needs lots of cleanup
53
+ # FIXME: - following tests more about fetch than set_name.
54
+ # this spec still needs lots of cleanup
59
55
 
60
- it "test fetch with new when present" do
61
- Card.create!(name: "Carrots")
56
+ it 'test fetch with new when present' do
57
+ Card.create!(name: 'Carrots')
62
58
  cards_should_be_added 0 do
63
- c=Card.fetch "Carrots", new: {}
59
+ c = Card.fetch 'Carrots', new: {}
64
60
  c.save
65
61
  expect(c).to be_instance_of(Card)
66
- expect(Card.fetch("Carrots")).to be_instance_of(Card)
62
+ expect(Card.fetch('Carrots')).to be_instance_of(Card)
67
63
  end
68
64
  end
69
65
 
70
- it "test_simple" do
66
+ it 'test_simple' do
71
67
  cards_should_be_added 1 do
72
68
  expect(Card['Boo!']).to be_nil
73
- expect(Card.create(name: "Boo!")).to be_instance_of(Card)
69
+ expect(Card.create(name: 'Boo!')).to be_instance_of(Card)
74
70
  expect(Card['Boo!']).to be_instance_of(Card)
75
71
  end
76
72
  end
77
73
 
78
-
79
- it "test fetch with new when not present" do
74
+ it 'test fetch with new when not present' do
80
75
  cards_should_be_added 1 do
81
- c=Card.fetch("Tomatoes", new: {})
76
+ c = Card.fetch('Tomatoes', new: {})
82
77
  c.save
83
78
  expect(c).to be_instance_of(Card)
84
- expect(Card.fetch("Tomatoes")).to be_instance_of(Card)
79
+ expect(Card.fetch('Tomatoes')).to be_instance_of(Card)
85
80
  end
86
81
  end
87
82
 
88
- it "test_create_junction" do
83
+ it 'test_create_junction' do
89
84
  cards_should_be_added 3 do
90
- expect(Card.create(name: "Peach+Pear", content: "juicy")).to be_instance_of(Card)
85
+ pearch = Card.create name: 'Peach+Pear', content: 'juicy'
86
+ expect(pearch).to be_instance_of(Card)
91
87
  end
92
- expect(Card["Peach"]).to be_instance_of(Card)
93
- expect(Card["Pear"]).to be_instance_of(Card)
94
- assert_equal "juicy", Card["Peach+Pear"].content
88
+ expect(Card['Peach']).to be_instance_of(Card)
89
+ expect(Card['Pear']).to be_instance_of(Card)
90
+ assert_equal 'juicy', Card['Peach+Pear'].content
95
91
  end
96
92
 
97
93
  private
@@ -101,121 +97,121 @@ describe Card::Set::All::TrackedAttributes do
101
97
  yield
102
98
  expect(Card.all.count).to eq(number)
103
99
  end
104
-
105
100
  end
106
101
 
107
-
108
-
109
- describe "renaming" do
110
-
111
-
112
- # FIXME: these tests are TOO SLOW! 8s against server, 12s from command line.
102
+ describe 'renaming' do
103
+ # FIXME: these tests are TOO SLOW!
104
+ # 8s against server, 12s from command line.
113
105
  # not sure if it's the card creation or the actual renaming process.
114
106
  # Card#save needs optimized in general.
115
107
  # Can't we just move this data to fixtures?
116
108
 
117
-
118
- it "renaming plus card to its own child" do
119
- assert_rename card("A+B"), "A+B+T"
109
+ it 'renaming plus card to its own child' do
110
+ assert_rename card('A+B'), 'A+B+T'
120
111
  end
121
112
 
122
- it "clears cache for old name" do
113
+ it 'clears cache for old name' do
123
114
  assert_rename Card['Menu'], 'manure'
124
115
  expect(Card['Menu']).to be_nil
125
116
  end
126
117
 
127
- it "wipes old references by default" do
118
+ it 'wipes old references by default' do
128
119
  c = Card['Menu']
129
120
  c.name = 'manure'
130
121
  c.save!
131
122
  expect(Card['manure'].references_from.size).to eq(0)
132
123
  end
133
124
 
134
- it "picks up new references" do
125
+ it 'picks up new references' do
135
126
  Card.create name: 'kinds of poop', content: '[[manure]]'
136
127
  assert_rename Card['Menu'], 'manure'
137
128
  expect(Card['manure'].references_from.size).to eq(2)
138
129
  end
139
130
 
140
- it "handles name variants" do
141
- assert_rename card("B"), "b"
131
+ it 'handles name variants' do
132
+ assert_rename card('B'), 'b'
142
133
  end
143
134
 
144
- it "handles plus cards renamed to simple" do
145
- assert_rename card("A+B"), "K"
135
+ it 'handles plus cards renamed to simple' do
136
+ assert_rename card('A+B'), 'K'
146
137
  end
147
138
 
148
-
149
- it "handles flipped parts" do
150
- assert_rename card("A+B"), "B+A"
139
+ it 'handles flipped parts' do
140
+ assert_rename card('A+B'), 'B+A'
151
141
  end
152
142
 
153
- it "test_should_error_card_exists" do
154
- @t=card("T"); @t.name="A+B";
155
- assert !@t.save, "save should fail"
156
- assert @t.errors[:name], "should have errors on key"
143
+ it 'test_should_error_card_exists' do
144
+ @t = card 'T'
145
+ @t.name = 'A+B'
146
+ assert !@t.save, 'save should fail'
147
+ assert @t.errors[:name], 'should have errors on key'
157
148
  end
158
149
 
159
- it "test_used_as_tag" do
160
- @b=card("B"); @b.name='A+D'; @b.save
150
+ it 'test_used_as_tag' do
151
+ @b = card 'B'
152
+ @b.name = 'A+D'
153
+ @b.save
161
154
  assert @b.errors[:name]
162
155
  end
163
156
 
164
- it "test_update_dependents" do
165
- c1 = Card["One"]
166
- c12 = Card["One+Two"]
167
- c123 = Card["One+Two+Three"]
168
- c41 = Card["Four+One"]
169
- c415 = Card["Four+One+Five"]
170
-
171
- assert_equal ["One+Two","One+Two+Three","Four+One","Four+One+Five"], [c12,c123,c41,c415].map(&:name)
172
- c1.name="Uno"
173
- c1.save!
174
- assert_equal ["Uno+Two","Uno+Two+Three","Four+Uno","Four+Uno+Five"], [c12,c123,c41,c415].map(&:reload).map(&:name)
157
+ it 'test_update_descendants' do
158
+ card_list = [
159
+ Card['One+Two'],
160
+ Card['One+Two+Three'],
161
+ Card['Four+One'],
162
+ Card['Four+One+Five']
163
+ ]
164
+
165
+ old_names = %w{ One+Two One+Two+Three Four+One Four+One+Five }
166
+ new_names = %w{ Uno+Two Uno+Two+Three Four+Uno Four+Uno+Five }
167
+
168
+ assert_equal old_names, card_list.map(&:name)
169
+ Card['One'].update_attributes! name: 'Uno'
170
+ assert_equal new_names, card_list.map(&:reload).map(&:name)
175
171
  end
176
172
 
177
- it "test_should_error_invalid_name" do
178
- @t=card("T"); @t.name="YT_o~Yo"; @t.save
173
+ it 'test_should_error_invalid_name' do
174
+ @t = card 'T'
175
+ @t.name = 'YT_o~Yo'
176
+ @t.save
179
177
  assert @t.errors[:name]
180
178
  end
181
179
 
182
- it "test_simple_to_simple" do
183
- assert_rename card("A"), "Alephant"
180
+ it 'test_simple_to_simple' do
181
+ assert_rename card('A'), 'Alephant'
184
182
  end
185
183
 
186
- it "test_simple_to_junction_with_create" do
187
- assert_rename card("T"), "C+J"
184
+ it 'test_simple_to_junction_with_create' do
185
+ assert_rename card('T'), 'C+J'
188
186
  end
189
187
 
190
- it "test_reset_key" do
191
- c = Card["Basic Card"]
192
- c.name="banana card"
188
+ it 'test_reset_key' do
189
+ c = Card['Basic Card']
190
+ c.name = 'banana card'
193
191
  c.save!
194
- assert_equal 'banana_card', c.key
195
- assert Card["Banana Card"] != nil
192
+ expect(c.key).to eq('banana_card')
193
+ expect(Card['Banana Card']).not_to be_nil
196
194
  end
197
195
 
198
-
199
-
200
- it "test_rename_should_not_fail_when_updating_inaccessible_referencer" do
201
- Card.create! name: "Joe Card", content: "Whattup"
196
+ it 'test_rename_should_not_fail_when_updating_inaccessible_referencer' do
197
+ Card.create! name: 'Joe Card', content: 'Whattup'
202
198
  Card::Auth.as :joe_admin do
203
- Card.create! name: "Admin Card", content: "[[Joe Card]]"
199
+ Card.create! name: 'Admin Card', content: '[[Joe Card]]'
204
200
  end
205
- c = Card["Joe Card"]
206
- c.update_attributes! name: "Card of Joe", update_referencers: true
207
- assert_equal "[[Card of Joe]]", Card["Admin Card"].content
201
+ c = Card['Joe Card']
202
+ c.update_attributes! name: 'Card of Joe', update_referencers: true
203
+ assert_equal '[[Card of Joe]]', Card['Admin Card'].content
208
204
  end
209
205
 
210
- it "test_rename_should_update_structured_referencer" do
206
+ it 'test_rename_should_update_structured_referencer' do
211
207
  Card::Auth.as_bot do
212
- c=Card.create! name: "Pit"
213
- Card.create! name: "Orange", type: "Fruit", content: "[[Pit]]"
214
- Card.create! name: "Fruit+*type+*structure", content: "this [[Pit]]"
208
+ c = Card.create! name: 'Pit'
209
+ Card.create! name: 'Orange', type: 'Fruit', content: '[[Pit]]'
210
+ Card.create! name: 'Fruit+*type+*structure', content: 'this [[Pit]]'
215
211
 
216
- assert_equal "this [[Pit]]", Card["Orange"].raw_content
217
- c.update_attributes! name: "Seed", update_referencers: true
218
- assert_equal "this [[Seed]]", Card["Orange"].raw_content
212
+ assert_equal 'this [[Pit]]', Card['Orange'].raw_content
213
+ c.update_attributes! name: 'Seed', update_referencers: true
214
+ assert_equal 'this [[Seed]]', Card['Orange'].raw_content
219
215
  end
220
216
  end
221
217
 
@@ -227,92 +223,98 @@ describe Card::Set::All::TrackedAttributes do
227
223
  end
228
224
  end
229
225
 
230
-
231
- context "chuck" do
226
+ context 'chuck' do
232
227
  before do
233
228
  Card::Auth.as_bot do
234
- Card.create! name: "chuck_wagn+chuck"
229
+ Card.create! name: 'chuck_wagn+chuck'
235
230
  end
236
231
  end
237
232
 
238
- it "test_rename_name_substitution" do
239
- c1, c2 = Card["chuck_wagn+chuck"], Card["chuck"]
240
- assert_rename c2, "buck"
241
- assert_equal "chuck_wagn+buck", Card.find(c1.id).name
233
+ it 'test_rename_name_substitution' do
234
+ c1 = Card['chuck_wagn+chuck']
235
+ c2 = Card['chuck']
236
+ assert_rename c2, 'buck'
237
+ assert_equal 'chuck_wagn+buck', Card.find(c1.id).name
242
238
  end
243
239
 
244
- it "test_reference_updates_plus_to_simple" do
245
- c1 = Card::Auth.as_bot do
246
- Card.create! name: 'Huck', content: "[[chuck wagn+chuck]]"
247
- end
248
- c2 = Card["chuck_wagn+chuck"]
249
- assert_rename c2, 'schmuck'
250
- c1 = Card.find(c1.id)
251
- assert_equal '[[schmuck]]', c1.content
240
+ it 'test_reference_updates_plus_to_simple' do
241
+ c1 = Card::Auth.as_bot do
242
+ Card.create! name: 'Huck', content: '[[chuck wagn+chuck]]'
243
+ end
244
+ c2 = Card['chuck_wagn+chuck']
245
+ assert_rename c2, 'schmuck'
246
+ c1 = Card.find(c1.id)
247
+ assert_equal '[[schmuck]]', c1.content
252
248
  end
253
249
  end
254
250
 
255
- context "dairy" do
251
+ context 'dairy' do
256
252
  before do
257
253
  Card::Auth.as_bot do
258
- Card.create! type: "Cardtype", name: "Dairy", content: "[[/new/{{_self|name}}|new]]"
254
+ Card.create! name: 'Dairy',
255
+ type: 'Cardtype',
256
+ content: '[[/new/{{_self|name}}|new]]'
259
257
  end
260
258
  end
261
259
 
262
- it "test_renaming_card_with_self_link_should_not_hang" do
263
- c = Card["Dairy"]
264
- c.name = "Buttah"
260
+ it 'test_renaming_card_with_self_link_should_not_hang' do
261
+ c = Card['Dairy']
262
+ c.name = 'Buttah'
265
263
  c.update_referencers = true
266
264
  c.save!
267
- assert_equal "[[/new/{{_self|name}}|new]]", Card["Buttah"].content
265
+ assert_equal '[[/new/{{_self|name}}|new]]', Card['Buttah'].content
268
266
  end
269
267
 
270
- it "test_renaming_card_without_updating_references_should_not_have_errors" do
271
- c = Card["Dairy"]
272
- c.update_attributes "name"=>"Newt", "update_referencers"=>'false'
273
- assert_equal "[[/new/{{_self|name}}|new]]", Card["Newt"].content
268
+ it 'should rename card without updating references' do
269
+ c = Card['Dairy']
270
+ c.update_attributes name: 'Newt', update_referencers: false
271
+ assert_equal '[[/new/{{_self|name}}|new]]', Card['Newt'].content
274
272
  end
275
273
  end
276
274
 
277
275
 
278
- context "blues" do
276
+ context 'blues' do
279
277
  before do
280
278
  Card::Auth.as_bot do
281
- Card.create! name: "Blue"
282
-
283
- Card.create! name: "blue includer 1", content: "{{Blue}}"
284
- Card.create! name: "blue includer 2", content: "{{blue|closed;other:stuff}}"
285
-
286
- Card.create! name: "blue linker 1", content: "[[Blue]]"
287
- Card.create! name: "blue linker 2", content: "[[blue]]"
279
+ [['Blue', ''],
280
+ ['blue includer 1', '{{Blue}}'],
281
+ ['blue includer 2', '{{blue|closed;other:stuff}}'],
282
+ ['blue linker 1', '[[Blue]]'],
283
+ ['blue linker 2', '[[blue]]']
284
+ ].each do |name, content|
285
+ Card.create! name: name, content: content
286
+ end
288
287
  end
289
288
  end
290
289
 
291
-
292
- it "test_updates_inclusions_when_renaming" do
293
- c1,c2,c3 = Card["Blue"], Card["blue includer 1"], Card["blue includer 2"]
294
- c1.update_attributes name: "Red", update_referencers: true
295
- assert_equal "{{Red}}", Card.find(c2.id).content
290
+ it 'test_updates_inclusions_when_renaming' do
291
+ c1 = Card['Blue']
292
+ c2 = Card['blue includer 1']
293
+ c3 = Card['blue includer 2']
294
+ c1.update_attributes name: 'Red', update_referencers: true
295
+ assert_equal '{{Red}}', Card.find(c2.id).content
296
296
  # NOTE these attrs pass through a hash stage that may not preserve order
297
- assert_equal "{{Red|closed;other:stuff}}", Card.find(c3.id).content
297
+ assert_equal '{{Red|closed;other:stuff}}', Card.find(c3.id).content
298
298
  end
299
299
 
300
- it "test_updates_inclusions_when_renaming_to_plus" do
301
- c1,c2 = Card["Blue"], Card["blue includer 1"]
302
- c1.update_attributes name: "blue includer 1+color", update_referencers: true
303
- assert_equal "{{blue includer 1+color}}", Card.find(c2.id).content
300
+ it 'test_updates_inclusions_when_renaming_to_plus' do
301
+ c1 = Card['Blue']
302
+ c2 = Card['blue includer 1']
303
+ c1.update_attributes name: 'blue includer 1+color',
304
+ update_referencers: true
305
+ assert_equal '{{blue includer 1+color}}', Card.find(c2.id).content
304
306
  end
305
307
 
306
- it "test_reference_updates_on_case_variants" do
307
- c1,c2,c3 = Card["Blue"], Card["blue linker 1"], Card["blue linker 2"]
308
- c1.reload.name = "Red"
308
+ it 'test_reference_updates_on_case_variants' do
309
+ c1 = Card['Blue']
310
+ c2 = Card['blue linker 1']
311
+ c3 = Card['blue linker 2']
312
+ c1.reload.name = 'Red'
309
313
  c1.update_referencers = true
310
314
  c1.save!
311
- assert_equal "[[Red]]", Card.find(c2.id).content
312
- assert_equal "[[Red]]", Card.find(c3.id).content
315
+ assert_equal '[[Red]]', Card.find(c2.id).content
316
+ assert_equal '[[Red]]', Card.find(c3.id).content
313
317
  end
314
318
  end
315
-
316
319
  end
317
-
318
320
  end