pacto 0.4.0.rc1 → 0.4.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (98) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -1
  3. data/Gemfile +2 -7
  4. data/Rakefile +0 -5
  5. data/appveyor.yml +12 -0
  6. data/features/configuration/strict_matchers.feature +4 -4
  7. data/features/generate/generation.feature +8 -10
  8. data/features/support/env.rb +3 -7
  9. data/features/validate/validation.feature +3 -3
  10. data/lib/pacto.rb +5 -4
  11. data/lib/pacto/actors/json_generator.rb +1 -1
  12. data/lib/pacto/body_parsing.rb +42 -0
  13. data/lib/pacto/consumer/faraday_driver.rb +5 -2
  14. data/lib/pacto/contract.rb +23 -24
  15. data/lib/pacto/contract_factory.rb +4 -4
  16. data/lib/pacto/core/configuration.rb +18 -10
  17. data/lib/pacto/core/http_middleware.rb +1 -1
  18. data/lib/pacto/core/pacto_request.rb +3 -15
  19. data/lib/pacto/core/pacto_response.rb +3 -13
  20. data/lib/pacto/errors.rb +68 -0
  21. data/lib/pacto/formats/legacy/contract.rb +49 -0
  22. data/lib/pacto/formats/legacy/contract_builder.rb +129 -0
  23. data/lib/pacto/formats/legacy/contract_factory.rb +63 -0
  24. data/lib/pacto/formats/legacy/contract_generator.rb +77 -0
  25. data/lib/pacto/formats/legacy/generator/filters.rb +46 -0
  26. data/lib/pacto/formats/legacy/generator_hint.rb +36 -0
  27. data/lib/pacto/formats/legacy/request_clause.rb +39 -0
  28. data/lib/pacto/formats/legacy/response_clause.rb +31 -0
  29. data/lib/pacto/formats/swagger/contract.rb +86 -0
  30. data/lib/pacto/formats/swagger/contract_factory.rb +45 -0
  31. data/lib/pacto/formats/swagger/request_clause.rb +53 -0
  32. data/lib/pacto/formats/swagger/response_clause.rb +31 -0
  33. data/lib/pacto/generator.rb +4 -4
  34. data/lib/pacto/handlers/json_handler.rb +19 -0
  35. data/lib/pacto/handlers/text_handler.rb +17 -0
  36. data/lib/pacto/request_clause.rb +9 -19
  37. data/lib/pacto/response_clause.rb +4 -4
  38. data/lib/pacto/server.rb +41 -2
  39. data/lib/pacto/stubs/uri_pattern.rb +5 -5
  40. data/lib/pacto/stubs/webmock_adapter.rb +4 -1
  41. data/lib/pacto/test_helper.rb +16 -13
  42. data/lib/pacto/version.rb +1 -1
  43. data/pacto-server.gemspec +1 -3
  44. data/pacto.gemspec +1 -1
  45. data/sample_apis/user_api.rb +16 -0
  46. data/samples/contracts/user.json +51 -0
  47. data/samples/cops.rb +3 -0
  48. data/samples/server_cli.sh +3 -3
  49. data/spec/fabricators/contract_fabricator.rb +17 -8
  50. data/spec/fixtures/{deprecated_contracts → contracts/deprecated}/deprecated_contract.json +2 -2
  51. data/spec/fixtures/contracts/{contract.json → legacy/contract.json} +0 -0
  52. data/spec/fixtures/contracts/{contract_with_examples.json → legacy/contract_with_examples.json} +0 -0
  53. data/spec/fixtures/contracts/{simple_contract.json → legacy/simple_contract.json} +1 -1
  54. data/spec/fixtures/contracts/{strict_contract.json → legacy/strict_contract.json} +0 -0
  55. data/spec/fixtures/contracts/{templating_contract.json → legacy/templating_contract.json} +0 -0
  56. data/spec/fixtures/{swagger → contracts/swagger}/petstore.yaml +0 -0
  57. data/spec/integration/e2e_spec.rb +6 -12
  58. data/spec/integration/forensics/integration_matcher_spec.rb +5 -11
  59. data/spec/integration/rspec_spec.rb +12 -12
  60. data/spec/integration/templating_spec.rb +1 -1
  61. data/spec/spec_helper.rb +14 -2
  62. data/spec/unit/pacto/contract_factory_spec.rb +1 -2
  63. data/spec/unit/pacto/contract_spec.rb +44 -70
  64. data/spec/unit/pacto/core/investigation_spec.rb +4 -3
  65. data/spec/unit/pacto/formats/legacy/contract_builder_spec.rb +93 -0
  66. data/spec/unit/pacto/formats/legacy/contract_factory_spec.rb +29 -0
  67. data/spec/unit/pacto/formats/legacy/contract_generator_spec.rb +173 -0
  68. data/spec/unit/pacto/formats/legacy/contract_spec.rb +41 -0
  69. data/spec/unit/pacto/formats/legacy/generator/filters_spec.rb +104 -0
  70. data/spec/unit/pacto/formats/legacy/request_clause_spec.rb +79 -0
  71. data/spec/unit/pacto/formats/legacy/response_clause_spec.rb +45 -0
  72. data/spec/unit/pacto/formats/swagger/contract_factory_spec.rb +58 -0
  73. data/spec/unit/pacto/formats/swagger/contract_spec.rb +47 -0
  74. data/spec/unit/pacto/investigation_registry_spec.rb +1 -2
  75. data/spec/unit/pacto/pacto_spec.rb +6 -4
  76. data/spec/unit/pacto/stubs/uri_pattern_spec.rb +7 -8
  77. data/spec/unit/pacto/stubs/webmock_adapter_spec.rb +2 -4
  78. data/tasks/release.rake +1 -1
  79. metadata +53 -53
  80. data/lib/pacto/contract_builder.rb +0 -125
  81. data/lib/pacto/exceptions/invalid_contract.rb +0 -12
  82. data/lib/pacto/generator/filters.rb +0 -42
  83. data/lib/pacto/generator/hint.rb +0 -26
  84. data/lib/pacto/generator/native_contract_generator.rb +0 -74
  85. data/lib/pacto/native_contract_factory.rb +0 -60
  86. data/lib/pacto/swagger_contract_factory.rb +0 -90
  87. data/spec/pacto/dummy_server.rb +0 -4
  88. data/spec/pacto/dummy_server/dummy.rb +0 -51
  89. data/spec/pacto/dummy_server/jruby_workaround_helper.rb +0 -23
  90. data/spec/pacto/dummy_server/playback_servlet.rb +0 -22
  91. data/spec/unit/pacto/contract_builder_spec.rb +0 -89
  92. data/spec/unit/pacto/generator/filters_spec.rb +0 -100
  93. data/spec/unit/pacto/generator/native_contract_generator_spec.rb +0 -171
  94. data/spec/unit/pacto/native_contract_factory_spec.rb +0 -26
  95. data/spec/unit/pacto/request_clause_spec.rb +0 -75
  96. data/spec/unit/pacto/response_clause_spec.rb +0 -41
  97. data/spec/unit/pacto/server/playback_servlet_spec.rb +0 -27
  98. data/spec/unit/pacto/swagger_contract_factory_spec.rb +0 -56
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c6cc06d1907fec1501c7069081e958eaac9068d7
4
- data.tar.gz: 4b6dcac0163d858ed9e085c345a3b956b9ad8621
3
+ metadata.gz: 11c33cac8327c3a1e1bae2bf3bfe80a350590386
4
+ data.tar.gz: 0a7eb928773e1447537a169076b3802572fc821f
5
5
  SHA512:
