pact 1.51.0 → 1.55.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
2
  SHA256:
3
- metadata.gz: d44ad8e4df2bd24bef464ef32020657e3e0262627c68e351c3678f249f490416
4
- data.tar.gz: 4e81574cbea58077da6f937030078126403854f09caf778c13ef92860c3de731
3
+ metadata.gz: 54f6d8684eb57457977a86f79a9e2aace62f2fe63ef1e3896e8beee31586b0fe
4
+ data.tar.gz: 292f5bdfe8cf126faaaab4a1792b1e68a21484f32a311fc9a5053f9a64f00f04
5
5
  SHA512:
6
- metadata.gz: '0928d99da9e29d1574b8e788c8125f58eabcf866b373e40a9a13b4aa8ea90f7b138fa38cff40050738f54500cd5be5fb98a42e0941b838c23b7aa2e3b4bbafef'
7
- data.tar.gz: baf430cc555d61d1ed2d0c375c8038d70894b0ff27fa5eb2e82e4c5db1d347c219f354b6793319a8168bd8c028530dc3378b469c7f2f1859026d9e5c3671d028
6
+ metadata.gz: 2501e2bb9ea36e185d45816d1944718fca0b0ebab315f7c51557553f85c809c96cb2a20d09096a326be108eafef352e6d41d2cc018369b3422f162bcc8fe7696
7
+ data.tar.gz: d08e959aa8220f31b0fc8e60b82e9dda9f367f04604db7d26bdef16304b8862f45679e9333e49646d157e292ca03ef98fd94cb221723c7aee988539d0cc8540d
@@ -1,3 +1,44 @@
1
+ <a name="v1.55.0"></a>
2
+ ### v1.55.0 (2020-09-26)
3
+
4
+ #### Features
5
+
6
+ * add consumer_version_selectors to pact verification DSL, and convert consumer_version_tags to selectors ([39e6c4a](/../../commit/39e6c4a))
7
+ * allow verification task to set just a pact_helper without a URI ([303077d](/../../commit/303077d))
8
+ * split pending and failed rerun commands into separate sections ([f839391](/../../commit/f839391))
9
+ * update output during verification so the pact info shows before the describe blocks of the pact that is being verified ([15ec231](/../../commit/15ec231))
10
+
11
+ <a name="v1.54.0"></a>
12
+ ### v1.54.0 (2020-09-12)
13
+
14
+ #### Features
15
+
16
+ * use pb relation in preference to beta relation when fetching pacts for verification ([7563fcf](/../../commit/7563fcf))
17
+ * allow include_wip_pacts_since to use a Date, DateTime or Time ([dd35366](/../../commit/dd35366))
18
+ * add support for include_wip_pacts_since ([f2247b8](/../../commit/f2247b8))
19
+
20
+ <a name="v1.53.0"></a>
21
+ ### v1.53.0 (2020-09-11)
22
+
23
+ #### Features
24
+
25
+ * add support for the enable_pending flag ([16866f4](/../../commit/16866f4))
26
+
27
+ <a name="v1.52.0"></a>
28
+ ### v1.52.0 (2020-09-10)
29
+
30
+ #### Features
31
+
32
+ * support webdav http methods ([fa1d712](/../../commit/fa1d712))
33
+
34
+ <a name="v1.51.1"></a>
35
+ ### v1.51.1 (2020-08-12)
36
+
37
+ #### Bug Fixes
38
+
39
+ * update thor dependency (#218) ([bf3ce69](/../../commit/bf3ce69))
40
+ * bump rake dependency per CVE-2020-8130 (#219) ([09feaa6](/../../commit/09feaa6))
41
+
1
42
  <a name="v1.51.0"></a>
2
43
  ### v1.51.0 (2020-06-24)
3
44
 
@@ -4,6 +4,9 @@ require 'pact/provider/configuration'
4
4
 
5
5
  module Pact
6
6
  class CLI < Thor
7
+ def self.exit_on_failure? # Thor 1.0 deprecation guard
8
+ false
9
+ end
7
10
 
8
11
  desc 'verify', "Verify a pact"
9
12
  method_option :pact_helper, aliases: "-h", desc: "Pact helper file", :required => true
@@ -12,7 +12,8 @@ module Pact
12
12
  include PactSelectionDescription
13
13
  attr_reader :provider, :consumer_version_selectors, :provider_version_tags, :broker_base_url, :http_client_options, :http_client, :options
14
14
 
15
- PACTS_FOR_VERIFICATION_RELATION = 'beta:provider-pacts-for-verification'.freeze
15
+ PACTS_FOR_VERIFICATION_RELATION = 'pb:provider-pacts-for-verification'.freeze
16
+ PACTS_FOR_VERIFICATION_RELATION_BETA = 'beta:provider-pacts-for-verification'.freeze
16
17
  PACTS = 'pacts'.freeze
17
18
  HREF = 'href'.freeze
18
19
  LINKS = '_links'.freeze
@@ -22,7 +23,7 @@ module Pact
22
23
  def initialize(provider, consumer_version_selectors, provider_version_tags, broker_base_url, http_client_options, options = {})
23
24
  @provider = provider
24
25
  @consumer_version_selectors = consumer_version_selectors || []
25
- @provider_version_tags = provider_version_tags || []
26
+ @provider_version_tags = [*provider_version_tags]
26
27
  @http_client_options = http_client_options
27
28
  @broker_base_url = broker_base_url
28
29
  @http_client = Pact::Hal::HttpClient.new(http_client_options)
@@ -34,13 +35,15 @@ module Pact
34
35
  end
35
36
 
36
37
  def call
37
- if index.can?(PACTS_FOR_VERIFICATION_RELATION)
38
+ if index.can?(PACTS_FOR_VERIFICATION_RELATION) || index.can?(PACTS_FOR_VERIFICATION_RELATION_BETA)
38
39
  log_message
39
40
  pacts_for_verification
40
41
  else
42
+ old_selectors = consumer_version_selectors.collect do | selector |
43
+ { name: selector[:tag], all: !selector[:latest], fallback: selector[:fallbackTag]}
44
+ end
41
45
  # Fall back to old method of fetching pacts
42
- consumer_version_tags = consumer_version_selectors.collect{ | selector | selector[:tag] }
43
- FetchPacts.call(provider, consumer_version_tags, broker_base_url, http_client_options)
46
+ FetchPacts.call(provider, old_selectors, broker_base_url, http_client_options)
44
47
  end
45
48
  end
46
49
 
@@ -63,7 +66,7 @@ module Pact
63
66
 
64
67
  def pacts_for_verification_entity
65
68
  index
66
- ._link(PACTS_FOR_VERIFICATION_RELATION)
69
+ ._link(PACTS_FOR_VERIFICATION_RELATION, PACTS_FOR_VERIFICATION_RELATION_BETA)
67
70
  .expand(provider: provider)
68
71
  .post!(query)
69
72
  end
@@ -7,7 +7,6 @@ module Pact
7
7
  if consumer_version_selectors.any?
8
8
  desc = consumer_version_selectors.collect do |selector|
9
9
  all_or_latest = !selector[:latest] ? "all for tag" : "latest for tag"
10
- # TODO support fallback
11
10
  fallback = selector[:fallback] || selector[:fallbackTag]
12
11
  name = fallback ? "#{selector[:tag]} (or #{fallback} if not found)" : selector[:tag]
13
12
  "#{all_or_latest} #{name}"
@@ -2,6 +2,7 @@ require 'pact/shared/dsl'
2
2
  require 'pact/provider/world'
3
3
  require 'pact/pact_broker/fetch_pact_uris_for_verification'
4
4
  require 'pact/errors'
5
+ require 'pact/utils/string'
5
6
 
6
7
  module Pact
7
8
  module Provider
@@ -14,12 +15,15 @@ module Pact
14
15
  # in parent scope, it will clash with these ones,
15
16
  # so put an underscore in front of the name to be safer.
16
17
 
17
- attr_accessor :_provider_name, :_pact_broker_base_url, :_consumer_version_tags, :_provider_version_tags, :_basic_auth_options, :_verbose
18
+ attr_accessor :_provider_name, :_pact_broker_base_url, :_consumer_version_tags, :_provider_version_tags, :_basic_auth_options, :_enable_pending, :_include_wip_pacts_since, :_verbose, :_consumer_version_selectors
18
19
 
19
20
  def initialize(provider_name, provider_version_tags)
20
21
  @_provider_name = provider_name
21
22
  @_provider_version_tags = provider_version_tags
22
23
  @_consumer_version_tags = []
24
+ @_consumer_version_selectors = []
25
+ @_enable_pending = false
26
+ @_include_wip_pacts_since = nil
23
27
  @_verbose = false
24
28
  end
25
29
 
@@ -33,6 +37,22 @@ module Pact
33
37
  self._consumer_version_tags = *consumer_version_tags
34
38
  end
35
39
 
40
+ def consumer_version_selectors consumer_version_selectors
41
+ self._consumer_version_selectors = *consumer_version_selectors
42
+ end
43
+
44
+ def enable_pending enable_pending
45
+ self._enable_pending = enable_pending
46
+ end
47
+
48
+ def include_wip_pacts_since since
49
+ self._include_wip_pacts_since = if since.respond_to?(:xmlschema)
50
+ since.xmlschema
51
+ else
52
+ since
53
+ end
54
+ end
55
+
36
56
  def verbose verbose
37
57
  self._verbose = verbose
38
58
  end
@@ -51,19 +71,41 @@ module Pact
51
71
  consumer_version_selectors,
52
72
  _provider_version_tags,
53
73
  _pact_broker_base_url,
54
- _basic_auth_options.merge(verbose: _verbose)
74
+ _basic_auth_options.merge(verbose: _verbose),
75
+ { include_pending_status: _enable_pending, include_wip_pacts_since: _include_wip_pacts_since }
55
76
  )
56
77
 
57
78
  Pact.provider_world.add_pact_uri_source fetch_pacts
58
79
  end
59
80
 
60
81
  def consumer_version_selectors
61
- # TODO support "all"
82
+ convert_tags_to_selectors + convert_consumer_version_selectors
83
+ end
84
+
85
+ def convert_tags_to_selectors
62
86
  _consumer_version_tags.collect do | tag |
63
- {
64
- tag: tag,
65
- latest: true
66
- }
87
+ if tag.is_a?(Hash)
88
+ {
89
+ tag: tag.fetch(:name),
90
+ latest: !tag[:all],
91
+ fallbackTag: tag[:fallback]
92
+ }
93
+ elsif tag.is_a?(String)
94
+ {
95
+ tag: tag,
96
+ latest: true
97
+ }
98
+ else
99
+ raise Pact::Error.new("The value supplied for consumer_version_tags must be a String or a Hash. Found #{tag.class}")
100
+ end
101
+ end
102
+ end
103
+
104
+ def convert_consumer_version_selectors
105
+ _consumer_version_selectors.collect do | selector |
106
+ selector.each_with_object({}) do | (key, value), new_selector |
107
+ new_selector[Pact::Utils::String.camelcase(key.to_s).to_sym] = value
108
+ end
67
109
  end
68
110
  end
69
111
 
@@ -24,28 +24,34 @@ module Pact
24
24
  def honour_pactfile pact_source, pact_json, options
25
25
  pact_uri = pact_source.uri
26
26
  Pact.configuration.output_stream.puts "INFO: Reading pact at #{pact_uri}"
27
- if pact_uri.metadata[:notices]
28
- pact_uri.metadata[:notices].before_verification_notices_text.each do | text |
29
- Pact.configuration.output_stream.puts("DEBUG: #{text}")
30
- end
31
- end
32
-
33
- Pact.configuration.output_stream.puts "DEBUG: Filtering interactions by: #{options[:criteria]}" if options[:criteria] && options[:criteria].any?
34
27
  consumer_contract = Pact::ConsumerContract.from_json(pact_json)
35
28
  suffix = pact_uri.metadata[:pending] ? " [PENDING]": ""
29
+
36
30
  ::RSpec.describe "Verifying a pact between #{consumer_contract.consumer.name} and #{consumer_contract.provider.name}#{suffix}", pactfile_uri: pact_uri do
37
- honour_consumer_contract consumer_contract, options.merge(pact_json: pact_json, pact_uri: pact_uri, pact_source: pact_source, consumer_contract: consumer_contract)
31
+ honour_consumer_contract consumer_contract, options.merge(
32
+ pact_json: pact_json,
33
+ pact_uri: pact_uri,
34
+ pact_source: pact_source,
35
+ consumer_contract: consumer_contract,
36
+ criteria: options[:criteria]
37
+ )
38
38
  end
39
39
  end
40
40
 
41
41
  def honour_consumer_contract consumer_contract, options = {}
42
- describe_consumer_contract consumer_contract, options.merge(consumer: consumer_contract.consumer.name)
42
+ describe_consumer_contract consumer_contract, options.merge(consumer: consumer_contract.consumer.name, pact_context: InteractionContext.new)
43
43
  end
44
44
 
45
45
  private
46
46
 
47
47
  def describe_consumer_contract consumer_contract, options
48
- consumer_interactions(consumer_contract, options).each do |interaction|
48
+ consumer_interactions(consumer_contract, options).tap{ |interactions|
49
+ if interactions.empty?
50
+ # If there are no interactions, the documentation formatter never fires to print this out,
51
+ # so print it out here.
52
+ Pact.configuration.output_stream.puts "DEBUG: All interactions for #{options[:pact_uri]} have been filtered out by criteria: #{options[:criteria]}" if options[:criteria] && options[:criteria].any?
53
+ end
54
+ }.each do |interaction|
49
55
  describe_interaction_with_provider_state interaction, options
50
56
  end
51
57
  end
@@ -54,7 +60,7 @@ module Pact
54
60
  if options[:criteria].nil?
55
61
  consumer_contract.interactions
56
62
  else
57
- consumer_contract.find_interactions options[:criteria]
63
+ consumer_contract.find_interactions(options[:criteria])
58
64
  end
59
65
  end
60
66
 
@@ -84,14 +90,19 @@ module Pact
84
90
  pact_uri: options[:pact_uri],
85
91
  pact_source: options[:pact_source],
86
92
  pact_ignore_failures: options[:pact_uri].metadata[:pending] || options[:ignore_failures],
87
- pact_consumer_contract: options[:consumer_contract]
93
+ pact_consumer_contract: options[:consumer_contract],
94
+ pact_criteria: options[:criteria]
88
95
  }
