api_valve 0.4.0 → 0.5.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: 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