6
- metadata.gz: e980441e1894a466b5818e099f49523cb0d61b5bc414389186ba57bfb143caf4ee59086aa480c8e9d7c78b3f53ceb4a43c2e91ca55cbf76c04a4b696e459659c
7
- data.tar.gz: 3611106a78d817d26c98ac7769ac88766f9d0db0f793016066b87e255194466e51340bde66e3509f779e25d92b01e3f9b6d2d2d3b793775ada0f232297438529
6
+ metadata.gz: 9a4db2ba134723c8b28c11b3f75b902ddc059694e29667d0aae9cbbd25d06dae75ffaee6a4a880439fc0422649d9b110e14d3048bf5089b16b4859d7f676f9f0
7
+ data.tar.gz: 66fca5589aefe93cf77a44f631fbdaee64d6999b6a50f98e28c701bca51d13daa11f222114e0f6f9616274a986add6885f66f3c73c9c2bc1bb5965b7d91a6ff7
@@ -10,7 +10,7 @@ LineLength:
10
10
  Enabled: false
11
11
 
12
12
  MethodLength:
13
- Max: 15
13
+ Max: 20
14
14
 
15
15
  Style/Encoding:
16
16
  EnforcedStyle: when_needed
data/Gemfile CHANGED
@@ -1,13 +1,8 @@
1
1
  source 'https://rubygems.org'