89
96
 
90
97
  describe description_for(interaction), metadata do
91
98
 
92
99
  interaction_context = InteractionContext.new
100
+ pact_context = options[:pact_context]
93
101
 
94
102
  before do | example |
103
+ pact_context.run_once :before do
104
+ ::RSpec.configuration.reporter.message "THIS IS A PACT"
105
+ end
95
106
  interaction_context.run_once :before do
96
107
  Pact.configuration.logger.info "Running example '#{Pact::RSpec.full_description(example)}'"
97
108
  set_up_provider_states interaction.provider_states, options[:consumer]
@@ -24,6 +24,25 @@ module Pact
24
24
 
25
25
  C = ::Term::ANSIColor
26
26
 
27
+ def example_group_started(notification)
28
+ if @group_level == 0
29
+ Pact.configuration.output_stream.puts
30
+ pact_uri = notification.group.metadata[:pactfile_uri]
31
+ ::RSpec.configuration.failure_color = pact_uri.metadata[:pending] ? :yellow : :red
32
+
33
+ if pact_uri.metadata[:notices]
34
+ pact_uri.metadata[:notices].before_verification_notices_text.each do | text |
35
+ Pact.configuration.output_stream.puts("DEBUG: #{text}")
36
+ end
37
+ end
38
+
39
+ criteria = notification.group.metadata[:pact_criteria]
40
+ Pact.configuration.output_stream.puts "DEBUG: Filtering interactions by: #{criteria}" if criteria && criteria.any?
41
+ end
42
+ super
43
+ end
44
+
45
+
27
46
  def dump_summary(summary)
