api_valve 0.5.2 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 32c722a7544d378d0498850719abd519713186f7b335f3f5e77690aff4aa2078
4
- data.tar.gz: e223462c31f002963018477400cd3f18afde8b7227e09ba6f25a6308bd13795a
3
+ metadata.gz: 2fdf08e3fa15d2bb46dc6f85ee53c681b696d574585b6be1e11dc7fc6b6527b1
4
+ data.tar.gz: 3cf720502939fe562d385a7347e681927e79519446111410f6ba8c8f1ad7fb52
5
5
  SHA512:
6
- metadata.gz: 8f3a6609523f43c7b79fb9cc4b56384634d115dbe3e2485b279a60bdabcce5e07cf89d31f6c3d6f71277522efbf5954c70bb84d896eb8455ca7a8a932738f3cb
7
- data.tar.gz: 7ae7857ac71fddd6c36ffa7671cda4a2af5834e7f44a80d3a99460e8cd2464b86db187e5916f8d5de41774877998189d690e03ef1dbc51d383d134860b638808
6
+ metadata.gz: 7e635bcd48b26f59cb92cd46551eb2b4de46fc23765a80c826c7f65993f52dfd232dceb4538586026c73a7d538a591aec96ffd681362c4f5ce1a3d9fbcf944a9
7
+ data.tar.gz: 2543e426f0b25a9a3b0c1970f3e4dfc81e9d01ccc6147888438d28bff60dca3c9768f98b9e98c4aaf49b090206df93616632a1f559e0454511b8dd83e9953fe7
@@ -9,12 +9,13 @@ module ApiValve
9
9
  self.request = Forwarder::Request
10
10
  self.response = Forwarder::Response
11
11
 
12
- define_callbacks :call
13
-
14
12
  class << self
15
- def build(config, &block)
13
+ # Creates a n instance from a config hash and takes optional block
14
+ # which is executed in scope of the proxy
15
+ def build(config)
16
+ block = Proc.new if block_given? # capture the yield
16
17
  from_hash(config).tap do |proxy|
17
- proxy.instance_eval(&block)
18
+ proxy.instance_eval(&block) if block
18
19
  end
19
20
  end
20
21
 
@@ -35,7 +36,10 @@ module ApiValve
35
36
  def from_hash(config)
36
37
  config = config.with_indifferent_access
37
38
  forwarder = Forwarder.new(forwarder_config(config))
38
- new(forwarder).tap { |proxy| proxy.build_routes_from_config config }
39
+ new(forwarder).tap do |proxy|
40
+ Array.wrap(config[:use]).each { |mw| proxy.use mw }
41
+ proxy.build_routes_from_config config[:routes]
42
+ end
39
43
  end
40
44
 
41
45
  private
@@ -65,19 +69,22 @@ module ApiValve
65
69
  def initialize(forwarder)
66
70
  @forwarder = forwarder
67
71
  @router = Router.new
72
+ @middlewares = []
68
73
  end
69
74
 
70
75
  def call(env)
71
- @request = Rack::Request.new(env)
72
- run_callbacks(:call) { @router.call(@request) }
76
+ stack = @middlewares.reverse.inject(@router) { |a, e| e.call a }
77
+ stack.call(env)
73
78
  rescue ApiValve::Error::Client, ApiValve::Error::Server => e
74
79
  render_error e
75
80
  end
76
81
 
77
82
  delegate :add_route, to: :router
78
83
 
79
- def build_routes_from_config(config)
80
- config['routes']&.each do |route_config|
84
+ def build_routes_from_config(routes_config)
85
+ return forward_all unless routes_config
86
+
87
+ routes_config.each do |route_config|
81
88
  method, path_regexp, request_override = *route_config.values_at('method', 'path', 'request')
82
89
  method ||= 'any' # no method defined means all methods
83
90
  if route_config['raise']
@@ -86,7 +93,6 @@ module ApiValve
86
93
  forward method, path_regexp, request_override
87
94
  end
88
95
  end
89
- forward_all unless config['routes']
90
96
  end
91
97
 
92
98
  def forward(methods, path_regexp = nil, request_override = {})
@@ -109,6 +115,10 @@ module ApiValve
109
115
  end
110
116
  end
111
117
 
118
+ def use(middleware, *args, &block)
119
+ @middlewares << proc { |app| middleware.new(app, *args, &block) }
120
+ end
121
+
112
122
  protected
113
123
 
114
124
  def render_error(error)
@@ -16,8 +16,8 @@ module ApiValve
16
16
  reset_routes
17
17
  end
18
18
 
19
- def call(request)
20
- match request
19
+ def call(env)
20
+ match Rack::Request.new(env)
21
21
  end
22
22
 
23
23
  def delete(path = nil, prok = nil)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: api_valve
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - mkon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-28 00:00:00.000000000 Z
11
+ date: 2018-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -120,14 +120,14 @@ dependencies:
120
120
  requirements:
121
121
  - - '='
122
122
  - !ruby/object:Gem::Version
123
- version: 0.60.0
123
+ version: 0.61.1
124
124
  type: :development
125
125
  prerelease: false
126
126
  version_requirements: !ruby/object:Gem::Requirement
127
127
  requirements:
128
128
  - - '='
129
129
  - !ruby/object:Gem::Version
130
- version: 0.60.0
130
+ version: 0.61.1
131
131
  - !ruby/object:Gem::Dependency
132
132
  name: rubocop-rspec
133
133
  requirement: !ruby/object:Gem::Requirement