Class: ApiValve::Proxy

Inherits:
Object
  • Object
show all
Extended by:
Builder
Defined in:
lib/api_valve/proxy.rb,
lib/api_valve/proxy/builder.rb

Defined Under Namespace

Modules: Builder Classes: Runner

Constant Summary collapse

FORWARDER_OPTIONS =
%w(endpoint request response).freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Builder

build, from_config, from_hash, from_yaml

Constructor Details

#initialize(forwarder) ⇒ Proxy

Returns a new instance of Proxy.



19
20
21
22
23
24
# File 'lib/api_valve/proxy.rb', line 19

def initialize(forwarder)
  @forwarder = forwarder
  @route_set = RouteSet.new
  @middleware = Middleware.new
  use Middleware::Router, route_set
end

Instance Attribute Details

#forwarderObject (readonly)

Returns the value of attribute forwarder.



15
16
17
# File 'lib/api_valve/proxy.rb', line 15

def forwarder
  @forwarder
end

#middlewareObject (readonly)

Returns the value of attribute middleware.



15
16
17
# File 'lib/api_valve/proxy.rb', line 15

def middleware
  @middleware
end

#requestObject (readonly)

Returns the value of attribute request.



15
16
17
# File 'lib/api_valve/proxy.rb', line 15

def request
  @request
end

#route_setObject (readonly) Also known as: router

Returns the value of attribute route_set.



15
16
17
# File 'lib/api_valve/proxy.rb', line 15

def route_set
  @route_set
end

Instance Method Details

#call(env) ⇒ Object



26
27
28
29
30
# File 'lib/api_valve/proxy.rb', line 26

def call(env)
  to_app.call(env)
rescue ApiValve::Error::Client, ApiValve::Error::Server => e
  render_error e
end

#deny(methods, path_regexp = nil, with: 'Error::Forbidden') ⇒ Object



46
47
48
# File 'lib/api_valve/proxy.rb', line 46

def deny(methods, path_regexp = nil, with: 'Error::Forbidden')
  route_set.append(methods, path_regexp, {}, ->(*_args) { raise ApiValve.const_get(with) })
end

#forward(methods, path_regexp = nil, options = {}) ⇒ Object



35
36
37
38
39
40
# File 'lib/api_valve/proxy.rb', line 35

def forward(methods, path_regexp = nil, options = {})
  options = options.with_indifferent_access
  route_set.append(methods, path_regexp, options.except(:request), proc { |request, match_data|
    forwarder.call request, {'match_data' => match_data}.merge(options[:request] || {}).with_indifferent_access
  })
end

#forward_all(options = {}) ⇒ Object



42
43
44
# File 'lib/api_valve/proxy.rb', line 42

def forward_all(options = {})
  forward(RouteSet::METHODS, nil, options)
end