pact 1.0.37 → 1.0.38

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,6 +2,15 @@ Do this to generate your change history
2
2
 
3
3
  git log --date=relative --pretty=format:' * %h - %s (%an, %ad)'
4
4
 
5
+ ### 1.0.38 (24 March 2014)
6
+
7
+ * 7fb2bc3 - Improved readability of pact:verify specs by removing pactfile name and request details from output (bethesque, 23 hours ago)
8
+ * ff1de3c - Improving readability of error messages when pact:verify fails (bethesque, 23 hours ago)
9
+ * 8a08abf - Removed the last RSpec private API usage. I think. (bethesque, 33 hours ago)
10
+ * 6a0be58 - Reducing even more use of RSpec private APIs (bethesque, 33 hours ago)
11
+ * e1fd51c - Reducing use of RSpec private APIs (bethesque, 34 hours ago)
12
+ * 587cb90 - Replaced rspec 'commands to rerun failed examples' with Pact specific commands to rerun failed interactions (bethesque, 2 days ago)
13
+
5
14
  ### 1.0.37 (19 March 2014)
6
15
 
7
16
  * 0e8b80e - Cleaned up pact:verify rspec matcher lines so the output makes more sense to the reader (bethesque, 3 minutes ago)
@@ -1,8 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- pact (1.0.37)
4
+ pact (1.0.38)
5
5
  awesome_print (~> 1.1)
6
+ colored
6
7
  find_a_port (~> 1.0.1)
7
8
  json
8
9
  rack-test (~> 0.6.2)
@@ -24,6 +25,7 @@ GEM
24
25
  atomic (1.1.14)
25
26
  awesome_print (1.2.0)
26
27
  coderay (1.0.9)
28
+ colored (1.2)
27
29
  crack (0.4.1)
28
30
  safe_yaml (~> 0.9.0)
29
31
  diff-lcs (1.2.4)
data/README.md CHANGED
@@ -377,9 +377,13 @@ Configure the pact_uri in the Pact.service_provider block with the pact artifact
377
377
 
378
378
  It should run with all your other tests. If an integration is broken, you want to know about it *before* you check in.
379
379
 
380
- #### Use the real database
380
+ #### Stub calls to downstream systems
381
381
 
382
- Do not stub your database calls for pact:verify. This is the best time for you to test your database integration. If you stub your database calls, you are getting little more assurance that the real end-to-end will work than if you'd used a unit test. It's the appropriate time to incur the overhead of a database call.
382
+ Consider making a separate pact with the downstream system and using shared fixtures.
383
+
384
+ #### Consider carefully whether to use the real database or stub calls
385
+
386
+ You may choose not stub your database calls for pact:verify. This can be a good time for you to test your database integration if you have a simple application, however, for a complex one, you might want to carefully choose a point at which to stub calls.
383
387
 
384
388
  ## Gotchas
385
389
 
@@ -10,6 +10,8 @@ module Pact
10
10
  attr_accessor :tmp_dir
11
11
  attr_accessor :reports_dir
12
12
  attr_writer :pactfile_write_mode
13
+ attr_accessor :error_stream
14
+ attr_accessor :output_stream
13
15
 
14
16
  def log_path
15
17
  log_dir + "/pact.log"
@@ -54,6 +56,8 @@ module Pact
54
56
  c.logger = default_logger c.log_path
55
57
  c.pactfile_write_mode = :overwrite
56
58
  c.reports_dir = File.expand_path('./reports/pacts')
59
+ c.output_stream = $stdout
60
+ c.error_stream = $stderr
57
61
  c
58
62
  end
59
63
 
@@ -84,7 +84,7 @@ module Pact
84
84
  end
85
85
 
86
86
  def warn_and_stderr msg
87
- $stderr.puts msg
87
+ Pact.configuration.error_stream.puts msg
88
88
  logger.warn msg
89
89
  end
90
90
 
@@ -4,7 +4,8 @@ require 'rspec/core'
4
4
  require 'rspec/core/formatters/documentation_formatter'
5
5
  require 'rspec/core/formatters/json_formatter'
