class Funneler::Funnel

Attributes

current_page_index[R]
data[R]

Public Class Methods

new(data = {}, current_page_index = nil) click to toggle source
# File lib/funneler/funnel.rb, line 6
def initialize(data = {}, current_page_index = nil)
  @data = data
  @current_page_index = current_page_index || data.fetch("current_page_index", nil) || 0
  @url_cache = Hash.new {|h, key| h[key] = generate_page_for_index(key) }
end

Public Instance Methods

current_page() click to toggle source
# File lib/funneler/funnel.rb, line 31
def current_page
  @url_cache[current_page_index]
end
first_page(additional_params = {}) click to toggle source
# File lib/funneler/funnel.rb, line 12
def first_page(additional_params = {})
  url = @url_cache[0]
  return url if additional_params.empty?

  add_params_to_url(url, additional_params)
end
is_last_page?() click to toggle source
# File lib/funneler/funnel.rb, line 27
def is_last_page?
  routes.empty? || (current_page_index + 1) >= routes.length
end
meta() click to toggle source
# File lib/funneler/funnel.rb, line 35
def meta
  data['meta'] || {}
end
next_page() click to toggle source
# File lib/funneler/funnel.rb, line 19
def next_page
  @url_cache[next_index]
end
previous_page() click to toggle source
# File lib/funneler/funnel.rb, line 23
def previous_page
  @url_cache[previous_index]
end
token() click to toggle source
# File lib/funneler/funnel.rb, line 39
def token
  TokenHandler.generate_token(data: data)
end

Private Instance Methods

add_params_to_url(path, new_params) click to toggle source
# File lib/funneler/funnel.rb, line 53
def add_params_to_url(path, new_params)
  uri = URI.parse(path)
  params = URI.decode_www_form(uri.query || "").concat(new_params.to_a)
  uri.query = URI.encode_www_form(params)

  uri.to_s
end
bad_index?(index) click to toggle source
# File lib/funneler/funnel.rb, line 74
def bad_index?(index)
  index.nil? ||
    index < 0 ||
    index >= routes.length
end
generate_page_for_index(index) click to toggle source
# File lib/funneler/funnel.rb, line 45
def generate_page_for_index(index)
  return if bad_index?(index)

  token = TokenHandler.generate_token(data: data.merge('current_page_index' => index))
  path  = add_params_to_url(routes[index], "funnel_token" => token )
  add_params_to_url(path, "funnel_index" => index)
end
next_index() click to toggle source
# File lib/funneler/funnel.rb, line 65
def next_index
  current_page_index.to_i + 1
end
previous_index() click to toggle source
# File lib/funneler/funnel.rb, line 69
def previous_index
  index = current_page_index.to_i - 1
  index < 0 ? 0 : index
end
routes() click to toggle source
# File lib/funneler/funnel.rb, line 61
def routes
  data.fetch('routes', [])
end