class GrapePathHelpers::DecoratedRoute
wrapper around Grape::Route that adds a helper method
Constants
- PATH_SEGMENTS_REGEXP
- PATH_SEGMENTS_WITH_WILDCARDS_REGEXP
Attributes
extension[R]
helper_arguments[R]
helper_names[R]
route[R]
route_options[R]
Public Class Methods
new(route)
click to toggle source
# File lib/grape-path-helpers/decorated_route.rb, line 14 def initialize(route) @route = route @route_options = route.options @helper_names = [] @helper_arguments = required_helper_segments @extension = default_extension define_path_helpers end
sanitize_method_name(string)
click to toggle source
# File lib/grape-path-helpers/decorated_route.rb, line 10 def self.sanitize_method_name(string) string.gsub(/\W|^[0-9]/, '_') end
Public Instance Methods
default_extension()
click to toggle source
# File lib/grape-path-helpers/decorated_route.rb, line 23 def default_extension pattern = /\((\.\:?\w+)\)$/ match = route_path.match(pattern) return '' unless match ext = match.captures.first if ext == '.:format' '' else ext end end
define_path_helper(method_name, route_attributes)
click to toggle source
# File lib/grape-path-helpers/decorated_route.rb, line 44 def define_path_helper(method_name, route_attributes) method_body = <<-RUBY def #{method_name}(attributes = {}, include_wildcard_segments = false) attrs = #{route_attributes}.merge(attributes) query_params = attrs.delete(:params) content_type = attrs.delete(:format) path = '/' + path_segments_with_values(attrs, include_wildcard_segments).join('/') path + content_type + query_string(query_params) end RUBY instance_eval method_body end
define_path_helpers()
click to toggle source
# File lib/grape-path-helpers/decorated_route.rb, line 35 def define_path_helpers route_versions.each do |version| route_attributes = { version: version, format: extension } method_name = path_helper_name(route_attributes) @helper_names << method_name define_path_helper(method_name, route_attributes) end end
dynamic_path_segments()
click to toggle source
# File lib/grape-path-helpers/decorated_route.rb, line 121 def dynamic_path_segments segments = path_segments.select do |segment| dynamic_segment?(segment) end segments.map { |s| s.slice(1..-1) } end
dynamic_segment?(segment)
click to toggle source
# File lib/grape-path-helpers/decorated_route.rb, line 128 def dynamic_segment?(segment) segment.start_with?(':', '*') end
optional_segment?(segment)
click to toggle source
# File lib/grape-path-helpers/decorated_route.rb, line 132 def optional_segment?(segment) segment.start_with?('(') end
path_helper_name(opts = {})
click to toggle source
# File lib/grape-path-helpers/decorated_route.rb, line 78 def path_helper_name(opts = {}) if route_options[:as] name = route_options[:as].to_s else segments = path_segments_with_values(opts) name = if segments.empty? 'root' else segments.join('_') end end sanitized_name = self.class.sanitize_method_name(name) sanitized_name + '_path' end
path_segments(include_wildcard_segments = false)
click to toggle source
# File lib/grape-path-helpers/decorated_route.rb, line 112 def path_segments(include_wildcard_segments = false) pattern = if include_wildcard_segments PATH_SEGMENTS_WITH_WILDCARDS_REGEXP else PATH_SEGMENTS_REGEXP end route_path.split(pattern).reject(&:blank?) end
path_segments_with_values(opts, include_wildcard_segments = false)
click to toggle source
# File lib/grape-path-helpers/decorated_route.rb, line 105 def path_segments_with_values(opts, include_wildcard_segments = false) segments = path_segments(include_wildcard_segments).map do |s| segment_to_value(s, opts) end segments.reject(&:blank?) end
query_string(params)
click to toggle source
# File lib/grape-path-helpers/decorated_route.rb, line 59 def query_string(params) if params.nil? '' else '?' + params.to_param end end
required_helper_segments()
click to toggle source
# File lib/grape-path-helpers/decorated_route.rb, line 136 def required_helper_segments segments_in_options = dynamic_path_segments.select do |segment| route.options[segment.to_sym] end dynamic_path_segments - segments_in_options end
route_method()
click to toggle source
# File lib/grape-path-helpers/decorated_route.rb, line 169 def route_method route.request_method end
route_namespace()
click to toggle source
# File lib/grape-path-helpers/decorated_route.rb, line 165 def route_namespace route.namespace end
route_path()
click to toggle source
# File lib/grape-path-helpers/decorated_route.rb, line 157 def route_path route.path end
route_version()
click to toggle source
# File lib/grape-path-helpers/decorated_route.rb, line 161 def route_version route.version end
route_versions()
click to toggle source
# File lib/grape-path-helpers/decorated_route.rb, line 67 def route_versions return [nil] if route_version.nil? || route_version.empty? if route_version.is_a?(String) version_pattern = /[^\[",\]\s]+/ route_version.scan(version_pattern) else route_version end end
segment_to_value(segment, opts = {})
click to toggle source
# File lib/grape-path-helpers/decorated_route.rb, line 95 def segment_to_value(segment, opts = {}) if dynamic_segment?(segment) options = route.options.merge(stringify_keys(opts)) key = segment.slice(1..-1).to_sym options[key] else segment end end
special_keys()
click to toggle source
# File lib/grape-path-helpers/decorated_route.rb, line 143 def special_keys %w[format params] end
uses_segments_in_path_helper?(segments)
click to toggle source
# File lib/grape-path-helpers/decorated_route.rb, line 147 def uses_segments_in_path_helper?(segments) segments = segments.reject { |x| special_keys.include?(x) } if helper_arguments.empty? && segments.any? false else helper_arguments.all? { |x| segments.include?(x) } end end
Private Instance Methods
stringify_keys(original)
click to toggle source
# File lib/grape-path-helpers/decorated_route.rb, line 175 def stringify_keys(original) original.each_with_object({}) do |(key, value), hash| hash[key.to_sym] = value end end