api_sim 5.1.0 → 8.0.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
- SHA1:
3
- metadata.gz: c78fb49e9b8055b9c57b7d929f14e3ccdc550400
4
- data.tar.gz: f366b4b136aa46472c39ec18e2be8e66032e01ac
2
+ SHA256:
3
+ metadata.gz: 327685bacf8a6f9deecaa212e828fb2357c733f56ff84b34e55d883014c54d01
4
+ data.tar.gz: bf1feab48cb25aadbbca0f5a6602c1ed47c4781b40833033857f1c0a40dfac62
5
5
  SHA512:
6
- metadata.gz: 46122772e2556bc430916fa25d89f0cdbbb864ef1d980a6644674da31f7133038ca2b3af48ca393544e0d0077c686e7f811f54cbc0a363ba16827d6bfe639490
7
- data.tar.gz: c42b0887edaed2dad8ffde3f39d6bf661607e89828041f2e6cda7729a927f55ec0374b21a6fe9761f7e01f9934b1bfb1c2c72942555be7db33e0acd592edf49a
6
+ metadata.gz: fdd5e1c789269cd0bd2e87e5a9616987f4ff726406e43f9070e668120e2fc548de0dd5d5434c77273bb55cb850b7e357976b27cdc12f2c51c00277af698782b5
7
+ data.tar.gz: 887ab0200e2597021038c29f2f518b0f8c3d48f68160c54cecd738325ee59fd137ab758f6b05d3ed3f4d52fff241f656fdd3c22cad21f31ca5fbc51633b004a0
@@ -1,3 +1,3 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.3.0
3
+ - 2.7.0
data/README.md CHANGED
@@ -54,12 +54,62 @@ After which the simulators should be running on port 9292.
54
54
 
55
55
  ## API
56
56
 
57
+ API Sim has an HTTP API that allows you, the developer, to manage responses and verify
58
+ requests.
59
+
60
+ ### The "Request/Response" API
61
+
62
+
63
+ #### Modify the response from an endpoint
64
+
65
+ The star in the path should match the request path that you want to update.
66
+ The "method" in the PUT request should match the HTTP method for the request.
67
+ ```HTTP
68
+ HTTP/1.1 PUT /response/*
69
+ {
70
+ "method": "post",
71
+ "status": 999,
72
+ "body": "{\"id\": 99}",
73
+ "headers": {"NEW-HEADER": "output"}
74
+ }
75
+ ```
76
+
77
+
78
+
79
+ #### Read requests made to an endpoint
80
+
81
+ The star in the path should match the path that you want to retrieve requests for.
82
+ ```HTTP
83
+ GET /requests/:method/*
84
+ ```
85
+
86
+ ```HTTP
87
+ HTTP/1.1 200 OK
88
+
89
+ [
90
+ {}
91
+ ]
92
+ ```
93
+
94
+ ### 498
95
+
57
96
  The API that these simulators generate can get pretty smart. To help you, the user,
58
97
  distinguish between failures and "smarts", we've made up an HTTP status code: 498.
59
98
  This code means "we received a request that did not match an expected schema". If you
60
99
  provide the simulators with a request schema for an endpoint, all requests must match
61
100
  that schema. If they do not, they'll receive our fictional status code.
62
101
 
102
+ ## UI
103
+
104
+ The simulator application has a UI for manipulating and monitoring requests and responses.
105
+ You can view this UI by visiting `/ui` at the URL of the simulator.
106
+
107
+ Additionally, you can configure the endpoint for viewing the UI by adding to your config.ru.
108
+
109
+ ```ruby
110
+ ui_root '/path/to/ui'
111
+ ```
112
+
63
113
  ## Development
64
114
 
65
115
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -19,12 +19,12 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ["lib"]
21
21
 
22
- spec.add_dependency "sinatra", '~> 1.0'
23
- spec.add_dependency "nokogiri", '~> 1.6.7'
22
+ spec.add_dependency "sinatra", '~> 2.0'
23
+ spec.add_dependency "nokogiri", '~> 1.6'
24
24
  spec.add_dependency "json-schema", '>= 2.5'
25
25
  spec.add_dependency "mustermann", '~> 1.0.0.beta2'
26
- spec.add_development_dependency "bundler", "~> 1.11"
26
+ spec.add_development_dependency "bundler", "~> 2.1"
27
27
  spec.add_development_dependency "rake", "~> 10.0"
