Skip to content

Commit

Permalink
Fixed bug with [select] and hash property type.
Browse files Browse the repository at this point in the history
  • Loading branch information
gaspard committed Sep 3, 2012
1 parent d1d8311 commit 1d31b72
Show file tree
Hide file tree
Showing 8 changed files with 59 additions and 56 deletions.
2 changes: 1 addition & 1 deletion app/views/zafu/default/Node-admin.zafu
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@
<div id='form' do='form'>
<r:if test='can_edit?' do='default' label='t'>
<r:input type='submit'/>
<input type='hidden' name='redir' value='#{path(this, :mode =&gt; "admin")}'/>
<input type='hidden' name='redir' value='#{path(this, :mode => "admin")}'/>
<div do='vclass' do='roles'>
<fieldset do='each'>
<legend do='name'/>
Expand Down
3 changes: 2 additions & 1 deletion bricks/acls/zena/test/unit/acl_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,8 @@ def mock_request(method = :get, params = {}, port = 0)
end
assert subject.update_attributes(:query => "'nodes where 1 = \#{asset_host? ? 1 : 0} in site'")
assert_nil subject.authorize?(base_node, {:id => nodes_zip(:over_zeus)}, mock_request)
assert_equal 'A plan to overrule Zeus', subject.authorize?(base_node, {:id => nodes_zip(:over_zeus)}, mock_request(:get, {}, 80)).title
visitor.asset_host = true
assert_equal 'A plan to overrule Zeus', subject.authorize?(base_node, {:id => nodes_zip(:over_zeus)}, mock_request).title
end
end # saving an acl with asset_host in query

Expand Down
2 changes: 1 addition & 1 deletion lib/zafu/ordered_hash.rb
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ def keys
end

def each
get_keys.each do |k|
keys.each do |k|
yield(k, self[k])
end
end
Expand Down
30 changes: 20 additions & 10 deletions lib/zena/use/forms.rb
Original file line number Diff line number Diff line change
Expand Up @@ -436,9 +436,15 @@ def r_select
attribute = param
else
return parser_error("missing name") unless attribute

if value = @params[:selected]
selected = ::RubyLess.translate_string(self, value)
# {:value=>"<%= fquote((@node.prop['settings'] ? @node.prop['settings'][\"foo\"] : nil)) %>", :name=>"node[settings][foo]"}
# "settings_foo"


if selected = @params[:value] || @params[:selected]
selected = ::RubyLess.translate(self, selected)
unless selected.klass <= String
selected = "#{selected}.to_s"
end
elsif @context[:in_filter]
selected = "param_value(#{attribute.inspect}).to_s"
elsif %w{parent_id}.include?(attribute)
Expand All @@ -448,18 +454,21 @@ def r_select
elsif attribute =~ /^(.*)_id$/
# relation
selected = "#{node}.rel[#{$1.inspect}].other_zip.to_s"
elsif type = node.klass.safe_method_type([attribute])
selected = "#{node}.#{type[:method]}.to_s"
elsif selected = html_attributes[:value]
if selected =~ /\A<%= .*?\((.+)\)\s*%>/
# remove <%= %>
selected = "#{$1}.to_s"
else
selected = selected.inspect
end
else
# ???
selected = "#{node}.prop[#{attribute.inspect}].to_s"
# FIXME: This would not work for a [asdf][asdf] hash property type...
selected = ::RubyLess.translate(self, "this.#{attribute}")
end
end

if @context[:in_filter] || @params[:param]
html_attributes[:name] = attribute
else
html_attributes[:name] = "#{node.form_name}[#{attribute}]"
end
html_attributes.delete(:value)
select_tag = Zafu::Markup.new('select', html_attributes)
Expand All @@ -480,7 +489,7 @@ def r_select
end
end
end
select_tag.wrap "<%= options_for_select(#{options_list.inspect}, (#{node}.new_record? ? #{selected} : #{node}.klass)) %>"
select_tag.wrap "<%= options_for_select(#{options_list.inspect}, #{selected}) %>"
elsif @params[:type] == 'time_zone'
# <r:select name='d_tz' type='time_zone'/>
select_tag.wrap "<%= options_for_select(TZInfo::Timezone.all_identifiers, #{selected}) %>"
Expand Down Expand Up @@ -802,6 +811,7 @@ def get_options_for_select
show_values = translate_list(show)
else
tprefix = @params[:tprefix] || @params[:name] || @params[:param]
tprefix = tprefix.gsub('[','_').gsub(']','')
if tprefix == 'false'
tprefix = ''
else
Expand Down
37 changes: 4 additions & 33 deletions test/integration/navigation_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ def test_should_not_redirect_to_css