28
47
  output.puts "\n" + colorized_totals_line(summary)
29
48
  return if summary.failure_count == 0
@@ -35,11 +54,15 @@ module Pact
35
54
  private
36
55
 
37
56
  def interactions_count(summary)
38
- summary.examples.collect{ |e| e.metadata[:pact_interaction_example_description] }.uniq.size
57
+ summary.examples.collect{ |e| interaction_unique_key(e) }.uniq.size
39
58
  end
40
59
 
41
60
  def failed_interactions_count(summary)
42
- summary.failed_examples.collect{ |e| e.metadata[:pact_interaction_example_description] }.uniq.size
61
+ failed_interaction_examples(summary).size
62
+ end
63
+
64
+ def pending_interactions_count(summary)
65
+ pending_interaction_examples(summary).size
43
66
  end
44
67
 
45
68
  def ignore_failures?(summary)
@@ -47,16 +70,14 @@ module Pact
47
70
  end
48
71
 
49
72
  def failure_title summary
50
- if ignore_failures?(summary)
51
- "#{failed_interactions_count(summary)} pending"
52
- else
53
- ::RSpec::Core::Formatters::Helpers.pluralize(failed_interactions_count(summary), "failure")
54
- end
73
+ ::RSpec::Core::Formatters::Helpers.pluralize(failed_interactions_count(summary), "failure")
55
74
  end
