card 1.15.7 → 1.16.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.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/card.gemspec +3 -2
- data/config/initializers/inflections.rb +1 -1
- data/db/migrate_core_cards/20150528084659_add_session_cardtype.rb +0 -1
- data/db/migrate_core_cards/20150601133433_add_recent_setting_session_card.rb +12 -0
- data/db/migrate_core_cards/20150610171702_add_debugger_session_card.rb +11 -0
- data/db/migrate_core_cards/20150611203506_rails_inflection_updates.rb +82 -0
- data/db/migrate_core_cards/20150627205133_fix_script_bootstrap_card_type.rb +7 -0
- data/db/migrate_core_cards/20150702130543_remove_edit_toolbar_pinned.rb +9 -0
- data/db/schema.rb +81 -81
- data/db/seed/new/card_actions.yml +12581 -1647
- data/db/seed/new/card_acts.yml +1 -1
- data/db/seed/new/card_changes.yml +39326 -7569
- data/db/seed/new/card_references.yml +518 -455
- data/db/seed/new/cards.yml +1547 -1291
- data/db/seed/test/fixtures/card_actions.yml +13700 -2717
- data/db/seed/test/fixtures/card_acts.yml +314 -272
- data/db/seed/test/fixtures/card_changes.yml +45409 -13573
- data/db/seed/test/fixtures/card_references.yml +1223 -1125
- data/db/seed/test/fixtures/cards.yml +2694 -2433
- data/db/seed/test/fixtures/file1.txt +1 -0
- data/db/seed/test/fixtures/file2.txt +1 -0
- data/db/version_core_cards.txt +1 -1
- data/lib/card.rb +23 -13
- data/lib/card/auth.rb +6 -6
- data/lib/card/cache.rb +24 -5
- data/lib/card/env.rb +10 -10
- data/lib/card/format.rb +29 -12
- data/lib/card/log.rb +5 -3
- data/lib/card/migration.rb +17 -41
- data/lib/card/name.rb +12 -0
- data/lib/card/reference.rb +11 -12
- data/lib/card/set.rb +59 -6
- data/lib/card/simplecov_helper.rb +6 -1
- data/lib/card/spec_helper.rb +3 -2
- data/lib/card/view_cache.rb +77 -0
- data/lib/cardio.rb +30 -22
- data/mod/01_core/format/html_format.rb +17 -9
- data/mod/01_core/layout/blank.html +1 -1
- data/mod/01_core/layout/default.html +6 -16
- data/mod/01_core/layout/modal.html +9 -0
- data/mod/01_core/layout/noside.html +5 -12
- data/mod/01_core/layout/simple.html +1 -1
- data/mod/01_core/set/all/collection.rb +57 -5
- data/mod/01_core/set/all/content.rb +5 -7
- data/mod/01_core/set/all/name.rb +8 -10
- data/mod/01_core/set/all/permissions.rb +1 -2
- data/mod/01_core/set/all/phases.rb +5 -13
- data/mod/01_core/set/all/references.rb +10 -10
- data/mod/01_core/set/all/rules.rb +2 -2
- data/mod/01_core/set/all/tracked_attributes.rb +5 -3
- data/mod/01_core/set/all/utils.rb +79 -9
- data/mod/01_core/set/all/view_cache.rb +9 -0
- data/mod/01_core/spec/format/html_format_spec.rb +2 -2
- data/mod/01_core/spec/set/all/collection_spec.rb +1 -1
- data/mod/01_history/lib/card/act.rb +3 -1
- data/mod/01_history/lib/card/action.rb +20 -12
- data/mod/01_history/lib/card/change.rb +12 -8
- data/mod/01_history/set/all/actions.rb +2 -2
- data/mod/01_history/set/all/content_history.rb +3 -2
- data/mod/01_history/set/all/history.rb +57 -19
- data/mod/02_basic_types/set/all/rss.rb +5 -6
- data/mod/{05_standard → 02_basic_types}/set/type/html.rb +4 -3
- data/mod/02_basic_types/set/type/plain_text.rb +1 -1
- data/mod/02_basic_types/set/type/pointer.rb +7 -4
- data/mod/02_basic_types/spec/set/type/pointer_spec.rb +21 -17
- data/mod/03_machines/lib/card/machine.rb +33 -31
- data/mod/03_machines/lib/javascript/script_card_menu.js.coffee +2 -10
- data/mod/03_machines/lib/javascript/wagn.js.coffee +10 -10
- data/mod/03_machines/lib/javascript/wagn_mod.js.coffee +87 -40
- data/mod/03_machines/lib/stylesheets/style_cards.scss +26 -28
- data/mod/03_machines/set/right/machine_output.rb +3 -3
- data/mod/03_machines/set/type/coffee_script.rb +6 -6
- data/mod/03_machines/set/type/css.rb +1 -1
- data/mod/03_machines/set/type/java_script.rb +5 -6
- data/mod/03_machines/spec/lib/shared_machine_examples.rb +3 -1
- data/mod/03_machines/spec/set/type/scss_spec.rb +9 -10
- data/mod/04_settings/lib/card/setting.rb +16 -14
- data/mod/04_settings/set/right/structure.rb +6 -0
- data/mod/04_settings/set/self/add_help.rb +1 -1
- data/mod/04_settings/set/self/autoname.rb +1 -1
- data/mod/04_settings/set/self/captcha.rb +1 -1
- data/mod/04_settings/set/self/default.rb +1 -1
- data/mod/04_settings/set/self/help.rb +1 -1
- data/mod/04_settings/set/self/input.rb +1 -1
- data/mod/04_settings/set/self/layout.rb +1 -1
- data/mod/04_settings/set/self/on_create.rb +1 -1
- data/mod/04_settings/set/self/on_delete.rb +1 -1
- data/mod/04_settings/set/self/on_update.rb +1 -1
- data/mod/04_settings/set/self/options.rb +1 -1
- data/mod/04_settings/set/self/options_label.rb +1 -1
- data/mod/04_settings/set/self/script.rb +1 -1
- data/mod/04_settings/set/self/structure.rb +1 -1
- data/mod/04_settings/set/self/style.rb +1 -1
- data/mod/04_settings/set/self/table_of_contents.rb +1 -1
- data/mod/04_settings/set/self/thanks.rb +1 -1
- data/mod/05_email/set/all/follow.rb +3 -21
- data/mod/05_email/set/all/notify.rb +20 -4
- data/mod/05_email/set/right/follow.rb +16 -18
- data/mod/05_email/set/self/follow.rb +1 -1
- data/mod/05_email/spec/set/all/follow_spec.rb +6 -13
- data/mod/05_standard/set/all/attach.rb +23 -9
- data/mod/05_standard/set/all/error.rb +5 -7
- data/mod/05_standard/set/all/event_viz.rb +10 -6
- data/mod/05_standard/set/all/links.rb +37 -13
- data/mod/05_standard/set/all/rich_html/content.rb +46 -18
- data/mod/05_standard/set/all/rich_html/editing.rb +29 -25
- data/mod/05_standard/set/all/rich_html/form.rb +17 -10
- data/mod/05_standard/set/all/rich_html/header.rb +26 -4
- data/mod/05_standard/set/all/rich_html/menu.rb +17 -34
- data/mod/05_standard/set/all/rich_html/modal.rb +50 -12
- data/mod/05_standard/set/all/rich_html/toolbar.rb +178 -186
- data/mod/05_standard/set/all/rich_html/wrapper.rb +44 -21
- data/mod/05_standard/set/rstar/rules.rb +43 -53
- data/mod/05_standard/set/self/all.rb +2 -1
- data/mod/05_standard/set/self/head.rb +2 -2
- data/mod/05_standard/set/self/signin.rb +18 -18
- data/mod/05_standard/set/self/stats.rb +14 -2
- data/mod/05_standard/set/type/search_type.rb +9 -4
- data/mod/05_standard/set/type/session.rb +12 -7
- data/mod/05_standard/set/type/set.rb +135 -18
- data/mod/05_standard/spec/chunk/include_spec.rb +15 -16
- data/mod/05_standard/spec/set/all/account_spec.rb +21 -21
- data/mod/05_standard/spec/set/all/event_viz_spec.rb +7 -7
- data/mod/05_standard/spec/set/all/history_spec.rb +54 -24
- data/mod/05_standard/spec/set/all/rich_html/editing_spec.rb +42 -40
- data/mod/05_standard/spec/set/rstar/rules_spec.rb +1 -1
- data/mod/05_standard/spec/set/type/search_type_spec.rb +9 -1
- data/mod/05_standard/spec/set/type/signup_spec.rb +42 -42
- data/mod/06_bootstrap/lib/stylesheets/bootstrap_cards.scss +6 -0
- data/mod/06_bootstrap/set/all/bootstrap/form.rb +4 -5
- data/mod/06_bootstrap/set/all/bootstrap/helper.rb +145 -0
- data/mod/06_bootstrap/set/all/rich_bootstrap.rb +0 -59
- data/spec/lib/card/action_spec.rb +1 -1
- data/spec/lib/card/log_spec.rb +7 -7
- data/spec/models/card/cardtype_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- metadata +31 -6
- data/mod/04_settings/set/self/comment.rb +0 -2
@@ -1,13 +1,10 @@
|
|
1
|
+
include Pointer
|
2
|
+
|
1
3
|
def history?
|
2
4
|
false
|
3
5
|
end
|
4
6
|
|
5
|
-
event :store_in_session, :
|
6
|
-
Env.session[key] = db_content
|
7
|
-
self.db_content = ''
|
8
|
-
end
|
9
|
-
|
10
|
-
event :update_in_session, :after=>:approve, :on=>:update do
|
7
|
+
event :store_in_session, :before=>:standardize_items, :on=>:save do
|
11
8
|
if db_content_changed?
|
12
9
|
Env.session[key] = db_content
|
13
10
|
self.db_content = ''
|
@@ -23,7 +20,15 @@ def content
|
|
23
20
|
Env.session[key]
|
24
21
|
end
|
25
22
|
|
23
|
+
format do
|
24
|
+
include Pointer::Format
|
25
|
+
end
|
26
|
+
|
26
27
|
format :html do
|
27
|
-
|
28
|
+
include Pointer::HtmlFormat
|
29
|
+
|
30
|
+
def default_core_args args
|
31
|
+
args[:item] = :name
|
32
|
+
end
|
28
33
|
end
|
29
34
|
|
@@ -2,18 +2,63 @@
|
|
2
2
|
format :html do
|
3
3
|
|
4
4
|
view :core do |args|
|
5
|
+
_render args[:rule_view], args
|
6
|
+
end
|
7
|
+
def default_core_args args
|
8
|
+
args[:rule_view] ||= :common_rules
|
9
|
+
args[:optional_set_label] ||= :show
|
10
|
+
args[:optional_rule_navbar] ||= :show
|
11
|
+
args[:optional_set_navbar] ||= :hide
|
12
|
+
end
|
13
|
+
|
14
|
+
def with_label_and_navbars args
|
5
15
|
output [
|
6
|
-
|
7
|
-
|
16
|
+
_optional_render(:set_label, args, :show),
|
17
|
+
_optional_render(:rule_navbar, args, :hide),
|
18
|
+
_optional_render(:set_navbar, args, :hide),
|
19
|
+
yield
|
20
|
+
]
|
21
|
+
end
|
22
|
+
|
23
|
+
view :all_rules do |args|
|
24
|
+
with_label_and_navbars args.merge(:selected_view =>:all_rules) do
|
25
|
+
rules_table (card.visible_setting_codenames.sort & card.visible_setting_codenames), args
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
view :grouped_rules do |args|
|
30
|
+
with_label_and_navbars args.merge(:selected_view =>:grouped_rules) do
|
31
|
+
content_tag(:div, :class=>'panel-group', :id=>'accordion', :role=>'tablist','aria-multiselectable'=>'true') do
|
8
32
|
Card::Setting.groups.keys.map do |group_key|
|
9
33
|
_optional_render(group_key, args, :show)
|
10
34
|
end * "\n"
|
11
|
-
end
|
12
|
-
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
view :recent_rules do |args|
|
40
|
+
with_label_and_navbars args.merge(:selected_view =>:recent_rules) do
|
41
|
+
recent_settings = Card[:recent_settings].item_cards.map(&:codename)
|
42
|
+
rules_table (recent_settings.map(&:to_sym) & card.visible_setting_codenames), args
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
view :common_rules do |args|
|
47
|
+
with_label_and_navbars args.merge(:selected_view =>:common_rules) do
|
48
|
+
rules_table (card.visible_setting_codenames & [:create, :read, :update, :delete, :structure, :default, :style]), args
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
view :field_related_rules do |args|
|
53
|
+
with_label_and_navbars args.merge(:selected_view =>:field_related_rules) do
|
54
|
+
field_settings = [:default, :help, :structure]
|
55
|
+
field_settings += [:input, :options, :options_label] if card.type_id == PointerID
|
56
|
+
rules_table (card.visible_setting_codenames & field_settings), args
|
57
|
+
end
|
13
58
|
end
|
14
59
|
|
15
60
|
view :set_label do |args|
|
16
|
-
content_tag :
|
61
|
+
content_tag :h3, card.label, :class=>'set-label'
|
17
62
|
end
|
18
63
|
|
19
64
|
Card::Setting.groups.keys.each do |group_key|
|
@@ -32,25 +77,29 @@ format :html do
|
|
32
77
|
end
|
33
78
|
end),
|
34
79
|
(content_tag :div, :id=>collapse_id, :class=>'panel-collapse collapse', :role=>'tabpanel', 'aria-labelledby'=>heading_id do
|
35
|
-
|
36
|
-
[
|
37
|
-
(content_tag(:tr, :class=>"rule-group") do
|
38
|
-
wrap_each_with :th, %w(Setting Content Set), :class=>'rule-heading'
|
39
|
-
end),
|
40
|
-
(settings.map do |setting|
|
41
|
-
if show_view? setting.codename, args
|
42
|
-
rule_card = card.fetch(:trait=>setting.codename, :new=>{})
|
43
|
-
nest(rule_card, :view=>:closed_rule).html_safe
|
44
|
-
end
|
45
|
-
end * "\n")
|
46
|
-
]
|
47
|
-
end
|
80
|
+
rules_table settings.map(&:codename), args
|
48
81
|
end)
|
49
82
|
]
|
50
83
|
end
|
51
84
|
end
|
52
85
|
end
|
53
86
|
|
87
|
+
def rules_table settings, args={}
|
88
|
+
wrap_with :table, :class=>'set-rules table' do
|
89
|
+
[
|
90
|
+
(content_tag(:tr, :class=>"rule-group") do
|
91
|
+
wrap_each_with :th, %w(Trait Content Set), :class=>'rule-heading'
|
92
|
+
end),
|
93
|
+
(settings.map do |setting|
|
94
|
+
if show_view? setting, args
|
95
|
+
rule_card = card.fetch(:trait=>setting, :new=>{})
|
96
|
+
nest(rule_card, :view=>:closed_rule).html_safe
|
97
|
+
end
|
98
|
+
end * "\n")
|
99
|
+
]
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
54
103
|
view :editor do |args|
|
55
104
|
'Cannot currently edit Sets' #ENGLISH
|
56
105
|
end
|
@@ -89,6 +138,58 @@ format :html do
|
|
89
138
|
''
|
90
139
|
end
|
91
140
|
|
141
|
+
|
142
|
+
view :set_navbar do |args|
|
143
|
+
id = "rule-navbar-#{card.cardname.safe_key}-#{args[:home_view]}"
|
144
|
+
related_sets = card.related_sets(true)
|
145
|
+
return '' if related_sets.size <= 1
|
146
|
+
navbar id, :toggle=>'Rules<span class="caret"></span>', :toggle_align=>:left,
|
147
|
+
:class=>'slotter toolbar', :navbar_type=>'inverse', :collapsed_content=>close_link(:class=>'pull-right visible-xs') do
|
148
|
+
[
|
149
|
+
content_tag(:span, 'Set:', :class=>"navbar-text hidden-xs"),
|
150
|
+
(wrap_with :ul, :class=>'nav navbar-nav nav-pills' do
|
151
|
+
related_sets.map do |name, label|
|
152
|
+
link = card_link name, :text=>label, :remote=>true,
|
153
|
+
:path_opts => {
|
154
|
+
:view => @slot_view,
|
155
|
+
:slot => {:subheader=>showname(name), :subframe=>true, :hide=>'header set_label rule_navbar', :show=>'subheader set_navbar'}
|
156
|
+
}
|
157
|
+
li_pill link, name == card.name
|
158
|
+
end
|
159
|
+
end),
|
160
|
+
]
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
def li_pill content, active
|
165
|
+
"<li role='presentation' #{"class='active'" if active}>#{content}</li>"
|
166
|
+
end
|
167
|
+
|
168
|
+
view :rule_navbar do |args|
|
169
|
+
id = "rule-navbar-#{card.cardname.safe_key}-#{args[:home_view]}"
|
170
|
+
args.merge!(:path_opts=>{:slot=>{:show=>:rule_navbar}})
|
171
|
+
navbar id, :toggle=>'Rules<span class="caret"></span>', :toggle_align=>:left,
|
172
|
+
:class=>'slotter toolbar', :navbar_type=>'inverse', :collapsed_content=>close_link(:class=>'pull-right visible-xs') do
|
173
|
+
[
|
174
|
+
content_tag(:span, 'Rules:', :class=>"navbar-text hidden-xs"),
|
175
|
+
(wrap_with :ul, :class=>'nav navbar-nav nav-pills' do
|
176
|
+
[
|
177
|
+
(view_link_pill( 'field', :field_related_rules, args) if card.junction?),
|
178
|
+
view_link_pill( 'common', :common_rules, args),
|
179
|
+
view_link_pill( 'by group', :grouped_rules, args),
|
180
|
+
view_link_pill( 'by name', :all_rules, args),
|
181
|
+
(view_link_pill( 'recent', :recent_rules, args) if recently_edited_settings?),
|
182
|
+
]
|
183
|
+
end),
|
184
|
+
]
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
def view_link_pill name, view, args
|
189
|
+
selected_view = args[:selected_view] || @slot_view || args[:home_view]
|
190
|
+
opts = {:class=>'slotter', :role=>'pill', :path_opts=>args[:path_opts]}
|
191
|
+
li_pill view_link(name, view, opts), selected_view == view
|
192
|
+
end
|
92
193
|
end
|
93
194
|
|
94
195
|
|
@@ -184,6 +285,13 @@ def setting_codenames_by_group
|
|
184
285
|
result
|
185
286
|
end
|
186
287
|
|
288
|
+
def visible_setting_codenames
|
289
|
+
@visible_settings ||=
|
290
|
+
Card::Setting.groups.values.flatten.compact.reject do |setting|
|
291
|
+
!setting.applies_to_cardtype(prototype.type_id)
|
292
|
+
end.map(&:codename)
|
293
|
+
end
|
294
|
+
|
187
295
|
def visible_settings group
|
188
296
|
Card::Setting.groups[group].reject do |setting|
|
189
297
|
!setting or !setting.applies_to_cardtype(prototype.type_id)
|
@@ -227,3 +335,12 @@ def prototype
|
|
227
335
|
opts = subclass_for_set.prototype_args self.cardname.trunk_name
|
228
336
|
Card.fetch opts[:name], :new=>opts
|
229
337
|
end
|
338
|
+
|
339
|
+
def related_sets with_self = false
|
340
|
+
if subclass_for_set.anchorless?
|
341
|
+
prototype.related_sets with_self
|
342
|
+
else
|
343
|
+
left(:new=>{}).related_sets with_self
|
344
|
+
end
|
345
|
+
end
|
346
|
+
|
@@ -1,13 +1,12 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
2
|
|
3
3
|
describe Card::Chunk::Include, "Inclusion" do
|
4
|
-
include ActionView::Helpers::TextHelper
|
5
4
|
|
6
5
|
context "syntax parsing" do
|
7
6
|
before do
|
8
7
|
@class= Card::Chunk::Include
|
9
8
|
end
|
10
|
-
|
9
|
+
|
11
10
|
it "should ignore invisible comments" do
|
12
11
|
expect(render_content("{{## now you see nothing}}")).to eq('')
|
13
12
|
end
|
@@ -16,7 +15,7 @@ describe Card::Chunk::Include, "Inclusion" do
|
|
16
15
|
expect(render_content("{{# now you see me}}")).to eq('<!-- # now you see me -->')
|
17
16
|
expect(render_content("{{# -->}}")).to eq('<!-- # --> -->')
|
18
17
|
end
|
19
|
-
|
18
|
+
|
20
19
|
it "should handle empty inclusions" do
|
21
20
|
instance = @class.new( @class.full_match( '{{ }}' ) , nil )
|
22
21
|
expect(instance.name).to eq('')
|
@@ -24,27 +23,27 @@ describe Card::Chunk::Include, "Inclusion" do
|
|
24
23
|
instance1 = @class.new( @class.full_match( '{{|}}' ) , nil )
|
25
24
|
expect(instance1.name).to eq('')
|
26
25
|
expect(instance1.options[:inc_syntax]).to eq('|')
|
27
|
-
|
26
|
+
|
28
27
|
end
|
29
|
-
|
28
|
+
|
30
29
|
it "should handle no pipes" do
|
31
30
|
instance = @class.new( @class.full_match( '{{toy}}') , nil )
|
32
31
|
expect(instance.name).to eq('toy')
|
33
32
|
expect(instance.options[:inc_name]).to eq('toy')
|
34
33
|
expect(instance.options.key?(:view)).to eq(false)
|
35
34
|
end
|
36
|
-
|
35
|
+
|
37
36
|
it "should strip the name" do
|
38
37
|
expect(@class.new( @class.full_match( '{{ toy }}') , nil ).name).to eq('toy')
|
39
38
|
end
|
40
|
-
|
39
|
+
|
41
40
|
it 'should strip html tags' do
|
42
41
|
expect(@class.new( @class.full_match( '{{ <span>toy</span> }}') , nil ).name).to eq('toy')
|
43
42
|
instance = @class.new( @class.full_match( '{{ <span>toy|open</span> }}') , nil )
|
44
43
|
expect(instance.name).to eq('toy')
|
45
44
|
expect(instance.options[:view]).to eq('open')
|
46
45
|
end
|
47
|
-
|
46
|
+
|
48
47
|
it "should handle single pipe" do
|
49
48
|
options = @class.new( @class.full_match('{{toy|view:link;hide:me}}'), nil ).options
|
50
49
|
expect(options[:inc_name]).to eq('toy')
|
@@ -52,13 +51,13 @@ describe Card::Chunk::Include, "Inclusion" do
|
|
52
51
|
expect(options[:hide]).to eq('me')
|
53
52
|
expect(options.key?(:items)).to eq(false)
|
54
53
|
end
|
55
|
-
|
54
|
+
|
56
55
|
it "should handle multiple pipes" do
|
57
56
|
options = @class.new( @class.full_match('{{box|open|closed}}'), nil ).options
|
58
57
|
expect(options[:inc_name]).to eq('box')
|
59
58
|
expect(options[:view]).to eq('open')
|
60
59
|
expect(options[:items][:view]).to eq('closed')
|
61
|
-
expect(options[:items].key?(:items)).to eq(false)
|
60
|
+
expect(options[:items].key?(:items)).to eq(false)
|
62
61
|
end
|
63
62
|
|
64
63
|
it "should handle multiple pipes with blank lists" do
|
@@ -67,7 +66,7 @@ describe Card::Chunk::Include, "Inclusion" do
|
|
67
66
|
expect(options[:view]).to eq(nil)
|
68
67
|
expect(options[:items][:view]).to eq('closed')
|
69
68
|
end
|
70
|
-
|
69
|
+
|
71
70
|
it "should treat :item as view of next level" do
|
72
71
|
options = @class.new( @class.full_match('{{toy|link;item:name}}'), nil ).options
|
73
72
|
expect(options[:inc_name]).to eq('toy')
|
@@ -91,7 +90,7 @@ describe Card::Chunk::Include, "Inclusion" do
|
|
91
90
|
alpha_beta = Card.create :name=>"#{alpha.name}#{Card::Name.joint}Beta", :content=>"Woot"
|
92
91
|
assert_view_select alpha.format.render_core, 'div[class~=card-content]', "Woot"
|
93
92
|
end
|
94
|
-
|
93
|
+
|
95
94
|
it "should handle complex relative names" do
|
96
95
|
bob_city = Card.create! :name=>'bob+city', :content=> "Sparta"
|
97
96
|
Card::Auth.as_bot { address_tmpl = Card.create! :name=>'address+*right+*structure', :content =>"{{_left+city}}" }
|
@@ -115,11 +114,11 @@ describe Card::Chunk::Include, "Inclusion" do
|
|
115
114
|
it "should handle options when nesting" do
|
116
115
|
Card.create! :type=>'Pointer', :name=>'Livable', :content=>'[[Earth]]'
|
117
116
|
Card.create! :name=>'Earth'
|
118
|
-
|
117
|
+
|
119
118
|
expect(render_content('{{Livable|core;item:link}}')).to eq(render_content('{{Livable|core|link}}'))
|
120
119
|
expect(render_content('{{Livable|core;item:name}}')).to eq(render_content('{{Livable|core|name}}'))
|
121
120
|
end
|
122
|
-
|
121
|
+
|
123
122
|
it "should prevent recursion" do
|
124
123
|
oak = Card.create! :name=>'Oak', :content=>'{{Quentin}}'
|
125
124
|
qnt = Card.create! :name=>'Quentin', :content=>'{{Admin}}'
|
@@ -139,12 +138,12 @@ describe Card::Chunk::Include, "Inclusion" do
|
|
139
138
|
age = newcard('age')
|
140
139
|
template = Card['*template']
|
141
140
|
specialtype = Card.create :type_code=>'Cardtype', :name=>'SpecialType'
|
142
|
-
|
141
|
+
|
143
142
|
specialtype_template = specialtype.fetch(:trait=>:type,:new=>{}).fetch(:trait=>:structure,:new=>{})
|
144
143
|
specialtype_template.content = "{{#{Card::Name.joint}age}}"
|
145
144
|
Card::Auth.as_bot { specialtype_template.save! }
|
146
145
|
assert_equal "{{#{Card::Name.joint}age}}", specialtype_template.format.render_raw
|
147
|
-
|
146
|
+
|
148
147
|
wooga = Card.create! :name=>'Wooga', :type=>'SpecialType'
|
149
148
|
wooga_age = Card.create!( :name=>"#{wooga.name}#{Card::Name.joint}age", :content=> "39" )
|
150
149
|
expect(wooga_age.format.render_core).to eq("39")
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
describe Card::Set::All::Account do
|
4
4
|
describe 'accountable?' do
|
5
|
-
|
5
|
+
|
6
6
|
it 'should be false for cards with *accountable rule off' do
|
7
7
|
expect(Card['A'].accountable?).to eq(false)
|
8
8
|
end
|
@@ -14,16 +14,16 @@ describe Card::Set::All::Account do
|
|
14
14
|
end
|
15
15
|
expect(Card['A'].accountable?).to eq(true)
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
describe "parties" do
|
21
|
-
|
21
|
+
|
22
22
|
it "for Wagn Bot" do
|
23
23
|
Card::Auth.current_id = Card::WagnBotID
|
24
24
|
expect(Card::Auth.current.parties.sort).to eq([Card::WagnBotID, Card::AnyoneSignedInID, Card::AdministratorID])
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
it "for Anonymous" do
|
28
28
|
Card::Auth.current_id = Card::AnonymousID
|
29
29
|
expect(Card::Auth.current.parties.sort).to eq([Card::AnonymousID])
|
@@ -38,33 +38,33 @@ describe Card::Set::All::Account do
|
|
38
38
|
it "should initially have only auth and self " do
|
39
39
|
expect(@parties).to eq([Card::AnyoneSignedInID, @joe_user_card.id])
|
40
40
|
end
|
41
|
-
|
41
|
+
|
42
42
|
it 'should update when new roles are set' do
|
43
43
|
roles_card = @joe_user_card.fetch :trait=>:roles, :new=>{}
|
44
44
|
r1 = Card['r1']
|
45
45
|
|
46
|
-
Card::Auth.as_bot { roles_card.items = [ r1.id ] }
|
47
|
-
expect(Card['Joe User'].parties).to eq(@parties) # local cache still has old parties (permission does not change mid-request)
|
48
|
-
|
46
|
+
Card::Auth.as_bot { roles_card.items = [ r1.id ] }
|
47
|
+
expect(Card['Joe User'].parties).to eq(@parties) # local cache still has old parties (permission does not change mid-request)
|
48
|
+
|
49
49
|
Card::Cache.restore # simulate new request -- clears local cache, where, eg, @parties would still be cached on card
|
50
50
|
Card::Auth.current_id = Card::Auth.current_id # simulate new request -- current_id assignment clears several class variables
|
51
|
-
|
51
|
+
|
52
52
|
new_parties = [ Card::AnyoneSignedInID, r1.id, @joe_user_card.id ]
|
53
53
|
expect(Card['Joe User'].parties).to eq(new_parties) # @parties regenerated, now with correct values
|
54
54
|
expect(Card::Auth.current. parties).to eq(new_parties)
|
55
|
-
|
55
|
+
|
56
56
|
# @joe_user_card.refresh(force=true).parties.should == new_parties # should work, but now superfluous?
|
57
57
|
end
|
58
58
|
end
|
59
|
-
|
59
|
+
|
60
60
|
end
|
61
|
-
|
61
|
+
|
62
62
|
describe 'among?' do
|
63
63
|
it 'should be true for self' do
|
64
64
|
expect(Card::Auth.current.among?([Card::Auth.current_id])).to be_truthy
|
65
65
|
end
|
66
66
|
end
|
67
|
-
|
67
|
+
|
68
68
|
|
69
69
|
describe "'+*email'" do
|
70
70
|
it 'should create a card and account card' do
|
@@ -77,10 +77,10 @@ describe Card::Set::All::Account do
|
|
77
77
|
|
78
78
|
c = Card['Joe New']
|
79
79
|
u = Card::Auth[ 'joe@new.com' ]
|
80
|
-
|
80
|
+
|
81
81
|
expect(c).to eq(u)
|
82
82
|
expect(c.type_id).to eq(Card::UserID)
|
83
|
-
=begin
|
83
|
+
=begin
|
84
84
|
email = ActionMailer::Base.deliveries.last
|
85
85
|
email.to.should == ['joe@new.com']
|
86
86
|
email.subject.should == 'Hey Joe!'
|
@@ -88,7 +88,7 @@ describe Card::Set::All::Account do
|
|
88
88
|
=end
|
89
89
|
end
|
90
90
|
end
|
91
|
-
|
91
|
+
|
92
92
|
context 'updates' do
|
93
93
|
before do
|
94
94
|
@card = Card['Joe User']
|
@@ -97,15 +97,15 @@ describe Card::Set::All::Account do
|
|
97
97
|
@card.update_attributes! '+*account'=>{ '+*email'=>'joe@user.co.uk' }
|
98
98
|
expect(@card.account.email).to eq('joe@user.co.uk')
|
99
99
|
end
|
100
|
-
|
100
|
+
|
101
101
|
it "should let Wagn Bot block accounts" do
|
102
102
|
Card::Auth.as_bot do
|
103
103
|
@card.account.status_card.update_attributes! :content => 'blocked'
|
104
104
|
expect(@card.account.blocked?).to be_truthy
|
105
105
|
end
|
106
106
|
end
|
107
|
-
|
108
|
-
|
107
|
+
|
108
|
+
|
109
109
|
it "should not allow a user to block or unblock himself" do
|
110
110
|
expect do
|
111
111
|
@card.account.status_card.update_attributes! :content => 'blocked'
|
@@ -113,7 +113,7 @@ describe Card::Set::All::Account do
|
|
113
113
|
expect(@card.account.blocked?).to be_falsey
|
114
114
|
end
|
115
115
|
end
|
116
|
-
|
116
|
+
|
117
117
|
describe "#read_rules" do
|
118
118
|
before(:all) do
|
119
119
|
@read_rules = Card['joe_user'].read_rules
|