subject do
[
"http://localhost:1234/oo/project19.html",
"http://test.host:1234/oo/project19.html",
{},
@headers
]
Expand All @@ -71,7 +71,7 @@ def test_should_not_redirect_to_css
context 'but invalid host' do
subject do
[
"http://test.host:1234/oo/project19.html",
"http://ocean.host:1234/oo/project19.html",
{},
@headers
]
Expand All @@ -82,8 +82,8 @@ def test_should_not_redirect_to_css
reset!
get *subject
assert_response :redirect
assert_redirected_to 'http://test.host/login'
assert_equal users_id(:anon), visitor.id
assert_redirected_to 'http://ocean.host/login'
assert_equal users_id(:incognito), visitor.id
end
end # but invalid host
end # with a valid http auth
Expand All @@ -103,35 +103,6 @@ def test_should_not_redirect_to_css
end
end # Rescue template rendering


# HTTP_AUTH disabled
# def test_authorize_http_auth
# Site.connection.execute "UPDATE sites SET http_auth = 1 WHERE id = #{sites_id(:zena)}"
# get 'http://test.host/'
# assert_redirected_to 'http://test.host/en'
# follow_redirect!
# assert_response :success
#
# # 1. site forces authentication
# Site.connection.execute "UPDATE sites SET authentication = 1 WHERE id = #{sites_id(:zena)}"
# get 'http://test.host/'
# assert_response 401 # http_auth
#
# reset!
# post 'http://test.host/session', :login => 'tiger', :password => 'tiger'
# assert_redirected_to "http://test.host/users/#{users_id(:tiger)}"
#
# # 2. navigating out of '/oo' but logged in and format is not data
# get 'http://test.host/fr'
# assert_redirected_to 'http://test.host/oo'
# follow_redirect!
# assert_response :success
# assert_equal 'fr', session[:lang]
# get 'http://test.host/en/textdocument53.css' # data
# assert_response :success
# assert_equal 'fr', session[:lang]
# end

def test_out_of_oo_custom_base_set_lang
post 'http://test.host/session', :login => 'tiger', :password => 'tiger'
assert_redirected_to "http://test.host/oo"
Expand Down
4 changes: 2 additions & 2 deletions test/integration/zafu_compiler/ajax.yml
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,8 @@ each_add_with_form_klass_set:
res: "!/hidden.*node\[klass\].*Node.*select.*node\[klass\]/"

each_add_with_select:
src: "<r:children><r:each do='title'/><r:add/><r:form><r:select name='icon_id' nodes='images in project' selected='[main.icon_id]_abc'/></r:form></r:children>"
'ajax/each/add/with/select/en/list1_form.erb': '/map.|r| \[r.name, r.zip.to_s\]., \"#.@node.icon_zip._abc\"\)/'
src: "<r:children><r:each do='title'/><r:add/><r:form><r:select name='icon_id' nodes='images in project' selected='main.icon_id'/></r:form></r:children>"
'ajax/each/add/with/select/en/list1_form.erb': '/map.|r| \[r.name, r.zip.to_s\]., \"#.@node.icon_zip\"\)/'
tem: "/nodes.kpath LIKE 'NDI%'/"

each_edit_with_form:
Expand Down
7 changes: 7 additions & 0 deletions test/integration/zafu_compiler/display.yml
Original file line number Diff line number Diff line change
Expand Up @@ -418,6 +418,13 @@ show_param:
tem: "<%= h params[:t] %>"
res: "hello"

display_hash_type:
context:
node: test
src: "<r:void do='settings[\"one\"]'/>"
tem: "<%= (@node.prop['settings'] ? @node.prop['settings'][\"one\"] : nil) %>"
res: "un"

default_host:
context:
node: 'bird_jpg'
Expand Down
30 changes: 22 additions & 8 deletions test/integration/zafu_compiler/forms.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ translate_id_to_zip:
select_class_existing_node:
context:
node: 'letter'
src: "<r:form><r:select name='klass' root_class='Note' selected='Post'/></r:form>"
src: "<r:form><r:select name='klass' root_class='Note'/></r:form>"
res: "/<select name=.node\[klass\]. id=.list1_klass.><option value=\"Note\">klass_Note<\/option>\n<option value=\"Letter\" selected=\"selected\">  klass_Letter<\/option>\n<option value=\"Post\">  klass_Post<\/option><\/select>/"

select_class_new_node:
Expand All @@ -66,12 +66,12 @@ select_data:
res: "/<select name=.k. data-d='foo'.*NN.*k_Note.*NNL.*k_Letter.*NNP.*k_Post/"

