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