28
28
  spec.add_development_dependency "rspec", "~> 3.0"
29
- spec.add_development_dependency "capybara", "~> 2.7.0"
29
+ spec.add_development_dependency "capybara", "~> 2.7"
30
30
  end
@@ -1,32 +1,32 @@
1
1
  PATH
2
2
  remote: ../..
3
3
  specs:
4
- api_sim (5.0.0)
4
+ api_sim (7.0.0)
5
5
  json-schema (>= 2.5)
6
6
  mustermann (~> 1.0.0.beta2)
7
- nokogiri (~> 1.6.7)
8
- sinatra (~> 1.0)
7
+ nokogiri (~> 1.6)
8
+ sinatra (~> 1.4)
9
9
 
10
10
  GEM
11
11
  remote: https://rubygems.org/
12
12
  specs:
13
- addressable (2.5.1)
14
- public_suffix (~> 2.0, >= 2.0.2)
15
- json-schema (2.8.0)
13
+ addressable (2.7.0)
14
+ public_suffix (>= 2.0.2, < 5.0)
15
+ json-schema (2.8.1)
16
16
  addressable (>= 2.4)
17
- mini_portile2 (2.1.0)
18
- mustermann (1.0.0)
19
- nokogiri (1.6.8.1)
20
- mini_portile2 (~> 2.1.0)
21
- public_suffix (2.0.5)
22
- rack (1.6.5)
23
- rack-protection (1.5.3)
17
+ mini_portile2 (2.4.0)
18
+ mustermann (1.0.3)
19
+ nokogiri (1.10.7)
20
+ mini_portile2 (~> 2.4.0)
21
+ public_suffix (4.0.1)
22
+ rack (1.6.11)
23
+ rack-protection (1.5.5)
24
24
  rack
25
25
  sinatra (1.4.8)
26
26
  rack (~> 1.5)
27
27
  rack-protection (~> 1.4)
28
28
  tilt (>= 1.3, < 3)
29
- tilt (2.0.7)
29
+ tilt (2.0.10)
30
30
 
31
31
  PLATFORMS
32
32
  ruby
@@ -35,4 +35,4 @@ DEPENDENCIES
35
35
  api_sim!
36
36
 
37
37
  BUNDLED WITH
38
- 1.14.6
38
+ 1.17.2
@@ -3,7 +3,7 @@ require 'api_sim'
3
3
  ENDPOINT_JSON_SCHEMA = {type: "object", properties: {a: {type: "integer"}}}.to_json
4
4
 
5
5
  app = ApiSim.build_app do
6
- configure_endpoint 'GET', '/endpoint?queryParam=foo', 'Hi!', 200, {'X-CUSTOM-HEADER' => 'easy as abc'}, ENDPOINT_JSON_SCHEMA
6
+ configure_endpoint 'GET', '/endpoint?queryParam=foo', 'Hi!', 201, {'X-CUSTOM-HEADER' => 'easy as abc'}, ENDPOINT_JSON_SCHEMA
7
7
  configure_endpoint 'GET', '/endpoint', 'Hi!', 200, {'X-CUSTOM-HEADER' => 'easy as abc'}, ENDPOINT_JSON_SCHEMA
8
8
  configure_endpoint 'GET', '/begin/:middle/end', 'You found an any-value path', 200, {'CONTENT-TYPE' => 'application/json'}
9
9
 
@@ -1,31 +1,34 @@
1
1
  PATH
2
- remote: ../../
2
+ remote: ../..
3
3
  specs:
4
- api_sim (2.2.0)
4
+ api_sim (7.0.0)
5
5
  json-schema (>= 2.5)
6
- nokogiri (~> 1.6.7)
7
- sinatra (~> 1.0)
6
+ mustermann (~> 1.0.0.beta2)
7
+ nokogiri (~> 1.6)
8
+ sinatra (~> 1.4)
8
9
 
9
10
  GEM
10
11
  remote: https://rubygems.org/
11
12
  specs:
