SortLink PORO: Make `field` an ivar, rename things

This commit is contained in:
Jon Atack 2014-12-19 13:35:40 +01:00
parent 846b1687ec
commit cc10b3a825
1 changed files with 13 additions and 15 deletions

View File

@ -48,10 +48,8 @@ module Ransack
unless Search === search unless Search === search
raise TypeError, 'First argument must be a Ransack::Search!' raise TypeError, 'First argument must be a Ransack::Search!'
end end
s = SortLinkParser.new(search, attribute, args, params) s = SortLink.new(search, attribute, args, params)
link_to( link_to(s.name, url(routing_proxy, s.url_options), s.html_options(args))
s.name, url(routing_proxy, s.options_for_url), s.html_options(args)
)
end end
private private
@ -72,14 +70,14 @@ module Ransack
end end
end end
class SortLinkParser class SortLink
def initialize(search, attribute, args, params) def initialize(search, attribute, args, params)
@search = search @search = search
@params = params @params = params
field = attribute.to_s @field = attribute.to_s
sort_fields = extract_sort_fields_and_mutate_args!(field, args).compact sort_fields = extract_sort_fields_and_mutate_args!(args).compact
@current_dir = existing_sort_direction(field) @current_dir = existing_sort_direction
@label_text = extract_label_and_mutate_args!(field, args) @label_text = extract_label_and_mutate_args!(args)
@options = extract_options_and_mutate_args!(args) @options = extract_options_and_mutate_args!(args)
@hide_indicator = @options.delete :hide_indicator @hide_indicator = @options.delete :hide_indicator
@default_order = @options.delete :default_order @default_order = @options.delete :default_order
@ -94,7 +92,7 @@ module Ransack
.html_safe .html_safe
end end
def options_for_url def url_options
@params.merge( @params.merge(
@options.merge( @options.merge(
@search.context.search_key => search_and_sort_params)) @search.context.search_key => search_and_sort_params))
@ -110,19 +108,19 @@ module Ransack
private private
def extract_sort_fields_and_mutate_args!(field, args) def extract_sort_fields_and_mutate_args!(args)
if args.first.is_a? Array if args.first.is_a? Array
args.shift args.shift
else else
[field] [@field]
end end
end end
def extract_label_and_mutate_args!(field, args) def extract_label_and_mutate_args!(args)
if args.first.is_a? String if args.first.is_a? String
args.shift args.shift
else else
Translate.attribute(field, :context => @search.context) Translate.attribute(@field, :context => @search.context)
end end
end end
@ -164,7 +162,7 @@ module Ransack
end end
end end
def existing_sort_direction(attr_name) def existing_sort_direction(attr_name = @field)
if sort = @search.sorts.detect { |s| s && s.name == attr_name } if sort = @search.sorts.detect { |s| s && s.name == attr_name }
sort.dir sort.dir
end end