webspicy 0.3.0 → 0.4.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
  SHA1:
3
- metadata.gz: d890646c50effb64a3d44939eb1e85bcf20f1e43
4
- data.tar.gz: d87ee755a543f0199b4e811ccde28ef800467c8d
3
+ metadata.gz: 316f44001f615a30f037e1bced5a2988df1e85c2
4
+ data.tar.gz: af13f64c5f2096dfaf1fea51dbc119a30a9ac4f6
5
5
  SHA512:
6
- metadata.gz: 73b92b474d1b94b5c0ed74b76e7363b3f8fd57c2f7a3e05ac2ddcbeb93364ba9f6b9272acbb71cb3d6171de320901931dcddfdf2ad7c2ae2415471c9c62b5144
7
- data.tar.gz: b7c1bdd9ed89ebd65c5364b3da910935ee13c108e1482628b335900781ce5f922dc71f806ecc8aaa0cf71deebcee82217caf6b1486527eea6153319f8ee62bb4
6
+ metadata.gz: d0c0c064b0c096fea8a4520356f08104dd796778b88c3564abdc5eb61adcb41d0ccf8e08fd513adc57f6f1cf6a88437a52ba15f72494cf09f45d2254899ed196
7
+ data.tar.gz: aba64e2492ba14d5f89f867508f3f737893b6d42cd2776dafc4932b8a1e8d93ca22461694161cc8da7e5a38238be940b7c08d1f11857fe2e4f854669ce2b8156
@@ -4,32 +4,18 @@ require 'webspicy'
4
4
 
5
5
  desc "Checks all .yml definition files"
6
6
  task :check do
7
- config = Webspicy::Configuration.new(Path.dir/"webspicy")
8
- Webspicy::Checker.new(config).call
7
+ Webspicy::Checker.new(Path.dir/'webspicy').call
9
8
  end
10
9
 
11
10
  namespace :test do
12
11
  desc "Run all tests directly on Sinatra application using rack/test"
13
12
  task :rack do
14
- config = Webspicy::Configuration.new(Path.dir/"webspicy") do |c|
15
- c.client = Webspicy::RackTestClient.for(::Sinatra::Application)
16
- c.before_each do |_,_,_,client|
17
- client.api.post "/reset"
18
- end
19
- end
20
- Webspicy::Tester.new(config).call
13
+ Webspicy::Tester.new(Path.dir/'webspicy/rack.rb').call
21
14
  end
22
15
 
23
16
  desc "Runs all tests on the real web server (must be launched previously)"
24
17
  task :real do
25
- config = Webspicy::Configuration.new(Path.dir/"webspicy") do |c|
26
- c.host = "http://127.0.0.1:4567"
27
- c.client = Webspicy::HttpClient
28
- c.before_each do |_,_,_,client|
29
- client.api.post "http://127.0.0.1:4567/reset"
30
- end
31
- end
32
- Webspicy::Tester.new(config).call
18
+ Webspicy::Tester.new(Path.dir/'webspicy/real.rb').call
33
19
  end
34
20
  end
35
21
 
@@ -0,0 +1 @@
1
+ Webspicy::Configuration.new(Path.dir)
@@ -0,0 +1,6 @@
1
+ Webspicy::Configuration.inherits(Path.dir) do |c|
2
+ c.client = Webspicy::RackTestClient.for(::Sinatra::Application)
3
+ c.before_each do |_,client|
4
+ client.api.post "/reset"
5
+ end
6
+ end
@@ -0,0 +1,7 @@
1
+ Webspicy::Configuration.inherits(Path.dir) do |c|
2
+ c.host = "http://127.0.0.1:4567"
3
+ c.client = Webspicy::HttpClient
4
+ c.before_each do |_,client|
5
+ client.api.post "http://127.0.0.1:4567/reset"
6
+ end
7
+ end
@@ -2,7 +2,7 @@ module Webspicy
2
2
  class Checker
3
3
 
4
4
  def initialize(config)
5
- @config = config
5
+ @config = Configuration.dress(config)
6
6
  end
7
7
  attr_reader :config
8
8
 
@@ -7,7 +7,9 @@ module Webspicy
7
7
  end
8
8
  attr_reader :api
9
9
 
10
- def call(test_case, service, resource)
10
+ def call(test_case)
11
+ service, resource = test_case.service, test_case.resource
12
+
11
13
  # Instantiate the parameters
