lib/ransack/helpers/form_helper.rb in ransack-1.6.6 vs lib/ransack/helpers/form_helper.rb in ransack-1.7.0
- old
+ new
@@ -13,26 +13,21 @@
search.klass, format: options.delete(:format)
)
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,
'No Ransack::Search object was provided to search_form_for!'
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)
options[:builder] ||= FormBuilder
@@ -52,10 +47,30 @@
link_to(s.name, url(routing_proxy, s.url_options), s.html_options(args))
end
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]
else
[search, nil]
@@ -73,18 +88,16 @@
class SortLink
def initialize(search, attribute, args, params)
@search = search
@params = params
@field = attribute.to_s
- sort_fields = extract_sort_fields_and_mutate_args!(args).compact
+ @sort_fields = extract_sort_fields_and_mutate_args!(args).compact
@current_dir = existing_sort_direction
@label_text = extract_label_and_mutate_args!(args)
@options = extract_options_and_mutate_args!(args)
@hide_indicator = @options.delete :hide_indicator
@default_order = @options.delete :default_order
- @sort_params = build_sort(sort_fields)
- @sort_params = @sort_params.first if @sort_params.size == 1
end
def name
[ERB::Util.h(@label_text), order_indicator]
.compact
@@ -98,14 +111,14 @@
@search.context.search_key => search_and_sort_params))
end
def html_options(args)
html_options = extract_options_and_mutate_args!(args)
- html_options.merge(class:
- [[Constants::SORT_LINK, @current_dir], html_options[:class]]
- .compact.join(Constants::SPACE)
- )
+ html_options.merge(
+ class: [[Constants::SORT_LINK, @current_dir], html_options[:class]]
+ .compact.join(Constants::SPACE)
+ )
end
private
def extract_sort_fields_and_mutate_args!(args)
@@ -118,11 +131,11 @@
def extract_label_and_mutate_args!(args)
if args.first.is_a? String
args.shift
else
- Translate.attribute(@field, :context => @search.context)
+ Translate.attribute(@field, context: @search.context)
end
end
def extract_options_and_mutate_args!(args)
if args.first.is_a? Hash
@@ -131,20 +144,29 @@
{}
end
end
def search_and_sort_params
- search_params.merge(:s => @sort_params)
+ search_params.merge(s: sort_params)
end
def search_params
@params[@search.context.search_key].presence || {}
end
- def build_sort(fields)
+ def sort_params
+ sort_array = recursive_sort_params_build(@sort_fields)
+ if sort_array.size == 1
+ sort_array.first
+ else
+ sort_array
+ end
+ end
+
+ def recursive_sort_params_build(fields)
return [] if fields.empty?
- [parse_sort(fields[0])] + build_sort(fields.drop(1))
+ [parse_sort(fields[0])] + recursive_sort_params_build(fields.drop 1)
end
def parse_sort(field)
attr_name, new_dir = field.to_s.split(/\s+/)
if no_sort_direction_specified?(new_dir)
@@ -152,12 +174,11 @@
end
"#{attr_name} #{new_dir}"
end
def detect_previous_sort_direction_and_invert_it(attr_name)
- sort_dir = existing_sort_direction(attr_name)
- if sort_dir
+ if sort_dir = existing_sort_direction(attr_name)
direction_text(sort_dir)
else
default_sort_order(attr_name) || Constants::ASC
end
end
@@ -167,10 +188,14 @@
sort.dir
end
end
def default_sort_order(attr_name)
- Hash === @default_order ? @default_order[attr_name] : @default_order
+ if Hash === @default_order
+ @default_order[attr_name]
+ else
+ @default_order
+ end
end
def order_indicator
if @hide_indicator || no_sort_direction_specified?
nil