pact-support 0.0.4 → 0.1.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
  SHA1:
3
- metadata.gz: 9c27327d015a0d365e6fb40d46bfaf51988a54bf
4
- data.tar.gz: 8f8c448fd177b5aca19761c205cc3c94d8ceecdb
3
+ metadata.gz: 96c37218ffea4538adf60f7a93d1c494723d14c1
4
+ data.tar.gz: a54ca9babda872a3aec4412e2d3f2456dc915d72
5
5
  SHA512:
6
- metadata.gz: 216d7e4778f28365ef8c22a3916a9bfc9d54bcc885e9f0c997938afbaf9a63b5d853f8d1a458caef2973c8874558551fa8fe923edb6ac789fe2bac0202a89e6a
7
- data.tar.gz: a5cab6e546286061eabbd519163ed7ced91683ac4d2c9e5192e60cc15c8e3583349a595b32237bcbde4a8076e3fdded6b969e33adbe630261343aca29c85492e
6
+ metadata.gz: f92a57c9ab90f83c059d23a17434dc4e9cb96424a9ef50953a750ec38bd994adc716b05b7495c76dc1ce1cb9e044ecae5e91517296d400d620b2bcb6eb2598a7
7
+ data.tar.gz: 0740b78cb0f67a31ef808efcd85e7c00274928247ae1dfa4d7becb401860eeb2c3d8757697de6213258b032770a3771b3f12a59fbfeba90007d50da88eb5ae4e
data/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@ Do this to generate your change history
2
2
 
3
3
  git log --pretty=format:' * %h - %s (%an, %ad)'
4
4
 
5
+ ### 0.1.0 (22 October 2014)
6
+
7
+ * fa7e03f - Removed JSON serialisation code from models. It has been moved to decorators in pact_mock-service. (bethesque, Wed Oct 22 12:53:21 2014 +1100)
8
+
5
9
  ### 0.0.4 (20 October 2014)
6
10
 
7
11
  * ebe5e32 - Added differ for application/x-www-form-urlencoded bodies. (bethesque, Mon Oct 20 20:26:13 2014 +1100)
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- pact-support (0.0.4)
4
+ pact-support (0.1.0)
5
5
  awesome_print (~> 1.1)
6
6
  find_a_port (~> 1.0.1)
7
7
  json
@@ -9,11 +9,7 @@ require 'open-uri'
9
9
  require_relative 'service_consumer'
10
10
  require_relative 'service_provider'
11
11
  require_relative 'interaction'
12
- require_relative 'request'
13
12
  require_relative 'pact_file'
14
- require_relative 'file_name'
15
-
16
-
17
13
 
18
14
  module Pact
19
15
 
@@ -21,8 +17,7 @@ module Pact
21
17
 
22
18
  include SymbolizeKeys
23
19
  include Logging
24
- include FileName
25
- include ActiveSupportSupport
20
+ include PactFile
26
21
 
27
22
  attr_accessor :interactions
28
23
  attr_accessor :consumer
@@ -34,32 +29,13 @@ module Pact
34
29
  @provider = attributes[:provider]
35
30
  end
36
31
 
37
- def to_hash
38
- {
39
- provider: @provider.as_json,
40
- consumer: @consumer.as_json,
41
- interactions: @interactions.collect(&:as_json),
42
- metadata: {
43
- pactSpecificationVersion: "1.0.0"
44
- }
45
- }
46
- end
47
-
48
- def as_json(options = {})
49
- fix_all_the_things to_hash
50
- end
51
-
52
- def to_json(options = {})
53
- as_json.to_json(options)
54
- end
55
-
56
32
  def self.from_hash(hash)
57
33
  hash = symbolize_keys(hash)
58
- new({
59
- :interactions => hash[:interactions].collect { |hash| Interaction.from_hash(hash)},
34
+ new(
60
35
  :consumer => ServiceConsumer.from_hash(hash[:consumer]),
61
- :provider => ServiceProvider.from_hash(hash[:provider])
62
- })
36
+ :provider => ServiceProvider.from_hash(hash[:provider]),
37
+ :interactions => hash[:interactions].collect { |hash| Interaction.from_hash(hash)}
38
+ )
63
39
  end
64
40
 
65
41
  def self.from_json string
@@ -95,20 +71,5 @@ module Pact
95
71
  end
96
72
  end
97
73
 
98
- def pact_file_name
99
- file_name consumer.name, provider.name
100
- end
101
-
102
- def pactfile_path
103
- raise 'You must first specify a consumer and service name' unless (consumer && consumer.name && provider && provider.name)
104
- @pactfile_path ||= file_path consumer.name, provider.name
105
- end
106
-
107
- def update_pactfile
108
- logger.debug "Updating pact file for #{provider.name} at #{pactfile_path}"
109
- File.open(pactfile_path, 'w') do |f|
110
- f.write fix_json_formatting(JSON.pretty_generate(self))
111
- end
112
- end
113
74
  end