6
6
  require 'pact/provider/pact_helper_locator'
7
- require 'pact/provider/print_missing_provider_states'
7
+ require 'pact/provider/rspec/formatter'
8
+ require 'pact/provider/rspec/silent_json_formatter'
8
9
  require_relative 'rspec'
9
10
 
10
11
 
@@ -36,6 +37,7 @@ module Pact
36
37
  run_specs
37
38
  ensure
38
39
  ::RSpec.reset
40
+ Pact.clear_world
39
41
  end
40
42
  end
41
43
 
@@ -43,11 +45,11 @@ module Pact
43
45
 
44
46
  def require_pact_helper spec_definition
45
47
  if spec_definition[:pact_helper]
46
- puts "Using #{spec_definition[:pact_helper]}"
48
+ Pact.configuration.output_stream.puts "Using #{spec_definition[:pact_helper]}"
47
49
  require spec_definition[:pact_helper]
48
50
  elsif spec_definition[:support_file]
49
- puts "Using #{spec_definition[:support_file]}"
50
- $stderr.puts SUPPORT_FILE_DEPRECATION_MESSAGE
51
+ Pact.configuration.output_stream.puts "Using #{spec_definition[:support_file]}"
52
+ Pact.configuration.error_stream.puts SUPPORT_FILE_DEPRECATION_MESSAGE
51
53
  require spec_definition[:support_file]
52
54
  else
53
55
  require 'pact/provider/client_project_pact_helper'
@@ -70,42 +72,39 @@ module Pact
70
72
  config = ::RSpec.configuration
71
73
 
72
74
  config.color = true
75
+ config.pattern = "pattern which doesn't match any files"
76
+ config.backtrace_inclusion_patterns = [/pact\/provider\/rspec/]
77
+
73
78
  config.extend Pact::Provider::RSpec::ClassMethods
74
79
  config.include Pact::Provider::RSpec::InstanceMethods
75
80
  config.include Pact::Provider::TestMethods
76
- config.backtrace_inclusion_patterns = [/pact\/provider\/rspec/]
77
81
 
78
- config.before :each, :pact => :verify do | example |
79
- example_description = "#{example.example.example_group.description} #{example.example.description}"
80
- Pact.configuration.logger.info "Running example '#{example_description}'"
82
+ if options[:silent]
83
+ config.output_stream = StringIO.new
84
+ config.error_stream = StringIO.new
85
+ else
86
+ config.error_stream = Pact.configuration.error_stream
87
+ config.output_stream = Pact.configuration.output_stream
81
88
  end
82
89
 
83
- unless options[:silent]
84
- config.error_stream = $stderr
85
- config.output_stream = $stdout
86
- end
90
+ config.add_formatter Pact::Provider::RSpec::Formatter
91
+ config.add_formatter Pact::Provider::RSpec::SilentJsonFormatter
87
92
 
88
- formatter = ::RSpec::Core::Formatters::DocumentationFormatter.new(config.output)
89
- @json_formatter = ::RSpec::Core::Formatters::JsonFormatter.new(StringIO.new)
90
- reporter = ::RSpec::Core::Reporter.new(formatter, @json_formatter)
91
- config.instance_variable_set(:@reporter, reporter)
92
93
  end
93
94
 
94
95
  def run_specs
95
- config = ::RSpec.configuration
96
- world = ::RSpec::world
97
- exit_code = config.reporter.report(world.example_count, nil) do |reporter|
98
- begin
99
- config.run_hook(:before, :suite)
100
- world.example_groups.ordered.map {|g| g.run(reporter)}.all? ? 0 : config.failure_exit_code
101
- ensure
102
- config.run_hook(:after, :suite)
103
- end
104
- end
105
- PrintMissingProviderStates.call Pact.world.provider_states.missing_provider_states
106
- @output = @json_formatter.output_hash
96
+ exit_code = ::RSpec::Core::CommandLine.new(NoConfigurationOptions.new)
97
+ .run(::RSpec.configuration.output_stream, ::RSpec.configuration.error_stream)
98
+ @output = JSON.parse(Pact.world.json_formatter_stream.string, symbolize_keys: true)
107
99
  exit_code