12
14
  headers = test_case.headers
13
15
  params = test_case.dress_params? ? service.dress_params(test_case.params) : test_case.params
@@ -5,19 +5,24 @@ module Webspicy
5
5
  Factory.new(app)
6
6
  end
7
7
 
8
- def initialize(scope, app)
8
+ def initialize(scope, app, domain)
9
9
  super(scope)
10
10
  @api = Api.new(app)
11
+ @domain = domain
11
12
  end
12
13
  attr_reader :api
14
+ attr_reader :domain
15
+
16
+ def call(test_case)
17
+ service, resource = test_case.service, test_case.resource
13
18
 
14
- def call(test_case, service, resource)
15
19
  # Instantiate the parameters
16
- headers = test_case.headers
20
+ headers = test_case.headers.dup
17
21
  params = test_case.dress_params? ? service.dress_params(test_case.params) : test_case.params
18
22
 
19
23
  # Instantiate the url and strip parameters
20
24
  url, params = resource.instantiate_url(params)
25
+ url = "http://#{domain}#{url}" if domain
21
26
 
22
27
  # Invoke the service now
23
28
  api.public_send(service.method.to_s.downcase.to_sym, url, params, headers)
@@ -32,9 +37,15 @@ module Webspicy
32
37
  @app = app
33
38
  end
34
39
  attr_reader :app
40
+ attr_reader :domain
41
+
42
+ def on(domain)
43
+ @domain = domain
44
+ self
45
+ end
35
46
 
36
47
  def new(scope)
37
- RackTestClient.new(scope, app)
48
+ RackTestClient.new(scope, app, domain)
38
49
  end
39
50
 
40
51
  end # class Factory
@@ -5,17 +5,38 @@ module Webspicy
5
5
  @folder = folder
6
6
  @parent = parent
7
7
  @children = []
8
+ @preconditions = []
9
+ @postconditions = []
8
10
  @before_listeners = []
9
11
  @rspec_options = default_rspec_options
10
12
  @run_counterexamples = default_run_counterexamples
11
13
  @file_filter = default_file_filter
12
14
  @service_filter = default_service_filter
13
15
  @client = HttpClient
16
+ Path.require_tree(folder/'support') if (folder/'support').exists?
14
17
  yield(self) if block_given?
15
18
  end
16
19
  attr_accessor :folder
17
20
  protected :folder=
18
21
 
22
+ def self.dress(arg, &bl)
23
+ return arg if arg.is_a?(Configuration)
24
+ arg = Path(arg)
25
+ if arg.file?
26
+ c = Kernel.instance_eval arg.read, arg.to_s
27
+ yield(c) if block_given?
28
+ c
29
+ elsif (arg/'config.rb').file?
30
+ dress(arg/'config.rb', &bl)
31
+ else
32
+ raise ArgumentError, "Missing config.rb file"
33
+ end
34
+ end
35
+
36
+ def self.inherits(*args, &bl)
37
+ dress(*args, &bl)
38
+ end
39
+
19
40
  attr_accessor :parent
20
41
  protected :parent=
21
42
 
@@ -51,6 +72,20 @@ module Webspicy
51
72
  attr_accessor :children
52
73
  protected :children=
53
74
 
75
+ # Registers a precondition matcher
76
+ def precondition(clazz)
77
+ preconditions << clazz
78
+ end
79
+ attr_accessor :preconditions
80
+ protected :preconditions=
81
+
82
+ # Registers a postcondition matcher
83
+ def postcondition(clazz)
84
+ postconditions << clazz
85
+ end
86
+ attr_accessor :postconditions
87
+ protected :postconditions=
88
+
54
89
  # Returns whether this configuration has children configurations or not
55
90
  def has_children?
56
91
  !children.empty?
@@ -229,6 +264,8 @@ module Webspicy
229
264
  def dup(&bl)
230
265
  super.tap do |d|
231
266
  d.children = []
267
+ d.preconditions = self.preconditions.dup
268
+ d.postconditions = self.postconditions.dup
232
269
  d.rspec_options = self.rspec_options.dup
233
270
  d.before_listeners = self.before_listeners.dup
234
271
  yield d if block_given?
@@ -15,13 +15,13 @@ Resource =
15
15
 