56
75
 
57
76
  def totals_line summary
58
77
  line = ::RSpec::Core::Formatters::Helpers.pluralize(interactions_count(summary), "interaction")
59
78
  line << ", " << failure_title(summary)
79
+ pending_count = pending_interactions_count(summary)
80
+ line << ", " << "#{pending_count} pending" if pending_count > 0
60
81
  line
61
82
  end
62
83
 
@@ -69,12 +90,17 @@ module Pact
69
90
  end
70
91
 
71
92
  def print_rerun_commands summary
72
- if ignore_failures?(summary)
93
+ if pending_interactions_count(summary) > 0
94
+ set_rspec_failure_color(:yellow)
73
95
  output.puts("\nPending interactions: (Failures listed here are expected and do not affect your suite's status)\n\n")
74
- else
75
- output.puts("\nFailed interactions:\n\n")
96
+ interaction_rerun_commands(pending_interaction_examples(summary)).each do | message |
97
+ output.puts(message)
98
+ end
76
99
  end
77
- interaction_rerun_commands(summary).each do | message |
100
+
101
+ set_rspec_failure_color(:red)
102
+ output.puts("\nFailed interactions:\n\n")
103
+ interaction_rerun_commands(failed_interaction_examples(summary)).each do | message |
78
104
  output.puts(message)