108
100
  end
101
+
102
+ class NoConfigurationOptions
103
+ def method_missing(method, *args, &block)
104
+ # Do nothing!
105
+ end
106
+ end
107
+
109
108
  end
110
109
  end
111
110
  end
@@ -3,9 +3,9 @@ module Pact
3
3
  class PrintMissingProviderStates
4
4
 
5
5
  # Hash of consumer names to array of names of missing provider states
6
- def self.call missing_provider_states
6
+ def self.call missing_provider_states, output
7
7
  if missing_provider_states.any?
8
- puts orangeify(text(missing_provider_states))
8
+ output.puts orangeify(text(missing_provider_states))
9
9
  end
10
10
  end
11
11
 
@@ -19,12 +19,10 @@ module Pact
19
19
  include ::RSpec::Core::DSL
20
20
 
21
21
  def honour_pactfile pactfile_uri, options = {}
22
- puts "Filtering specs by: #{options[:criteria]}" if options[:criteria]
22
+ puts "Filtering specs by: #{options[:criteria]}" if options[:criteria] && options[:criteria].any?
23
23
  consumer_contract = Pact::ConsumerContract.from_json(read_pact_from(pactfile_uri, options))
24
- describe "A pact between #{consumer_contract.consumer.name} and #{consumer_contract.provider.name}" do
25
- describe "in #{pactfile_uri}" do
26
- honour_consumer_contract consumer_contract, options
27
- end
24
+ describe "Verifying a pact between #{consumer_contract.consumer.name} and #{consumer_contract.provider.name}", :pactfile_uri => pactfile_uri do
25
+ honour_consumer_contract consumer_contract, options
28
26
  end
29
27
  end
30
28
 
@@ -60,12 +58,19 @@ module Pact
60
58
 
61
59
  def describe_interaction interaction, options
62
60
 
63
- describe description_for(interaction), :pact => :verify do
61
+ metadata = {
62
+ :pact => :verify,
63
+ :pact_interaction => interaction,
64
+ :pact_interaction_example_description => interaction_description_for_rerun_command(interaction)
65
+ }
66
+
67
+ describe description_for(interaction), metadata do
64
68
 
65
69
  interaction_context = InteractionContext.new
66
70
 
67
71
  before do
68
72
  interaction_context.run_once :before do
73
+ Pact.configuration.logger.info "Running example '#{self.example.full_description}'"
69
74
  set_up_provider_state interaction.provider_state, options[:consumer]
70
75
  replay_interaction interaction
71
76
  interaction_context.last_response = last_response
@@ -119,7 +124,11 @@ module Pact
119
124
  end
120
125
 
121
126
  def description_for interaction
122
- "#{interaction.description} using #{interaction.request.method.upcase} to #{interaction.request.path}"
127
+ interaction.provider_state ? interaction.description : interaction.description.capitalize
128
+ end
129
+
130
+ def interaction_description_for_rerun_command interaction
131
+ description_for(interaction).capitalize + ( interaction.provider_state ? " given #{interaction.provider_state}" : "")
123
132
  end
124
133
 
125
134
  def read_pact_from uri, options = {}
