diff options
| author | Aaron Patterson <aaron.patterson@gmail.com> | 2013-01-25 10:35:31 -0800 | 
|---|---|---|
| committer | Aaron Patterson <aaron.patterson@gmail.com> | 2013-01-30 10:24:58 -0800 | 
| commit | 27bccf02ee41f6bca207f96ef3ca31ca0c206964 (patch) | |
| tree | 1fbd50e0e6581bb75e37b93069baac98ef64f443 /actionpack/lib/action_dispatch/routing | |
| parent | 3bfdfc869b5c9fcd8397710aa7b0d211d549aa45 (diff) | |
| download | rails-27bccf02ee41f6bca207f96ef3ca31ca0c206964.tar.gz rails-27bccf02ee41f6bca207f96ef3ca31ca0c206964.tar.bz2 rails-27bccf02ee41f6bca207f96ef3ca31ca0c206964.zip | |
moving helper classes outside the private block
Diffstat (limited to 'actionpack/lib/action_dispatch/routing')
| -rw-r--r-- | actionpack/lib/action_dispatch/routing/route_set.rb | 178 | 
1 files changed, 88 insertions, 90 deletions
| diff --git a/actionpack/lib/action_dispatch/routing/route_set.rb b/actionpack/lib/action_dispatch/routing/route_set.rb index 3e88b0d4c9..d7426238a1 100644 --- a/actionpack/lib/action_dispatch/routing/route_set.rb +++ b/actionpack/lib/action_dispatch/routing/route_set.rb @@ -145,124 +145,122 @@ module ActionDispatch            routes.length          end -        private +        class UrlHelper +          def self.create(route, options) +            if optimize_helper?(route) +              OptimizedUrlHelper.new(route, options) +            else +              new route, options +            end +          end -          def define_named_route_methods(name, route) -            define_url_helper route, :"#{name}_path", -              route.defaults.merge(:use_route => name, :only_path => true) -            define_url_helper route, :"#{name}_url", -              route.defaults.merge(:use_route => name, :only_path => false) +          def self.optimize_helper?(route) +            route.requirements.except(:controller, :action).empty?            end -          # Create a url helper allowing ordered parameters to be associated -          # with corresponding dynamic segments, so you can do: -          # -          #   foo_url(bar, baz, bang) -          # -          # Instead of: -          # -          #   foo_url(bar: bar, baz: baz, bang: bang) -          # -          # Also allow options hash, so you can do: -          # -          #   foo_url(bar, baz, bang, sort_by: 'baz') -          # -          class UrlHelper -            def self.create(route, options) -              if optimize_helper?(route) -                OptimizedUrlHelper.new(route, options) -              else -                new route, options -              end -            end +          class OptimizedUrlHelper < UrlHelper +            attr_reader :arg_size -            def self.optimize_helper?(route) -              route.requirements.except(:controller, :action).empty? +            def initialize(route, options) +              super +              @arg_size = @route.required_parts.size              end -            class OptimizedUrlHelper < UrlHelper -              def initialize(route, options) +            def call(t, args) +              if args.size == arg_size && !args.last.is_a?(Hash) && optimize_routes_generation?(t) +                @options.merge!(t.url_options) if t.respond_to?(:url_options) +                @options[:path] = eval("\"#{optimized_helper}\"") +                ActionDispatch::Http::URL.url_for(@options) +              else                  super                end +            end -              def call(t, args) -                if args.size == arg_size && !args.last.is_a?(Hash) && optimize_routes_generation?(t) -                  @options.merge!(t.url_options) if t.respond_to?(:url_options) -                  @options[:path] = eval("\"#{optimized_helper}\"") -                  ActionDispatch::Http::URL.url_for(@options) -                else -                  super -                end -              end - -              private - -              def optimized_helper -                string_route = @route.ast.to_s - -                while string_route.gsub!(/\([^\)]*\)/, "") -                  true -                end +            private -                @route.required_parts.each_with_index do |part, i| -                  # Replace each route parameter -                  # e.g. :id for regular parameter or *path for globbing -                  # with ruby string interpolation code -                  string_route.gsub!(/(\*|:)#{part}/, "\#{Journey::Router::Utils.escape_fragment(args[#{i}].to_param)}") -                end +            def optimized_helper +              string_route = @route.ast.to_s -                string_route +              while string_route.gsub!(/\([^\)]*\)/, "") +                true                end -              def arg_size -                @route.required_parts.size +              @route.required_parts.each_with_index do |part, i| +                # Replace each route parameter +                # e.g. :id for regular parameter or *path for globbing +                # with ruby string interpolation code +                string_route.gsub!(/(\*|:)#{part}/, "\#{Journey::Router::Utils.escape_fragment(args[#{i}].to_param)}")                end -              def optimize_routes_generation?(t) -                t.send(:optimize_routes_generation?) -              end +              string_route              end -            def initialize(route, options) -              @options      = options -              @segment_keys = route.segment_keys -              @route        = route +            def optimize_routes_generation?(t) +              t.send(:optimize_routes_generation?)              end +          end -            def call(t, args) -              t.url_for(handle_positional_args(t, args, @options, @segment_keys)) -            end +          def initialize(route, options) +            @options      = options +            @segment_keys = route.segment_keys +            @route        = route +          end -            def handle_positional_args(t, args, options, segment_keys) -              inner_options = args.extract_options! -              result = options.dup - -              if args.size > 0 -                keys = segment_keys -                if args.size < keys.size - 1 # take format into account -                  keys -= t.url_options.keys if t.respond_to?(:url_options) -                  keys -= options.keys -                end -                result.merge!(Hash[keys.zip(args)]) -              end +          def call(t, args) +            t.url_for(handle_positional_args(t, args, @options, @segment_keys)) +          end -              result.merge!(inner_options) +          def handle_positional_args(t, args, options, segment_keys) +            inner_options = args.extract_options! +            result = options.dup + +            if args.size > 0 +              keys = segment_keys +              if args.size < keys.size - 1 # take format into account +                keys -= t.url_options.keys if t.respond_to?(:url_options) +                keys -= options.keys +              end +              result.merge!(Hash[keys.zip(args)])              end + +            result.merge!(inner_options)            end +        end -          def define_url_helper(route, name, options) -            @module.remove_possible_method name +        private +        # Create a url helper allowing ordered parameters to be associated +        # with corresponding dynamic segments, so you can do: +        # +        #   foo_url(bar, baz, bang) +        # +        # Instead of: +        # +        #   foo_url(bar: bar, baz: baz, bang: bang) +        # +        # Also allow options hash, so you can do: +        # +        #   foo_url(bar, baz, bang, sort_by: 'baz') +        # +        def define_url_helper(route, name, options) +          @module.remove_possible_method name -            helper = UrlHelper.create(route, options.dup) +          helper = UrlHelper.create(route, options.dup) -            @module.module_eval do -              define_method(name) do |*args| -                helper.call self, args -              end +          @module.module_eval do +            define_method(name) do |*args| +              helper.call self, args              end - -            helpers << name            end + +          helpers << name +        end + +        def define_named_route_methods(name, route) +          define_url_helper route, :"#{name}_path", +            route.defaults.merge(:use_route => name, :only_path => true) +          define_url_helper route, :"#{name}_url", +            route.defaults.merge(:use_route => name, :only_path => false) +        end        end        attr_accessor :formatter, :set, :named_routes, :default_scope, :router | 
