Module: Funneler

Defined in:
lib/funneler.rb,
lib/funneler/funnel.rb,
lib/funneler/version.rb,
lib/funneler/configuration.rb,
lib/funneler/token_handler.rb,
lib/funneler/funnel_factory.rb,
lib/funneler/controller_methods.rb

Defined Under Namespace

Modules: ControllerMethods Classes: Configuration, Funnel, FunnelFactory, TokenHandler

Constant Summary collapse

Error =
Class.new(StandardError)
InvalidTokenError =
Class.new(Error)
UnknownFunnelType =
Class.new(Error)
VERSION =
"1.2.2"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.configurationObject (readonly)

Returns the value of attribute configuration.



16
17
18
# File 'lib/funneler.rb', line 16

def configuration
  @configuration
end

Class Method Details

.build(route_generator:, params: {}, expires_in_days: nil, meta: {}) ⇒ Object



33
34
35
36
37
38
# File 'lib/funneler.rb', line 33

def build(route_generator:, params: {}, expires_in_days: nil, meta: {})
  Funneler::FunnelFactory.build(route_generator: route_generator,
                               params: params,
                               meta: meta,
                               expires_in_days: expires_in_days)
end

.configure {|configuration| ... } ⇒ Object

Yields:



22
23
24
# File 'lib/funneler.rb', line 22

def configure
  yield(configuration)
end

.from_routes(routes: {}, meta: {}) ⇒ Object



40
41
42
43
44
# File 'lib/funneler.rb', line 40

def from_routes(routes: {}, meta: {})
  Funnel.new('routes' => routes,
             'current_page_index' => 0,
             'meta' => meta)
end

.from_token(token:, current_page_index: nil) ⇒ Object



26
27
28
29
30
31
# File 'lib/funneler.rb', line 26

def from_token(token:, current_page_index: nil)
  data = Funneler::TokenHandler.extract_data_from(token)
  Funneler::Funnel.new(data, current_page_index)
rescue JWT::DecodeError => e
  raise InvalidTokenError, "Invalid token '#{token}': #{e.message}"
end

.from_url(url:) ⇒ Object



46
47
48
49
50
51
# File 'lib/funneler.rb', line 46

def from_url(url:)
  uri = URI.parse(url)
  params = Hash[URI.decode_www_form(uri.query || "")]
  token = params['funnel_token']
  from_token(token: token)
end