mirage 3.0.10 → 3.0.11

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
  SHA1:
3
- metadata.gz: 76e58c3eac183631006bdd36e2d7ba619d46e805
4
- data.tar.gz: b0193298986161038a60c3b93bcdc5fbd7bd55f0
3
+ metadata.gz: 2a243991a8b8aaa8643ddc35f9e4b817d4fd1642
4
+ data.tar.gz: 7ff22557aaf2b0d086595945bc44334c2c50a425
5
5
  SHA512:
6
- metadata.gz: 6279f2660b94299109de7effa803276cd96421b13144759e464d5df5719a57683cb1699e224739d5f8dcb433e1f418ca40337f97969fbb0cb8714a209bec5a60
7
- data.tar.gz: a956b41c885c0a7719c97dec4742113acf4edf44aa23aef486f90de3cb1b6e963b2b8e83fdaad356c55db5cf3078c4222e6a40668307a79ea374553026ddfe83
6
+ metadata.gz: bbe396329fc373749c1d9bb3c62a704a9e1acfd2b0a0f97e2f19561029d7a31a6b40fe6e62e0f76d1527172f1e154e1dc0be58ecc559e736e1b6b376f661e4c4
7
+ data.tar.gz: 1da9a76e891b9a7e682bd6bf757569a4aa700f924203bb16908310a8853392e27ca53c79ab50158ac6b8f696469c20a243d948b8e43633b632c72e1e46749441
data/.travis.yml CHANGED
@@ -1,3 +1,4 @@
1
1
  rvm:
2
2
  - '1.9.3'
3
- - '2.0.0'
3
+ - '2.0.0'
4
+ - '2.1.5'
data/Gemfile CHANGED
@@ -2,7 +2,6 @@ source 'https://rubygems.org'
2
2
 
3
3
  gem 'sinatra'
4
4
  gem 'childprocess'
5
- gem "waitforit"
6
5
  gem "thor"
7
6
  gem "ptools"
8
7
  gem "httparty"
data/Gemfile.lock CHANGED
@@ -2,7 +2,7 @@ GEM
2
2
  remote: https://rubygems.org/
3
3
  specs:
4
4
  addressable (2.3.5)
5
- backports (3.3.5)
5
+ backports (3.6.8)
6
6
  bouncy-castle-java (1.5.0147)
7
7
  builder (3.2.2)
8
8
  childprocess (0.3.9)
@@ -106,7 +106,6 @@ GEM
106
106
  tilt (~> 1.3)
107
107
  thor (0.18.1)
108
108
  tilt (1.4.1)
109
- waitforit (0.0.1)
110
109
  win32-api (1.5.0-x86-mingw32)
111
110
  win32-file (0.6.8)
112
111
  win32-api (>= 1.2.1)
@@ -141,4 +140,3 @@ DEPENDENCIES
141
140
  sinatra
142
141
  sinatra-contrib
143
142
  thor