114
75
  end
@@ -24,17 +24,12 @@ module Pact
24
24
  end
25
25
 
26
26
  def to_hash
27
- hash = { :description => @description }
28
- hash[:provider_state] = @provider_state if @provider_state #Easier to read when provider state at top
29
- hash.merge(:request => @request.as_json, :response => @response)
30
- end
31
-
32
- def as_json options = {}
33
- fix_all_the_things to_hash
34
- end
35
-
36
- def to_json(options = {})
37
- as_json.to_json(options)
27
+ {
28
+ description: description,
29
+ provider_state: provider_state,
30
+ request: request.to_hash,
31
+ response: response.to_hash
32
+ }
38
33
  end
39
34
 
40
35
  def matches_criteria? criteria
@@ -51,7 +46,7 @@ module Pact
51
46
  end
52
47
 
53
48
  def == other
54
- other.is_a?(Interaction) && as_json == other.as_json
49
+ other.is_a?(Interaction) && to_hash == other.to_hash
55
50
  end
56
51
 
57
52
  def eq? other
@@ -67,7 +62,7 @@ module Pact
67
62
  end
68
63
 
69
64
  def to_s
70
- JSON.pretty_generate(self)
65
+ to_hash.to_s
71
66
  end
72
67
  end
73
68
  end
@@ -23,6 +23,10 @@ module Pact
23
23
  self[:body]
24
24
  end
25
25
 
26
+ def specified? key
27
+ self.key?(key.to_sym)
28
+ end
29
+
26
30
  def body_allows_any_value?
27
31
  body_not_specified? || body_is_empty_hash?
28
32
  end
@@ -43,7 +47,7 @@ module Pact
43
47
  end
44
48
 
45
49
  def body_not_specified?
46
- !self.key?(:body)
50
+ !specified?(:body)
47
51
  end
48
52
 
49
53
  end
@@ -36,10 +36,10 @@ module Pact
36
36
  # reparse the generated JSON into a hash and pretty_generate that... sigh...
37
37
  # Oh ActiveSupport, why....
38
38
  def fix_json_formatting json
