api_valve 0.4.0 → 0.5.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: ca1446c98734c8db7a8a802108b6f76e76792efe515bb17a9c84d5679a14645f
4
- data.tar.gz: 43c13f7b3186fe752639e46bfacf73943fa5bd1b624ebc49e70d14c40cf0b132
3
+ metadata.gz: 0aa5a1818ae2804c3c185af5bec56e8b819672ac69b611097ec0da8f1c2b1289
4
+ data.tar.gz: '09f0b5d1c206aba0f00c74e6ed85e1c7498e3442af769f61de975858f2dbc94c'
5
5
  SHA512:
6
- metadata.gz: bc2a55f91363b04866c0db5589ee6536965ad1c28e8dbe2584e83bd3ac306116de2f78ec85ccf96ac342c75490f5fbe01c111012ba1c2b826a3bae9543c45873
7
- data.tar.gz: 84b94d9afd865a79aacf15f1cf2fbf0cb019a5c9406299b8c56701b97902443e3b40d10cdaa761d33fb4e6f1f12fbd1d02de38ddfef15da0b464f7a0280c51a0
6
+ metadata.gz: ffa06feb6c79ae0e49bd741a542a194fc2a0707d0b053319eb205a316e6a02476b5d0998b9757ec0acab3d57fd48502204a2ec81ae04f08a7df2ced1016e98a6
7
+ data.tar.gz: 7bcd5a6528e21a31b3afe4d873615721301661c781690d3eb60a68df1e1e1c295efc94000ccb05dc32f85a3583b9cecde24e78194c5eadce2beb09eabb4bc862
data/README.md CHANGED
@@ -1,7 +1,8 @@
1
1
  # ApiValve
2
2
 
