api_sim 3.2.0 → 4.0.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 +4 -4
- data/api_sim.gemspec +1 -0
- data/lib/api_sim/built_app.rb +4 -23
- data/lib/api_sim/matchers/base_matcher.rb +1 -8
- data/lib/api_sim/matchers/dynamic_request_matcher.rb +3 -4
- data/lib/api_sim/matchers/request_body_matcher.rb +3 -2
- data/lib/api_sim/matchers/static_request_matcher.rb +2 -1
- data/lib/api_sim/version.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3ac439cdf5117d5e307c6fd4f3bc9720af5f60fc
|
4
|
+
data.tar.gz: 6ab64d5c0d40d03a94af5590a76b1a9657379d26
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 01e1097d28d79c7c41ebd0944ed0fb53aa5e90fc4553a91d1e9838f343f403ba9d1de7c4614171382cb3db73e822c6bd4ad7511a485fd84a09feba3f83839aeb
|
7
|
+
data.tar.gz: cd9378a7e9431b6aafa3003c1f0483493aede7adad063372db27605035e57455c6f49c19f8d88cfef6c95d8c5c26a3d7bd51fcdbc936e2d2e5d82c9a7bc13241
|
data/api_sim.gemspec
CHANGED
@@ -22,6 +22,7 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_dependency "sinatra", '~> 1.0'
|
23
23
|
spec.add_dependency "nokogiri", '~> 1.6.7'
|
24
24
|
spec.add_dependency "json-schema", '>= 2.5'
|
25
|
+
spec.add_dependency "mustermann", '~> 1.0.0.beta2'
|
25
26
|
spec.add_development_dependency "bundler", "~> 1.11"
|
26
27
|
spec.add_development_dependency "rake", "~> 10.0"
|
27
28
|
spec.add_development_dependency "rspec", "~> 3.0"
|
data/lib/api_sim/built_app.rb
CHANGED
@@ -4,9 +4,11 @@ require 'json'
|
|
4
4
|
require 'tilt/erb'
|
5
5
|
require 'api_sim/view_helpers'
|
6
6
|
require 'json-schema'
|
7
|
+
require 'mustermann'
|
7
8
|
|
8
9
|
module ApiSim
|
9
10
|
class BuiltApp < Sinatra::Base
|
11
|
+
API_REQUEST_MATCHER = Mustermann.new('/requests/:method{+path}')
|
10
12
|
use Rack::MethodOverride
|
11
13
|
|
12
14
|
helpers do
|
@@ -69,9 +71,8 @@ module ApiSim
|
|
69
71
|
end
|
70
72
|
|
71
73
|
get '/requests/*' do
|
72
|
-
|
73
|
-
|
74
|
-
endpoint = find_matching_endpoint(endpoint_name, http_method)
|
74
|
+
params = API_REQUEST_MATCHER.match(request.path) || halt(404)
|
75
|
+
endpoint = matcher(faux_request(params['method'], params['path']))
|
75
76
|
|
76
77
|
halt(404) unless endpoint
|
77
78
|
endpoint.requests.to_json
|
@@ -88,21 +89,6 @@ module ApiSim
|
|
88
89
|
|
89
90
|
private
|
90
91
|
|
91
|
-
def find_matching_endpoint(endpoint_name, http_method)
|
92
|
-
matching_endpoints = active_endpoints.select do |endpoint|
|
93
|
-
endpoint.route == "/#{endpoint_name}"
|
94
|
-
end
|
95
|
-
|
96
|
-
case matching_endpoints.size
|
97
|
-
when 0
|
98
|
-
nil
|
99
|
-
when 1
|
100
|
-
matching_endpoints.first
|
101
|
-
else
|
102
|
-
matching_endpoints.find { |endpoint| endpoint.http_method =~ /#{http_method}/i }
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
92
|
def active_endpoints
|
107
93
|
self.class.endpoints.reject(&:overridden?)
|
108
94
|
end
|
@@ -171,11 +157,6 @@ module ApiSim
|
|
171
157
|
@response_body.empty? ? {} : @response_body
|
172
158
|
end
|
173
159
|
|
174
|
-
def parse_endpoint_from_request(request)
|
175
|
-
path_matcher = request.path.match(/\/requests\/([\w\/_-]*)/)
|
176
|
-
path_matcher.size == 2 ? path_matcher[1] : nil
|
177
|
-
end
|
178
|
-
|
179
160
|
def schema_validates?(endpoint)
|
180
161
|
if blank?(endpoint.request_schema) || request.env['CONTENT_TYPE'] != 'application/json'
|
181
162
|
true
|
@@ -54,14 +54,7 @@ module ApiSim
|
|
54
54
|
protected
|
55
55
|
|
56
56
|
def matches_route_pattern?(request)
|
57
|
-
|
58
|
-
request_tokens = request.path.split('/')
|
59
|
-
|
60
|
-
return false if route_tokens.count != request_tokens.count && !route_tokens.include?('*')
|
61
|
-
route_tokens.zip(request_tokens).all? do |matcher_part, request_part|
|
62
|
-
break true if matcher_part == '*'
|
63
|
-
matcher_part == request_part || matcher_part.start_with?(':')
|
64
|
-
end
|
57
|
+
route.match(request.path)
|
65
58
|
end
|
66
59
|
end
|
67
60
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'forwardable'
|
2
|
+
require 'mustermann'
|
2
3
|
require 'api_sim/recorded_request'
|
3
4
|
require 'api_sim/matchers/base_matcher'
|
4
5
|
|
@@ -9,7 +10,7 @@ module ApiSim
|
|
9
10
|
|
10
11
|
def initialize(http_method:, route:, response_generator:, default: false, matcher: ALWAYS_TRUE_MATCHER)
|
11
12
|
@matcher = matcher
|
12
|
-
@route = route
|
13
|
+
@route = Mustermann.new(route)
|
13
14
|
@http_method = http_method
|
14
15
|
@default = default
|
15
16
|
@response_generator = response_generator
|
@@ -42,9 +43,7 @@ module ApiSim
|
|
42
43
|
end
|
43
44
|
|
44
45
|
def [](requested_part)
|
45
|
-
@matcher.route.
|
46
|
-
":#{requested_part}" == matcher_part and break path_part
|
47
|
-
} || super
|
46
|
+
@matcher.route.match(path)[requested_part]
|
48
47
|
end
|
49
48
|
end
|
50
49
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'mustermann'
|
1
2
|
require 'api_sim/recorded_request'
|
2
3
|
require 'api_sim/matchers/base_matcher'
|
3
4
|
|
@@ -12,7 +13,7 @@ module ApiSim
|
|
12
13
|
@headers = headers
|
13
14
|
@response_body = response_body
|
14
15
|
@response_code = response_code
|
15
|
-
@route = route
|
16
|
+
@route = Mustermann.new(route)
|
16
17
|
@http_method = http_method
|
17
18
|
@schema = schema
|
18
19
|
end
|
@@ -21,7 +22,7 @@ module ApiSim
|
|
21
22
|
request.body.rewind
|
22
23
|
body = request.body.read
|
23
24
|
request.body.rewind
|
24
|
-
request.path
|
25
|
+
route.match(request.path) && request.request_method == http_method && matcher.match(body)
|
25
26
|
end
|
26
27
|
|
27
28
|
def match_on_body?
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'mustermann'
|
1
2
|
require 'api_sim/recorded_request'
|
2
3
|
require 'api_sim/matchers/base_matcher'
|
3
4
|
|
@@ -12,7 +13,7 @@ module ApiSim
|
|
12
13
|
@headers = args.fetch(:headers, {})
|
13
14
|
@response_body = args.fetch(:response_body, '')
|
14
15
|
@response_code = args.fetch(:response_code, 200)
|
15
|
-
@route = args.fetch(:route)
|
16
|
+
@route = Mustermann.new(args.fetch(:route))
|
16
17
|
@http_method = args.fetch(:http_method)
|
17
18
|
@schema = args.fetch(:schema, nil)
|
18
19
|
@request_schema = args.fetch(:request_schema, nil)
|
data/lib/api_sim/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: api_sim
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- TJ Taylor
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-10-
|
11
|
+
date: 2016-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sinatra
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '2.5'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: mustermann
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.0.0.beta2
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.0.0.beta2
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: bundler
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|