2
- PACTO_HOME = File.expand_path '..', __FILE__
3
2
 
4
3
  # Specify your gem's dependencies in pacto.gemspec
5
- gemspec :name => 'pacto'
6
-
7
- Dir["#{PACTO_HOME}/pacto-*.gemspec"].each do |gemspec|
8
- plugin = gemspec.scan(/pacto-(.*)\.gemspec/).flatten.first
9
- gemspec(:name => "pacto-#{plugin}", :path => PACTO_HOME, :development_group => plugin)
10
- end
4
+ gemspec name: 'pacto'
5
+ gemspec name: 'pacto-server'
11
6
 
12
7
  # This is only used by Relish tests. Putting it here let's travis
13
8
  # pre-install so we can speed up the test with `bundle install --local`,
data/Rakefile CHANGED
@@ -40,11 +40,6 @@ task :samples do
40
40
  sh 'bundle exec polytrix generate code2doc --solo=samples --solo-glob="*.{rb,sh}"'
41
41
  end
42
42
 
43
- desc 'Build the documentation from the samples'
44
- task :documentation do
45
- sh "docco -t #{Dir.pwd}/docco_embeddable_layout/docco.jst samples/*"
46
- end
47
-
48
43
  desc 'Build gems into the pkg directory'
49
44
  task :build do
50
45
  FileUtils.rm_rf('pkg')