12
- addressable (2.3.8)
13
- json-schema (2.6.2)
14
- addressable (~> 2.3.8)
15
- mini_portile2 (2.1.0)
16
- nokogiri (1.6.8)
17
- mini_portile2 (~> 2.1.0)
18
- pkg-config (~> 1.1.7)
19
- pkg-config (1.1.7)
20
- rack (1.6.4)
21
- rack-cors (0.4.0)
22
- rack-protection (1.5.3)
13
+ addressable (2.7.0)
14
+ public_suffix (>= 2.0.2, < 5.0)
15
+ json-schema (2.8.1)
16
+ addressable (>= 2.4)
17
+ mini_portile2 (2.4.0)
18
+ mustermann (1.0.3)
19
+ nokogiri (1.10.7)
20
+ mini_portile2 (~> 2.4.0)
21
+ public_suffix (4.0.1)
22
+ rack (1.6.11)
23
+ rack-cors (1.0.6)
24
+ rack (>= 1.6.0)
25
+ rack-protection (1.5.5)
23
26
  rack
24
- sinatra (1.4.7)
27
+ sinatra (1.4.8)
25
28
  rack (~> 1.5)
26
29
  rack-protection (~> 1.4)
27
30
  tilt (>= 1.3, < 3)
28
- tilt (2.0.5)
31
+ tilt (2.0.10)
29
32
 
30
33
  PLATFORMS
31
34
  ruby
@@ -35,4 +38,4 @@ DEPENDENCIES
35
38
  rack-cors
36
39
 
37
40
  BUNDLED WITH
38
- 1.12.5
41
+ 1.17.2
@@ -1,30 +1,32 @@
1
1
  PATH
2
- remote: ../../
2
+ remote: ../..
3
3
  specs:
4
- api_sim (2.2.0)
4
+ api_sim (7.0.0)
5
5
  json-schema (>= 2.5)
6
- nokogiri (~> 1.6.7)
7
- sinatra (~> 1.0)
6
+ mustermann (~> 1.0.0.beta2)
7
+ nokogiri (~> 1.6)
8
+ sinatra (~> 1.4)
8
9
 
9
10
  GEM
10
11
  remote: https://rubygems.org/
11
12
  specs:
12
- addressable (2.3.8)
13
- json-schema (2.6.2)
14
- addressable (~> 2.3.8)
15
- mini_portile2 (2.1.0)
16
- nokogiri (1.6.8)
17
- mini_portile2 (~> 2.1.0)
18
- pkg-config (~> 1.1.7)
19
- pkg-config (1.1.7)
20
- rack (1.6.4)
21
- rack-protection (1.5.3)
13
+ addressable (2.7.0)
14
+ public_suffix (>= 2.0.2, < 5.0)
15
+ json-schema (2.8.1)
16
+ addressable (>= 2.4)
17
+ mini_portile2 (2.4.0)
18
+ mustermann (1.0.3)
19
+ nokogiri (1.10.7)
20
+ mini_portile2 (~> 2.4.0)
21
+ public_suffix (4.0.1)
22
+ rack (1.6.11)
23
+ rack-protection (1.5.5)
22
24
  rack
23
- sinatra (1.4.7)
25
+ sinatra (1.4.8)
24
26
  rack (~> 1.5)
25
27
  rack-protection (~> 1.4)
26
28
  tilt (>= 1.3, < 3)
27
- tilt (2.0.5)
29
+ tilt (2.0.10)
28
30
 
29
31
  PLATFORMS
30
32
  ruby
@@ -33,4 +35,4 @@ DEPENDENCIES
33
35
  api_sim!
34
36
 
35
37
  BUNDLED WITH
36
- 1.12.5
38
+ 1.17.2
@@ -1,30 +1,8 @@
1
1
  require 'api_sim'
2
2
  require 'find'
3
3
 
4
- DATA_DIR = File.expand_path('./data', __dir__)
5
- endpoints = []
6
- Find.find(DATA_DIR) do |path|
7
- next if Dir.exist?(path) # Skip directories
8
- http_method = File.basename(path, '.json') # our files are their HTTP method with the mime-type as the extension
9
- route = File.dirname(path).gsub(DATA_DIR, '') # the endpoint URL is everything else
10
- response = JSON.parse(File.read(path))
11
- status = response['status']
12
- headers = response['headers']
13
- body = response['body'].to_json
14
- schema = response['schema'].to_json
15
- puts "Configuring endpoint #{http_method} #{route}"
16
- endpoints << [
17
- http_method,
18
- route,
19
- body,
20
- status,
21
- headers,
22
- schema
23
- ]
24
- end
25
-
26
4
  app = ApiSim.build_app do
27
- endpoints.each {|endpoint| configure_endpoint(*endpoint) }
5
+ configure_fixture_directory './data'
28
6
  end
29
7
 
30
8
  run app