@@ -0,0 +1,63 @@
1
+ require 'pact/provider/print_missing_provider_states'
2
+ require 'rspec/core/formatters'
3
+ require 'colored'
4
+
5
+ module Pact
6
+ module Provider
7
+ module RSpec
8
+ class Formatter < ::RSpec::Core::Formatters::DocumentationFormatter
9
+
10
+
11
+ def dump_commands_to_rerun_failed_examples
12
+ return if failed_examples.empty?
13
+
14
+ print_rerun_commands
15
+ print_failure_message
16
+ print_missing_provider_states
17
+
18
+ end
19
+
20
+ def print_rerun_commands
21
+ output.puts("\n")
22
+ interaction_failure_messages.each do | message |
23
+ output.puts(message)
24
+ end
25
+ end
26
+
27
+ def print_missing_provider_states
28
+ PrintMissingProviderStates.call Pact.world.provider_states.missing_provider_states, output
29
+ end
30
+
31
+ def interaction_failure_messages
32
+ failed_examples.collect do |example|
33
+ interaction_failure_message_for example
34
+ end.uniq
35
+ end
36
+
37
+ def interaction_failure_message_for example
38
+ provider_state = example.metadata[:pact_interaction].provider_state
39
+ description = example.metadata[:pact_interaction].description
40
+ pactfile_uri = example.metadata[:pactfile_uri]
41
+ example_description = example.metadata[:pact_interaction_example_description]
42
+ failure_color("rake pact:verify:at[#{pactfile_uri}] PACT_DESCRIPTION=\"#{description}\" PACT_PROVIDER_STATE=\"#{provider_state}\"") + " " + detail_color("# #{example_description}")
43
+ end
44
+
45
+ def print_failure_message
46
+ output.puts failure_message
47
+ end
48
+
49
+ def failure_message
50
+
51
+ "\n" + "For assistance debugging failures, please note:".underline.yellow + "\n\n" +
52
+ "The pact files have been stored locally in the following temp directory:\n #{Pact.configuration.tmp_dir}\n\n" +
53
+ "The requests and responses are logged in the following log file:\n #{Pact.configuration.log_path}\n\n"
54
+ end
55
+
56
+ end
57
+
58
+ end
59
+
60
+ end
61
+ end
62
+
63
+
@@ -0,0 +1,18 @@
1
+ require 'rspec/core/formatters'
2
+
3
+ module Pact
4
+ module Provider
5
+ module RSpec
6
+ class SilentJsonFormatter < ::RSpec::Core::Formatters::JsonFormatter
7
+
8
+ def initialize stream
9
+ # Don't want to display this to the screen,
10
+ # not sure how else to set a custom stream for a particular formatter
11
+ # Store a reference to this so it can be inspected afterwards.
12
+ super(Pact.world.json_formatter_stream)
13
+ end
14
+
15
+ end
16
+ end
17
+ end
18
+ end
@@ -14,6 +14,12 @@ module Pact
14
14
  module Provider
15
15
  class World
16
16
 
17
+ attr_reader :json_formatter_stream
18
+
19
+ def initialize
20
+ @json_formatter_stream = StringIO.new
21
+ end
22
+
17
23
  def provider_states
18
24
  @provider_states_proxy ||= Pact::Provider::State::ProviderStateProxy.new
19
25
  end
@@ -1,32 +1,29 @@
1
1
  module Pact
2
2
  module TaskHelper
3
- def failure_message
4
- redify(
5
- "\n* * * * * * * * * * * * * * * * * * *\n" +
6
- "Provider did not honour pact file.\nSee\n * #{Pact.configuration.log_path}\n * #{Pact.configuration.tmp_dir}\nfor logs and pact files." +
7
- "\n* * * * * * * * * * * * * * * * * * *\n\n"
8
- )
9
- end
10
3
 
11
- def redify string
12
- "\e[31m#{string}\e[m"
13
- end
4
+ extend self
14
5
 
15
6
  def handle_verification_failure
16
7
  exit_status = yield
17
- if exit_status != 0
18
- $stderr.puts failure_message
19
- fail
20
- end
8
+ abort if exit_status != 0
21
9
  end
22
10
 
23
11
  def spec_criteria defaults = {description: nil, provider_state: nil}
24
12
  criteria = {}
25
- [:description, :provider_state].each do | key |
26
- value = ENV.fetch("PACT_#{key.to_s.upcase}", defaults[key])
27
- criteria[key] = Regexp.new(value) unless value.nil?
13
+
14
+ description = ENV.fetch("PACT_DESCRIPTION", defaults[:description])
15
+ criteria[:description] = Regexp.new(description) if description
16
+
17
+ provider_state = ENV.fetch("PACT_PROVIDER_STATE", defaults[:provider_state])
18
+ if provider_state
19
+ if provider_state.length == 0
20
+ criteria[:provider_state] = nil #Allow PACT_PROVIDER_STATE="" to mean no provider state
21
+ else
22
+ criteria[:provider_state] = Regexp.new(provider_state)
23
+ end
28
24
  end
