card 1.17.1 → 1.17.2
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.
- 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
@@ -3,31 +3,39 @@ class Card
|
|
3
3
|
class Change < ActiveRecord::Base
|
4
4
|
belongs_to :action, foreign_key: :card_action_id, inverse_of: :card_changes
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
class << self
|
7
|
+
def delete_actionless
|
8
|
+
joins(
|
9
|
+
'LEFT JOIN card_actions '\
|
10
|
+
'ON card_changes.card_action_id = card_actions.id '
|
11
|
+
).where(
|
12
|
+
'card_actions.id is null'
|
13
|
+
).find_in_batches do |group|
|
14
|
+
# used to be .delete_all here, but that was failing on large dbs
|
15
|
+
puts 'deleting batch of changes'
|
16
|
+
where("id in (#{group.map(&:id).join ','})").delete_all
|
17
|
+
end
|
18
|
+
end
|
9
19
|
|
10
|
-
|
11
|
-
|
20
|
+
def field_index value
|
21
|
+
value.is_a?(Integer) ? value : TRACKED_FIELDS.index(value.to_s)
|
22
|
+
end
|
23
|
+
|
24
|
+
def find_by_field_name value
|
25
|
+
find_by_field field_index(value)
|
26
|
+
end
|
12
27
|
end
|
13
28
|
|
14
|
-
def
|
15
|
-
|
16
|
-
"card_action_id NOT IN (?)",
|
17
|
-
Card::Action.pluck("id"),
|
18
|
-
).delete_all
|
29
|
+
def field= value
|
30
|
+
write_attribute(:field, TRACKED_FIELDS.index(value.to_s))
|
19
31
|
end
|
20
32
|
|
21
|
-
def
|
22
|
-
|
23
|
-
find_by_field(index)
|
33
|
+
def field
|
34
|
+
TRACKED_FIELDS[read_attribute(:field)]
|
24
35
|
end
|
25
36
|
|
26
|
-
def
|
27
|
-
|
28
|
-
find_by_field(index)
|
37
|
+
def find_by_field_name value
|
38
|
+
find_by_field self.class.field_index(value)
|
29
39
|
end
|
30
40
|
end
|
31
41
|
end
|
32
|
-
|
33
|
-
|
@@ -227,7 +227,7 @@ format :html do
|
|
227
227
|
%em.label.label-info
|
228
228
|
Current
|
229
229
|
- elsif act_view == :expanded
|
230
|
-
= rollback_link act.relevant_actions_for(card
|
230
|
+
= rollback_link act.relevant_actions_for(card)
|
231
231
|
= show_or_hide_changes_link hide_diff, act_id: act.id, act_view: act_view, rev_nr: rev_nr, current_rev_nr: current_rev_nr
|
232
232
|
.toggle
|
233
233
|
= fold_or_unfold_link act_id: act.id, act_view: act_view, rev_nr: rev_nr, current_rev_nr: current_rev_nr
|
@@ -14,7 +14,7 @@ event :update_structurees_references,
|
|
14
14
|
when: proc { |c| c.db_content_changed? || c.action == :delete } do
|
15
15
|
return unless (statement = structuree_statement)
|
16
16
|
Auth.as_bot do
|
17
|
-
Card::Query.run(statement).each(&:
|
17
|
+
Card::Query.run(statement).each(&:update_references_out)
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
@@ -37,7 +37,7 @@ describe Card::Set::Right::Followers do
|
|
37
37
|
|
38
38
|
it 'recognizes card name changes' do
|
39
39
|
@card = Card['Look At Me']
|
40
|
-
@card.
|
40
|
+
@card.update_referers = true
|
41
41
|
@card.update_attributes! name: 'Look away'
|
42
42
|
is_expected.to eq ['Big Brother']
|
43
43
|
end
|
@@ -30,22 +30,25 @@ format :html do
|
|
30
30
|
# name is ready and will show up in title
|
31
31
|
hidden[:card][:name] ||= card.name
|
32
32
|
else
|
33
|
-
|
34
|
-
args[:title] ||= if card.type_id == Card.default_type_id
|
35
|
-
'New'
|
36
|
-
else
|
37
|
-
"New #{card.type_name}"
|
38
|
-
end
|
33
|
+
args[:title] ||= generic_new_card_title
|
39
34
|
# FIXME: - overrides nest args
|
40
35
|
unless card.rule_card :autoname
|
41
36
|
# prompt for name
|
42
|
-
hidden[:name_prompt] = true unless hidden.
|
37
|
+
hidden[:name_prompt] = true unless hidden.key? :name_prompt
|
43
38
|
args[:optional_name_formgroup] ||= :show
|
44
39
|
end
|
45
40
|
end
|
46
41
|
args[:optional_name_formgroup] ||= :hide
|
47
42
|
end
|
48
43
|
|
44
|
+
def generic_new_card_title
|
45
|
+
if card.type_id == Card.default_type_id
|
46
|
+
"New #{card.type_name}"
|
47
|
+
else
|
48
|
+
'New'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
49
52
|
def default_new_args_for_type_field args
|
50
53
|
if show_type_formgroup?(args)
|
51
54
|
args[:optional_type_formgroup] = :show
|
@@ -63,11 +66,10 @@ format :html do
|
|
63
66
|
|
64
67
|
def default_new_args_buttons args
|
65
68
|
cancel_path = !main? && path(view: :missing)
|
66
|
-
args[:buttons] ||=
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
}
|
69
|
+
args[:buttons] ||= [
|
70
|
+
submit_button(class: 'create-submit-button'),
|
71
|
+
cancel_button(class: 'create-cancel-button', href: cancel_path)
|
72
|
+
].join "\n"
|
71
73
|
end
|
72
74
|
|
73
75
|
view :edit, perms: :update, tags: :unknown_ok do |args|
|
@@ -110,49 +112,45 @@ format :html do
|
|
110
112
|
if referers.any? || descendants.any?
|
111
113
|
msg << rename_info(referers, descendants)
|
112
114
|
end
|
113
|
-
alert
|
114
|
-
msg
|
115
|
-
end
|
115
|
+
alert('warning') { msg }
|
116
116
|
end
|
117
117
|
|
118
118
|
def rename_info referers, descendants
|
119
|
-
|
120
|
-
|
121
|
-
if descendants.any?
|
122
|
-
|
123
|
-
'</li>'
|
124
|
-
end
|
125
|
-
if referers.any?
|
126
|
-
msg << "<li>affect at least #{referers.size} reference(s) to " \
|
127
|
-
"\"#{card.name}\".</li>"
|
119
|
+
effects = []
|
120
|
+
options = ''
|
121
|
+
if descendants.any? # FIXME: count, don't instantiate
|
122
|
+
effects << "automatically alter #{descendants.size} related name(s)."
|
128
123
|
end
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
124
|
+
if referers.any? # FIXME: count, don't instantiate
|
125
|
+
count = referers.size
|
126
|
+
refs = count == 1 ? 'reference' : 'references'
|
127
|
+
effects << "affect at least #{count} #{refs} to \"#{card.name}\""
|
128
|
+
options = 'You may choose to <em>update or ignore</em> the referers.'
|
133
129
|
end
|
134
|
-
|
130
|
+
effects = effects.map { |effect| "<li>#{effect}</li>" }
|
131
|
+
"<h6>This change will...</h6><ul>#{effects}</ul><p>#{options}</p>"
|
135
132
|
end
|
136
133
|
|
137
134
|
def default_edit_name_args args
|
138
|
-
referers = args[:referers] = card.
|
135
|
+
referers = args[:referers] = card.family_referers
|
139
136
|
args[:hidden] ||= {}
|
140
137
|
args[:hidden].reverse_merge!(
|
141
138
|
success: '_self',
|
142
139
|
old_name: card.name,
|
143
|
-
referers: referers.size,
|
144
|
-
card: {
|
140
|
+
referers: referers.size, # FIXME: count, don't instantiate
|
141
|
+
card: { update_referers: false }
|
145
142
|
)
|
146
143
|
args[:optional_toolbar] ||= :show
|
147
|
-
args[:buttons] =
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
144
|
+
args[:buttons] = default_rename_buttons
|
145
|
+
end
|
146
|
+
|
147
|
+
def default_rename_buttons
|
148
|
+
[submit_button(text: 'Rename and Update',
|
149
|
+
disable_with: 'Renaming',
|
150
|
+
class: 'renamer-updater'),
|
151
|
+
button_tag('Rename', data: { disable_with: 'Renaming' }, class: 'renamer'),
|
152
|
+
cancel_button(href: path)
|
153
|
+
].join "\n"
|
156
154
|
end
|
157
155
|
|
158
156
|
view :edit_type, perms: :update do |args|
|
@@ -170,10 +168,9 @@ format :html do
|
|
170
168
|
args[:variety] = :edit # YUCK!
|
171
169
|
args[:optional_toolbar] ||= :show
|
172
170
|
args[:hidden] ||= { success: { view: :edit } }
|
173
|
-
args[:buttons] =
|
174
|
-
|
175
|
-
|
176
|
-
}
|
171
|
+
args[:buttons] = [
|
172
|
+
submit_button, cancel_button(href: path(view: :edit))
|
173
|
+
].join "\n"
|
177
174
|
end
|
178
175
|
|
179
176
|
view :edit_rules, tags: :unknown_ok do |args|
|
@@ -32,7 +32,7 @@ event :create_listed_by_cards,
|
|
32
32
|
if !Card[listed_by_name]
|
33
33
|
add_subcard listed_by_name, type_id: ListedByID
|
34
34
|
else
|
35
|
-
Card[listed_by_name].
|
35
|
+
Card[listed_by_name].update_references_out
|
36
36
|
end
|
37
37
|
end
|
38
38
|
end
|
@@ -92,7 +92,7 @@ def update_listed_by_cache_for item_keys, args={}
|
|
92
92
|
if Card::Cache[Card::Set::Type::ListedBy].exist? key
|
93
93
|
if (card = Card.fetch(key))
|
94
94
|
card.update_cached_list
|
95
|
-
card.
|
95
|
+
card.update_references_out
|
96
96
|
else
|
97
97
|
Card::Cache[Card::Set::Type::ListedBy].delete key
|
98
98
|
end
|
@@ -32,11 +32,11 @@ describe Card::Set::Self::All do
|
|
32
32
|
it 'should be trigger reference repair' do
|
33
33
|
Card::Auth.as_bot do
|
34
34
|
a = Card['A']
|
35
|
-
puts a.
|
35
|
+
puts a.references_out.count
|
36
36
|
Card::Env.params[:task] = :repair_references
|
37
|
-
puts a.
|
37
|
+
puts a.references_out.count
|
38
38
|
@all.update_attributes({})
|
39
|
-
puts a.
|
39
|
+
puts a.references_out.count
|
40
40
|
|
41
41
|
end
|
42
42
|
end
|
@@ -66,7 +66,7 @@ describe Card::Set::Type::List do
|
|
66
66
|
context 'when the name of Stam Broker changed to Stam Trader' do
|
67
67
|
before do
|
68
68
|
Card['Stam Broker'].update_attributes!(
|
69
|
-
name: 'Stam Trader',
|
69
|
+
name: 'Stam Trader', update_referers: true
|
70
70
|
)
|
71
71
|
end
|
72
72
|
it { is_expected.to eq ['Darles Chickens', 'Stam Trader'] }
|
@@ -123,7 +123,7 @@ describe Card::Set::Type::List do
|
|
123
123
|
context 'when the name of the cardtype books changed' do
|
124
124
|
before do
|
125
125
|
Card['book'].update_attributes!(
|
126
|
-
type_id: Card::BasicID,
|
126
|
+
type_id: Card::BasicID, update_referers: true
|
127
127
|
)
|
128
128
|
end
|
129
129
|
it { is_expected.to eq ['Darles Chickens', 'Stam Broker'] }
|
@@ -132,7 +132,7 @@ describe Card::Set::Type::List do
|
|
132
132
|
context 'when the name of the cardtype authors changed' do
|
133
133
|
before do
|
134
134
|
Card['author'].update_attributes!(
|
135
|
-
type_id: Card::BasicID,
|
135
|
+
type_id: Card::BasicID, update_referers: true
|
136
136
|
)
|
137
137
|
end
|
138
138
|
it { is_expected.to eq ['Darles Chickens', 'Stam Broker'] }
|
@@ -106,7 +106,7 @@ describe Card::Set::Type::ListedBy do
|
|
106
106
|
Card::Auth.as_bot do
|
107
107
|
Card['Parry Hotter'].update_attributes!(
|
108
108
|
name: 'Parry Moppins',
|
109
|
-
|
109
|
+
update_referers: true
|
110
110
|
)
|
111
111
|
end
|
112
112
|
end
|
@@ -117,7 +117,7 @@ describe Card::Set::Type::ListedBy do
|
|
117
117
|
before do
|
118
118
|
Card['Darles Chickens'].update_attributes!(
|
119
119
|
name: 'Darles Eggs',
|
120
|
-
|
120
|
+
update_referers: true
|
121
121
|
)
|
122
122
|
end
|
123
123
|
subject { Card.fetch('Darles Eggs+books').item_names.sort }
|
@@ -44,7 +44,7 @@ describe Card::Set::Type::SearchType do
|
|
44
44
|
end
|
45
45
|
|
46
46
|
it 'updates query if referee changed' do
|
47
|
-
Card['Y'].update_attributes! name: 'YYY',
|
47
|
+
Card['Y'].update_attributes! name: 'YYY', update_referers: true
|
48
48
|
expect(subject.content).to eq '{"name":"YYY"}'
|
49
49
|
end
|
50
50
|
|
@@ -37,14 +37,14 @@ describe Card::Reference do
|
|
37
37
|
newcard 'Submarine', '[[Yellow]]'
|
38
38
|
newcard 'Sun', '[[Yellow]]'
|
39
39
|
newcard 'Yellow'
|
40
|
-
yellow_refs = Card['Yellow'].
|
40
|
+
yellow_refs = Card['Yellow'].referers.map(&:name).sort
|
41
41
|
expect(yellow_refs).to eq(%w{ Banana Submarine Sun })
|
42
42
|
|
43
43
|
y = Card['Yellow']
|
44
44
|
y.type_id = Card.fetch_id 'UserForm'
|
45
45
|
y.save!
|
46
46
|
|
47
|
-
yellow_refs = Card['Yellow'].
|
47
|
+
yellow_refs = Card['Yellow'].referers.map(&:name).sort
|
48
48
|
expect(yellow_refs).to eq(%w{ Banana Submarine Sun })
|
49
49
|
end
|
50
50
|
|
@@ -61,7 +61,7 @@ describe Card::Reference do
|
|
61
61
|
@e = newcard('Earthman')
|
62
62
|
@e.update_attributes! name: 'Ethan' # NOW there is an Ethan card
|
63
63
|
# do we need the links to be caught before reloading the card?
|
64
|
-
expect(Card['Ethan'].
|
64
|
+
expect(Card['Ethan'].referers.map(&:name).include?('L')).not_to eq(nil)
|
65
65
|
end
|
66
66
|
|
67
67
|
it 'should update references on rename when requested' do
|
@@ -70,18 +70,18 @@ describe Card::Reference do
|
|
70
70
|
lew = newcard('Lew', 'likes [[watermelon]] and [[watermelon+seeds|seeds]]')
|
71
71
|
|
72
72
|
watermelon = Card['watermelon']
|
73
|
-
watermelon.
|
73
|
+
watermelon.update_referers = true
|
74
74
|
watermelon.name = 'grapefruit'
|
75
75
|
watermelon.save!
|
76
76
|
result = 'likes [[grapefruit]] and [[grapefruit+seeds|seeds]]'
|
77
77
|
expect(lew.reload.content).to eq(result)
|
78
78
|
end
|
79
79
|
|
80
|
-
it 'should update
|
80
|
+
it 'should update referers on rename when requested (case 2)' do
|
81
81
|
card = Card['Administrator Menu+*self+*read']
|
82
82
|
old_refs = Card::Reference.where(referee_id: Card::AdministratorID)
|
83
83
|
|
84
|
-
card.
|
84
|
+
card.update_referers = true
|
85
85
|
card.name = 'Administrator Menu+*type+*read'
|
86
86
|
card.save
|
87
87
|
|
@@ -90,37 +90,39 @@ describe Card::Reference do
|
|
90
90
|
end
|
91
91
|
|
92
92
|
it 'should not update references when not requested' do
|
93
|
-
newcard 'watermelon', 'mmmm'
|
94
|
-
newcard 'watermelon+seeds', 'black'
|
93
|
+
watermelon = newcard 'watermelon', 'mmmm'
|
94
|
+
watermelon_seeds = newcard 'watermelon+seeds', 'black'
|
95
95
|
lew = newcard('Lew', 'likes [[watermelon]] and [[watermelon+seeds|seeds]]')
|
96
96
|
|
97
|
-
assert_equal [
|
98
|
-
|
97
|
+
assert_equal [watermelon.id, watermelon_seeds.id],
|
98
|
+
lew.references_out.order(:id).map(&:referee_id),
|
99
|
+
'should store referee ids'
|
99
100
|
|
100
101
|
watermelon = Card['watermelon']
|
101
|
-
watermelon.
|
102
|
+
watermelon.update_referers = false
|
102
103
|
watermelon.name = 'grapefruit'
|
103
104
|
watermelon.save!
|
105
|
+
|
104
106
|
correct_content = 'likes [[watermelon]] and [[watermelon+seeds|seeds]]'
|
105
107
|
expect(lew.reload.content).to eq(correct_content)
|
106
108
|
|
107
|
-
ref_types = lew.
|
108
|
-
assert_equal ref_types,
|
109
|
-
|
110
|
-
assert_equal
|
111
|
-
'only reference to
|
109
|
+
ref_types = lew.references_out.order(:id).map(&:ref_type)
|
110
|
+
assert_equal ref_types, %w(L L P), 'need partial references!'
|
111
|
+
actual_referee_ids = lew.references_out.order(:id).map(&:referee_id)
|
112
|
+
assert_equal actual_referee_ids, [nil, nil, Card.fetch_id('seed')],
|
113
|
+
'only partial reference to "seeds" should have referee_id'
|
112
114
|
end
|
113
115
|
|
114
116
|
it 'update referencing content on rename junction card' do
|
115
117
|
@ab = Card['A+B'] # linked to from X, included by Y
|
116
|
-
@ab.update_attributes! name: 'Peanut+Butter',
|
118
|
+
@ab.update_attributes! name: 'Peanut+Butter', update_referers: true
|
117
119
|
@x = Card['X']
|
118
120
|
expect(@x.content).to eq('[[A]] [[Peanut+Butter]] [[T]]')
|
119
121
|
end
|
120
122
|
|
121
123
|
it 'update referencing content on rename junction card' do
|
122
124
|
@ab = Card['A+B'] # linked to from X, included by Y
|
123
|
-
@ab.update_attributes! name: 'Peanut+Butter',
|
125
|
+
@ab.update_attributes! name: 'Peanut+Butter', update_referers: false
|
124
126
|
@x = Card['X']
|
125
127
|
expect(@x.content).to eq('[[A]] [[A+B]] [[T]]')
|
126
128
|
end
|
@@ -139,7 +141,7 @@ describe Card::Reference do
|
|
139
141
|
it 'simple link' do
|
140
142
|
Card.create name: 'alpha'
|
141
143
|
Card.create name: 'beta', content: 'I link to [[alpha]]'
|
142
|
-
expect(Card['alpha'].
|
144
|
+
expect(Card['alpha'].referers.map(&:name)).to eq(['beta'])
|
143
145
|
expect(Card['beta'].referees.map(&:name)).to eq(['alpha'])
|
144
146
|
end
|
145
147
|
|
@@ -147,7 +149,7 @@ describe Card::Reference do
|
|
147
149
|
Card.create! name: 'alpha card'
|
148
150
|
Card.create! name: 'beta card', content: 'I link to [[alpha_card]]'
|
149
151
|
expect(Card['beta card'].referees.map(&:name)).to eq(['alpha card'])
|
150
|
-
expect(Card['alpha card'].
|
152
|
+
expect(Card['alpha card'].referers.map(&:name)).to eq(['beta card'])
|
151
153
|
end
|
152
154
|
|
153
155
|
it 'simple inclusion' do
|
@@ -161,7 +163,7 @@ describe Card::Reference do
|
|
161
163
|
Card.create name: 'alpha'
|
162
164
|
Card.create name: 'beta', content: 'I link to [[alpha|ALPHA]]'
|
163
165
|
expect(Card['beta'].referees.map(&:name)).to eq(['alpha'])
|
164
|
-
expect(Card['alpha'].
|
166
|
+
expect(Card['alpha'].referers.map(&:name)).to eq(['beta'])
|
165
167
|
end
|
166
168
|
|
167
169
|
it 'query' do
|
@@ -170,8 +172,8 @@ describe Card::Reference do
|
|
170
172
|
name: 'search with references',
|
171
173
|
content: '{"name":"X", "right_plus":["Y",{"content":["in","A","B"]}]}'
|
172
174
|
)
|
173
|
-
|
174
|
-
expect(
|
175
|
+
y_referers = Card['Y'].referers.map(&:name)
|
176
|
+
expect(y_referers).to include('search with references')
|
175
177
|
|
176
178
|
search_referees = Card['search with references'].referees.map(&:name).sort
|
177
179
|
expect(search_referees).to eq(%w{ A B X Y })
|
@@ -179,13 +181,13 @@ describe Card::Reference do
|
|
179
181
|
|
180
182
|
it 'handles contextual names in Basic cards' do
|
181
183
|
Card.create type: 'Basic', name: 'basic w refs', content: '{{_+A}}'
|
182
|
-
Card['A'].update_attributes! name: 'AAA',
|
184
|
+
Card['A'].update_attributes! name: 'AAA', update_referers: true
|
183
185
|
expect(Card['basic w refs'].content).to eq '{{_+AAA}}'
|
184
186
|
end
|
185
187
|
|
186
188
|
it 'handles contextual names in Search cards' do
|
187
189
|
Card.create type: 'Search', name: 'search w refs', content: '{"name":"_+A"}'
|
188
|
-
Card['A'].update_attributes! name: 'AAA',
|
190
|
+
Card['A'].update_attributes! name: 'AAA', update_referers: true
|
189
191
|
expect(Card['search w refs'].content).to eq '{"name":"_+AAA"}'
|
190
192
|
end
|
191
193
|
|
@@ -197,8 +199,8 @@ describe Card::Reference do
|
|
197
199
|
it 'pickup new links on create' do
|
198
200
|
@l = newcard('woof', '[[Lewdog]]') # no Lewdog card yet...
|
199
201
|
@e = newcard('Lewdog') # now there is
|
200
|
-
# NOTE @e.
|
201
|
-
expect(@e.reload.
|
202
|
+
# NOTE @e.referers does not work, you have to reload
|
203
|
+
expect(@e.reload.referers.map(&:name).include?('woof')).not_to eq(nil)
|
202
204
|
end
|
203
205
|
|
204
206
|
it 'pickup new inclusions on create' do
|
@@ -206,6 +208,6 @@ describe Card::Reference do
|
|
206
208
|
# no Lewdog card yet...
|
207
209
|
@e = Card.new name: 'Lewdog', content: 'grrr'
|
208
210
|
# now it's inititated
|
209
|
-
expect(@e.
|
211
|
+
expect(@e.name_referers.map(&:name).include?('woof')).not_to eq(nil)
|
210
212
|
end
|
211
213
|
end
|