card 1.17.1 → 1.17.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/config/initializers/recaptcha.rb +27 -19
- data/db/migrate/20160122153608_new_indeces.rb +10 -0
- data/db/migrate_core_cards/20130411191151_renaming_for_menu.rb +2 -2
- data/db/migrate_core_cards/20140317035504_account_requests_to_signups.rb +2 -2
- data/db/migrate_core_cards/20150202143810_import_bootstrap_layout.rb +2 -2
- data/db/migrate_core_cards/20150807205221_create_references_for_search_cards.rb +4 -2
- data/db/schema.rb +5 -1
- data/db/version.txt +1 -1
- data/lib/card.rb +3 -3
- data/lib/card/reference.rb +68 -52
- data/mod/01_core/chunk/query_reference.rb +1 -1
- data/mod/01_core/set/all/collection.rb +1 -1
- data/mod/01_core/set/all/name.rb +27 -65
- data/mod/01_core/set/all/pattern.rb +6 -3
- data/mod/01_core/set/all/references.rb +135 -62
- data/mod/01_core/set/all/tracked_attributes.rb +1 -1
- data/mod/01_core/set/all/utils.rb +2 -2
- data/mod/01_core/spec/set/all/references_spec.rb +4 -3
- data/mod/01_core/spec/set/all/tracked_attributes_spec.rb +16 -22
- data/mod/01_history/lib/card/act.rb +32 -30
- data/mod/01_history/lib/card/change.rb +26 -18
- data/mod/01_history/set/all/history.rb +1 -1
- data/mod/04_settings/set/right/structure.rb +1 -1
- data/mod/05_email/set/all/notify.rb +1 -1
- data/mod/05_email/spec/set/right/followers_spec.rb +1 -1
- data/mod/05_standard/set/all/rich_html/editing.rb +42 -45
- data/mod/05_standard/set/type/list.rb +2 -2
- data/mod/05_standard/spec/set/self/all_spec.rb +3 -3
- data/mod/05_standard/spec/set/type/list_spec.rb +3 -3
- data/mod/05_standard/spec/set/type/listed_by_spec.rb +2 -2
- data/mod/05_standard/spec/set/type/search_type_spec.rb +1 -1
- data/spec/lib/card/reference_spec.rb +30 -28
- data/spec/models/card/trash_spec.rb +63 -63
- data/spec/models/card/type_transition_spec.rb +34 -35
- metadata +3 -2
@@ -2,8 +2,8 @@
|
|
2
2
|
|
3
3
|
require 'card/action'
|
4
4
|
|
5
|
-
describe Card,
|
6
|
-
it
|
5
|
+
describe Card, 'deleting card' do
|
6
|
+
it 'should require permission' do
|
7
7
|
a = Card['a']
|
8
8
|
Card::Auth.as :anonymous do
|
9
9
|
expect(a.ok?(:delete)).to eq(false)
|
@@ -15,17 +15,17 @@ describe Card, "deleting card" do
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
describe Card,
|
18
|
+
describe Card, 'deleted card' do
|
19
19
|
before do
|
20
20
|
Card::Auth.as_bot do
|
21
21
|
@c = Card['A']
|
22
22
|
@c.delete!
|
23
23
|
end
|
24
24
|
end
|
25
|
-
it
|
25
|
+
it 'should be in the trash' do
|
26
26
|
expect(@c.trash).to be_truthy
|
27
27
|
end
|
28
|
-
it
|
28
|
+
it 'should come out of the trash when a plus card is created' do
|
29
29
|
Card::Auth.as_bot do
|
30
30
|
Card.create(name: 'A+*acct')
|
31
31
|
c = Card[ 'A' ]
|
@@ -34,18 +34,18 @@ describe Card, "deleted card" do
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
describe Card,
|
38
|
-
it
|
39
|
-
Card.create(name:
|
40
|
-
c=Card.fetch
|
37
|
+
describe Card, 'in trash' do
|
38
|
+
it 'should be retrieved by fetch with new' do
|
39
|
+
Card.create(name: 'Betty').delete
|
40
|
+
c=Card.fetch 'Betty', new: {}
|
41
41
|
c.save
|
42
|
-
expect(Card[
|
42
|
+
expect(Card['Betty']).to be_instance_of(Card)
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
46
|
|
47
|
-
describe Card,
|
48
|
-
it
|
47
|
+
describe Card, 'plus cards' do
|
48
|
+
it 'should be deleted when root is' do
|
49
49
|
Card::Auth.as 'joe_admin' do
|
50
50
|
c = Card.create! name: 'zz+top'
|
51
51
|
root = Card['zz']
|
@@ -59,20 +59,20 @@ end
|
|
59
59
|
|
60
60
|
# FIXME: these user tests should probably be in a set of cardtype specific tests somewhere..
|
61
61
|
describe Card do
|
62
|
-
context
|
63
|
-
before do Card::Auth.as_bot { @c = Card[
|
64
|
-
it
|
62
|
+
context 'with revisions' do
|
63
|
+
before do Card::Auth.as_bot { @c = Card['Wagn Bot'] } end
|
64
|
+
it 'should not be removable' do
|
65
65
|
expect(@c.delete).not_to be_truthy
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
|
-
context
|
69
|
+
context 'without revisions' do
|
70
70
|
before do
|
71
71
|
Card::Auth.as_bot do
|
72
72
|
@c = Card.create! name: 'User Must Die', type: 'User'
|
73
73
|
end
|
74
74
|
end
|
75
|
-
it
|
75
|
+
it 'should be removable' do
|
76
76
|
expect(@c.delete!).to be_truthy
|
77
77
|
end
|
78
78
|
end
|
@@ -94,39 +94,39 @@ end
|
|
94
94
|
# end
|
95
95
|
#end
|
96
96
|
|
97
|
-
describe Card,
|
97
|
+
describe Card, 'dependent removal' do
|
98
98
|
before do
|
99
99
|
@a = Card['A']
|
100
100
|
@a.delete!
|
101
|
-
@c = Card.find_by_key
|
101
|
+
@c = Card.find_by_key 'A+B+C'.to_name.key
|
102
102
|
end
|
103
103
|
|
104
|
-
it
|
104
|
+
it 'should be trash' do
|
105
105
|
expect(@c.trash).to be_truthy
|
106
106
|
end
|
107
107
|
|
108
|
-
it
|
109
|
-
expect(Card[
|
108
|
+
it 'should not be findable by name' do
|
109
|
+
expect(Card['A+B+C']).to eq(nil)
|
110
110
|
end
|
111
111
|
end
|
112
112
|
|
113
|
-
describe Card,
|
113
|
+
describe Card, 'rename to trashed name' do
|
114
114
|
before do
|
115
115
|
Card::Auth.as_bot do
|
116
|
-
@a = Card[
|
117
|
-
@b = Card[
|
116
|
+
@a = Card['A']
|
117
|
+
@b = Card['B']
|
118
118
|
@a.delete! #trash
|
119
119
|
Rails.logger.info "\n\n~~~~~~~deleted~~~~~~~~\n\n\n"
|
120
120
|
|
121
|
-
@b.update_attributes! name:
|
121
|
+
@b.update_attributes! name: 'A', update_referers: true
|
122
122
|
end
|
123
123
|
end
|
124
124
|
|
125
|
-
it
|
125
|
+
it 'should rename b to a' do
|
126
126
|
expect(@b.name).to eq('A')
|
127
127
|
end
|
128
128
|
|
129
|
-
it
|
129
|
+
it 'should rename a to a*trash' do
|
130
130
|
expect((c = Card.find(@a.id)).cardname.to_s).to eq('A*trash')
|
131
131
|
expect(c.name).to eq('A*trash')
|
132
132
|
expect(c.key).to eq('a*trash')
|
@@ -134,56 +134,56 @@ describe Card, "rename to trashed name" do
|
|
134
134
|
end
|
135
135
|
|
136
136
|
|
137
|
-
describe Card,
|
137
|
+
describe Card, 'sent to trash' do
|
138
138
|
before do
|
139
139
|
Card::Auth.as_bot do
|
140
|
-
@c = Card[
|
140
|
+
@c = Card['basicname']
|
141
141
|
@c.delete!
|
142
142
|
end
|
143
143
|
end
|
144
144
|
|
145
|
-
it
|
145
|
+
it 'should be trash' do
|
146
146
|
expect(@c.trash).to eq(true)
|
147
147
|
end
|
148
148
|
|
149
|
-
it
|
150
|
-
expect(Card[
|
149
|
+
it 'should not be findable by name' do
|
150
|
+
expect(Card['basicname']).to eq(nil)
|
151
151
|
end
|
152
152
|
|
153
|
-
it
|
153
|
+
it 'should still have actions' do
|
154
154
|
expect(@c.actions.count).to eq(2)
|
155
155
|
expect(@c.last_change_on(:db_content).value).to eq('basiccontent')
|
156
156
|
end
|
157
157
|
end
|
158
158
|
|
159
|
-
describe Card,
|
159
|
+
describe Card, 'revived from trash' do
|
160
160
|
before do
|
161
161
|
Card::Auth.as_bot do
|
162
|
-
Card[
|
162
|
+
Card['basicname'].delete!
|
163
163
|
|
164
164
|
@c = Card.create! name: 'basicname', content: 'revived content'
|
165
165
|
end
|
166
166
|
end
|
167
167
|
|
168
|
-
it
|
168
|
+
it 'should not be trash' do
|
169
169
|
expect(@c.trash).to eq(false)
|
170
170
|
end
|
171
171
|
|
172
|
-
it
|
172
|
+
it 'should have 3 actions' do
|
173
173
|
expect(@c.actions.count).to eq(3)
|
174
174
|
end
|
175
175
|
|
176
|
-
it
|
176
|
+
it 'should still have old content' do
|
177
177
|
expect(@c.nth_action(1).change_for(2).first.value).to eq('basiccontent')
|
178
178
|
end
|
179
179
|
|
180
|
-
it
|
180
|
+
it 'should have the same content' do
|
181
181
|
expect(@c.content).to eq('revived content')
|
182
182
|
# Card.fetch(@c.name).content.should == 'revived content'
|
183
183
|
end
|
184
184
|
end
|
185
185
|
|
186
|
-
describe Card,
|
186
|
+
describe Card, 'recreate trashed card via new' do
|
187
187
|
# before do
|
188
188
|
# Card::Auth.as(Card::WagnBotID)
|
189
189
|
# @c = Card.create! type: 'Basic', name: "BasicMe"
|
@@ -198,60 +198,60 @@ describe Card, "recreate trashed card via new" do
|
|
198
198
|
|
199
199
|
end
|
200
200
|
|
201
|
-
describe Card,
|
201
|
+
describe Card, 'junction revival' do
|
202
202
|
before do
|
203
203
|
Card::Auth.as_bot do
|
204
|
-
@c = Card.create! name:
|
204
|
+
@c = Card.create! name: 'basicname+woot', content: 'basiccontent'
|
205
205
|
@c.delete!
|
206
|
-
@c = Card.create! name:
|
206
|
+
@c = Card.create! name: 'basicname+woot', content: 'revived content'
|
207
207
|
end
|
208
208
|
end
|
209
209
|
|
210
|
-
it
|
210
|
+
it 'should not be trash' do
|
211
211
|
expect(@c.trash).to eq(false)
|
212
212
|
end
|
213
213
|
|
214
|
-
it
|
214
|
+
it 'should have 3 actions' do
|
215
215
|
expect(@c.actions.count).to eq(3)
|
216
216
|
end
|
217
217
|
|
218
|
-
it
|
218
|
+
it 'should still have old action' do
|
219
219
|
expect(@c.nth_action(1).change_for(2).first.value).to eq('basiccontent')
|
220
220
|
end
|
221
221
|
|
222
|
-
it
|
222
|
+
it 'should have old content' do
|
223
223
|
expect(@c.db_content).to eq('revived content')
|
224
224
|
end
|
225
225
|
end
|
226
226
|
|
227
|
-
describe
|
227
|
+
describe 'remove tests' do
|
228
228
|
|
229
229
|
before do
|
230
|
-
@a = Card[
|
230
|
+
@a = Card['A']
|
231
231
|
end
|
232
232
|
|
233
233
|
# I believe this is here to test a bug where cards with certain kinds of references
|
234
234
|
# would fail to delete. probably less of an issue now that delete is done through
|
235
235
|
# trash.
|
236
|
-
it
|
237
|
-
assert @a.delete!,
|
238
|
-
assert_nil Card[
|
236
|
+
it 'test_remove' do
|
237
|
+
assert @a.delete!, 'card should be deleteable'
|
238
|
+
assert_nil Card['A']
|
239
239
|
end
|
240
240
|
|
241
|
-
it
|
242
|
-
Card.create( name:
|
243
|
-
Card[
|
244
|
-
c = Card.create! name:
|
245
|
-
assert Card[
|
246
|
-
assert !Card[
|
241
|
+
it 'test_recreate_plus_card_name_variant' do
|
242
|
+
Card.create( name: 'rta+rtb' ).delete
|
243
|
+
Card['rta'].update_attributes name: 'rta!'
|
244
|
+
c = Card.create! name: 'rta!+rtb'
|
245
|
+
assert Card['rta!+rtb']
|
246
|
+
assert !Card['rta!+rtb'].trash
|
247
247
|
assert Card.find_by_key('rtb*trash').nil?
|
248
248
|
end
|
249
249
|
|
250
|
-
it
|
251
|
-
Card.create( name:
|
250
|
+
it 'test_multiple_trash_collision' do
|
251
|
+
Card.create( name: 'alpha' ).delete
|
252
252
|
3.times do
|
253
|
-
b = Card.create( name:
|
254
|
-
b.name =
|
253
|
+
b = Card.create( name: 'beta' )
|
254
|
+
b.name = 'alpha'
|
255
255
|
assert b.save!
|
256
256
|
b.delete
|
257
257
|
end
|
@@ -4,22 +4,21 @@ class Card
|
|
4
4
|
cattr_accessor :count
|
5
5
|
|
6
6
|
module Set::Type
|
7
|
-
|
8
7
|
module CardtypeA
|
9
8
|
extend Card::Set
|
10
9
|
|
11
10
|
def ok_to_delete
|
12
|
-
deny_because
|
11
|
+
deny_because 'not allowed to delete card a'
|
13
12
|
end
|
14
13
|
end
|
15
14
|
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
15
|
+
# module CardtypeC
|
16
|
+
# extend Card::Set
|
17
|
+
# end
|
19
18
|
|
20
19
|
module CardtypeD
|
21
20
|
def valid?
|
22
|
-
errors.add :create_error,
|
21
|
+
errors.add :create_error, 'card d always has errors'
|
23
22
|
errors.empty?
|
24
23
|
end
|
25
24
|
end
|
@@ -39,78 +38,78 @@ class Card
|
|
39
38
|
end
|
40
39
|
end
|
41
40
|
|
42
|
-
describe Card,
|
41
|
+
describe Card, 'with role' do
|
43
42
|
before do
|
44
43
|
Card::Auth.as_bot do
|
45
44
|
@role = Card.search(type: 'Role')[0]
|
46
45
|
end
|
47
46
|
end
|
48
47
|
|
49
|
-
it
|
48
|
+
it 'should have a role type' do
|
50
49
|
expect(@role.type_id).to eq(Card::RoleID)
|
51
50
|
end
|
52
51
|
end
|
53
52
|
|
54
53
|
|
55
54
|
|
56
|
-
describe Card,
|
55
|
+
describe Card, 'with account' do
|
57
56
|
before do
|
58
57
|
Card::Auth.as_bot do
|
59
58
|
@joe = change_card_to_type('Joe User', :basic)
|
60
59
|
end
|
61
60
|
end
|
62
61
|
|
63
|
-
it
|
62
|
+
it 'should not have errors' do
|
64
63
|
expect(@joe.errors.empty?).to eq(true)
|
65
64
|
end
|
66
65
|
|
67
|
-
it
|
66
|
+
it 'should allow type changes' do
|
68
67
|
expect(@joe.type_code).to eq(:basic)
|
69
68
|
end
|
70
69
|
|
71
70
|
end
|
72
71
|
|
73
|
-
describe Card,
|
72
|
+
describe Card, 'type transition approve create' do
|
74
73
|
it 'should have cardtype b create role r1' do
|
75
74
|
expect((c=Card.fetch('Cardtype B+*type+*create')).content).to eq('[[r1]]')
|
76
75
|
expect(c.type_code).to eq(:pointer)
|
77
76
|
end
|
78
77
|
|
79
|
-
it
|
80
|
-
c = change_card_to_type
|
78
|
+
it 'should have errors' do
|
79
|
+
c = change_card_to_type 'basicname', 'cardtype_b'
|
81
80
|
expect(c.errors[:permission_denied]).not_to be_empty
|
82
81
|
end
|
83
82
|
|
84
|
-
it
|
85
|
-
lambda { change_card_to_type
|
86
|
-
expect(Card[
|
83
|
+
it 'should be the original type' do
|
84
|
+
lambda { change_card_to_type 'basicname', 'cardtype_b' }
|
85
|
+
expect(Card['basicname'].type_code).to eq(:basic)
|
87
86
|
end
|
88
87
|
end
|
89
88
|
|
90
|
-
|
91
|
-
#
|
92
|
-
# before do @c = change_card_to_type("type-c-card", :basic) end
|
89
|
+
# describe Card, "type transition validate_delete" do
|
90
|
+
# before do @c = change_card_to_type("type-c-card", :basic) end
|
93
91
|
#
|
94
|
-
#
|
95
|
-
#
|
96
|
-
#
|
92
|
+
# it "should have errors" do
|
93
|
+
# @c.errors[:delete_error].first.should == "card c is indestructible"
|
94
|
+
# end
|
97
95
|
#
|
98
|
-
#
|
99
|
-
#
|
100
|
-
#
|
101
|
-
#end
|
96
|
+
# it "should retain original type" do
|
97
|
+
# Card["type_c_card"].type_code.should == :cardtype_c
|
98
|
+
# end
|
99
|
+
# end
|
102
100
|
|
103
|
-
describe Card,
|
104
|
-
before
|
101
|
+
describe Card, 'type transition validate_create' do
|
102
|
+
before { @c = change_card_to_type 'basicname', 'cardtype_d' }
|
105
103
|
|
106
|
-
it
|
107
|
-
pending
|
108
|
-
|
104
|
+
it 'should have errors' do
|
105
|
+
pending 'CardtypeD does not have a codename, so this is an invalid test'
|
106
|
+
msg = /card d always has errors/
|
107
|
+
expect(@c.errors[:type].first.match msg).to be_truthy
|
109
108
|
end
|
110
109
|
|
111
|
-
it
|
112
|
-
pending
|
113
|
-
expect(Card[
|
110
|
+
it 'should retain original type' do
|
111
|
+
pending 'CardtypeD does not have a codename, so this is an invalid test'
|
112
|
+
expect(Card['basicname'].type_code).to eq(:basic)
|
114
113
|
end
|
115
114
|
end
|
116
115
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: card
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.17.
|
4
|
+
version: 1.17.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ethan McCutchen
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2016-
|
14
|
+
date: 2016-02-08 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: smartname
|
@@ -263,6 +263,7 @@ files:
|
|
263
263
|
- db/migrate/20141216053032_better_index_names.rb
|
264
264
|
- db/migrate/20150724210803_add_comment_to_actions.rb
|
265
265
|
- db/migrate/20151105225559_more_space_for_db_content.rb
|
266
|
+
- db/migrate/20160122153608_new_indeces.rb
|
266
267
|
- db/migrate_core_cards/20120611203506_rails_inflection_updates.rb
|
267
268
|
- db/migrate_core_cards/20130411191151_renaming_for_menu.rb
|
268
269
|
- db/migrate_core_cards/20130411211600_delete_old_related_tab_cards.rb
|