29
- criteria.any? ? criteria : nil
25
+
26
+ criteria
30
27
  end
31
28
  end
32
29
  end
@@ -1,4 +1,3 @@
1
-
2
1
  Could not find one or more provider states.
3
2
  Have you required the provider states file for this consumer in your pact_helper.rb?
4
3
  If you have not yet defined these states, here is a template:
@@ -1,3 +1,3 @@
1
1
  module Pact
2
- VERSION = "1.0.37"
2
+ VERSION = "1.0.38"
3
3
  end
@@ -26,6 +26,7 @@ Gem::Specification.new do |gem|
26
26
  gem.add_runtime_dependency 'thor'
27
27
  gem.add_runtime_dependency 'json' #Not locking down a version because buncher gem requires 1.6, while other projects use 1.7.
28
28
  gem.add_runtime_dependency 'webrick'
29
+ gem.add_runtime_dependency 'colored'
29
30
 
30
31
  gem.add_development_dependency 'rake', '~> 10.0.3'
31
32
  gem.add_development_dependency 'webmock', '~> 1.9.3'
@@ -0,0 +1,80 @@
1
+ require 'spec_helper'
2
+ require 'pact/tasks/task_helper'
3
+
4
+ module Pact
5
+ describe TaskHelper do
6
+ include TaskHelper
7
+
8
+ let(:env_description) { "pact description set in ENV"}
9
+ let(:env_provider_state) { "provider state set in ENV"}
10
+ let(:env_criteria){ {:description=>/#{env_description}/, :provider_state=>/#{env_provider_state}/} }
11
+ let(:default_description) { "default description"}
12
+ let(:default_provider_state) { "default provider state"}
13
+
14
+ shared_context "PACT_DESCRIPTION is defined" do
15
+ before do
16
+ ENV.stub(:[])
17
+ ENV.stub(:[]).with("PACT_DESCRIPTION").and_return(env_description)
18
+ end
19
+ end
20
+
21
+ shared_context 'PACT_PROVIDER_STATE is defined' do
22
+ before do
23
+ ENV.stub(:[])
24
+ ENV.stub(:[]).with("PACT_PROVIDER_STATE").and_return(env_provider_state)
25
+ end
26
+ end
27
+
28
+ shared_context 'default description is defined' do
29
+ let(:default_description) { "default description"}
30
+ end
31
+
32
+ let(:defaults) { {:description => default_description, :provider_state => default_provider_state} }
33
+
34
+ describe "spec_criteria" do
35
+
36
+ context "when ENV variables are defined" do
37
+ before do
38
+ ENV.stub(:fetch).with("PACT_DESCRIPTION", anything).and_return(env_description)
39
+ ENV.stub(:fetch).with("PACT_PROVIDER_STATE", anything).and_return(env_provider_state)
40
+ end
41
+
42
+ context "when defaults are not passed in" do
43
+ it "returns the env vars as regexes" do
44
+ expect(spec_criteria).to eq(env_criteria)
45
+ end
46
+ end
47
+
48
+ context "when defaults are passed in" do
49
+ it "returns the env vars as regexes" do
50
+ expect(spec_criteria(defaults)).to eq(env_criteria)
51
+ end
52
+ end
53
+ end
54
+
55
+ context "when ENV variables are not defined" do
56
+ context "when defaults are passed in" do
57
+ it "returns the defaults as regexes" do
58
+ expect(spec_criteria(defaults)).to eq({:description=>/#{default_description}/, :provider_state=>/#{default_provider_state}/})
59
+ end
60
+ end
61
+ context "when defaults are not passed in" do
62
+ it "returns an empty hash" do
63
+ expect(spec_criteria).to eq({})
64
+ end
65
+ end
66
+ end
67
+
68
+ context "when provider state is an empty string" do
69
+ before do
70
+ ENV.stub(:fetch).with(anything, anything).and_return(nil)
71
+ ENV.stub(:fetch).with("PACT_PROVIDER_STATE", anything).and_return('')
72
+ end
73
+
74
+ it "returns a nil provider state so that it matches a nil provider state on the interaction" do
75
+ expect(spec_criteria[:provider_state]).to be_nil
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -88,16 +88,6 @@ module Pact
88
88
  end
89
89
  end
90
90
 
91
- context 'when one or more specs fail' do
92
-
93
- let(:exit_code) {1}
94
-
95
- it 'raises an exception' do
96
- $stderr.should_receive(:puts) #Confusing if this shows on the screen!
97
- expect { Rake::Task[@task_name].execute }.to raise_error RuntimeError
98
- end
99
-
100
- end
101
91
  end
102
92
  end
103
93
  end
@@ -28,12 +28,16 @@ module Pact
28
28
  end
29
29
  end
30
30
 
31
+ Pact.set_up do
32
+ WEATHER ||= {}
33
+ end
31
34
 
32
35
  #one with a top level consumer
33
36
  Pact.provider_states_for 'some-test-consumer' do
37
+
34
38
  provider_state "the weather is sunny" do
35
39
  set_up do
36
- WEATHER ||= {}
40
+
37
41
  WEATHER[:current_state] = 'sunny'
38
42
  end
39
43
  end
@@ -42,7 +46,6 @@ module Pact
42
46
  #one without a top level consumer
43
47
  Pact.provider_state "the weather is cloudy" do
44
48
  set_up do
45
- WEATHER ||= {}
46
49
  WEATHER[:current_state] = 'cloudy'
47
50
  end
48
51
  end
@@ -7,7 +7,7 @@
7
7
  },
8
8
  "interactions": [
9
9
  {
10
- "description": "A test request",
10
+ "description": "a test request",
11
11
  "request": {
12
12
  "method": "get",
13
13
  "path": "/"
@@ -4,10 +4,10 @@
4
4
  },
5
5
  "provider": {
6
6
  "name": "an unknown provider"
7
- },
7
+ },
8
8
  "interactions": [
9
9
  {
10
- "description": "A test request",
10
+ "description": "a test request",
11
11
  "request": {
12
12
  "method": "get",
13
13
  "path": "/weather",
@@ -20,6 +20,33 @@
20
20
 
21
21
  },
22
22
  "provider_state": "the weather is cloudy"
23
+ },{
24
+ "description": "another test request",
25
+ "request": {
26
+ "method": "get",
27
+ "path": "/weather",
28
+ "query": ""
29
+ },
30
+ "response": {
31
+ "status": 200,
32
+ "headers" : {"Content-type": "application/json"},
33
+ "body": {"message" : "this is not the weather you are looking for"}
34
+
35
+ }
36
+ },{
37
+ "description": "another test request",
38
+ "provider_state": "a missing provider state",
39
+ "request": {
40
+ "method": "get",
41
+ "path": "/weather",
42
+ "query": ""
43
+ },
44
+ "response": {
45
+ "status": 200,
46
+ "headers" : {"Content-type": "application/json"},
47
+ "body": {"message" : "this is not the weather you are looking for"}
48
+
49
+ }
23
50
  }
24
51
  ]
25
52
  }
@@ -4,10 +4,10 @@
4
4
  },
5
5
  "provider": {
6
6
  "name": "an unknown provider"
7
- },
7
+ },
8
8
  "interactions": [
9
9
  {
10
- "description": "A test request",
10
+ "description": "a test request",
11
11
  "request": {
12
12
  "method": "get",
13
13
  "path": "/weather",
@@ -21,7 +21,7 @@
21
21
  "provider_state": "the weather is sunny"
22
22
  },
23
23
  {
24
- "description": "A test request for text",
24
+ "description": "a test request for text",
25
25
  "request": {
26
26
  "method": "get",
27
27
  "path": "/sometext",
@@ -33,6 +33,6 @@
33
33
  "headers" : {"Content-type": "text/plain"},
34
34
  "body": "some text"
35
35
  }
36
- }
36
+ }
37
37
  ]
38
38
  }