79
105
  end
80
106
  end
@@ -85,10 +111,34 @@ module Pact
85
111
  end
86
112
  end
87
113
 
88
- def interaction_rerun_commands summary
89
- summary.failed_examples.collect do |example|
114
+ def pending_interaction_examples(summary)
115
+ one_failed_example_per_interaction(summary).select do | example |
116
+ example.metadata[:pactfile_uri].metadata[:pending]
117
+ end
118
+ end
119
+
120
+ def failed_interaction_examples(summary)
121
+ one_failed_example_per_interaction(summary).select do | example |
122
+ !example.metadata[:pactfile_uri].metadata[:pending]
123
+ end
124
+ end
125
+
126
+ def one_failed_example_per_interaction(summary)
127
+ summary.failed_examples.group_by{| e| interaction_unique_key(e)}.values.collect(&:first)
128
+ end
129
+
130
+ def interaction_rerun_commands examples
131
+ examples.collect do |example|
90
132
  interaction_rerun_command_for example
91
- end.uniq.compact
133
+ end.compact
134
+ end
135
+
136
+ def interaction_unique_key(example)
137
+ # pending is just to make the counting easier, it isn't required for the unique key
138
+ {
139
+ pactfile_uri: example.metadata[:pactfile_uri],
140
+ index: example.metadata[:pact_interaction].index,
141
+ }
92
142
  end