39
- if json.include?("\n")
40
- json
41
- else
39
+ if json =~ /\{".*?":"/
42
40
  JSON.pretty_generate(JSON.parse(json, create_additions: false))
41
+ else
42
+ json
43
43
  end
44
44
  end
45
45
 
@@ -22,14 +22,6 @@ module Pact
22
22
  @query = is_unspecified?(query) ? query : Pact::Query.create(query)
23
23
  end
24
24
 
25
- def to_json(options = {})
26
- as_json.to_json(options)
27
- end
28
-
29
- def as_json options = {}
30
- to_hash
31
- end
32
-
33
25
  def to_hash
34
26
  hash = {
35
27
  method: method,
@@ -59,6 +51,10 @@ module Pact
59
51
  http_method_modifies_resource? && body_specified?
60
52
  end
61
53
 
54
+ def specified? key
55
+ !is_unspecified?(self.send(key))
56
+ end
57
+
62
58
  protected
63
59
 
64
60
  # Not including DELETE, as we don't care about the resources updated state.
@@ -74,17 +70,13 @@ module Pact
74
70
  specified?(:body)
75
71
  end
76
72
 
77
- def specified? key
78
- !is_unspecified?(self.send(key))
79
- end
80
-
81
73
  def is_unspecified? value
82
74
  value.is_a? self.class.key_not_found.class
83
75
  end
84
76
 
85
77
  def to_hash_without_body_or_query
86
78
  keep_keys = [:method, :path, :headers]
87
- as_json.reject{ |key, value| !keep_keys.include? key }.tap do | hash |
79
+ to_hash.reject{ |key, value| !keep_keys.include? key }.tap do | hash |
88
80
  hash[:method] = method.upcase
89
81
  end
90
82
  end
@@ -1,5 +1,5 @@
1
1
  module Pact
2
2
  module Support
3
- VERSION = "0.0.4"
3
+ VERSION = "0.1.0"
4
4
  end
5
5
  end
@@ -3,28 +3,6 @@ require 'pact/consumer_contract'
3
3
 
4
4
  module Pact
5
5
  describe ConsumerContract do
6
- describe "as_json" do
7
-
8
- class MockInteraction
9
- def as_json(options ={})
10
- {:mock => "interaction"}
11
- end
12
- end
13
-
14
- before do
15
- allow(DateTime).to receive(:now).and_return(DateTime.strptime("2013-08-15T13:27:13+10:00"))
16
- end
17
-
18
- let(:service_consumer) { double('ServiceConsumer', :as_json => {:a => 'consumer'}) }
19
- let(:service_provider) { double('ServiceProvider', :as_json => {:a => 'provider'}) }
20
- let(:pact) { ConsumerContract.new({:interactions => [MockInteraction.new], :consumer => service_consumer, :provider => service_provider }) }
21
- let(:expected_as_json) { {:provider=>{:a=>"provider"}, :consumer=>{:a=>"consumer"}, :interactions=>[{:mock=>"interaction"}], :metadata=>{:pactSpecificationVersion=> "1.0.0" }} }
22
-
23
- it "should return a hash representation of the Pact" do
24
- expect(pact.as_json).to eq expected_as_json
25
- end
26
-
27
- end
28
6
 
29
7
  describe ".from_json" do
30
8
  let(:loaded_pact) { ConsumerContract.from_json(string) }
@@ -53,56 +53,6 @@ module Pact
53
53
  end
54
54
  end
55
55
 
56
- describe "to JSON" do
57
- let(:request) do
58
- {
59
- method: 'post',
60
- path: '/foo',
61
- body: Term.new(generate: 'waffle', matcher: /ffl/),
62
- headers: { 'Content-Type' => 'application/json' },
63
- query: '',
64
- }
65
- end
66
-
67
- let(:response) do
68
- { baz: /qux/, wiffle: Term.new(generate: 'wiffle', matcher: /iff/) }
69
- end
70
-
71
- let(:parsed_result) do
72
- JSON.load(subject.to_json)
73
- end
74
-
75
- subject { Interaction.from_hash('response' => response, 'request' => request) }
76
-
77
- it "contains the request" do
78
- expect(parsed_result['request']).to eq({
79
- 'method' => 'post',
80
- 'path' => '/foo',
81
- 'headers' => {
82
- 'Content-Type' => 'application/json'
83
- },
84
- 'body' => Term.new(generate: 'waffle', matcher: /ffl/),
85
- 'query' => ''
86
- })
87
- end
88
-
89
- describe "response" do
90
-
91
- it "serialises regexes" do
92
- expect(parsed_result['response']['baz']).to eql /qux/
93
- end
94
-
95
- it "serialises terms" do
96
- term = Term.new(generate:'wiffle', matcher: /iff/)
97
- parsed_term = parsed_result['response']['wiffle']
98
- expect(term.matcher).to eql parsed_term.matcher
99
- expect(term.generate).to eql parsed_term.generate
100
- end
101
-
102
- end
103
-
104
- end
105
-
106
56
  describe "request_modifies_resource_without_checking_response_body?" do
107
57
 
108
58
  let(:interaction) { Interaction.new(request: request, response: response)}
@@ -26,15 +26,6 @@ module Pact
26
26
  end
27
27
  end
28
28
 
29
- describe "as_json" do
30
- subject { Request::Expected.new(:get, '/path', {:header => 'value'}, {:body => 'yeah'}, "query", {some: 'options'}) }
31
- context "with options" do
32
- it "does not include the options because they are a temporary hack and should leave no trace of themselves in the pact file" do
33
- expect(subject.as_json.key?(:options)).to be false
34
- end
35
- end
36
- end
37
-
38
29
  describe "matching to actual requests" do
39
30
 
40
31
  subject { Request::Expected.new(expected_method, expected_path, expected_headers, expected_body, expected_query, options) }
@@ -18,12 +18,6 @@ module Pact
18
18
 
19
19
  subject { TestRequest.new("get", "/", {some: "things"}, {some: "things"} , "some=things") }
20
20
 
21
- describe "#to_json" do
22
- it "renders the keys in a sensible order" do
23
- expect(subject.to_json).to match(/method.*path.*query.*headers.*body/)
24
- end
25
- end
26
-
27
21
  describe "#full_path" do
28
22
 
29
23
  subject { TestRequest.new("get", "/something", {}, {some: "things"} , query).full_path }
data/tasks/spec.rake CHANGED
@@ -2,5 +2,14 @@ require 'rspec/core/rake_task'
2
2
 
3
3
  RSpec::Core::RakeTask.new(:spec)
4
4
 
5
- task :default => [:spec]
5
+ task :set_active_support_on do
6
+ ENV["LOAD_ACTIVE_SUPPORT"] = 'true'
7
+ end
8
+
9
+ desc "This is to ensure that the gem still works even when active support JSON is loaded."
10
+ task :spec_with_active_support => [:set_active_support_on] do
11
+ Rake::Task['spec'].execute
12
+ end
13
+
14
+ task :default => [:spec, :spec_with_active_support]
6
15
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pact-support
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.1.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: 2014-10-20 00:00:00.000000000 Z
15
+ date: 2014-10-22 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: randexp