16
16
  Service =
17
17
  .Webspicy::Resource::Service <info> {
18
- method : Method
19
- description : String
20
- preconditions : String
21
- postconditions :? String
22
- input_schema : Schema
23
- output_schema : Schema
24
- error_schema : Schema
18
+ method : Method
19
+ description : String
20
+ preconditions :? [String]|String
21
+ postconditions :? [String]|String
22
+ input_schema : Schema
23
+ output_schema : Schema
24
+ error_schema : Schema
25
25
  blackbox :? String
26
26
  examples :? [TestCase]
27
27
  counterexamples :? [TestCase]
@@ -141,6 +141,15 @@ module Webspicy
141
141
  unmet.empty? ? nil : unmet.join("\n")
142
142
  end
143
143
 
144
+ ### Check of postconditions
145
+
146
+ def postconditions_unmet
147
+ failures = service.postconditions.map{|post|
148
+ post.check(self)
149
+ }.compact
150
+ failures.empty? ? nil : failures.join("\n")
151
+ end
152
+
144
153
  private
145
154
 
146
155
  def loaded_body
@@ -6,6 +6,11 @@ module Webspicy
6
6
  def initialize(raw)
7
7
  @raw = raw
8
8
  end
9
+ attr_accessor :service
10
+
11
+ def resource
12
+ service.resource
13
+ end
9
14
 
10
15
  def self.info(raw)
11
16
  new(raw)
@@ -20,7 +25,7 @@ module Webspicy
20
25
  end
21
26
 
22
27
  def headers
23
- @raw[:headers] || {}
28
+ @raw[:headers] ||= {}
24
29
  end
25
30
 
26
31
  def dress_params
@@ -68,6 +73,16 @@ module Webspicy
68
73
  @raw
69
74
  end
70
75
 
76
+ def instrument
77
+ service.preconditions.each do |pre|
78
+ pre.ensure(self)
79
+ end
80
+ end
81
+
82
+ def to_s
83
+ description
84
+ end
85
+
71
86
  end # class TestCase
72
87
  end # class Service
73
88
  end # class Resource
@@ -4,7 +4,12 @@ module Webspicy
4
4
 
5
5
  def initialize(raw)
6
6
  @raw = raw
7
+ bind_examples
8
+ bind_counterexamples
9
+ @preconditions = compile_preconditions
10
+ @postconditions = compile_postconditions
7
11
  end
12
+ attr_accessor :resource
8
13
 
9
14
  def self.info(raw)
10
15
  new(raw)
@@ -14,6 +19,22 @@ module Webspicy
14
19
  @raw[:method]
15
20
  end
16
21
 
22
+ def preconditions
23
+ @preconditions
24
+ end
25
+
26
+ def has_preconditions?
27
+ !preconditions.empty?
28
+ end
29
+
30
+ def postconditions
31
+ @postconditions
32
+ end
33
+
34
+ def has_postconditions?
35
+ !postconditions.empty?
36
+ end
37
+
17
38
  def examples
18
39
  @raw[:examples]
19
40
  end
@@ -22,6 +43,16 @@ module Webspicy
22
43
  @raw[:counterexamples]
23
44
  end
24
45
 
46
+ def generated_counterexamples
47
+ preconditions.map{|pre|
48
+ pre.counterexamples(self).map{|tc|
49
+ tc = Webspicy.test_case(tc, Webspicy.current_scope)
50
+ tc.service = self
51
+ tc
52
+ }
53
+ }.flatten
54
+ end
55
+
25
56
  def input_schema
26
57
  @raw[:input_schema]
27
58
  end
@@ -42,6 +73,46 @@ module Webspicy
42
73
  @raw
43
74
  end
44
75
 
76
+ def to_s
77
+ "#{method} #{resource.url}"
78
+ end
79
+
80
+ private
81
+
82
+ def scope
83
+ Webspicy.current_scope
84
+ end
85
+
86
+ def compile_preconditions
87
+ @raw[:preconditions] = [@raw[:preconditions]] if @raw[:preconditions].is_a?(String)
88
+ compile_conditions(@raw[:preconditions] ||= [], scope.preconditions)
89
+ end
90
+
91
+ def compile_postconditions
92
+ @raw[:postconditions] = [@raw[:postconditions]] if @raw[:postconditions].is_a?(String)
93
+ compile_conditions(@raw[:postconditions] ||= [], scope.postconditions)
94
+ end
95
+
96
+ def compile_conditions(descriptions, conditions)
97
+ descriptions
98
+ .map{|descr|
99
+ conditions.map{|c| c.match(self, descr) }.compact
100
+ }
101
+ .flatten
102
+ end
103
+
104
+ def bind_examples
105
+ (@raw[:examples] ||= []).each do |ex|
106
+ ex.service = self
107
+ end
108
+ end
109
+
110
+ def bind_counterexamples
111
+ (@raw[:counterexamples] ||= []).each do |ex|
112
+ ex.service = self
113
+ end
114
+ end
115
+
45
116
  end # class Service
46
117
  end # class Resource
47
118
  end # module Webspicy
@@ -3,6 +3,7 @@ module Webspicy
3
3
 
4
4
  def initialize(raw)
5
5
  @raw = raw
6
+ bind_services
6
7
  end
7
8
 
8
9
  def self.info(raw)
@@ -38,6 +39,14 @@ module Webspicy
38
39
  @raw
39
40
  end
40
41
 
42
+ private
43
+
44
+ def bind_services
45
+ (@raw[:services] ||= []).each do |s|
46
+ s.resource = self
47
+ end
48
+ end
49
+
41
50
  end
42
51
  end
43
52
  require_relative 'resource/service'
@@ -6,6 +6,14 @@ module Webspicy
6
6
  end
7
7
  attr_reader :config
8
8
 
9
+ def preconditions
10
+ config.preconditions
11
+ end
12
+
13
+ def postconditions
14
+ config.postconditions
15
+ end
16
+
9
17
  ###
10
18
  ### Eachers -- Allow navigating the web service definitions
11
19
  ###
@@ -38,14 +46,25 @@ module Webspicy
38
46
  resource.services.select(&to_filter_proc(config.service_filter)).each(&bl)
39
47
  end
40
48
 
41
- def each_example(service, &bl)
42
- service.examples.each(&bl)
49
+ def each_example(service)
50
+ service.examples.each{|s| yield(s, false) }
43
51
  end
44
52
 
45
53
  def each_counterexamples(service, &bl)
46
- service.counterexamples.each(&bl) if config.run_counterexamples?
54
+ service.counterexamples.each{|s| yield(s, true) } if config.run_counterexamples?
47
55
  end
48
56
 
57
+ def each_generated_counterexamples(service, &bl)
58
+ Webspicy.with_scope(self) do
59
+ service.generated_counterexamples.each{|s| yield(s, true) }
60
+ end if config.run_counterexamples?
61
+ end
62
+
63
+ def each_testcase(service, &bl)
64
+ each_example(service, &bl)
65
+ each_counterexamples(service, &bl)
66
+ each_generated_counterexamples(service, &bl)
67
+ end
49
68
 
50
69
  ###
51
70
  ### Schemas -- For parsing input and output data schemas found in
@@ -2,96 +2,70 @@ module Webspicy
2
2
  class Tester
3
3
 
4
4
  def initialize(config)
5
- @config = config
5
+ @config = Configuration.dress(config)
6
6
  end
7
7
  attr_reader :config
8
8
 
9
9
  def call
10
+ rspec_config!
10
11
  config.each_scope do |scope|
11
12
  client = scope.get_client
12
13
  scope.each_resource do |resource|
13
14
  scope.each_service(resource) do |service|
14
- RSpec.describe "#{service.method} `#{resource.url}`" do
15
- scope.each_example(service) do |test_case|
16
- describe test_case.description do
17
-
18
- before(:all) do
19
- client.before(test_case, service, resource)
20
- @invocation ||= client.call(test_case, service, resource)
21
- end
22
-
23
- subject do
24
- @invocation
25
- end
26
-
27
- it 'can be invoked successfuly' do
28
- expect(subject.done?).to eq(true)
29
- end
30
-
31
- it 'meets the status and content type specification' do
32
- expect(subject.expected_status_unmet).to(be_nil)
33
- expect(subject.expected_content_type_unmet).to(be_nil)
34
- end
35
-
36
- it 'has the expected response headers' do
37
- expect(subject.expected_headers_unmet).to(be_nil)
38
- end if test_case.has_expected_headers?
39
-
40
- it 'meets the output data schema' do
41
- expect(subject.expected_schema_unmet).to(be_nil)
42
- end
43
-
44
- it 'meets all assertions' do
45
- expect(subject.assertions_unmet).to(be_nil)
46
- end if test_case.has_assertions?
47
-
48
- end
49
- end # service.examples
50
-
51
- scope.each_counterexamples(service) do |test_case|
52
- describe test_case.description do
53
-
54
- before(:all) do
55
- client.before(test_case, service, resource)
56
- @invocation ||= client.call(test_case, service, resource)
57
- end
15
+ rspec_service!(service, client, scope)
16
+ end
17
+ end
18
+ end
19
+ RSpec::Core::Runner.run config.rspec_options
20
+ end
58
21
 
59
- subject do
60
- @invocation
61
- end
22
+ def rspec_service!(service, client, scope)
23
+ RSpec.describe service do
24
+ scope.each_testcase(service) do |test_case, counterexample|
25
+ describe test_case do
26
+ include_examples 'a successful test case invocation', client, test_case, counterexample
27
+ end
28
+ end
29
+ end
30
+ end
62
31
 
63
- it 'can be invoked successfuly' do
64
- expect(subject.done?).to eq(true)
65
- end
32
+ def rspec_config!
33
+ return if @rspec_config
34
+ RSpec.shared_examples "a successful test case invocation" do |client, test_case, counterexample|
66
35
 
67
- it 'meets the status and content type specification' do
68
- expect(subject.expected_status_unmet).to(be_nil)
69
- expect(subject.expected_content_type_unmet).to(be_nil)
70
- end
36
+ before(:all) do
37
+ @invocation ||= begin
38
+ test_case.instrument
39
+ client.before(test_case)
40
+ client.call(test_case)
41
+ end
42
+ end
71
43
 
72
- it 'has the expected response headers' do
73
- expect(subject.expected_headers_unmet).to(be_nil)
74
- end if test_case.has_expected_headers?
44
+ let(:invocation) do
45
+ @invocation
46
+ end
75
47
 
76
- it 'meets the output data schema' do
77
- expect(subject.expected_schema_unmet).to(be_nil)
78
- end
48
+ it 'meets the HTTP specification' do
49
+ expect(invocation.done?).to eq(true)
50
+ expect(invocation.expected_status_unmet).to(be_nil)
51
+ expect(invocation.expected_content_type_unmet).to(be_nil)
52
+ expect(invocation.expected_headers_unmet).to(be_nil) if test_case.has_expected_headers?
53
+ expect(invocation.expected_schema_unmet).to(be_nil)
54
+ end
79
55
 
80
- it 'meets all assertions' do
81
- expect(subject.assertions_unmet).to(be_nil)
82
- end if test_case.has_assertions?
56
+ it 'meets all specific assertions' do
57
+ expect(invocation.assertions_unmet).to(be_nil)
58
+ end if test_case.has_assertions?
83
59
 
84
- it 'has expected error' do
85
- expect(subject.expected_error_unmet).to(be_nil)
86
- end if test_case.has_expected_error?
60
+ it 'meets declarative postconditions' do
61
+ expect(invocation.postconditions_unmet).to(be_nil)
62
+ end if test_case.service.has_postconditions? and not(counterexample)
87
63
 
88
- end
89
- end
90
- end
91
- end
92
- end
64
+ it 'meets the specific error messages, if any (backward compatibility)' do
65
+ expect(@invocation.expected_error_unmet).to(be_nil)
66
+ end if test_case.has_expected_error?
93
67
  end
94
- RSpec::Core::Runner.run config.rspec_options
68
+ @rspec_config = true
95
69
  end
96
70
 
97
71
  end # class Tester
@@ -1,7 +1,7 @@
1
1
  module Webspicy
2
2
  module Version
3
3
  MAJOR = 0
4
- MINOR = 3
4
+ MINOR = 4
5
5
  TINY = 0
6
6
  end
7
7
  VERSION = "#{Version::MAJOR}.#{Version::MINOR}.#{Version::TINY}"
data/lib/webspicy.rb CHANGED
@@ -84,6 +84,15 @@ module Webspicy
84
84
  end
85
85
  module_function :with_scope
86
86
 
87
+ #
88
+ # Returns the current scope or a default one is none has been
89
+ # previously installed using `set_current_scope` or `with_scope`
90
+ #
91
+ def current_scope
92
+ Thread.current[:webspicy_scope] || default_scope
93
+ end
94
+ module_function :current_scope
95
+
87
96
  #
88
97
  # Sets the current scope.
89
98
  #
@@ -0,0 +1,3 @@
1
+ Webspicy::Configuration.new(Path.dir) do |c|
2
+ c.precondition Class.new
3
+ end
@@ -10,6 +10,43 @@ module Webspicy
10
10
  expect(seen).to be_a(Configuration)
11
11
  end
12
12
 
13
+ describe '.dress' do
14
+
15
+ it 'is idempotent' do
16
+ c = Configuration.new
17
+ expect(Configuration.dress(c)).to be(c)
18
+ end
19
+
20
+ it 'supports a config.rb file' do
21
+ c = Configuration.dress(Path.dir/'configuration/config.rb')
22
+ expect(c).to be_a(Configuration)
23
+ expect(c.folder).to eq(Path.dir/'configuration')
24
+ expect(c.preconditions.size).to eq(1)
25
+ end
26
+
27
+ it 'supports a folder having a config.rb file' do
28
+ c = Configuration.dress(Path.dir/'configuration')
29
+ expect(c).to be_a(Configuration)
30
+ expect(c.folder).to eq(Path.dir/'configuration')
31
+ expect(c.preconditions.size).to eq(1)
32
+ end
33
+
34
+ it 'yields the block with the configuration, if given' do
35
+ seen = nil
36
+ Configuration.dress(Path.dir/'configuration'){|c|
37
+ seen = c
38
+ }
39
+ expect(seen).to be_a(Configuration)
40
+ end
41
+
42
+ it 'raises if the folder has no config.rb file' do
43
+ expect(->{
44
+ Configuration.dress(Path.dir)
45
+ }).to raise_error(/Missing config.rb file/)
46
+ end
47
+
48
+ end
49
+
13
50
  describe 'folder' do
14
51
 
15
52
  it 'returns the main folder without arg' do
@@ -129,12 +166,18 @@ module Webspicy
129
166
  duped = original.dup do |d|
130
167
  d.rspec_options << "--hello"
131
168
  d.before_each do end
169
+ d.precondition Class.new
170
+ d.postcondition Class.new
132
171
  end
133
172
  expect(duped.rspec_options.last).to eq("--hello")
134
173
  expect(original.rspec_options.last).not_to eq("--hello")
174
+ expect(duped.preconditions.size).to eq(1)
175
+ expect(duped.postconditions.size).to eq(1)
135
176
 
136
177
  expect(duped.before_listeners.size).to eq(1)
137
178
  expect(original.before_listeners.size).to eq(0)
179
+ expect(original.preconditions.size).to eq(0)
180
+ expect(original.postconditions.size).to eq(0)
138
181
  end
139
182
 
140
183
  it 'empties the children' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webspicy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bernard Lambeau
@@ -122,6 +122,9 @@ files:
122
122
  - examples/restful/Gemfile.lock
123
123
  - examples/restful/Rakefile
124
124
  - examples/restful/app.rb
125
+ - examples/restful/webspicy/config.rb
126
+ - examples/restful/webspicy/rack.rb
127
+ - examples/restful/webspicy/real.rb
125
128
  - examples/restful/webspicy/schema.fio
126
129
  - examples/restful/webspicy/todo/deleteTodo.yml
127
130
  - examples/restful/webspicy/todo/getTodo.yml
@@ -143,6 +146,7 @@ files:
143
146
  - lib/webspicy/tester/asserter.rb
144
147
  - lib/webspicy/tester/assertions.rb
145
148
  - lib/webspicy/version.rb
149
+ - spec/unit/configuration/config.rb
146
150
  - spec/unit/resource/service/test_dress_params.rb
147
151
  - spec/unit/resource/test_instantiate_url.rb
148
152
  - spec/unit/resource/test_url_placeholders.rb
@@ -174,7 +178,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
174
178
  version: '0'
175
179
  requirements: []
176
180
  rubyforge_project:
177
- rubygems_version: 2.5.1
181
+ rubygems_version: 2.6.11
178
182
  signing_key:
179
183
  specification_version: 4
180
184
  summary: Webspicy helps testing web services as software operation black boxes!