93
143
 
94
144
  def interaction_rerun_command_for example
@@ -137,6 +187,10 @@ module Pact
137
187
  def executing_with_ruby?
138
188
  ENV['PACT_EXECUTING_LANGUAGE'] == 'ruby'
139
189
  end
190
+
191
+ def set_rspec_failure_color color
192
+ ::RSpec.configuration.failure_color = color
193
+ end
140
194
  end
141
195
  end
142
196
  end
@@ -21,7 +21,11 @@ module Pact
21
21
 
22
22
  logger.info "Sending #{request.method.upcase} request to path: \"#{request.path}\" with headers: #{request.headers}, see debug logs for body"
23
23
  logger.debug "body :#{request.body}"
24
- response = self.send(request.method.downcase, *args)
24
+ response = if self.respond_to?(:custom_request)
25
+ self.custom_request(request.method.upcase, *args)
26
+ else
27
+ self.send(request.method.downcase, *args)
28
+ end
25
29
  logger.info "Received response with status: #{response.status}, headers: #{response.headers}, see debug logs for body"
26
30
  logger.debug "body: #{response.body}"
27
31
  end
@@ -31,6 +31,7 @@ module Pact
31
31
  attr_reader :pact_spec_configs
32
32
  attr_accessor :rspec_opts
33
33
  attr_accessor :ignore_failures
34
+ attr_accessor :_pact_helper
34
35
 
35
36
  def initialize(name)
36
37
  @rspec_opts = nil
@@ -41,6 +42,10 @@ module Pact
41
42
  rake_task
42
43
  end
43
44
 
45
+ def pact_helper(pact_helper)
46
+ @pact_spec_configs << { pact_helper: pact_helper }
47
+ end
48
+
44
49
  def uri(uri, options = {})
45
50
  @pact_spec_configs << {uri: uri, pact_helper: options[:pact_helper]}
46
51
  end
@@ -82,6 +87,7 @@ module Pact
82
87
  Pact::TaskHelper.handle_verification_failure do
83
88
  exit_statuses.count{ | status | status != 0 }
84
89
  end
90
+
85
91
  end
86
92
  end
87
93
  end
