Refactor FormHelper#search_form_for

- Extract code into smaller, private methods for readability and
maintainability.

- Avoid hidden conditionals and ternaries to keep conditionals as
explicit (and painful) as possible.

- Use Ruby 1.9+ hash syntax.
This commit is contained in:
Jon Atack 2015-07-26 15:02:27 +02:00
parent 17dd97af1c
commit 29a73b93f3
1 changed files with 24 additions and 9 deletions

View File

@ -15,8 +15,7 @@ module Ransack
elsif record.is_a?(Array) &&
(search = record.detect { |o| o.is_a?(Ransack::Search) })
options[:url] ||= polymorphic_path(
record.map { |o| o.is_a?(Ransack::Search) ? o.klass : o },
format: options.delete(:format)
options_for(record), format: options.delete(:format)
)
else
raise ArgumentError,
@ -24,13 +23,9 @@ module Ransack
end
options[:html] ||= {}
html_options = {
:class => options[:class].present? ?
"#{options[:class]}" :
"#{search.klass.to_s.underscore}_search",
:id => options[:id].present? ?
"#{options[:id]}" :
"#{search.klass.to_s.underscore}_search",
:method => :get
class: html_option_for(options[:class], search),
id: html_option_for(options[:id], search),
method: :get
}
options[:as] ||= Ransack.options[:search_key]
options[:html].reverse_merge!(html_options)
@ -54,6 +49,26 @@ module Ransack
private
def options_for(record)
record.map &method(:parse_record)
end
def parse_record(object)
if object.is_a?(Ransack::Search)
object.klass
else
object
end
end
def html_option_for(option, search)
if option.present?
option.to_s
else
"#{search.klass.to_s.underscore}_search"
end
end
def extract_search_and_routing_proxy(search)
if search.is_a? Array
[search.second, search.first]