Permalink
Browse files

simplified route method name generation

  • Loading branch information...
tenderlove committed May 6, 2014
1 parent 7b9964c commit b89dcde82253089da5378272af2fd58c05ec57cd
Showing with 19 additions and 27 deletions.
  1. +17 −27 actionpack/lib/action_dispatch/routing/polymorphic_routes.rb
  2. +2 −0 actionview/test/template/test_test.rb
@@ -135,57 +135,47 @@ def polymorphic_url(record_or_hash_or_array, options = {})
record = record_list.pop
- inflection = :singular
+ inflection = lambda { |name| name.singular_route_key }
should_pop = true
if record.try(:persisted?)
should_pop = false
elsif options[:action] == 'new'
else
- inflection = :plural
+ inflection = lambda { |name| name.route_key }
end
- record = record.respond_to?(:to_model) ? record.to_model : record
-
- #if options[:action] && options[:action].to_s == "new"
- # inflection = :singular
- #elsif (record.respond_to?(:persisted?) && !record.persisted?)
- # inflection = :plural
- #elsif record.is_a?(Class)
- # inflection = :plural
- #else
- # args << record
- # inflection = :singular
- #end
+ args = []
route = record_list.map { |parent|
- if parent.is_a?(Symbol) || parent.is_a?(String)
+ case parent
+ when Symbol, String
parent.to_s
+ when Class
+ args << parent
+ parent.model_name.singular_route_key
else
- model_name_from_record_or_class(parent).singular_route_key
+ args << parent.to_model
+ parent.to_model.class.model_name.singular_route_key
end
}
route <<
- if record.is_a?(Symbol) || record.is_a?(String)
+ case record
+ when Symbol, String
record.to_s
+ when Class
+ args << record unless should_pop
+ inflection.call record.model_name
else
- if inflection == :singular
- model_name_from_record_or_class(record).singular_route_key
- else
- model_name_from_record_or_class(record).route_key
- end
+ args << record.to_model unless should_pop
+ inflection.call record.to_model.class.model_name
end
route << routing_type(options)
named_route = action_prefix(options) + route.join("_")
- args.pop if should_pop
- args.delete_if {|arg| arg.is_a?(Symbol) || arg.is_a?(String)}
-
- args.collect! { |a| convert_to_model(a) }
-
recipient.send(named_route, *args, opts)
end
@@ -39,6 +39,8 @@ def test_link_to_person
with_test_route_set do
person = Struct.new(:name) {
extend ActiveModel::Naming
+ def to_model; self; end
+ def persisted?; true; end
def self.name; 'Mocha::Mock'; end
}.new "David"

0 comments on commit b89dcde

Please sign in to comment.