diff --git a/actionpack/lib/action_view/helpers/ajax_helper.rb b/actionpack/lib/action_view/helpers/ajax_helper.rb index 43856acbc8624..688a5262c7e00 100644 --- a/actionpack/lib/action_view/helpers/ajax_helper.rb +++ b/actionpack/lib/action_view/helpers/ajax_helper.rb @@ -48,10 +48,12 @@ def observe_field(name, options = {}) end end - if options[:with] && (options[:with] !~ /[\{=(.]/) - options[:with] = "'#{options[:with]}=' + encodeURIComponent(value)" - else - options[:with] ||= 'value' unless options[:function] + if options[:with] + if options[:with] !~ /[\{=(.]/ + options[:with] = "'#{options[:with]}=' + encodeURIComponent(value)" + else + options[:with] ||= 'value' unless options[:function] + end end if options[:function] diff --git a/actionpack/test/javascript/ajax_test.rb b/actionpack/test/javascript/ajax_test.rb index 97a69ba732ffe..dc1f7c14fd56f 100644 --- a/actionpack/test/javascript/ajax_test.rb +++ b/actionpack/test/javascript/ajax_test.rb @@ -10,6 +10,20 @@ def assert_html(html, matches) end end + def extract_json_from_data_element(data_element) + root = HTML::Document.new(data_element).root + script = root.find(:tag => "script") + cdata = script.children.detect {|child| child.to_s =~ / "/some/other/url"), - %w("url":"/some/other/url") + assert_data_element_json field(:url => "/some/other/url"), + "url" => "/some/other/url", "name" => "title" end test "using a url hash" do - assert_html field(:url => {:controller => :blog, :action => :update}), - %w("url":"/url/hash") + assert_data_element_json field(:url => {:controller => :blog, :action => :update}), + "url" => "/url/hash", "name" => "title" end test "using a :frequency option" do - assert_html field(:frequency => 5.minutes), - %w("frequency":300) + assert_data_element_json field(:url => { :controller => :blog }, :frequency => 5.minutes), + "url" => "/url/hash", "name" => "title", "frequency" => 300 end test "using a :frequency option of 0" do @@ -155,19 +167,19 @@ def field(options = {}) # TODO: Consider using JSON instead of strings. Is using 'value' as a magical reference to the value of the observed field weird? (Rails2 does this) - BR test "using a :with option" do - assert_html field(:with => "foo"), - %w("with":"'foo=' + encodeURIComponent(value)") - assert_html field(:with => "'foo=' + encodeURIComponent(value)"), - %w("with":"'foo=' + encodeURIComponent(value)") + assert_data_element_json field(:with => "foo"), + "name" => "title", "with" => "'foo=' + encodeURIComponent(value)" + assert_data_element_json field(:with => "'foo=' + encodeURIComponent(value)"), + "name" => "title", "with" => "'foo=' + encodeURIComponent(value)" end test "using json in a :with option" do - assert_html field(:with => "{'id':value}"), - %w("with":"{'id':value}") + assert_data_element_json field(:with => "{'id':value}"), + "name" => "title", "with" => "{'id':value}" end test "using :function for callback" do - assert_html field(:function => "alert('Element changed')"), - %w("function":"function(element, value) {alert('Element changed')}") + assert_data_element_json field(:function => "alert('Element changed')"), + "name" => "title", "function" => "function(element, value) {alert('Element changed')}" end end