From bd218eded417ef14d23464c4355d48e9911eee23 Mon Sep 17 00:00:00 2001 From: Christoph Thiel Date: Mon, 5 Sep 2011 10:50:41 +0200 Subject: [PATCH 1/4] Closes #674 don't check all check_boxes if Array is passed to :collection --- lib/formtastic/inputs/check_boxes_input.rb | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/lib/formtastic/inputs/check_boxes_input.rb b/lib/formtastic/inputs/check_boxes_input.rb index 4c664fcda..5b61bbc94 100644 --- a/lib/formtastic/inputs/check_boxes_input.rb +++ b/lib/formtastic/inputs/check_boxes_input.rb @@ -153,14 +153,10 @@ def disabled?(value) def selected_values if object.respond_to?(method) - if options[:collection].is_a?(Array) and + selected_items = [object.send(method)].compact.flatten + elsif options[:collection].is_a?(Array) and options[:collection].flatten.all? {|i| i.is_a?(String) or i.is_a?(Integer)} - selected_items = options[:collection] - else - selected_items = [object.send(method)].compact.flatten - end - [*selected_items.map { |o| send_or_call_or_object(value_method, o) }].compact else [] From 61113d670c720bd11bf558c91ecc503d2a4ccaa5 Mon Sep 17 00:00:00 2001 From: Christoph Thiel Date: Mon, 5 Sep 2011 13:44:21 +0200 Subject: [PATCH 2/4] Revert "Closes #674 don't check all check_boxes if Array is passed to :collection" This reverts commit bd218eded417ef14d23464c4355d48e9911eee23. --- lib/formtastic/inputs/check_boxes_input.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/formtastic/inputs/check_boxes_input.rb b/lib/formtastic/inputs/check_boxes_input.rb index 5b61bbc94..4c664fcda 100644 --- a/lib/formtastic/inputs/check_boxes_input.rb +++ b/lib/formtastic/inputs/check_boxes_input.rb @@ -153,10 +153,14 @@ def disabled?(value) def selected_values if object.respond_to?(method) - selected_items = [object.send(method)].compact.flatten - elsif options[:collection].is_a?(Array) and + if options[:collection].is_a?(Array) and options[:collection].flatten.all? {|i| i.is_a?(String) or i.is_a?(Integer)} + selected_items = options[:collection] + else + selected_items = [object.send(method)].compact.flatten + end + [*selected_items.map { |o| send_or_call_or_object(value_method, o) }].compact else [] From 292a0c2e8439fba27b77184b002de15ce2e4d8a9 Mon Sep 17 00:00:00 2001 From: Christoph Thiel Date: Mon, 5 Sep 2011 13:45:35 +0200 Subject: [PATCH 3/4] add failing spec for issue #674 --- spec/inputs/check_boxes_input_spec.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/spec/inputs/check_boxes_input_spec.rb b/spec/inputs/check_boxes_input_spec.rb index af1195793..5f423780a 100644 --- a/spec/inputs/check_boxes_input_spec.rb +++ b/spec/inputs/check_boxes_input_spec.rb @@ -410,6 +410,10 @@ output_buffer.should have_tag("form li fieldset ol li label[@for='author_post_ids_#{post.last}']") end end + + it "should not check any items" do + output_buffer.should have_tag('form li input[@checked]', :count => 0) + end end end From 7691f5b5bb2b72a43655fbab569c971249bd5004 Mon Sep 17 00:00:00 2001 From: Christoph Thiel Date: Mon, 5 Sep 2011 13:51:01 +0200 Subject: [PATCH 4/4] Closes #674 don't check all check_boxes if Array is passed to :collection --- lib/formtastic/inputs/base/collections.rb | 2 +- lib/formtastic/inputs/check_boxes_input.rb | 8 +------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/lib/formtastic/inputs/base/collections.rb b/lib/formtastic/inputs/base/collections.rb index 83bcc2679..7317324c7 100644 --- a/lib/formtastic/inputs/base/collections.rb +++ b/lib/formtastic/inputs/base/collections.rb @@ -82,7 +82,7 @@ def collection_for_boolean def send_or_call(duck, object) if duck.respond_to?(:call) duck.call(object) - else + elsif object.respond_to? duck.to_sym object.send(duck) end end diff --git a/lib/formtastic/inputs/check_boxes_input.rb b/lib/formtastic/inputs/check_boxes_input.rb index 4c664fcda..8393d7150 100644 --- a/lib/formtastic/inputs/check_boxes_input.rb +++ b/lib/formtastic/inputs/check_boxes_input.rb @@ -153,13 +153,7 @@ def disabled?(value) def selected_values if object.respond_to?(method) - if options[:collection].is_a?(Array) and - options[:collection].flatten.all? {|i| i.is_a?(String) or i.is_a?(Integer)} - - selected_items = options[:collection] - else - selected_items = [object.send(method)].compact.flatten - end + selected_items = [object.send(method)].compact.flatten [*selected_items.map { |o| send_or_call_or_object(value_method, o) }].compact else