144
- waitforit
data/README.md CHANGED
@@ -1,4 +1,3 @@
1
- [![Build Status](https://travis-ci.org/lashd/mirage.png)](https://travis-ci.org/lashd/mirage)
2
1
  Mirage
3
2
  ======
4
3
  Mirage aids testing of your applications by hosting mock responses so that your applications do not have to talk to real endpoints. It's accessible via HTTP and has a RESTful interface.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.0.10
1
+ 3.0.11
@@ -1,5 +1,9 @@
1
1
  require 'tempfile'
2
+ require 'wait_methods'
3
+
2
4
  module CommandLine
5
+ include Mirage::WaitMethods
6
+
3
7
  def run command
4
8
  output = Tempfile.new("child")
5
9
  Dir.chdir SCRATCH do
@@ -8,7 +12,7 @@ module CommandLine
8
12
  process.io.stdout = output
9
13
  process.io.stderr = output
10
14
  process.start
11
- wait_until(:timeout_after => 30.seconds) { process.exited? }
15
+ wait_until(:timeout_after => 30) { process.exited? }
12
16
  end
13
17
  File.read(output.path)
14
18
  end
@@ -30,4 +34,4 @@ module CommandLine
30
34
  end
31
35
 
32
36
  World CommandLine
33
- include CommandLine
37
+ include CommandLine
data/lib/mirage/client.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  $LOAD_PATH.unshift "#{File.dirname(__FILE__)}"
2
+ require 'wait_methods'
2
3
  require 'client/template'
3
4
  require 'client/error'
4
5
  require 'client/cli_bridge'
@@ -7,4 +8,4 @@ require 'client/template'
7
8
  require 'client/templates'
8
9
  require 'client/requests'
9
10
  require 'client/request'
10
- require 'client/client'
11
+ require 'client/client'
@@ -1,8 +1,8 @@
1
1
  require 'thor'
2
- require 'waitforit'
3
2
  require 'childprocess'
4
3
  require 'uri'
5
4
  require 'httparty'
5
+
6
6
  module Mirage
7
7
  class << self
8
8
 
@@ -30,7 +30,7 @@ module Mirage
30
30
  end
31
31
 
32
32
  Runner.new.invoke(:stop, [], options)
33
- rescue ClientError => e
33
+ rescue ClientError
34
34
  raise ClientError.new("Mirage is running multiple ports, please specify the port(s) see api/tests for details")
35
35
  end
36
36
 
@@ -52,6 +52,8 @@ module Mirage
52
52
 
53
53
  class Runner < Thor
54
54
  include CLIBridge
55
+ include Mirage::WaitMethods
56
+
55
57
  RUBY_CMD = ChildProcess.jruby? ? 'jruby' : 'ruby'
56
58
 
57
59
  desc "start", "Starts mirage"
@@ -79,7 +81,7 @@ module Mirage
79
81
  command = command.concat(options.to_a).flatten.collect { |arg| arg.to_s }
80
82
  ChildProcess.build(*command).start
81
83
 
82
- wait_until(:timeout_after => 30.seconds) { Mirage.running?(options) }
84
+ wait_until(:timeout_after => 30) { Mirage.running?(options) }
83
85
 
84
86
  begin
85
87
  Mirage::Client.new(options).prime
@@ -100,4 +102,4 @@ module Mirage
100
102
  end
101
103
 
102
104
  end
103
- end
105
+ end
@@ -0,0 +1,24 @@
1
+ module Mirage
2
+
3
+ class TimeoutException < Exception
4
+ end
5
+
6
+
7
+ # module WaitMethods - contains methods for waiting
8
+ module WaitMethods
9
+ # Wait until a the supplied block returns true
10
+ # @example
11
+ # wait_until do
12
+ # (rand % 2) == 0
13
+ # end
14
+ def wait_until(opts = {})
15
+ opts = {timeout_after: 5, retry_every: 0.1}.merge(opts)
16
+ start_time = Time.now
17
+ until Time.now > start_time + opts[:timeout_after]
18
+ return true if yield == true
19
+ sleep opts[:retry_every]
20
+ end
21
+ fail TimeoutException, 'Action took to long'
22
+ end
23
+ end
24
+ end
data/mirage.gemspec CHANGED
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: mirage 3.0.10 ruby lib
5
+ # stub: mirage 3.0.11 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "mirage"
9
- s.version = "3.0.10"
9
+ s.version = "3.0.11"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Leon Davis"]
14
- s.date = "2015-04-16"
14
+ s.date = "2016-03-22"
15
15
  s.description = "Mirage aids testing of your applications by hosting mock responses so that your applications do not have to talk to real endpoints. Its accessible via HTTP and has a RESTful interface."
16
16
  s.executables = ["mirage"]
17
17
  s.extra_rdoc_files = [
@@ -83,6 +83,7 @@ Gem::Specification.new do |s|
83
83
  "lib/mirage/client/template/model/common_methods.rb",
84
84
  "lib/mirage/client/template/model/instance_methods.rb",
85
85
  "lib/mirage/client/templates.rb",
86
+ "lib/mirage/wait_methods.rb",
86
87
  "mirage.gemspec",
87
88
  "mirage_server.rb",
88
89
  "server/app.rb",
@@ -95,18 +96,19 @@ Gem::Specification.new do |s|
95
96
  "server/mock_response.rb",
96
97
  "server/mock_response_set.rb",
97
98
  "server/server.rb",
98
- "spec/client/cli_bridge_spec.rb",
99
- "spec/client/client_spec.rb",
100
- "spec/client/helpers/method_builder_spec.rb",
101
- "spec/client/request_spec.rb",
102
- "spec/client/requests_spec.rb",
103
- "spec/client/runner_spec.rb",
104
- "spec/client/template/configuration_spec.rb",
105
- "spec/client/template/model/common_methods_spec.rb",
106
- "spec/client/template/model/instance_methods_spec.rb",
107
- "spec/client/template/model_spec.rb",
108
- "spec/client/template_spec.rb",
109
- "spec/client/templates_spec.rb",
99
+ "spec/mirage/client/cli_bridge_spec.rb",
100
+ "spec/mirage/client/client_spec.rb",
101
+ "spec/mirage/client/helpers/method_builder_spec.rb",
102
+ "spec/mirage/client/request_spec.rb",
103
+ "spec/mirage/client/requests_spec.rb",
104
+ "spec/mirage/client/runner_spec.rb",
105
+ "spec/mirage/client/template/configuration_spec.rb",
106
+ "spec/mirage/client/template/model/common_methods_spec.rb",
107
+ "spec/mirage/client/template/model/instance_methods_spec.rb",
108
+ "spec/mirage/client/template/model_spec.rb",
109
+ "spec/mirage/client/template_spec.rb",
110
+ "spec/mirage/client/templates_spec.rb",
111
+ "spec/mirage/wait_methods_spec.rb",
110
112
  "spec/resources/binary.file",
111
113
  "spec/server/binary_data_checker_spec.rb",
112
114
  "spec/server/helpers/http_headers_spec.rb",
@@ -124,7 +126,7 @@ Gem::Specification.new do |s|
124
126
  s.homepage = "https://github.com/lashd/mirage"
125
127
  s.licenses = ["MIT"]
126
128
  s.post_install_message = "\n===============================================================================\nMirage v3:\n\nMirage has just gone up a major version from 2 to 3. If your project uses\na previous version take a look at https://github.com/lashd/mirage to see\nwhat's changed\n===============================================================================\n"
127
- s.rubygems_version = "2.2.2"
129
+ s.rubygems_version = "2.3.0"
128
130
  s.summary = "Mirage is a easy mock server for testing your applications"
129
131
 
130
132
  if s.respond_to? :specification_version then
@@ -133,7 +135,6 @@ Gem::Specification.new do |s|
133
135
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
134
136
  s.add_runtime_dependency(%q<sinatra>, [">= 0"])
135
137
  s.add_runtime_dependency(%q<childprocess>, [">= 0"])
136
- s.add_runtime_dependency(%q<waitforit>, [">= 0"])
137
138
  s.add_runtime_dependency(%q<thor>, [">= 0"])
138
139
  s.add_runtime_dependency(%q<ptools>, [">= 0"])
139
140
  s.add_runtime_dependency(%q<httparty>, [">= 0"])
@@ -146,7 +147,6 @@ Gem::Specification.new do |s|
146
147
  else
147
148
  s.add_dependency(%q<sinatra>, [">= 0"])
148
149
  s.add_dependency(%q<childprocess>, [">= 0"])
149
- s.add_dependency(%q<waitforit>, [">= 0"])
150
150
  s.add_dependency(%q<thor>, [">= 0"])
151
151
  s.add_dependency(%q<ptools>, [">= 0"])
152
152
  s.add_dependency(%q<httparty>, [">= 0"])
@@ -160,7 +160,6 @@ Gem::Specification.new do |s|
160
160
  else
161
161
  s.add_dependency(%q<sinatra>, [">= 0"])
162
162
  s.add_dependency(%q<childprocess>, [">= 0"])
163
- s.add_dependency(%q<waitforit>, [">= 0"])
164
163
  s.add_dependency(%q<thor>, [">= 0"])
165
164
  s.add_dependency(%q<ptools>, [">= 0"])
166
165
  s.add_dependency(%q<httparty>, [">= 0"])
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,42 @@
1
+ require 'mirage/wait_methods'
2
+ module Mirage
3
+ describe WaitMethods do
4
+ subject do
5
+ Object.new.tap do |o|
6
+ o.extend(described_class)
7
+ end
8
+ end
9
+
10
+ let(:default_options) { { timeout_after: 0.1, retry_every: 0.05 } }
11
+
12
+ it 'waits until the prescribed thing has happened' do
13
+ expect { subject.wait_until(default_options) { true } }.to_not raise_exception
14
+ end
15
+
16
+ it 'should keep trying for a specified period' do
17
+ start_time = Time.now
18
+
19
+ expect { subject.wait_until(default_options) { false } }.to raise_exception TimeoutException
20
+
21
+ expect(Time.now - default_options[:timeout_after]).to be > start_time
22
+ end
23
+
24
+ context 'timeout_after specified' do
25
+ it 'throws an exception if when the prescribed action does not happen in time' do
26
+ expect { subject.wait_until(default_options) { false } }.to raise_error TimeoutException
27
+ end
28
+ end
29
+
30
+ context 'retry time specified' do
31
+ it 'retries at the given interval' do
32
+ count = 0
33
+ expect do
34
+ subject.wait_until(timeout_after: default_options[:timeout_after] * 2, retry_every: 0.1) do
35
+ count += 1
36
+ end
37
+ end.to raise_exception TimeoutException
38
+ expect(count).to eq(2)
39
+ end
40
+ end
41
+ end
42
+ end
metadata CHANGED
@@ -1,181 +1,167 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mirage
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.10
4
+ version: 3.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Leon Davis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-16 00:00:00.000000000 Z
11
+ date: 2016-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sinatra
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: '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
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: childprocess
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: waitforit
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
38
+ - - '>='
53
39
  - !ruby/object:Gem::Version
54
40
  version: '0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: thor
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
- - - ">="
45
+ - - '>='
60
46
  - !ruby/object:Gem::Version
61
47
  version: '0'
62
48
  type: :runtime
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
- - - ">="
52
+ - - '>='
67
53
  - !ruby/object:Gem::Version
68
54
  version: '0'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: ptools
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
- - - ">="
59
+ - - '>='
74
60
  - !ruby/object:Gem::Version
75
61
  version: '0'
76
62
  type: :runtime
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
- - - ">="
66
+ - - '>='
81
67
  - !ruby/object:Gem::Version
82
68
  version: '0'
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: httparty
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
- - - ">="
73
+ - - '>='
88
74
  - !ruby/object:Gem::Version
89
75
  version: '0'
90
76
  type: :runtime
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
- - - ">="
80
+ - - '>='
95
81
  - !ruby/object:Gem::Version
96
82
  version: '0'
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: haml
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
- - - ">="
87
+ - - '>='
102
88
  - !ruby/object:Gem::Version
103
89
  version: '0'
104
90
  type: :runtime
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
- - - ">="
94
+ - - '>='
109
95
  - !ruby/object:Gem::Version
110
96
  version: '0'
111
97
  - !ruby/object:Gem::Dependency
112
98
  name: hashie
113
99
  requirement: !ruby/object:Gem::Requirement
114
100
  requirements:
115
- - - ">="
101
+ - - '>='
116
102
  - !ruby/object:Gem::Version
117
103
  version: '0'
118
104
  type: :runtime
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
107
  requirements:
122
- - - ">="
108
+ - - '>='
123
109
  - !ruby/object:Gem::Version
124
110
  version: '0'
125
111
  - !ruby/object:Gem::Dependency
126
112
  name: rake
127
113
  requirement: !ruby/object:Gem::Requirement
128
114
  requirements:
129
- - - ">="
115
+ - - '>='
130
116
  - !ruby/object:Gem::Version
131
117
  version: '0'
132
118
  type: :development
133
119
  prerelease: false
134
120
  version_requirements: !ruby/object:Gem::Requirement
135
121
  requirements:
136
- - - ">="
122
+ - - '>='
137
123
  - !ruby/object:Gem::Version
138
124
  version: '0'
139
125
  - !ruby/object:Gem::Dependency
140
126
  name: jeweler
141
127
  requirement: !ruby/object:Gem::Requirement
142
128
  requirements:
143
- - - ">="
129
+ - - '>='
144
130
  - !ruby/object:Gem::Version
145
131
  version: '0'
146
132
  type: :development
147
133
  prerelease: false
148
134
  version_requirements: !ruby/object:Gem::Requirement
149
135
  requirements:
150
- - - ">="
136
+ - - '>='
151
137
  - !ruby/object:Gem::Version
152
138
  version: '0'
153
139
  - !ruby/object:Gem::Dependency
154
140
  name: sinatra-contrib
155
141
  requirement: !ruby/object:Gem::Requirement
156
142
  requirements:
157
- - - ">="
143
+ - - '>='
158
144
  - !ruby/object:Gem::Version
159
145
  version: '0'
160
146
  type: :development
161
147
  prerelease: false
162
148
  version_requirements: !ruby/object:Gem::Requirement
163
149
  requirements:
164
- - - ">="
150
+ - - '>='
165
151
  - !ruby/object:Gem::Version
166
152
  version: '0'
167
153
  - !ruby/object:Gem::Dependency
168
154
  name: jruby-openssl
169
155
  requirement: !ruby/object:Gem::Requirement
170
156
  requirements:
171
- - - ">="
157
+ - - '>='
172
158
  - !ruby/object:Gem::Version
173
159
  version: '0'
174
160
  type: :development
175
161
  prerelease: false
176
162
  version_requirements: !ruby/object:Gem::Requirement
177
163
  requirements:
178
- - - ">="
164
+ - - '>='
179
165
  - !ruby/object:Gem::Version
180
166
  version: '0'
181
167
  description: Mirage aids testing of your applications by hosting mock responses so
@@ -188,10 +174,10 @@ extensions: []
188
174
  extra_rdoc_files:
189
175
  - README.md
190
176
  files:
191
- - ".ruby-gemset"
192
- - ".ruby-version"
193
- - ".simplecov"
194
- - ".travis.yml"
177
+ - .ruby-gemset
178
+ - .ruby-version
179
+ - .simplecov
180
+ - .travis.yml
195
181
  - Gemfile
196
182
  - Gemfile.lock
197
183
  - HISTORY
@@ -253,6 +239,7 @@ files:
253
239
  - lib/mirage/client/template/model/common_methods.rb
254
240
  - lib/mirage/client/template/model/instance_methods.rb
255
241
  - lib/mirage/client/templates.rb
242
+ - lib/mirage/wait_methods.rb
256
243
  - mirage.gemspec
257
244
  - mirage_server.rb
258
245
  - server/app.rb
@@ -265,18 +252,19 @@ files:
265
252
  - server/mock_response.rb
266
253
  - server/mock_response_set.rb
267
254
  - server/server.rb
268
- - spec/client/cli_bridge_spec.rb
269
- - spec/client/client_spec.rb
270
- - spec/client/helpers/method_builder_spec.rb
271
- - spec/client/request_spec.rb
272
- - spec/client/requests_spec.rb
273
- - spec/client/runner_spec.rb
274
- - spec/client/template/configuration_spec.rb
275
- - spec/client/template/model/common_methods_spec.rb
276
- - spec/client/template/model/instance_methods_spec.rb
277
- - spec/client/template/model_spec.rb
278
- - spec/client/template_spec.rb
279
- - spec/client/templates_spec.rb
255
+ - spec/mirage/client/cli_bridge_spec.rb
256
+ - spec/mirage/client/client_spec.rb
257
+ - spec/mirage/client/helpers/method_builder_spec.rb
258
+ - spec/mirage/client/request_spec.rb
259
+ - spec/mirage/client/requests_spec.rb
260
+ - spec/mirage/client/runner_spec.rb
261
+ - spec/mirage/client/template/configuration_spec.rb
262
+ - spec/mirage/client/template/model/common_methods_spec.rb
263
+ - spec/mirage/client/template/model/instance_methods_spec.rb
264
+ - spec/mirage/client/template/model_spec.rb
265
+ - spec/mirage/client/template_spec.rb
266
+ - spec/mirage/client/templates_spec.rb
267
+ - spec/mirage/wait_methods_spec.rb
280
268
  - spec/resources/binary.file
281
269
  - spec/server/binary_data_checker_spec.rb
282
270
  - spec/server/helpers/http_headers_spec.rb
@@ -308,17 +296,17 @@ require_paths:
308
296
  - lib
309
297
  required_ruby_version: !ruby/object:Gem::Requirement
310
298
  requirements:
311
- - - ">="
299
+ - - '>='
312
300
  - !ruby/object:Gem::Version
313
301
  version: '0'
314
302
  required_rubygems_version: !ruby/object:Gem::Requirement
315
303
  requirements:
316
- - - ">="
304
+ - - '>='
317
305
  - !ruby/object:Gem::Version
318
306
  version: '0'
319
307
  requirements: []
320
308
  rubyforge_project:
321
- rubygems_version: 2.2.2
309
+ rubygems_version: 2.3.0
322
310
  signing_key:
323
311
  specification_version: 4
324
312
  summary: Mirage is a easy mock server for testing your applications