@@ -9,9 +9,15 @@ module ApiSim
9
9
  config = self
10
10
  Sinatra.new(BuiltApp) do
11
11
  endpoints config.endpoint_configurations
12
+ ui_root config.ui_root || '/ui'
12
13
  end
13
14
  end
14
15
 
16
+ def ui_root(root = nil)
17
+ @ui_root = root if root
18
+ @ui_root
19
+ end
20
+
15
21
  def configure_endpoint(http_method, route, response_body, response_code=200, headers={}, schema_string='', request_schema: nil)
16
22
  endpoint_configurations.push(
17
23
  Matchers::StaticRequestMatcher.new(
@@ -48,14 +54,28 @@ module ApiSim
48
54
  headers: response[1],
49
55
  response_body: response[2],
50
56
  default: true,
51
- body_matches: matcher
57
+ body_matches: matcher,
52
58
  )
53
59
  )
54
60
  end
55
61
  end
56
62
 
63
+ def configure_fixture_directory(dir)
64
+ dir = dir.chomp('/')
65
+ Dir[File.join(dir, "**/*.json.erb")].each do |path|
66
+ endpoint_match = path.match(%r{#{dir}([/\w+\_\-]+)/(GET|POST|PATCH|OPTIONS|HEAD|PUT|DELETE).json})
67
+ config = JSON.parse(File.read(path))
68
+ configure_endpoint endpoint_match[2],
69
+ endpoint_match[1],
70
+ config['body'].to_json,
71
+ config['status'],
72
+ config['headers'],
73
+ config['schema'].to_json
74
+ end
75
+ end
76
+
57
77
  def endpoint_configurations
58
78
  @endpoint_configurations ||= []
59
79
  end
60
80
  end
61
- end
81
+ end
@@ -2,59 +2,27 @@ require 'sinatra/base'
2
2
  require 'nokogiri'
3
3
  require 'json'
4
4
  require 'tilt/erb'
5
- require 'api_sim/view_helpers'
6
5
  require 'json-schema'
7
6
  require 'mustermann'
7
+ require 'api_sim/view_helpers'
8
+ require 'api_sim/ui_app'
8
9
 
9
10
  module ApiSim
10
11
  class BuiltApp < Sinatra::Base
11
12
  API_REQUEST_MATCHER = Mustermann.new('/requests/:method{+path}')
12
13
  use Rack::MethodOverride
13
14
 
14
- helpers do
15
- include ViewHelpers
16
- end
17
-
18
15
  def self.endpoints(endpoints = nil)
19
16
  @endpoints = endpoints if endpoints
20
17
  return @endpoints
21
18
  end
22
19
 
23
- get '/' do
24
- erb :'index.html', layout: :'layout.html'
25
- end
26
-
27
- get '/ui/response/:method/*' do
28
- @config = matcher(faux_request(method: http_method, path: route, body: faux_body, query: request.query_string))
29
- erb :'responses/form.html', layout: :'layout.html'
30
- end
31
-
32
- get '/ui/requests/:method/*' do
33
- @config = matcher(faux_request(method: http_method, path: route, body: faux_body, query: request.query_string))
34
-
35
- erb :'requests/index.html', layout: :'layout.html'
36
- end
37
-
38
- post '/ui/response/:method/*' do
39
- @config = matcher(faux_request(method: http_method, path: route, body: faux_body, query: request.query_string))
40
- unless params['schema'].empty?
41
- @errors = JSON::Validator.fully_validate(JSON.parse(params['schema']), params['body'])
42
- if @errors.any?
43
- return erb :'responses/form.html', layout: :'layout.html'
44
- end
20
+ def self.ui_root(root = nil)
21
+ if root
22
+ @ui_root = root
23
+ self.register UiApp.with_root(root)
45
24
  end
46
- new_config = create_matcher_override(mimicked_request)
47
-
48
- self.class.endpoints.unshift(new_config)
49
- redirect to '/'
50
- end
51
-
52
- delete '/ui/response/:method/*' do
53
- all_matching_matchers = matchers(mimicked_request)
54
- all_matching_matchers.each &:reset!
55
- non_default_matchers = all_matching_matchers.reject(&:default)
56
- self.class.endpoints.delete_if { |endpoint| non_default_matchers.include?(endpoint) }
57
- redirect to '/'
25
+ @ui_root
58
26
  end
59
27
 
60
28
  put '/response/*' do
@@ -141,7 +109,8 @@ module ApiSim
141
109
 
142
110
  @response_body = case request.env['CONTENT_TYPE']
143
111
  when %r{application/json} then
144
- JSON.parse(request.body.read)
112
+ body = request.body.read
113
+ body.empty? ? {} : JSON.parse(body)
145
114
  when %r{text/xml} then
146
115
  Nokogiri::XML(request.body.read)
147
116
  when %r{application/x-www-form-urlencoded} then
@@ -165,6 +134,10 @@ module ApiSim
165
134
  end
166
135
  end
167
136
 
137
+ def route
138
+ "/#{params[:splat].first}"
139
+ end
140
+
168
141
  def blank?(item)
169
142
  item.nil? || item.empty?
170
143
  end
@@ -23,10 +23,10 @@ module ApiSim
23
23
  private
24
24
  def parse_headers_from(request_env)
25
25
  request_env.select do |k, v|
26
- k =~ /^HTTP_/
26
+ k =~ /^HTTP_/ || k =~ /CONTENT_TYPE/
27
27
  end.each_with_object({}) do |(k, v), h|
28
- h[k.split('_')[1..-1].join('-')] = v
29
- end.sort
28
+ h[k.gsub(/HTTP\_/, '').split('_').join('-').downcase] = v
29
+ end
30
30
  end
31
31
  end
32
32
  end
@@ -0,0 +1,50 @@
1
+ require 'sinatra/base'
2
+ require 'api_sim/view_helpers'
3
+
4
+ module ApiSim
5
+ module UiApp
6
+ def self.with_root(root)
7
+ Module.new do
8
+ def self.registered(app)
9
+ app.helpers ViewHelpers
10
+ app.get "#{app.ui_root}" do
11
+ erb :'index.html', layout: :'layout.html'
12
+ end
13
+
14
+ app.get "#{app.ui_root}/response/:method/*" do
15
+ @config = matcher(faux_request(method: http_method, path: route, body: faux_body, query: request.query_string))
16
+ erb :'responses/form.html', layout: :'layout.html'
17
+ end
18
+
19
+ app.get "#{app.ui_root}/requests/:method/*" do
20
+ @config = matcher(faux_request(method: http_method, path: route, body: faux_body, query: request.query_string))
21
+
22
+ erb :'requests/index.html', layout: :'layout.html'
23
+ end
24
+
25
+ app.post "#{app.ui_root}/response/:method/*" do
26
+ @config = matcher(faux_request(method: http_method, path: route, body: faux_body, query: request.query_string))
27
+ unless params['schema'].empty?
28
+ @errors = JSON::Validator.fully_validate(JSON.parse(params['schema']), params['body'])
29
+ if @errors.any?
30
+ return erb :'responses/form.html', layout: :'layout.html'
31
+ end
32
+ end
33
+ new_config = create_matcher_override(mimicked_request)
34
+
35
+ self.class.endpoints.unshift(new_config)
36
+ redirect to app.ui_root
37
+ end
38
+
39
+ app.delete "#{app.ui_root}/response/:method/*" do
40
+ all_matching_matchers = matchers(mimicked_request)
41
+ all_matching_matchers.each &:reset!
42
+ non_default_matchers = all_matching_matchers.reject(&:default)
43
+ self.class.endpoints.delete_if {|endpoint| non_default_matchers.include?(endpoint)}
44
+ redirect to app.ui_root
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -1,3 +1,3 @@
1
1
  module ApiSim
2
- VERSION = "5.1.0"
2
+ VERSION = "8.0.0"
3
3
  end
@@ -16,14 +16,10 @@ module ApiSim
16
16
  @config
17
17
  end
18
18
 
19
- def route
20
- "/#{params[:splat].first}"
21
- end
22
-
23
19
  def link_to_response_edit(endpoint)
24
20
  match = endpoint.match_on_body? ? endpoint.matcher.source : ''
25
21
  <<-HTML
26
- <a href="/ui/response/#{endpoint.http_method}#{endpoint.route}?match=#{match}">
22
+ <a href="#{ui_root}/response/#{endpoint.http_method}#{endpoint.route}?match=#{match}">
27
23
  #{endpoint.route}
28
24
  </a>
29
25
  HTML
@@ -36,7 +32,7 @@ module ApiSim
36
32
  def link_to_read_requests(endpoint)
37
33
  match = endpoint.match_on_body? ? endpoint.matcher.source : ''
38
34
  <<-HTML
39
- <a href="/ui/requests/#{endpoint.http_method}#{endpoint.route}?match=#{match}">
35
+ <a href="#{ui_root}/requests/#{endpoint.http_method}#{endpoint.route}?match=#{match}">
40
36
  #{endpoint.requests.count}
41
37
  </a>
42
38
  HTML
@@ -49,5 +45,9 @@ module ApiSim
49
45
  ''
50
46
  end
51
47
  end
48
+
49
+ def ui_root
50
+ self.class.ui_root
51
+ end
52
52
  end
53
- end
53
+ end
@@ -25,7 +25,7 @@
25
25
  <%= link_to_read_requests endpoint %>
26
26
  </td>
27
27
  <td>
28
- <form action="/ui/response/<%= endpoint.http_method %><%= endpoint.route %>" method="post">
28
+ <form action="<%= ui_root %>/response/<%= endpoint.http_method %><%= endpoint.route %>" method="post">
29
29
  <input type="hidden" value="delete" name="_method">
30
30
  <input type="hidden" value="<%= endpoint_match endpoint %>" name="match">
31
31
  <button class='btn-link' type="submit">Reset</button>
@@ -34,4 +34,4 @@
34
34
  </tr>
35
35
  <% end %>
36
36
  </tbody>
37
- </table>
37
+ </table>
@@ -30,7 +30,7 @@
30
30
  <td>
31
31
  <ul>
32
32
  <% request.headers.each do |header, value| %>
33
- <li><%= header %>: <%= value %></li>
33
+ <li><%= header.upcase %>: <%= value %></li>
34
34
  <% end %>
35
35
  </ul>
36
36
  </td>
@@ -2,7 +2,7 @@
2
2
  <h1>Simulators</h1>
3
3
  <h2>Response for <%= config.http_method %> <%= config.route %></h2>
4
4
  </div>
5
- <form action="/ui/response/<%= config.http_method %><%= config.route %>" method="post">
5
+ <form action="<%= ui_root %>/response/<%= config.http_method %><%= config.route %>" method="post">
6
6
  <div class="row">
7
7
  <% if @errors %>
8
8
  <div class="alert alert-danger">
@@ -51,4 +51,4 @@
51
51
  <button class='btn btn-primary' type="submit">Save</button>
52
52
  </div>
53
53
  </div>
54
- </form>
54
+ </form>
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: 5.1.0
4
+ version: 8.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: 2017-04-19 00:00:00.000000000 Z
11
+ date: 2020-06-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sinatra
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.0'
19
+ version: '2.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.0'
26
+ version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: nokogiri
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.6.7
33
+ version: '1.6'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.6.7
40
+ version: '1.6'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: json-schema
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '1.11'
75
+ version: '2.1'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '1.11'
82
+ version: '2.1'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rake
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -114,14 +114,14 @@ dependencies:
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 2.7.0
117
+ version: '2.7'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: 2.7.0
124
+ version: '2.7'
125
125
  description: A DSL on top of sinatra for building application simulators
126
126
  email:
127
127
  - dugancathal@gmail.com
@@ -150,7 +150,7 @@ files:
150
150
  - examples/with-fixtures/Gemfile
151
151
  - examples/with-fixtures/Gemfile.lock
152
152
  - examples/with-fixtures/config.ru
153
- - examples/with-fixtures/data/users/1/GET.json
153
+ - examples/with-fixtures/data/users/1/GET.json.erb
154
154
  - lib/api_sim.rb
155
155
  - lib/api_sim/app_builder.rb
156
156
  - lib/api_sim/built_app.rb
@@ -163,6 +163,7 @@ files:
163
163
  - lib/api_sim/public/app.js
164
164
  - lib/api_sim/public/favicon.ico
165
165
  - lib/api_sim/recorded_request.rb
166
+ - lib/api_sim/ui_app.rb
166
167
  - lib/api_sim/version.rb
167
168
  - lib/api_sim/view_helpers.rb
168
169
  - lib/api_sim/views/index.html.erb
@@ -188,8 +189,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
188
189
  - !ruby/object:Gem::Version
189
190
  version: '0'
190
191
  requirements: []
191
- rubyforge_project:
192
- rubygems_version: 2.4.5
192
+ rubygems_version: 3.1.2
193
193
  signing_key:
194
194
  specification_version: 4
195
195
  summary: A DSL on top of sinatra for building application simulators