card 1.15.7 → 1.16.0
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/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
|