@@ -0,0 +1,12 @@
1
+ version: 0.0.{build}
2
+ init:
3
+ - choco install openssl.light
4
+ - gem install bundler --quiet --no-ri --no-rdoc
5
+ - gem install foreman --quiet --no-ri --no-rdoc
6
+ install:
7
+ - bundle install
8
+ build: off
9
+ test_script:
10
+ - START /B foreman start
11
+ - bundle exec rake
12
+
@@ -18,7 +18,7 @@ Feature: Strict Matching
18
18
  {
19
19
  "request": {
20
20
  "http_method": "GET",
21
- "path": "/hello/:id",
21
+ "path": "/hello/{id}",
22
22
  "headers": {
23
23
  "Accept": "application/json"
24
24
  },
@@ -64,7 +64,7 @@ Feature: Strict Matching
64
64
  end
65
65
 
66
66
  print 'Exact: '
67
- puts response 'http://dummyprovider.com/hello/:id', headers: {'Accept' => 'application/json' }
67
+ puts response URI.encode('http://dummyprovider.com/hello/{id}'), headers: {'Accept' => 'application/json' }
68
68
 
69
69
  print 'Wrong headers: '
70
70
  puts response 'http://dummyprovider.com/hello/123', headers: {'Content-Type' => 'application/json' }
@@ -79,7 +79,7 @@ Feature: Strict Matching
79
79
  """
80
80
  Pacto.configuration.strict_matchers = true
81
81
 
82
- Exact: WebMock::NetConnectNotAllowedError
82
+ Exact: {"message":"Hello, world!"}
83
83
  Wrong headers: WebMock::NetConnectNotAllowedError
84
84
  ID placeholder: {"message":"Hello, world!"}
85
85
 
@@ -91,7 +91,7 @@ Feature: Strict Matching
91
91
  """
92
92
  Pacto.configuration.strict_matchers = false
93
93
 
94
- Exact: WebMock::NetConnectNotAllowedError
94
+ Exact: {"message":"Hello, world!"}
95
95
  Wrong headers: {"message":"Hello, world!"}
96
96
  ID placeholder: {"message":"Hello, world!"}
97
97
  """
@@ -10,10 +10,10 @@ Feature: Contract Generation
10
10
  Background:
11
11
  Given a file named "requests/my_contract.json" with:
12
12
  """
13
- {
13
+ {
14
14
  "request": {
15
15
  "http_method": "GET",
16
- "path": "/hello",
16
+ "path": "/api/ping",
17
17
  "headers": {
18
18
  "Accept": "application/json"
19
19
  }
@@ -29,7 +29,7 @@ Feature: Contract Generation
29
29
 
30
30
  Scenario: Generating a contract using the rake task
31
31
  Given a directory named "contracts"
32
- When I successfully run `bundle exec rake pacto:generate['tmp/aruba/requests','tmp/aruba/contracts','http://localhost:8000']`
32
+ When I successfully run `bundle exec rake pacto:generate['tmp/aruba/requests','tmp/aruba/contracts','http://localhost:5000']`
33
33
  Then the stdout should contain "Successfully generated all contracts"
34
34
 
35
35
  Scenario: Generating a contract programmatically
@@ -40,25 +40,23 @@ Feature: Contract Generation
40
40
 
41
41
  WebMock.allow_net_connect!
42
42
  generator = Pacto::Generator.contract_generator
43
- contract = generator.generate_from_partial_contract('requests/my_contract.json', 'http://localhost:8000')
43
+ contract = generator.generate_from_partial_contract('requests/my_contract.json', 'http://localhost:5000')
44
44
  puts contract
45
45
  """
46
46
  When I successfully run `bundle exec ruby generate.rb`
47
47
  Then the stdout should match this contract:
48
48
  """json
49
49
  {
50
- "name": "/hello",
50
+ "name": "/api/ping",
51
51
  "request": {
52
52
  "headers": {
53
- "Accept": "application/json"
54
53
  },
55
54
  "http_method": "get",
56
- "path": "/hello"
55
+ "path": "/api/ping"
57
56
  },
58
57
  "response": {
59
58
  "headers": {
60
- "Content-Type": "application/json",
61
- "Vary": "Accept"
59
+ "Content-Type": "application/json"
62
60
  },
63
61
  "status": 200,
64
62
  "schema": {
@@ -67,7 +65,7 @@ Feature: Contract Generation
67
65
  "type": "object",
68
66
  "required": true,
69
67
  "properties": {
70
- "message": {
68
+ "ping": {
71
69
  "type": "string",
72
70
  "required": true
73
71
  }
@@ -5,7 +5,6 @@ require 'aruba/cucumber'
5
5
  require 'json_spec/cucumber'
6
6
  require 'aruba/jruby' if RUBY_PLATFORM == 'java'
7
7
  require 'pacto/test_helper'
8
- require_relative '../../spec/pacto/dummy_server'
9
8
 
10
9
  Pacto.configuration.hide_deprecations = true
11
10
 
@@ -16,7 +15,6 @@ end
16
15
 
17
16
  class PactoWorld
18
17
  include Pacto::TestHelper
19
- include Pacto::DummyServer::JRubyWorkaroundHelper
20
18
  end
21
19
 
22
20
  World do
@@ -24,11 +22,9 @@ World do
24
22
  end
25
23
 
26
24
  Around do | _scenario, block |
27
- # This is a cucumber bug (see cucumber #640)
25
+ WebMock.allow_net_connect!
28
26
  world = self || PactoWorld.new
29
- world.run_pacto do
30
- Bundler.with_clean_env do
31
- block.call
32
- end
27
+ world.with_pacto(port: 8000, live: true, backend_host: 'http://localhost:5000') do
28
+ block.call
33
29
  end
34
30
  end
@@ -8,7 +8,7 @@ Feature: Validation
8
8
  {
9
9
  "request": {
10
10
  "http_method": "GET",
11
- "path": "/hello",
11
+ "path": "/api/hello",
12
12
  "headers": { "Accept": "application/json" },
13
13
  "params": {}
14
14
  },
@@ -26,10 +26,10 @@ Feature: Validation
26
26
  }
27
27
  }
28
28
  """
29
- When I successfully run `bundle exec rake pacto:validate['http://localhost:8000','tmp/aruba/contracts/simple_contract.json']`
29
+ When I successfully run `bundle exec rake pacto:validate['http://localhost:5000','tmp/aruba/contracts/simple_contract.json']`
30
30
  Then the stdout should contain:
31
31
  """"
32
- Validating contracts against host http://localhost:8000
32
+ Validating contracts against host http://localhost:5000
33
33
  OK! simple_contract.json
34
34
  1 valid contract
35
35
  """
@@ -13,9 +13,10 @@ require 'ostruct'
13
13
  require 'erb'
14
14
  require 'logger'
15
15
 
16
+ # FIXME: There's soo much stuff here! I'd both like to re-roganize and to use autoloading.
17
+ require 'pacto/errors'
16
18
  require 'pacto/dash'
17
19
  require 'pacto/resettable'
18
- require 'pacto/exceptions/invalid_contract.rb'
19
20
  require 'pacto/logger'
20
21
  require 'pacto/ui'
21
22
  require 'pacto/request_pattern'
@@ -26,6 +27,7 @@ require 'pacto/consumer'
26
27
  require 'pacto/provider'
27
28
  require 'pacto/actors/json_generator'
28
29
  require 'pacto/actors/from_examples'
30
+ require 'pacto/body_parsing'
29
31
  require 'pacto/core/pacto_request'
30
32
  require 'pacto/core/pacto_response'
31
33
  require 'pacto/core/contract_registry'
@@ -46,7 +48,6 @@ require 'pacto/investigation'
46
48
  require 'pacto/hooks/erb_hook'
47
49
  require 'pacto/observers/stenographer'
48
50
  require 'pacto/generator'
49
- require 'pacto/generator/filters'
50
51
  require 'pacto/contract_files'
51
52
  require 'pacto/contract_set'
52
53
  require 'pacto/uri'
@@ -96,11 +97,11 @@ module Pacto
96
97
  true
97
98
  end
98
99
 
99
- def load_contract(contract_path, host, format = :default)
100
+ def load_contract(contract_path, host, format = :legacy)
100
101
  load_contracts(contract_path, host, format).first
101
102
  end
102
103
 
103
- def load_contracts(contracts_path, host, format = :default)
104
+ def load_contracts(contracts_path, host, format = :legacy)
104
105
  contracts = ContractFactory.load_contracts(contracts_path, host, format)
105
106
  contracts.each do |contract|
106
107
  contract_registry.register(contract)
@@ -5,7 +5,7 @@ module Pacto
5
5
  def build_request(contract, values = {})
6
6
  data = contract.request.to_hash
7
7
  data['uri'] = contract.request.uri(values)
8
- data['body'] = JSON::Generator.generate(data['schema'])
8
+ data['body'] = JSON::Generator.generate(data['schema']) if data['schema']
9
9
  data['method'] = contract.request.http_method
10
10
  Pacto::PactoRequest.new(data)
11
11
  end
@@ -0,0 +1,42 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ module Pacto
4
+ module Handlers
5
+ autoload :JSONHandler, 'pacto/handlers/json_handler'
6
+ autoload :TextHandler, 'pacto/handlers/text_handler'
7
+ autoload :XMLHandler, 'pacto/handlers/xml_handler'
8
+ end
9
+ module BodyParsing
10
+ def raw_body
11
+ return nil if body.nil?
12
+ return body if body.respond_to? :to_str
13
+
14
+ body_handler.raw(body)
15
+ end
16
+
17
+ def parsed_body
18
+ return nil if body.nil?
19
+
20
+ body_handler.parse(body)
21
+ end
22
+
23
+ def content_type
24
+ headers['Content-Type']
25
+ end
26
+
27
+ def body_handler
28
+ case content_type
29
+ when /\bjson$/
30
+ Pacto::Handlers::JSONHandler
31
+ when /\btext$/
32
+ Pacto::Handlers::TextHandler
33
+ # No XML support - yet
34
+ # when /\bxml$/
35
+ # XMLHandler
36
+ else
37
+ # JSON is still the default
38
+ Pacto::Handlers::JSONHandler
39
+ end
40
+ end
41
+ end
42
+ end
@@ -2,9 +2,12 @@
2
2
  module Pacto
3
3
  class Consumer
4
4
  class FaradayDriver
5
+ include Pacto::Logger
5
6
  # Sends a Pacto::PactoRequest
6
7
  def execute(req)
7
- conn = Faraday.new(url: req.uri.site) do |faraday|
8
+ conn_options = { url: req.uri.site }
9
+ conn_options[:proxy] = Pacto.configuration.proxy if Pacto.configuration.proxy
10
+ conn = Faraday.new(conn_options) do |faraday|
8
11
  faraday.response :logger if Pacto.configuration.logger.level == :debug
9
12
  faraday.adapter Faraday.default_adapter
10
13
  end
@@ -12,7 +15,7 @@ module Pacto
12
15
  response = conn.send(req.method) do |faraday_request|
13
16
  faraday_request.url(req.uri.path, req.uri.query_values)
14
17
  faraday_request.headers = req.headers
15
- faraday_request.body = req.body
18
+ faraday_request.body = req.raw_body
16
19
  end
17
20
 
18
21
  faraday_to_pacto_response response
@@ -1,30 +1,29 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module Pacto
3
- class Contract < Pacto::Dash
4
- property :id
5
- property :file
6
- property :request, required: true
7
- # Although I'd like response to be required, it complicates
8
- # the partial contracts used the rake generation task...
9
- # yet another reason I'd like to deprecate that feature
10
- property :response # , required: true
11
- property :values, default: {}
12
- # Gotta figure out how to use test doubles w/ coercion
13
- coerce_key :request, RequestClause
14
- coerce_key :response, ResponseClause
15
- property :examples
16
- property :name, required: true
17
- property :adapter, default: proc { Pacto.configuration.adapter }
18
- property :consumer, default: proc { Pacto.configuration.default_consumer }
19
- property :provider, default: proc { Pacto.configuration.default_provider }
3
+ module Contract
4
+ include Logger
20
5
 
21
- def initialize(opts)
22
- if opts[:file]
23
- opts[:file] = Addressable::URI.convert_path(File.expand_path(opts[:file])).to_s
24
- opts[:name] ||= opts[:file]
25
- end
26
- opts[:id] ||= (opts[:summary] || opts[:file])
27
- super
6
+ attr_reader :id
7
+ attr_reader :file
8
+ attr_reader :request
9
+ attr_reader :response
10
+ attr_reader :values
11
+ attr_reader :examples
12
+ attr_reader :name
13
+ attr_writer :adapter
14
+ attr_writer :consumer
15
+ attr_writer :provider
16
+
17
+ def adapter
18
+ @adapter ||= Pacto.configuration.adapter
19
+ end
20
+
21
+ def consumer
22
+ @consumer ||= Pacto.configuration.default_consumer
23
+ end
24
+
25
+ def provider
26
+ @provider ||= Pacto.configuration.default_provider
28
27
  end
29
28
 
30
29
  def examples?
@@ -16,14 +16,14 @@ module Pacto
16
16
  @factories.delete format
17
17
  end
18
18
 
19
- def build(contract_files, host, format = :default)
19
+ def build(contract_files, host, format = :legacy)
20
20
  factory = @factories[format.to_sym]
21
21
  fail "No Contract factory registered for #{format}" if factory.nil?
22
22
 
23
23
  contract_files.map { |file| factory.build_from_file(file, host) }.flatten
24
24
  end
25
25
 
26
- def load_contracts(contracts_path, host, format = :default)
26
+ def load_contracts(contracts_path, host, format = :legacy)
27
27
  factory = @factories[format.to_sym]
28
28
  files = factory.files_for(contracts_path)
29
29
  contracts = ContractFactory.build(files, host, format)
@@ -37,5 +37,5 @@ module Pacto
37
37
  end
38
38
  end
39
39
 
40
- require 'pacto/native_contract_factory'
41
- require 'pacto/swagger_contract_factory'
40
+ require 'pacto/formats/legacy/contract_factory'
41
+ require 'pacto/formats/swagger/contract_factory'
@@ -4,25 +4,31 @@ module Pacto
4
4
  attr_accessor :adapter, :strict_matchers,
5
5
  :contracts_path, :logger, :generator_options,
6
6
  :hide_deprecations, :default_consumer, :default_provider,
7
- :stenographer_log_file, :color
7
+ :stenographer_log_file, :color, :proxy
8
8
  attr_reader :hook
9
9
 
10
- def initialize
10
+ def initialize # rubocop:disable Metrics/MethodLength
11
11
  @middleware = Pacto::Core::HTTPMiddleware.new
12
12
  @middleware.add_observer Pacto::Cops, :investigate
13
13
  @generator = Pacto::Generator.contract_generator
14
14
  @middleware.add_observer @generator, :generate
15
- @stenographer_log_file ||= File.expand_path('pacto_stenographer.log')
16
15
  @default_consumer = Pacto::Consumer.new
17
16
  @default_provider = Pacto::Provider.new
18
17
  @adapter = Stubs::WebMockAdapter.new(@middleware)
19
18
  @strict_matchers = true
20
19
  @contracts_path = '.'
21
- @logger = Logger::SimpleLogger.instance
22
- define_logger_level
23
20
  @hook = Hook.new {}
24
21
  @generator_options = { schema_version: 'draft3' }
25
22
  @color = $stdout.tty?
23
+ @proxy = ENV['PACTO_PROXY']
24
+ end
25
+
26
+ def logger
27
+ @logger ||= new_simple_logger
28
+ end
29
+
30
+ def stenographer_log_file
31
+ @stenographer_log_file ||= File.expand_path('pacto_stenographer.log')
26
32
  end
27
33
 
28
34
  def register_hook(hook = nil, &block)
@@ -36,11 +42,13 @@ module Pacto
36
42
 
37
43
  private
38
44
 
39
- def define_logger_level
40
- if ENV['PACTO_DEBUG']
41
- @logger.level = :debug
42
- else
43
- @logger.level = :default
45
+ def new_simple_logger
46
+ Logger::SimpleLogger.instance.tap do | logger |
47
+ if ENV['PACTO_DEBUG']
48
+ logger.level = :debug
49
+ else
50
+ logger.level = :default
51
+ end
44
52
  end
45
53
  end
46
54
  end