@@ -8,6 +8,13 @@ Pact::VerificationTask.new(:stubbing_using_allow) do | pact |
8
8
  pact.uri './spec/support/stubbing.json', :pact_helper => './spec/support/stubbing_using_allow.rb'
9
9
  end
10
10
 
11
+ Pact::VerificationTask.new(:pass) do | pact |
12
+ pact.uri './spec/support/test_app_pass.json'
13
+ end
14
+
15
+ Pact::VerificationTask.new(:fail) do | pact |
16
+ pact.uri './spec/support/test_app_fail.json'
17
+ end
11
18
 
12
19
  namespace :pact do
13
20
 
@@ -20,6 +27,7 @@ namespace :pact do
20
27
  silent = true
21
28
  puts "Running task pact:tests"
22
29
  # Run these specs silently, otherwise expected failures will be written to stdout and look like unexpected failures.
30
+ Pact.configuration.output_stream = StringIO.new if silent
23
31
 
24
32
  result = Pact::Provider::PactSpecRunner.new([{ uri: './spec/support/test_app_pass.json' }], silent: silent).run
25
33
  fail 'Expected pact to pass' unless (result == 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.0.37
4
+ version: 1.0.38
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2014-03-19 00:00:00.000000000 Z
16
+ date: 2014-03-23 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: randexp
@@ -143,6 +143,22 @@ dependencies:
143
143
  - - ! '>='
144
144
  - !ruby/object:Gem::Version
145
145
  version: '0'
146
+ - !ruby/object:Gem::Dependency
147
+ name: colored
148
+ requirement: !ruby/object:Gem::Requirement
149
+ none: false
150
+ requirements:
151
+ - - ! '>='
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ type: :runtime
155
+ prerelease: false
156
+ version_requirements: !ruby/object:Gem::Requirement
157
+ none: false
158
+ requirements:
159
+ - - ! '>='
160
+ - !ruby/object:Gem::Version
161
+ version: '0'
146
162
  - !ruby/object:Gem::Dependency
147
163
  name: rake
148
164
  requirement: !ruby/object:Gem::Requirement
@@ -359,6 +375,8 @@ files:
359
375
  - lib/pact/provider/print_missing_provider_states.rb
360
376
  - lib/pact/provider/request.rb
361
377
  - lib/pact/provider/rspec.rb
378
+ - lib/pact/provider/rspec/formatter.rb
379
+ - lib/pact/provider/rspec/silent_json_formatter.rb
362
380
  - lib/pact/provider/state/provider_state.rb
363
381
  - lib/pact/provider/state/provider_state_configured_modules.rb
364
382
  - lib/pact/provider/state/provider_state_manager.rb
@@ -421,6 +439,7 @@ files:
421
439
  - spec/lib/pact/reification_spec.rb
422
440
  - spec/lib/pact/shared/dsl_spec.rb
423
441
  - spec/lib/pact/something_like_spec.rb
442
+ - spec/lib/pact/tasks/task_helper_spec.rb
424
443
  - spec/lib/pact/term_spec.rb
425
444
  - spec/lib/pact/verification_task_spec.rb
426
445
  - spec/spec_helper.rb
@@ -455,7 +474,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
455
474
  version: '0'
456
475
  segments:
457
476
  - 0
458
- hash: 1047822279614111936
477
+ hash: 1671674810832384181
459
478
  required_rubygems_version: !ruby/object:Gem::Requirement
460
479
  none: false
461
480
  requirements:
@@ -464,7 +483,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
464
483
  version: '0'
465
484
  segments:
466
485
  - 0
467
- hash: 1047822279614111936
486
+ hash: 1671674810832384181
468
487
  requirements: []
469
488
  rubyforge_project:
470
489
  rubygems_version: 1.8.23
@@ -513,6 +532,7 @@ test_files:
513
532
  - spec/lib/pact/reification_spec.rb
514
533
  - spec/lib/pact/shared/dsl_spec.rb
515
534
  - spec/lib/pact/something_like_spec.rb
535
+ - spec/lib/pact/tasks/task_helper_spec.rb
516
536
  - spec/lib/pact/term_spec.rb
517
537
  - spec/lib/pact/verification_task_spec.rb
518
538
  - spec/spec_helper.rb