select_nodes:
src: "<r:form><r:select nodes='images in site' name='foo'></select></r:form>"
res: "/name='node\[foo\]'[^>]+><option value=\"\" selected=\"selected\"></option>\n<option value=\"40\">Autumn Tree</option>\n<option value=\"30\">bird</option>/"
src: "<r:form><r:select nodes='images in site' name='origin'></select></r:form>"
res: "/name='node\[origin\]'[^>]+><option value=\"\" selected=\"selected\"></option>\n<option value=\"40\">Autumn Tree</option>\n<option value=\"30\">bird</option>/"

select_nodes_show_rubyless:
src: "<r:form><r:select nodes='images in site' name='foo' show='title.limit(3)'></select></r:form>"
res: "/name='node\[foo\]'[^>]+><option value=\"\" selected=\"selected\"></option>\n<option value=\"40\">Aut…</option>\n<option value=\"30\">bir…</option>/"
src: "<r:form><r:select nodes='images in site' name='origin' show='title.limit(3)'></select></r:form>"
res: "/name='node\[origin\]'[^>]+><option value=\"\" selected=\"selected\"></option>\n<option value=\"40\">Aut…</option>\n<option value=\"30\">bir…</option>/"

do_not_set_parent_id_if_form_contains_parent_id:
src: "<r:children><r:each do='title'/><r:add/><r:form><r:select name='parent_id' nodes='projects in site'/><input name='title'/></r:form></r:children>"
Expand All @@ -82,15 +82,15 @@ select_nodes_selected:
res: "/option\s* value=.21.\s* selected=.selected.>Clean Water/"

select_nodes_in_ajax:
src: "<r:pages><r:each do='title'/><r:add/><r:form><r:select nodes='images in site' name='d_ref'/></r:form></r:pages>"
res: "/name=.node\[d_ref\].[^>]+><option value=\"\" selected=\"selected\"></option>\n<option value=\"40\">Autumn Tree</option>\n<option value=\"30\">bird</option>/"
src: "<r:pages><r:each do='title'/><r:add/><r:form><r:select nodes='images in site' name='origin'/></r:form></r:pages>"
res: "/name=.node\[origin\].[^>]+><option value=\"\" selected=\"selected\"></option>\n<option value=\"40\">Autumn Tree</option>\n<option value=\"30\">bird</option>/"

select_nodes_show_attr:
src: "<r:form><r:select name='title' nodes='images in site' attr='ext' show='title'/></r:form>"
res: "/name=.node\[title\].[^>]+>.*<option value=\"jpg\">flower</option>\n<option value=\"jpg\">it's a lake</option>/"

select_time_zone:
src: "<r:form><r:select type='time_zone' name='d_tz'/></r:form>"
src: "<r:form><r:select type='time_zone' name='settings[tz]'/></r:form>"
res: "/Asia/Jakarta.*Europe/Zurich.*US/Hawai"

select_values_tshow:
Expand Down Expand Up @@ -301,6 +301,20 @@ select_eval_value:
tem: "<select name='q'><%= options_for_select((params[:f] || '').split(',').map(&:strip).map {|e| [trans(e), e]}, param_value(\"q\").to_s) %></select>"
res: "<select name='q'><option value=\"a\">a</option>\n<option value=\"b\">b</option>\n<option value=\"c\">c</option>\n<option value=\"en\" selected=\"selected\">english</option></select>"

select_for_hash:
context:
node: test
src: "<r:select label='t' name='settings[one]' values='foo,un'/>"
tem: "<label>settings_one</label> <span><select name='node[settings][one]'><%= options_for_select([[\"settings_one_foo\", \"foo\"], [\"settings_one_un\", \"un\"]], (@node.prop['settings'] ? @node.prop['settings'][\"one\"] : nil).to_s) %></select></span>"
res: "/<label>settings_one</label> .*option value=\"un\" selected=\"selected\"/"

select_for_hash_tprefix:
context:
node: test
src: "<r:select tprefix='rel' name='settings[one]' values='foo,un'/>"
tem: "<select name='node[settings][one]'><%= options_for_select([[\"rel_foo\", \"foo\"], [\"rel_un\", \"un\"]], (@node.prop['settings'] ? @node.prop['settings'][\"one\"] : nil).to_s) %></select>"
res: "<select name='node[settings][one]'><option value=\"foo\">rel_foo</option>\n<option value=\"un\" selected=\"selected\">rel_un</option></select>"

crop:
context:
node: 'bird_jpg'
Expand Down

0 comments on commit 1d31b72

Please sign in to comment.