@@ -0,0 +1,35 @@
1
+ # Can't use refinements because of Travelling Ruby
2
+
3
+ module Pact
4
+ module Utils
5
+ module String
6
+
7
+ extend self
8
+
9
+ # ripped from rubyworks/facets, thank you
10
+ def camelcase(string, *separators)
11
+ case separators.first
12
+ when Symbol, TrueClass, FalseClass, NilClass
13
+ first_letter = separators.shift
14
+ end
15
+
16
+ separators = ['_', '\s'] if separators.empty?
17
+
18
+ str = string.dup
19
+
20
+ separators.each do |s|
21
+ str = str.gsub(/(?:#{s}+)([a-z])/){ $1.upcase }
22
+ end
23
+
24
+ case first_letter
25
+ when :upper, true
26
+ str = str.gsub(/(\A|\s)([a-z])/){ $1 + $2.upcase }
27
+ when :lower, false
28
+ str = str.gsub(/(\A|\s)([A-Z])/){ $1 + $2.downcase }
29
+ end
30
+
31
+ str
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,4 +1,4 @@
1
1
  # Remember to bump pact-provider-proxy when this changes major version
2
2
  module Pact
3
- VERSION = "1.51.0"
3
+ VERSION = "1.55.0"
4
4
  end
@@ -28,14 +28,14 @@ Gem::Specification.new do |gem|
28
28
 
29
29
  gem.add_runtime_dependency 'rspec', '~> 3.0'
30
30
  gem.add_runtime_dependency 'rack-test', '>= 0.6.3', '< 2.0.0'
31
- gem.add_runtime_dependency 'thor', '~> 0.20'
31
+ gem.add_runtime_dependency 'thor', '>= 0.20', '< 2.0'
32
32
  gem.add_runtime_dependency 'webrick', '~> 1.3'
33
33
  gem.add_runtime_dependency 'term-ansicolor', '~> 1.0'
34
34
 
35
35
  gem.add_runtime_dependency 'pact-support', '~> 1.9'
36
36
  gem.add_runtime_dependency 'pact-mock_service', '~> 3.0', '>= 3.3.1'
37
37
 
38
- gem.add_development_dependency 'rake', '~> 10.0'
38
+ gem.add_development_dependency 'rake', '~> 13.0'
39
39
  gem.add_development_dependency 'webmock', '~> 3.0'
40
40
  gem.add_development_dependency 'fakefs', '0.5' # 0.6.0 blows up
41
41
  gem.add_development_dependency 'hashie', '~> 2.0'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pact
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.51.0
4
+ version: 1.55.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Fraser
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2020-06-24 00:00:00.000000000 Z
15
+ date: 2020-09-26 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: rspec
@@ -52,16 +52,22 @@ dependencies:
52
52
  name: thor
53
53
  requirement: !ruby/object:Gem::Requirement
54
54
  requirements:
55
- - - "~>"
55
+ - - ">="
56
56
  - !ruby/object:Gem::Version
57
57
  version: '0.20'
58
+ - - "<"
59
+ - !ruby/object:Gem::Version
60
+ version: '2.0'
58
61
  type: :runtime
59
62
  prerelease: false
60
63
  version_requirements: !ruby/object:Gem::Requirement
61
64
  requirements:
62
- - - "~>"
65
+ - - ">="
63
66
  - !ruby/object:Gem::Version
64
67
  version: '0.20'
68
+ - - "<"
69
+ - !ruby/object:Gem::Version
70
+ version: '2.0'
65
71
  - !ruby/object:Gem::Dependency
66
72
  name: webrick
67
73
  requirement: !ruby/object:Gem::Requirement
@@ -130,14 +136,14 @@ dependencies:
130
136
  requirements:
131
137
  - - "~>"
132
138
  - !ruby/object:Gem::Version
133
- version: '10.0'
139
+ version: '13.0'
134
140
  type: :development
135
141
  prerelease: false
136
142
  version_requirements: !ruby/object:Gem::Requirement
137
143
  requirements:
138
144
  - - "~>"
139
145
  - !ruby/object:Gem::Version
140
- version: '10.0'
146
+ version: '13.0'
141
147
  - !ruby/object:Gem::Dependency
142
148
  name: webmock
143
149
  requirement: !ruby/object:Gem::Requirement
@@ -371,6 +377,7 @@ files:
371
377
  - lib/pact/tasks/verification_task.rb
372
378
  - lib/pact/templates/help.erb
373
379
  - lib/pact/templates/provider_state.erb
380
+ - lib/pact/utils/string.rb
374
381
  - lib/pact/version.rb
375
382
  - lib/tasks/pact.rake
376
383
  - pact.gemspec
@@ -397,8 +404,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
397
404
  - !ruby/object:Gem::Version
398
405
  version: '0'
399
406
  requirements: []
400
- rubyforge_project:
401
- rubygems_version: 2.7.7
407
+ rubygems_version: 3.1.4
402
408
  signing_key:
403
409
  specification_version: 4
404
410
  summary: Enables consumer driven contract testing, providing a mock service and DSL