class Zooplankton::Parser

Constants

AMPERSAND
QUESTION_MARK

Public Instance Methods

path_template_for(helper_name, query_params={}, supplied_params=nil) click to toggle source
# File lib/zooplankton/parser.rb, line 9
def path_template_for(helper_name, query_params={}, supplied_params=nil)
  build_template(:path, helper_name, *parse_params(query_params, supplied_params))
end
url_template_for(helper_name, query_params={}, supplied_params=nil) click to toggle source
# File lib/zooplankton/parser.rb, line 13
def url_template_for(helper_name, query_params={}, supplied_params=nil)
  build_template(:url, helper_name, *parse_params(query_params, supplied_params))
end

Private Instance Methods

append_query_params(template, defined_keys, supplied_params) click to toggle source
# File lib/zooplankton/parser.rb, line 40
def append_query_params(template, defined_keys, supplied_params)
  return template unless defined_keys.any?

  supplied_keys = defined_keys & supplied_params.keys
  not_supplied_keys = defined_keys - supplied_params.keys

  segments = []
  init_symbol = QUESTION_MARK

  if supplied_keys.any?
    segments << supplied_keys.map{|k| escaped_pair(k, supplied_params[k]) }.join(AMPERSAND)
  end

  if not_supplied_keys.any?
    init_symbol, sep = if segments.size > 0
      [QUESTION_MARK, AMPERSAND]
    else
      ['', QUESTION_MARK]
    end
    segments << "{#{sep}#{not_supplied_keys.join(",")}}"
  end

  "#{template}#{init_symbol}#{segments.join}"
end
build_template(type, helper_name, query_params, supplied_params) click to toggle source
# File lib/zooplankton/parser.rb, line 31
def build_template(type, helper_name, query_params, supplied_params)
  return unless resolver.has_route?(helper_name)

  escaped_template_without_query_params = expand_helper(helper_name, type, supplied_params)
  escaped_template = append_query_params(escaped_template_without_query_params, query_params, supplied_params)

  unescape_template(escaped_template)
end
escaped_pair(key, value) click to toggle source
# File lib/zooplankton/parser.rb, line 75
def escaped_pair(key, value)
  [key, URI.encode(value.to_s)].join('=')
end
expand_helper(helper_name, path_or_url, params) click to toggle source
# File lib/zooplankton/parser.rb, line 65
def expand_helper(helper_name, path_or_url, params)
  helper_method = "#{helper_name}_#{path_or_url}"

  resolver.generate(helper_method, helper_name, params)
end
parse_params(*args) click to toggle source
# File lib/zooplankton/parser.rb, line 19
def parse_params(*args)
  if args.first.respond_to?(:to_h) && !args.first.is_a?(Array)
    query_params = []
    supplied_params = args.first.to_h
  else
    query_params = Array(args.shift)
    supplied_params = args.first || {}
  end

  [query_params, supplied_params]
end
resolver() click to toggle source
# File lib/zooplankton/parser.rb, line 71
def resolver
  @resolver ||= Resolver.instance
end
unescape_template(template) click to toggle source
# File lib/zooplankton/parser.rb, line 79
def unescape_template(template)
  CGI.unescape(template)
end