Class: Lotus::Routing::HttpRouter Private

Inherits:
HttpRouter
  • Object
show all
Defined in:
lib/lotus/routing/http_router.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

HTTP router

This implementation is based on ::HttpRouter (http_router gem).

Lotus::Router wraps an instance of this class, in order to protect its public API from any future change of ::HttpRouter.

Since:

  • 0.1.0

Constant Summary collapse

SCRIPT_NAME =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

Script name - rack enviroment variable

Since:

  • 0.5.0

'SCRIPT_NAME'.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}, &blk) ⇒ HttpRouter

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Initialize the router.

See Also:

Since:

  • 0.1.0



50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/lotus/routing/http_router.rb', line 50

def initialize(options = {}, &blk)
  super(options, &nil)

  @namespace        = options[:namespace] if options[:namespace]
  @default_scheme   = options[:scheme]    if options[:scheme]
  @default_host     = options[:host]      if options[:host]
  @default_port     = options[:port]      if options[:port]
  @route_class      = options[:route]    || Routing::Route
  @resolver         = options[:resolver] || Routing::EndpointResolver.new(options)
  @parsers          = Routing::Parsers.new(options[:parsers])
  @prefix           = Utils::PathPrefix.new(options[:prefix] || '')
  @force_ssl        = Lotus::Routing::ForceSsl.new(!!options[:force_ssl], host: @default_host, port: @default_port)
end

Instance Attribute Details

#namespaceObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Since:

  • 0.5.0



42
43
44
# File 'lib/lotus/routing/http_router.rb', line 42

def namespace
  @namespace
end

Instance Method Details

#action_separatorObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Separator between controller and action name.

See Also:

Since:

  • 0.1.0



70
71
72
# File 'lib/lotus/routing/http_router.rb', line 70

def action_separator
  @resolver.action_separator
end

#find(options) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Finds a path from the given options.

See Also:

Since:

  • 0.1.0



80
81
82
# File 'lib/lotus/routing/http_router.rb', line 80

def find(options)
  @resolver.find(options)
end

#mount(app, options) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Allow to mount a Rack app

See Also:

Since:

  • 0.1.1



124
125
126
127
128
# File 'lib/lotus/routing/http_router.rb', line 124

def mount(app, options)
  add("#{ options.fetch(:at) }*").to(
    @resolver.resolve(to: app)
  )
end

#no_response(request, env) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Since:

  • 0.1.0



152
153
154
155
156
157
158
# File 'lib/lotus/routing/http_router.rb', line 152

def no_response(request, env)
  if request.acceptable_methods.any? && !request.acceptable_methods.include?(env['REQUEST_METHOD'])
    [405, {'Allow' => request.acceptable_methods.sort.join(", ")}, []]
  else
    @default_app.call(env)
  end
end

#options(path, options = {}, &blk) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Support for OPTIONS HTTP verb

See Also:

Since:

  • 0.1.0



114
115
116
# File 'lib/lotus/routing/http_router.rb', line 114

def options(path, options = {}, &blk)
  add_with_request_method(path, :options, options, &blk)
end

#pass_on_response(response) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Since:

  • 0.1.0



147
148
149
# File 'lib/lotus/routing/http_router.rb', line 147

def pass_on_response(response)
  super response.to_a
end

#raw_call(env, &blk) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Since:

  • 0.1.0



131
132
133
134
135
136
137
# File 'lib/lotus/routing/http_router.rb', line 131

def raw_call(env, &blk)
  if response = @force_ssl.call(env)
    response
  else
    super(@parsers.call(env))
  end
end

#raw_path(route, *args) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Generate a relative URL for a specified named route.

See Also:

Since:

  • 0.1.0



90
91
92
93
94
# File 'lib/lotus/routing/http_router.rb', line 90

def raw_path(route, *args)
  _rescue_url_recognition do
    _custom_path(super(route, *args))
  end
end

#raw_url(route, *args) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Generate an absolute URL for a specified named route.

See Also:

Since:

  • 0.1.0



102
103
104
105
106
# File 'lib/lotus/routing/http_router.rb', line 102

def raw_url(route, *args)
  _rescue_url_recognition do
    _custom_path(super(route, *args))
  end
end

#reset!Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Since:

  • 0.1.0



140
141
142
143
144
# File 'lib/lotus/routing/http_router.rb', line 140

def reset!
  uncompile
  @routes, @named_routes, @root = [], Hash.new{|h,k| h[k] = []}, Node::Root.new(self)
  @default_host, @default_port, @default_scheme = 'localhost', 80, 'http'
end

#rewrite_path_info(env, request) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Since:

  • 0.5.0



162
163
164
165
# File 'lib/lotus/routing/http_router.rb', line 162

def rewrite_path_info(env, request)
  super
  env[SCRIPT_NAME] = @prefix + env[SCRIPT_NAME]
end