api_valve 0.5.2 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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