zena 1.2.1 → 1.2.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.
- data/History.txt +38 -1
- data/app/controllers/documents_controller.rb +7 -5
- data/app/controllers/nodes_controller.rb +47 -6
- data/app/controllers/user_sessions_controller.rb +12 -3
- data/app/controllers/virtual_classes_controller.rb +8 -2
- data/app/models/acl.rb +5 -2
- data/app/models/cached_page.rb +5 -5
- data/app/models/column.rb +27 -4
- data/app/models/group.rb +1 -1
- data/app/models/node.rb +106 -24
- data/app/models/note.rb +2 -1
- data/app/models/relation.rb +9 -4
- data/app/models/relation_proxy.rb +2 -2
- data/app/models/role.rb +12 -5
- data/app/models/site.rb +10 -9
- data/app/models/skin.rb +8 -0
- data/app/models/string_hash.rb +65 -0
- data/app/models/text_document.rb +1 -1
- data/app/models/user.rb +2 -0
- data/app/models/virtual_class.rb +43 -10
- data/app/views/comments/create.rjs +1 -32
- data/app/views/comments/edit.rjs +1 -1
- data/app/views/comments/update.rjs +1 -1
- data/app/views/documents/show.rhtml +1 -1
- data/app/views/groups/_form.rhtml +7 -0
- data/app/views/groups/_li.rhtml +1 -1
- data/app/views/nodes/500.html +2 -1
- data/app/views/nodes/destroy.rjs +2 -0
- data/app/views/sites/jobs.erb +2 -3
- data/app/views/templates/document_create_tabs/_file.rhtml +1 -1
- data/app/views/templates/document_create_tabs/_import.rhtml +4 -1
- data/app/views/templates/document_create_tabs/_template.rhtml +3 -0
- data/app/views/templates/document_create_tabs/_text_document.rhtml +3 -0
- data/app/views/versions/custom_tab.rhtml +1 -1
- data/app/views/versions/edit.rhtml +1 -1
- data/bricks/acls/lib/bricks/acls.rb +3 -3
- data/bricks/acls/zena/test/unit/acl_test.rb +15 -0
- data/bricks/fs_skin/lib/bricks/fs_skin.rb +190 -0
- data/bricks/fs_skin/zena/init.rb +1 -0
- data/bricks/fs_skin/zena/migrate/20110702010330_add_fs_skin_to_idx_templates.rb +12 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/Image-edit.zafu +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/Image.zafu +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/Node-+index.zafu +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/Node-+notFound.zafu +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/Node-+search.zafu +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/Node.zafu +1 -1
- data/bricks/{static → fs_skin}/zena/skins/blog/Post.zafu +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/Project--kml.zafu +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/Project.zafu +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/comments.zafu +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/dict.yml +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/img/dateBg.jpg +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/img/header.png +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/img/mapPin.png +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/img/menu.gif +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/img/menuover.gif +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/img/style.css +0 -0
- data/bricks/fs_skin/zena/tasks.rb +26 -0
- data/bricks/{static/zena/test/integration/static_integration_test.rb → fs_skin/zena/test/integration/fs_skin_integration_test.rb} +6 -6
- data/bricks/fs_skin/zena/test/unit/fs_skin_test.rb +33 -0
- data/bricks/grid/lib/bricks/grid.rb +4 -3
- data/bricks/tags/lib/bricks/tags.rb +1 -7
- data/bricks/zena/zena/migrate/20120605091558_add_ssl_login_to_site.rb +7 -0
- data/bricks/zena/zena/migrate/20120630123551_add_auto_publish_to_group.rb +9 -0
- data/config/bricks.yml +3 -3
- data/config/gems.yml +2 -3
- data/lib/tasks/zena.rake +7 -3
- data/lib/zafu.rb +7 -0
- data/lib/zafu/all.rb +21 -0
- data/lib/zafu/compiler.rb +7 -0
- data/lib/zafu/controller_methods.rb +58 -0
- data/lib/zafu/handler.rb +57 -0
- data/lib/zafu/info.rb +4 -0
- data/lib/zafu/markup.rb +309 -0
- data/lib/zafu/mock_helper.rb +42 -0
- data/lib/zafu/node_context.rb +203 -0
- data/lib/zafu/ordered_hash.rb +53 -0
- data/lib/zafu/parser.rb +676 -0
- data/lib/zafu/parsing_rules.rb +382 -0
- data/lib/zafu/process/ajax.rb +530 -0
- data/lib/zafu/process/conditional.rb +92 -0
- data/lib/zafu/process/context.rb +186 -0
- data/lib/zafu/process/forms.rb +143 -0
- data/lib/zafu/process/html.rb +186 -0
- data/lib/zafu/process/ruby_less_processing.rb +321 -0
- data/lib/zafu/security.rb +15 -0
- data/lib/zafu/template.rb +25 -0
- data/lib/zafu/test_helper.rb +19 -0
- data/lib/zafu/view_methods.rb +6 -0
- data/lib/zena.rb +1 -1
- data/lib/zena/acts/enrollable.rb +1 -1
- data/lib/zena/app.rb +4 -17
- data/lib/zena/console.rb +18 -1
- data/lib/zena/core_ext/file_utils.rb +13 -1
- data/lib/zena/core_ext/fixnum.rb +4 -0
- data/lib/zena/core_ext/float.rb +7 -0
- data/lib/zena/deploy.rb +4 -2
- data/lib/zena/deploy/app_init.rhtml +2 -1
- data/lib/zena/deploy/database.rhtml +1 -1
- data/lib/zena/info.rb +1 -1
- data/lib/zena/parser/zazen_rules.rb +4 -4
- data/lib/zena/routes.rb +1 -1
- data/lib/zena/test_controller.rb +1 -1
- data/lib/zena/use.rb +14 -1
- data/lib/zena/use/action.rb +4 -2
- data/lib/zena/use/ajax.rb +86 -38
- data/lib/zena/use/authlogic.rb +16 -1
- data/lib/zena/use/calendar.rb +37 -17
- data/lib/zena/use/conditional.rb +2 -2
- data/lib/zena/use/context.rb +30 -9
- data/lib/zena/use/dates.rb +39 -3
- data/lib/zena/use/display.rb +6 -19
- data/lib/zena/use/forms.rb +100 -79
- data/lib/zena/use/i18n.rb +40 -16
- data/lib/zena/use/query_builder.rb +0 -6
- data/lib/zena/use/query_node.rb +17 -4
- data/lib/zena/use/relations.rb +1 -3
- data/lib/zena/use/rendering.rb +10 -8
- data/lib/zena/use/scope_index.rb +5 -1
- data/lib/zena/use/search.rb +2 -1
- data/lib/zena/use/urls.rb +82 -77
- data/lib/zena/use/workflow.rb +12 -4
- data/lib/zena/use/zafu_safe_definitions.rb +37 -9
- data/lib/zena/use/zafu_templates.rb +49 -20
- data/lib/zena/use/zazen.rb +6 -2
- data/locale/it/LC_MESSAGES/zena.mo +0 -0
- data/locale/it/zena.mo +0 -0
- data/locale/it/zena.po +1982 -0
- data/public/images/arrow_back.png +0 -0
- data/public/images/remove_tag.png +0 -0
- data/public/javascripts/grid.js +800 -199
- data/public/javascripts/window.js +1 -1
- data/public/javascripts/zena.js +130 -21
- data/public/stylesheets/grid.css +11 -2
- data/public/stylesheets/zena.css +2 -1
- data/test/custom_queries/complex.host.yml +5 -0
- data/test/fixtures/files/TestNode.zafu +36 -0
- data/test/functional/nodes_controller_test.rb +18 -1
- data/test/integration/zafu_compiler/action.yml +2 -2
- data/test/integration/zafu_compiler/ajax.yml +44 -26
- data/test/integration/zafu_compiler/asset.yml +12 -2
- data/test/integration/zafu_compiler/basic.yml +0 -16
- data/test/integration/zafu_compiler/calendar.yml +6 -6
- data/test/integration/zafu_compiler/complex_ok.yml +23 -1
- data/test/integration/zafu_compiler/conditional.yml +5 -5
- data/test/integration/zafu_compiler/context.yml +6 -5
- data/test/integration/zafu_compiler/dates.yml +23 -2
- data/test/integration/zafu_compiler/display.yml +46 -2
- data/test/integration/zafu_compiler/errors.yml +2 -2
- data/test/integration/zafu_compiler/eval.yml +35 -7
- data/test/integration/zafu_compiler/forms.yml +47 -13
- data/test/integration/zafu_compiler/i18n.yml +2 -2
- data/test/integration/zafu_compiler/meta.yml +35 -1
- data/test/integration/zafu_compiler/query.yml +23 -4
- data/test/integration/zafu_compiler/relations.yml +10 -6
- data/test/integration/zafu_compiler/roles.yml +4 -4
- data/test/integration/zafu_compiler/rubyless.yml +11 -1
- data/test/integration/zafu_compiler/safe_definitions.yml +23 -5
- data/test/integration/zafu_compiler/security.yml +10 -6
- data/test/integration/zafu_compiler/urls.yml +23 -6
- data/test/integration/zafu_compiler/zafu_attributes.yml +1 -1
- data/test/integration/zafu_compiler/zazen.yml +14 -0
- data/test/selenium/Add/add3.rsel +8 -8
- data/test/selenium/Destroy/0setup.rsel +12 -0
- data/test/selenium/Destroy/destroy1.rsel +16 -0
- data/test/selenium/Edit/edit2.rsel +9 -9
- data/test/selenium/Edit/edit5.rsel +9 -9
- data/test/selenium/Edit/edit6.rsel +9 -9
- data/test/selenium/Form/form4.rsel +17 -0
- data/test/selenium/Toggle/toggle1.rsel +2 -0
- data/test/selenium/Toggle/toggle2.rsel +18 -0
- data/test/sites/zena/columns.yml +3 -0
- data/test/sites/zena/versions.yml +7 -0
- data/test/unit/cached_page_test.rb +13 -13
- data/test/unit/column_test.rb +26 -0
- data/test/unit/node_test.rb +16 -1
- data/test/unit/project_test.rb +6 -1
- data/test/unit/relation_test.rb +1 -1
- data/test/unit/role_test.rb +1 -1
- data/test/unit/string_hash_test.rb +30 -0
- data/test/unit/virtual_class_test.rb +31 -17
- data/test/unit/zafu_markup_test.rb +414 -0
- data/test/unit/zafu_node_context_test.rb +375 -0
- data/test/unit/zafu_ordered_hash_test.rb +69 -0
- data/test/unit/zena/acts/enrollable_test.rb +1 -1
- data/test/unit/zena/parser/zafu_asset.yml +0 -10
- data/test/unit/zena/parser/zazen.yml +1 -1
- data/test/unit/zena/parser_test.rb +1 -72
- data/test/unit/zena/use/dates_test.rb +1 -1
- data/test/unit/zena/use/rendering_test.rb +24 -7
- data/test/unit/zena/use/scope_index_test.rb +17 -0
- data/test/unit/zena/use/zazen_test.rb +2 -1
- data/zena.gemspec +71 -37
- metadata +104 -83
- data/app/views/nodes/destroy.erb +0 -0
- data/bricks/static/lib/bricks/static.rb +0 -151
- data/bricks/static/zena/init.rb +0 -1
- data/bricks/static/zena/migrate/20110702010330_add_static_to_idx_templates.rb +0 -12
- data/bricks/static/zena/test/unit/static_test.rb +0 -33
- data/lib/zena/parser/zafu_rules.rb +0 -244
- data/lib/zena/parser/zafu_tags.rb +0 -198
- data/lib/zena/parser/zena_rules.rb +0 -23
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class MarkupTest < Test::Unit::TestCase
|
|
4
|
+
include RubyLess
|
|
5
|
+
safe_method :day => {:class => String, :method => %q{Time.now.strftime('%A')}}
|
|
6
|
+
Markup = Zafu::Markup
|
|
7
|
+
|
|
8
|
+
context 'Parsing parameters' do
|
|
9
|
+
should 'retrieve values escaped with single quotes' do
|
|
10
|
+
h = {:class => 'worker', :style => 'tired'}
|
|
11
|
+
assert_equal h, Markup.parse_params("class='worker' style='tired'")
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
should 'retrieve values escaped with double quotes' do
|
|
15
|
+
h = {:class => 'worker', :style => 'tired'}
|
|
16
|
+
assert_equal h, Markup.parse_params('class="worker" style="tired"')
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
should 'retrieve values escaped with mixed quotes' do
|
|
20
|
+
h = {:class => 'worker', :style => 'tired'}
|
|
21
|
+
assert_equal h, Markup.parse_params('class=\'worker\' style="tired"')
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
should 'properly handle escaped single quotes' do
|
|
25
|
+
h = {:class => "that's nice", :style => 'tired'}
|
|
26
|
+
assert_equal h, Markup.parse_params("class='that\\\'s nice' style='tired'")
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
should 'properly handle escaped double quotes' do
|
|
30
|
+
h = {:class => '30"', :style => 'tired'}
|
|
31
|
+
assert_equal h, Markup.parse_params('class="30\\"" style="tired"')
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
context 'Setting parameters' do
|
|
36
|
+
setup do
|
|
37
|
+
@markup = Markup.new('p')
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
should 'parse params if the parameters are provided as a string' do
|
|
41
|
+
@markup.params = "class='shiny' id='slogan'"
|
|
42
|
+
h = {:class => 'shiny', :id => 'slogan'}
|
|
43
|
+
assert_equal h, @markup.params
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
should 'set params if the parameters are provided as a hash' do
|
|
47
|
+
@markup.params = {:class => 'shiny', :style => 'good'}
|
|
48
|
+
h = {:class => 'shiny', :style => 'good'}
|
|
49
|
+
assert_equal h, @markup.params
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
should 'respond to has_param' do
|
|
53
|
+
@markup.params = {:class => 'one', :x => 'y'}
|
|
54
|
+
@markup.dyn_params = {:y => 'z'}
|
|
55
|
+
assert @markup.has_param?(:x)
|
|
56
|
+
assert @markup.has_param?(:y)
|
|
57
|
+
assert !@markup.has_param?(:z)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
context 'Stealing html params' do
|
|
62
|
+
subject do
|
|
63
|
+
Markup.new('p')
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
should 'transfer common html params' do
|
|
67
|
+
base = {:class => 'blue', :name => 'sprout', :id => 'front_cover', :style => 'padding:5px;', :attr => 'title'}
|
|
68
|
+
subject.steal_html_params_from(base)
|
|
69
|
+
new_base = {:name => 'sprout', :attr => 'title'}
|
|
70
|
+
markup_params = {:class => 'blue', :id => 'front_cover', :style => 'padding:5px;'}
|
|
71
|
+
assert_equal new_base, base
|
|
72
|
+
assert_equal markup_params, subject.params
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
context 'on a link' do
|
|
76
|
+
subject do
|
|
77
|
+
Markup.new('link')
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
should 'transfer common html params' do
|
|
81
|
+
base = {:rel => 'rel', :type => 'type', :class => 'blue', :name => 'sprout', :id => 'front_cover', :style => 'padding:5px;', :attr => 'title'}
|
|
82
|
+
subject.steal_html_params_from(base)
|
|
83
|
+
new_base = {:name => 'sprout', :attr => 'title'}
|
|
84
|
+
markup_params = {:type=>"type", :rel=>"rel", :id => 'front_cover', :class => 'blue', :style => 'padding:5px;'}
|
|
85
|
+
assert_equal new_base, base
|
|
86
|
+
assert_equal markup_params, subject.params
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
context 'Defining the dom id' do
|
|
92
|
+
setup do
|
|
93
|
+
@markup = Markup.new('p')
|
|
94
|
+
@markup.params[:id] = 'foobar'
|
|
95
|
+
@markup.dyn_params[:id] = 'foobar'
|
|
96
|
+
@markup.set_id('<%= @node.zip %>')
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
should 'remove any predifined id' do
|
|
100
|
+
assert_nil @markup.params[:id]
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
should 'write id in the dynamic params' do
|
|
104
|
+
assert_equal '<%= @node.zip %>', @markup.dyn_params[:id]
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
context 'Setting a dynamic param' do
|
|
109
|
+
setup do
|
|
110
|
+
@markup = Markup.new('p')
|
|
111
|
+
@markup.params[:foo] = 'one'
|
|
112
|
+
@markup.set_dyn_params(:foo => '<%= @node.two %>')
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
should 'clear a static param with same key' do
|
|
116
|
+
assert_nil @markup.params[:foo]
|
|
117
|
+
assert_equal '<%= @node.two %>', @markup.dyn_params[:foo]
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
context 'Setting a static param' do
|
|
122
|
+
setup do
|
|
123
|
+
@markup = Markup.new('p')
|
|
124
|
+
@markup.dyn_params[:foo] = '<%= @node.two %>'
|
|
125
|
+
@markup.set_params(:foo => 'one')
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
should 'clear a dynamic param with same key' do
|
|
129
|
+
assert_nil @markup.dyn_params[:foo]
|
|
130
|
+
assert_equal 'one', @markup.params[:foo]
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
context 'Appending a static param' do
|
|
136
|
+
context 'on a static param' do
|
|
137
|
+
setup do
|
|
138
|
+
@markup = Markup.new('p')
|
|
139
|
+
@markup.set_params(:class => 'simple')
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
should 'append param in the static params' do
|
|
143
|
+
@markup.append_param(:class, 'mind')
|
|
144
|
+
assert_equal 'simple mind', @markup.params[:class]
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
context 'on a dynamic param' do
|
|
149
|
+
setup do
|
|
150
|
+
@markup = Markup.new('p')
|
|
151
|
+
@markup.set_dyn_params(:class => '<%= @foo %>')
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
should 'append param in the dynamic params' do
|
|
155
|
+
@markup.append_param(:class, 'bar')
|
|
156
|
+
assert_equal '<%= @foo %> bar', @markup.dyn_params[:class]
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
context 'on an empty param' do
|
|
161
|
+
setup do
|
|
162
|
+
@markup = Markup.new('p')
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
should 'set param in the static params' do
|
|
166
|
+
@markup.append_param(:class, 'bar')
|
|
167
|
+
assert_equal 'bar', @markup.params[:class]
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
context 'Prepending a static param' do
|
|
173
|
+
context 'on a static param' do
|
|
174
|
+
setup do
|
|
175
|
+
@markup = Markup.new('p')
|
|
176
|
+
@markup.set_params(:class => 'simple')
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
should 'prepend param in the static params' do
|
|
180
|
+
@markup.prepend_param(:class, 'super')
|
|
181
|
+
assert_equal 'super simple', @markup.params[:class]
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
context 'on a dynamic param' do
|
|
186
|
+
setup do
|
|
187
|
+
@markup = Markup.new('p')
|
|
188
|
+
@markup.set_dyn_params(:class => '<%= @fu %>')
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
should 'prepend param in the dynamic params' do
|
|
192
|
+
@markup.prepend_param(:class, 'to')
|
|
193
|
+
assert_equal 'to <%= @fu %>', @markup.dyn_params[:class]
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
context 'on an empty param' do
|
|
198
|
+
setup do
|
|
199
|
+
@markup = Markup.new('p')
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
should 'set param in the static params' do
|
|
203
|
+
@markup.prepend_param(:class, 'bar')
|
|
204
|
+
assert_equal 'bar', @markup.params[:class]
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
context 'Appending a dynamic param' do
|
|
210
|
+
context 'on a static param' do
|
|
211
|
+
setup do
|
|
212
|
+
@markup = Markup.new('p')
|
|
213
|
+
@markup.set_params(:class => 'simple')
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
should 'copy the static param in the dynamic params' do
|
|
217
|
+
@markup.append_dyn_param(:class, '<%= @mind %>')
|
|
218
|
+
assert_equal 'simple <%= @mind %>', @markup.dyn_params[:class]
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
context 'on a dynamic param' do
|
|
223
|
+
setup do
|
|
224
|
+
@markup = Markup.new('p')
|
|
225
|
+
@markup.set_dyn_params(:class => '<%= @foo %>')
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
should 'append param in the dynamic params' do
|
|
229
|
+
@markup.append_dyn_param(:class, '<%= @bar %>')
|
|
230
|
+
assert_equal '<%= @foo %> <%= @bar %>', @markup.dyn_params[:class]
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
should 'append param without spacer if conditional' do
|
|
234
|
+
@markup.append_dyn_param(:class, '<%= @bar %>', true)
|
|
235
|
+
assert_equal '<%= @foo %><%= @bar %>', @markup.dyn_params[:class]
|
|
236
|
+
end
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
context 'on an empty param' do
|
|
240
|
+
setup do
|
|
241
|
+
@markup = Markup.new('p')
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
should 'set param in the dynamic params' do
|
|
245
|
+
@markup.append_dyn_param(:class, '<%= @bar %>')
|
|
246
|
+
assert_equal '<%= @bar %>', @markup.dyn_params[:class]
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
context 'Prepending a dynamic param' do
|
|
252
|
+
context 'on a static param' do
|
|
253
|
+
setup do
|
|
254
|
+
@markup = Markup.new('p')
|
|
255
|
+
@markup.set_params(:class => 'fu')
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
should 'copy the static param in the dynamic params' do
|
|
259
|
+
@markup.prepend_dyn_param(:class, '<%= @to %>')
|
|
260
|
+
assert_equal '<%= @to %> fu', @markup.dyn_params[:class]
|
|
261
|
+
end
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
context 'on a dynamic param' do
|
|
265
|
+
setup do
|
|
266
|
+
@markup = Markup.new('p')
|
|
267
|
+
@markup.set_dyn_params(:class => '<%= @fu %>')
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
should 'prepend param in the dynamic params' do
|
|
271
|
+
@markup.prepend_dyn_param(:class, '<%= @to %>')
|
|
272
|
+
assert_equal '<%= @to %> <%= @fu %>', @markup.dyn_params[:class]
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
should 'prepend param without spacer if conditional' do
|
|
276
|
+
@markup.prepend_dyn_param(:class, '<%= @to %>', true)
|
|
277
|
+
assert_equal '<%= @to %><%= @fu %>', @markup.dyn_params[:class]
|
|
278
|
+
end
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
context 'on an empty param' do
|
|
282
|
+
setup do
|
|
283
|
+
@markup = Markup.new('p')
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
should 'set param in the dynamic params' do
|
|
287
|
+
@markup.prepend_dyn_param(:class, '<%= @bar %>')
|
|
288
|
+
assert_equal '<%= @bar %>', @markup.dyn_params[:class]
|
|
289
|
+
end
|
|
290
|
+
end
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
context 'To string' do
|
|
294
|
+
subject do
|
|
295
|
+
Markup.new('img', :src => '/foo/bar.png')
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
should 'render' do
|
|
299
|
+
assert_equal "<img src='/foo/bar.png'/>", subject.to_s
|
|
300
|
+
end
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
context 'Wrapping some text' do
|
|
304
|
+
setup do
|
|
305
|
+
@text = 'Alice: It would be so nice if something made sense for a change.'
|
|
306
|
+
@markup = Markup.new('p')
|
|
307
|
+
@markup.params[:class] = 'quote'
|
|
308
|
+
@markup.params[:style] = 'padding:3px; border:1px solid red;'
|
|
309
|
+
end
|
|
310
|
+
|
|
311
|
+
should 'add the markup tag around the text' do
|
|
312
|
+
assert_equal "<p class='quote' style='padding:3px; border:1px solid red;'>#{@text}</p>", @markup.wrap(@text)
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
should 'add the appended params inside the tag' do
|
|
316
|
+
@markup.append_attribute("<%= anything %>")
|
|
317
|
+
assert_equal "<p class='quote' style='padding:3px; border:1px solid red;'<%= anything %>>#{@text}</p>", @markup.wrap(@text)
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
should 'not wrap twice if called twice' do
|
|
321
|
+
assert_equal "<p class='quote' style='padding:3px; border:1px solid red;'>#{@text}</p>", @markup.wrap(@markup.wrap(@text))
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
should 'display static params before dynamic and keep them ordered' do
|
|
325
|
+
@markup.set_dyn_params(:foo => '<%= @bar %>')
|
|
326
|
+
@markup.set_params(:baz => 'buzz')
|
|
327
|
+
assert_equal "<p class='quote' style='padding:3px; border:1px solid red;' baz='buzz' foo='<%= @bar %>'>foo</p>", @markup.wrap('foo')
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
should 'insert pre_wrap content' do
|
|
331
|
+
@markup.pre_wrap[:foo] = 'FOO'
|
|
332
|
+
assert_equal %q{<p class='quote' style='padding:3px; border:1px solid red;'>FOOcontent</p>}, @markup.wrap('content')
|
|
333
|
+
end
|
|
334
|
+
end
|
|
335
|
+
|
|
336
|
+
context 'Compiling params' do
|
|
337
|
+
setup do
|
|
338
|
+
@markup = Markup.new('p')
|
|
339
|
+
@markup.params = %q{class='one #{day}' id='foobar' name='#{day}'}
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
context 'with compile_params' do
|
|
343
|
+
setup do
|
|
344
|
+
@markup.compile_params(self)
|
|
345
|
+
end
|
|
346
|
+
|
|
347
|
+
should 'translate dynamic params into ERB by using RubyLess' do
|
|
348
|
+
assert_equal %q{<%= "one #{Time.now.strftime('%A')}" %>}, @markup.dyn_params[:class]
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
should 'translate without string on single dynamic content' do
|
|
352
|
+
assert_equal %q{<%= Time.now.strftime('%A') %>}, @markup.dyn_params[:name]
|
|
353
|
+
end
|
|
354
|
+
end
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
context 'Duplicating a markup' do
|
|
358
|
+
context 'and changing params' do
|
|
359
|
+
setup do
|
|
360
|
+
@markup = Markup.new('p')
|
|
361
|
+
@markup.params[:class] = 'one'
|
|
362
|
+
@duplicate = @markup.dup
|
|
363
|
+
end
|
|
364
|
+
|
|
365
|
+
should 'not propagate params changes to original' do
|
|
366
|
+
@duplicate.params[:class] = 'two'
|
|
367
|
+
assert_equal "<p class='one'>one</p>", @markup.wrap('one')
|
|
368
|
+
end
|
|
369
|
+
|
|
370
|
+
should 'not propagate params changes to duplicate' do
|
|
371
|
+
@markup.params[:class] = 'two'
|
|
372
|
+
assert_equal "<p class='one'>one</p>", @duplicate.wrap('one')
|
|
373
|
+
end
|
|
374
|
+
|
|
375
|
+
should 'not propagate appended params to duplicate' do
|
|
376
|
+
@markup.append_param(:class, 'drop')
|
|
377
|
+
assert_equal "<p class='one'>one</p>", @duplicate.wrap('one')
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
should 'not propagate dyn_params changes to original' do
|
|
381
|
+
@markup.append_dyn_param(:class, 'two')
|
|
382
|
+
assert_equal "<p class='one'>one</p>", @duplicate.wrap('one')
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
should 'not propagate dyn_params changes to duplicate' do
|
|
386
|
+
@duplicate.append_dyn_param(:class, 'two')
|
|
387
|
+
assert_equal "<p class='one'>one</p>", @markup.wrap('one')
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
should 'not propagate pre_wrap changes to duplicate' do
|
|
391
|
+
@markup.pre_wrap[:drop] = 'no bombs'
|
|
392
|
+
@duplicate = @markup.dup
|
|
393
|
+
@duplicate.pre_wrap[:drop] = 'ego'
|
|
394
|
+
assert_equal "<p class='one'>no bombs</p>", @markup.wrap('')
|
|
395
|
+
end
|
|
396
|
+
end
|
|
397
|
+
|
|
398
|
+
context 'and wrapping' do
|
|
399
|
+
setup do
|
|
400
|
+
@markup = Markup.new('p')
|
|
401
|
+
@duplicate = @markup.dup
|
|
402
|
+
end
|
|
403
|
+
|
|
404
|
+
should 'not propagate done to duplicate' do
|
|
405
|
+
@markup.wrap('')
|
|
406
|
+
assert_equal '<p>one</p>', @duplicate.wrap('one')
|
|
407
|
+
end
|
|
408
|
+
end
|
|
409
|
+
end # Duplicating a markup
|
|
410
|
+
end
|
|
411
|
+
|
|
412
|
+
|
|
413
|
+
|
|
414
|
+
|
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
module NCFoo
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
class NCPage < ActiveRecord::Base
|
|
7
|
+
include RubyLess
|
|
8
|
+
safe_context :root => Page
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class SubPage < NCPage
|
|
12
|
+
include NCFoo
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
class SubSubPage < SubPage
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
class NCComment
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
class NodeContextTest < Test::Unit::TestCase
|
|
22
|
+
|
|
23
|
+
NodeContext = Zafu::NodeContext
|
|
24
|
+
|
|
25
|
+
context 'In a blank context' do
|
|
26
|
+
subject do
|
|
27
|
+
NodeContext.new('@node', NCPage)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
should 'return the current name' do
|
|
31
|
+
assert_equal '@node', subject.name
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
should 'return the current class' do
|
|
35
|
+
assert_equal NCPage, subject.klass
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
should 'return true on will_be with the same class' do
|
|
39
|
+
assert subject.will_be?(NCPage)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
should 'return false on will_be with a sub class' do
|
|
43
|
+
assert !subject.will_be?(SubPage)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
should 'return false on will_be with a different class' do
|
|
47
|
+
assert !subject.will_be?(String)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
should 'return self on a get for the same class' do
|
|
51
|
+
assert_equal subject.object_id, subject.get(NCPage).object_id
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
should 'return nil on a get for another class' do
|
|
55
|
+
assert_nil subject.get(NCComment)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
context 'calling as_main' do
|
|
59
|
+
should 'build the name from the class' do
|
|
60
|
+
assert_equal '@nc_page', subject.as_main.name
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
should 'return same class' do
|
|
64
|
+
assert_equal subject.klass, subject.as_main.klass
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
context 'calling form_name' do
|
|
69
|
+
should 'return underscore name of base class' do
|
|
70
|
+
assert_equal 'nc_page', subject.form_name
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
context 'with a sub-class' do
|
|
75
|
+
subject do
|
|
76
|
+
NodeContext.new('@node', SubPage)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
should 'return true on will_be with the same class' do
|
|
80
|
+
assert subject.will_be?(SubPage)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
should 'return true on will_be with a super class' do
|
|
84
|
+
assert subject.will_be?(NCPage)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
should 'return false on will_be with a different class' do
|
|
88
|
+
assert !subject.will_be?(String)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
context 'calling form_name' do
|
|
92
|
+
should 'return underscore name of base class' do
|
|
93
|
+
assert_equal 'nc_page', subject.form_name
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
context 'calling as_main' do
|
|
98
|
+
should 'build the name from the class' do
|
|
99
|
+
assert_equal '@sub_page', subject.as_main.name
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
should 'return same class' do
|
|
103
|
+
assert_equal subject.klass, subject.as_main.klass
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
should 'return current class when using after_class argument' do
|
|
107
|
+
subject = NodeContext.new('@node', SubSubPage)
|
|
108
|
+
assert_equal SubSubPage, subject.as_main(NCPage).klass
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
should 'rebuild name from ancestor when using after_class argument' do
|
|
112
|
+
subject = NodeContext.new('@node', SubSubPage)
|
|
113
|
+
assert_equal '@sub_page', subject.as_main(NCPage).name
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
context 'in a list context' do
|
|
117
|
+
subject do
|
|
118
|
+
NodeContext.new('list', [SubSubPage])
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
should 'return current class when using after_class argument' do
|
|
122
|
+
assert_equal SubSubPage, subject.as_main(NCPage).klass
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
should 'rebuild name from ancestor when using after_class argument' do
|
|
126
|
+
assert_equal '@sub_page', subject.as_main(NCPage).name
|
|
127
|
+
end
|
|
128
|
+
end # in a list context
|
|
129
|
+
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
should 'return subclass on class_name' do
|
|
133
|
+
assert_equal 'SubPage', subject.class_name
|
|
134
|
+
end
|
|
135
|
+
end # with a sub-class
|
|
136
|
+
|
|
137
|
+
context 'with an anonymous sub-class' do
|
|
138
|
+
subject do
|
|
139
|
+
NodeContext.new('@node', Class.new(NCPage))
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
should 'return class on class_name' do
|
|
143
|
+
assert_equal 'NCPage', subject.class_name
|
|
144
|
+
end
|
|
145
|
+
end # with an anonymous sub-class
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
context 'In a sub-context' do
|
|
149
|
+
setup do
|
|
150
|
+
@parent = NodeContext.new('@node', NCPage)
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
subject do
|
|
154
|
+
@parent.move_to('comment1', NCComment)
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
should 'return the current name' do
|
|
158
|
+
assert_equal 'comment1', subject.name
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
should 'return the current class' do
|
|
162
|
+
assert_equal NCComment, subject.klass
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
should 'return self on a get for the same class' do
|
|
166
|
+
assert_equal subject.object_id, subject.get(NCComment).object_id
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
should 'return the parent on a get for the class of the parent' do
|
|
170
|
+
assert_equal @parent.object_id, subject.get(NCPage).object_id
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
context 'In a deeply nested context' do
|
|
175
|
+
setup do
|
|
176
|
+
@grandgrandma = NodeContext.new('@comment', NCComment)
|
|
177
|
+
@grandma = @grandgrandma.move_to('page', NCPage)
|
|
178
|
+
@mother = @grandma.move_to('comment1', NCComment)
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
subject do
|
|
182
|
+
@mother.move_to('var1', String)
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
should 'return the current name' do
|
|
186
|
+
assert_equal 'var1', subject.name
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
should 'return the current class' do
|
|
190
|
+
assert_equal String, subject.klass
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
should 'return the first ancestor matching class on get' do
|
|
194
|
+
assert_equal @mother.object_id, subject.get(NCComment).object_id
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
should 'return nil if no ancestor matches class on get' do
|
|
198
|
+
assert_nil subject.get(Fixnum)
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
should 'return the parent on up' do
|
|
202
|
+
assert_equal @mother, subject.up
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
context 'In a sub-classes context' do
|
|
207
|
+
subject do
|
|
208
|
+
NodeContext.new('super', SubPage)
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
should 'find the required class in ancestors' do
|
|
212
|
+
assert_equal subject.object_id, subject.get(NCPage).object_id
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
context 'In a list context' do
|
|
217
|
+
setup do
|
|
218
|
+
@grandma = NodeContext.new('@nc_page', SubPage)
|
|
219
|
+
@mother = @grandma.move_to('@comment', NCComment)
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
subject do
|
|
223
|
+
@mother.move_to('list', [NCPage])
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
should 'find the context and resolve without using first' do
|
|
227
|
+
assert context = subject.get(NCPage)
|
|
228
|
+
assert_equal '@nc_page', context.name
|
|
229
|
+
assert_equal SubPage, context.klass
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
should 'return parent on up with class' do
|
|
233
|
+
assert_equal @grandma, subject.up(NCPage)
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
should 'return true on will_be with the same class' do
|
|
237
|
+
assert subject.will_be?(NCPage)
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
should 'return class on master_class' do
|
|
241
|
+
assert_equal NCPage, subject.master_class(ActiveRecord::Base)
|
|
242
|
+
end
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
context 'In a deeply nested list context' do
|
|
246
|
+
setup do
|
|
247
|
+
@grandma = NodeContext.new('@nc_page', SubPage)
|
|
248
|
+
@mother = @grandma.move_to('@comment', NCComment)
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
subject do
|
|
252
|
+
@mother.move_to('list', [[[NCPage]]])
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
should 'find the context without using first' do
|
|
256
|
+
assert context = subject.get(NCPage)
|
|
257
|
+
assert_equal '@nc_page', context.name
|
|
258
|
+
assert_equal SubPage, context.klass
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
should 'return parent on up with class' do
|
|
262
|
+
assert_equal @grandma, subject.up(NCPage)
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
should 'return true on will_be with the same class' do
|
|
266
|
+
assert subject.will_be?(NCPage)
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
should 'return class on master_class' do
|
|
270
|
+
assert_equal NCPage, subject.master_class(ActiveRecord::Base)
|
|
271
|
+
end
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
context 'Generating a dom id' do
|
|
275
|
+
context 'in a blank context' do
|
|
276
|
+
subject do
|
|
277
|
+
n = NodeContext.new('@foo', NCPage)
|
|
278
|
+
n.dom_prefix = 'list1'
|
|
279
|
+
n
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
should 'return the node name in DOM id' do
|
|
283
|
+
assert_equal '<%= %Q{list1_#{@foo.zip}} %>', subject.dom_id
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
should 'not use zip on list false' do
|
|
287
|
+
assert_equal 'list1', subject.dom_id(:list => false)
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
should 'scope without erb on erb false' do
|
|
291
|
+
assert_equal 'list1_#{@foo.zip}', subject.dom_id(:erb => false)
|
|
292
|
+
end
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
context 'in a hierarchy of contexts' do
|
|
296
|
+
setup do
|
|
297
|
+
@a = NodeContext.new('@node', NCPage)
|
|
298
|
+
@a.dom_prefix = 'a'
|
|
299
|
+
@b = NodeContext.new('var1', [NCPage], @a)
|
|
300
|
+
@b.dom_prefix = 'b'
|
|
301
|
+
@c = NodeContext.new('var2', NCPage, @b)
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
subject do
|
|
305
|
+
NodeContext.new('var3', NCPage, @c)
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
context 'with parents as dom_scopes' do
|
|
309
|
+
setup do
|
|
310
|
+
@b.propagate_dom_scope!
|
|
311
|
+
@c.propagate_dom_scope!
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
should 'use dom_scopes' do
|
|
315
|
+
assert_equal '<%= %Q{b_#{var1.zip}_#{var2.zip}_#{var3.zip}} %>', subject.dom_id
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
should 'use dom_scopes and dom_prefix not in list' do
|
|
319
|
+
subject.dom_prefix = 'd'
|
|
320
|
+
assert_equal '<%= %Q{b_#{var1.zip}_#{var2.zip}_d} %>', subject.dom_id(:list => false)
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
context 'with a saved dom_id' do
|
|
324
|
+
setup do
|
|
325
|
+
@c.saved_dom_id = '#{ndom_id(@foo)}'
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
should 'use saved id in scope' do
|
|
329
|
+
assert_equal '<%= %Q{#{ndom_id(@foo)}_#{var3.zip}} %>', subject.dom_id
|
|
330
|
+
end
|
|
331
|
+
end
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
context 'with a saved dom_id' do
|
|
335
|
+
setup do
|
|
336
|
+
@c.saved_dom_id = '#{ndom_id(@foo)}'
|
|
337
|
+
end
|
|
338
|
+
|
|
339
|
+
should 'not use saved id in scope' do
|
|
340
|
+
# We did not ask for dom_scope to propagate.
|
|
341
|
+
assert_equal '<%= %Q{b_#{var3.zip}} %>', subject.dom_id
|
|
342
|
+
end
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
context 'with ancestors and self as dom_scopes' do
|
|
346
|
+
setup do
|
|
347
|
+
@a.propagate_dom_scope!
|
|
348
|
+
subject.propagate_dom_scope!
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
should 'not use self twice' do
|
|
352
|
+
assert_equal '<%= %Q{a_#{@node.zip}_#{var3.zip}} %>', subject.dom_id
|
|
353
|
+
end
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
context 'with a parent defining a dom_prefix' do
|
|
357
|
+
setup do
|
|
358
|
+
@b.dom_prefix = 'cart'
|
|
359
|
+
end
|
|
360
|
+
|
|
361
|
+
should 'use dom_prefix' do
|
|
362
|
+
subject.dom_prefix = nil
|
|
363
|
+
assert_equal '<%= %Q{cart_#{var3.zip}} %>', subject.dom_id
|
|
364
|
+
end
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
end
|
|
368
|
+
end
|
|
369
|
+
end
|
|
370
|
+
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
|
|
375
|
+
|