3
- [![Gem Version](https://badge.fury.io/rb/fidor_api.svg)](https://badge.fury.io/rb/fidor_api)
3
+ [![Gem Version](https://badge.fury.io/rb/api_valve.svg)](https://badge.fury.io/rb/api_valve)
4
4
  [![Build Status](https://travis-ci.org/mkon/api_valve.svg?branch=master)](https://travis-ci.org/mkon/api_valve)
5
+ [![Depfu](https://badges.depfu.com/badges/1f5892cc85d02997050e0a4d077c7dc4/overview.svg)](https://depfu.com/github/mkon/api_valve?project_id=5958)
5
6
 
6
7
  Extensible rack application that serves as lightweight API reverse proxy.
7
8
 
@@ -37,8 +37,8 @@ module ApiValve
37
37
  # URL path to use when forwarding
38
38
  def path
39
39
  path = options['endpoint'] || ''
40
- if pattern = options['path']
41
- path += pattern % options.dig('match_data').named_captures.symbolize_keys
40
+ if (override = override_path(options))
41
+ path += override
42
42
  else
43
43
  path += original_request.path_info
44
44
  end
@@ -83,6 +83,13 @@ module ApiValve
83
83
  }
84
84
  end
85
85
 
86
+ def override_path(options)
87
+ return unless (path = options['path'])
88
+ return path unless options.dig('match_data')
89
+
90
+ path % options.dig('match_data').named_captures.symbolize_keys
91
+ end
92
+
86
93
  def x_forwarded_for
87
94
  (
88
95
  header('X-Forwarded-For').to_s.split(', ') << original_request.env['REMOTE_ADDR']
@@ -20,53 +20,61 @@ module ApiValve
20
20
  match request
21
21
  end
22
22
 
23
- def delete(path = nil, callee = nil)
24
- add_route :delete, path, callee || Proc.new
23
+ def delete(path = nil, prok = nil)
24
+ append :delete, path, prok || Proc.new
25
25
  end
26
26
 
27
- def get(path = nil, callee = nil)
28
- add_route :get, path, callee || Proc.new
27
+ def get(path = nil, prok = nil)
28
+ append :get, path, prok || Proc.new
29
29
  end
30
30
 
31
- def head(path = nil, callee = nil)
32
- add_route :head, path, callee || Proc.new
31
+ def head(path = nil, prok = nil)
32
+ append :head, path, prok || Proc.new
33
33
  end
34
34
 
35
- def patch(path = nil, callee = nil)
36
- add_route :patch, path, callee || Proc.new
35
+ def patch(path = nil, prok = nil)
36
+ append :patch, path, prok || Proc.new
37
37
  end
38
38
 
39
- def post(path = nil, callee = nil)
40
- add_route :post, path, callee || Proc.new
39
+ def post(path = nil, prok = nil)
40
+ append :post, path, prok || Proc.new
41
41
  end
42
42
 
43
- def put(path = nil, callee = nil)
44
- add_route :put, path, callee || Proc.new
43
+ def put(path = nil, prok = nil)
44
+ append :put, path, prok || Proc.new
45
45
  end
46
46
 
47
- def any(path = nil, callee = nil)
48
- add_route METHODS, path, callee || Proc.new
47
+ def any(path = nil, prok = nil)
48
+ append METHODS, path, prok || Proc.new
49
49
  end
50
50
 
51
- def reset_routes
52
- @routes = Hash[METHODS.map { |v| [v, []] }].freeze
51
+ def append(methods, regexp, prok = nil)
52
+ prok ||= Proc.new
53
+ Array.wrap(methods).each do |method|
54
+ @routes[method] << Route.new(regexp, prok)
55
+ end
53
56
  end
54
57
 
55
- private
56
-
57
- def add_route(methods, regexp, callee)
58
+ def unshift(methods, regexp = nil, prok = nil)
59
+ prok ||= Proc.new
58
60
  Array.wrap(methods).each do |method|
59
- @routes[method] << Route.new(regexp, callee)
61
+ @routes[method].unshift Route.new(regexp, prok)
60
62
  end
61
63
  end
62
64
 
65
+ def reset_routes
66
+ @routes = Hash[METHODS.map { |v| [v, []] }].freeze
67
+ end
68
+
69
+ private
70
+
63
71
  def match(request)
64
72
  # For security reasons do not allow URLs that could break out of the proxy namespace on the
65
73
  # server. Preferably an nxing/apache rewrite will kill these URLs before they hit us
66
74
  raise 'URL not supported' if request.path_info.include?('/../')
67
75
 
68
76
  @routes && @routes[request.request_method.downcase.to_sym].each do |route|
69
- if match_data = route.match(request.path_info)
77
+ if (match_data = route.match(request.path_info))
70
78
  return route.call request, match_data
71
79
  end
72
80
  end
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.4.0
4
+ version: 0.5.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-10-12 00:00:00.000000000 Z
11
+ date: 2018-10-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -92,98 +92,98 @@ dependencies:
92
92
  requirements:
93
93
  - - "~>"
94
94
  - !ruby/object:Gem::Version
95
- version: '0'
95
+ version: '1.1'
96
96
  type: :development
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
100
  - - "~>"
101
101
  - !ruby/object:Gem::Version
102
- version: '0'
102
+ version: '1.1'
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: rspec
105
105
  requirement: !ruby/object:Gem::Requirement
106
106
  requirements:
107
107
  - - "~>"
108
108
  - !ruby/object:Gem::Version
109
- version: '3'
109
+ version: '3.7'
110
110
  type: :development
111
111
  prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement
113
113
  requirements:
114
114
  - - "~>"
115
115
  - !ruby/object:Gem::Version
116
- version: '3'
116
+ version: '3.7'
117
117
  - !ruby/object:Gem::Dependency
118
118
  name: rubocop
119
119
  requirement: !ruby/object:Gem::Requirement
120
120
  requirements:
121
121
  - - '='
122
122
  - !ruby/object:Gem::Version
123
- version: 0.59.1
123
+ version: 0.59.2
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.59.1
130
+ version: 0.59.2
131
131
  - !ruby/object:Gem::Dependency
132
132
  name: rubocop-rspec
133
133
  requirement: !ruby/object:Gem::Requirement
134
134
  requirements:
135
135
  - - '='
136
136
  - !ruby/object:Gem::Version
137
- version: 1.25.1
137
+ version: 1.30.0
138
138
  type: :development
139
139
  prerelease: false
140
140
  version_requirements: !ruby/object:Gem::Requirement
141
141
  requirements:
142
142
  - - '='
143
143
  - !ruby/object:Gem::Version
144
- version: 1.25.1
144
+ version: 1.30.0
145
145
  - !ruby/object:Gem::Dependency
146
146
  name: simplecov
147
147
  requirement: !ruby/object:Gem::Requirement
148
148
  requirements:
149
149
  - - "~>"
150
150
  - !ruby/object:Gem::Version
151
- version: '0'
151
+ version: '0.16'
152
152
  type: :development
153
153
  prerelease: false
154
154
  version_requirements: !ruby/object:Gem::Requirement
155
155
  requirements:
156
156
  - - "~>"
157
157
  - !ruby/object:Gem::Version
158
- version: '0'
158
+ version: '0.16'
159
159
  - !ruby/object:Gem::Dependency
160
160
  name: timecop
161
161
  requirement: !ruby/object:Gem::Requirement
162
162
  requirements:
163
163
  - - "~>"
164
164
  - !ruby/object:Gem::Version
165
- version: '0'
165
+ version: '0.9'
166
166
  type: :development
167
167
  prerelease: false
168
168
  version_requirements: !ruby/object:Gem::Requirement
169
169
  requirements:
170
170
  - - "~>"
171
171
  - !ruby/object:Gem::Version
172
- version: '0'
172
+ version: '0.9'
173
173
  - !ruby/object:Gem::Dependency
174
174
  name: webmock
175
175
  requirement: !ruby/object:Gem::Requirement
176
176
  requirements:
177
177
  - - "~>"
178
178
  - !ruby/object:Gem::Version
179
- version: '2'
179
+ version: '3.4'
180
180
  type: :development
181
181
  prerelease: false
182
182
  version_requirements: !ruby/object:Gem::Requirement
183
183
  requirements:
184
184
  - - "~>"
185
185
  - !ruby/object:Gem::Version
186
- version: '2'
186
+ version: '3.4'
187
187
  description:
188
188
  email:
189
189
  - konstantin@munteanu.de