proxy_rb 0.10.4 → 0.10.5

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: 3c4140c039086f00ab14580ba60542090e9aa8fb
4
- data.tar.gz: 1434c82f7819ced45e0cb8efb4a868f6fe40bbb2
3
+ metadata.gz: f6abcc8dc4e92962539f30a1449feae10f6c8940
4
+ data.tar.gz: 184e4d8e2206de5d44e86eee437fece58df3f02a
5
5
  SHA512:
6
- metadata.gz: e2b8b59ca5495bdb373adea37c32de248f1011de073f1fe3e836c2512cfe926689f5370e11a2327d70768fcc158aa516158098201d2f1ff4415de713b01b6067
7
- data.tar.gz: c8dd25257ffa1e7df33e505e96bc65fdd35d894f9466ca95fb9e4010d8d5091687cdcf1fb4cc6b3613d6c03ad5f2e37087b7852304e86ce501ed894e2f608def
6
+ metadata.gz: 9096dd8f7b0373e477354e4cfaa22621a2775fe247dba45650b06b8a8e80bed93bb2da0965f7854b90af086851ce2af8fa6d83969ff503f2f6e0b07ff8209e3b
7
+ data.tar.gz: a4b629292fcaa35f0bbf0942ab5f42729e41b669a141b720b2e0bd10eb1e351dd46ef12ac3c1bdb299fd415d200f0599d34d56d1cd35585c6369204dbf520661
data/History.md CHANGED
@@ -4,6 +4,12 @@ Empty
4
4
 
5
5
  # RELEASED
6
6
 
7
+ ## [v0.10.5](https://github.com/fedux-org/proxy_rb/compare/v0.10.5...v0.10.5)
8
+
9
+ * Fix for overwriting proxies
10
+ * Better error messages for matchers
11
+ * Added new announcer for http status code
12
+
7
13
  ## [v0.10.4](https://github.com/fedux-org/proxy_rb/compare/v0.10.3...v0.10.4)
8
14
 
9
15
  * Don't overwrite proxies set by multiple tags
data/README.md CHANGED
@@ -8,6 +8,10 @@
8
8
 
9
9
  `proxy_rb` makes it easier for you to test your proxy infrastructre.
10
10
 
11
+ **Be careful: This documentation is always up to date and might contain
12
+ information that is not suitable for the version you are using. All features
13
+ flagged with "experimental" might change without any further notice.**
14
+
11
15
  ## Installation
12
16
 
13
17
  Add this line to your application's Gemfile:
data/cucumber.yml CHANGED
@@ -1,2 +1,2 @@
1
- default: -t @wip:3 -t ~@broken-external -t ~@future -t ~@broken
2
- all: -t ~@wip -t ~@broken-external -t ~@future -t ~@broken
1
+ wip: -t @wip:3 -t ~@broken-external -t ~@future -t ~@broken
2
+ default: -t ~@wip -t ~@broken-external -t ~@future -t ~@broken
@@ -80,6 +80,7 @@ module ProxyRb
80
80
  output_format :resource_user, proc { |v| format('Resource User: %s', v) }
81
81
  output_format :resource, proc { |v| format('Resource: %s', v) }
82
82
  output_format :http_response_headers, proc { |v| format("<<-HTTP_RESPONSE_HEADERS\n%s\nHTTP_RESPONSE_HEADERS", SimpleTable.new(v)) }
83
+ output_format :status_code, proc { |v| format('HTTP Status Code: %s', v) }
83
84
  end
84
85
 
85
86
  def output_format(channel, string = '%s', &block)
@@ -40,6 +40,10 @@ module ProxyRb
40
40
  module HttpProxy
41
41
  include ::Capybara::DSL
42
42
 
43
+ # !@attribute resource
44
+ # The resource which should be visited/downloaded
45
+ attr_reader :resource
46
+
43
47
  # The proxy based on subject
44
48
  def proxy
45
49
  @proxy ||= ProxyRb::HttpProxy.new(ProxyRb::ProxyUrlParser.new(subject))
@@ -50,7 +54,7 @@ module ProxyRb
50
54
  # @param [String] url
51
55
  # rubocop:disable Metrics/AbcSize
52
56
  def visit(url, p = proxy)
53
- resource = Resource.new(url)
57
+ @resource = Resource.new(url)
54
58
 
55
59
  proxy_rb.event_bus.notify Events::ResourceSet.new(resource.url.to_s)
56
60
  proxy_rb.event_bus.notify Events::ResourceUserSet.new(resource.credentials.to_s) unless resource.credentials.empty?
@@ -1,28 +1,18 @@
1
1
  # frozen_string_literal: true
2
+ require 'proxy_rb/main'
3
+
2
4
  Before do
3
5
  setup_proxy_rb
4
6
  end
5
7
 
6
- %i(
7
- proxy
8
- proxy_user
9
- resource
10
- resource_user
11
- http_response_headers
12
- ).each do |announcer|
8
+ ProxyRb::ANNOUNCERS.each do |announcer|
13
9
  Before "@announce-#{announcer.to_s.tr('_', '-')}" do
14
10
  proxy_rb.announcer.activate(announcer)
15
11
  end
16
12
  end
17
13
 
18
14
  Before '@announce' do
19
- %i(
20
- proxy
21
- proxy_user
22
- resource
23
- resource_user
24
- http_response_headers
25
- ).each do |announcer|
15
+ ProxyRb::ANNOUNCERS.each do |announcer|
26
16
  proxy_rb.announcer.activate(announcer)
27
17
  end
28
18
  end
@@ -16,7 +16,7 @@ Given(/^I use the user "([^"]*)"(?: with password "([^"]*)")?$/) do |user_name,
16
16
  end
17
17
 
18
18
  Given(/^I use the following proxies:$/) do |table|
19
- proxies.concat table.hashes.map do |r|
19
+ new_proxies = table.hashes.map do |r|
20
20
  p = ProxyRb::HttpProxy.new(ProxyRb::ProxyUrlParser.new(r[:proxy]))
21
21
 
22
22
  # Hide password by using <PASSWORD> => retrieve it using fetcher
@@ -37,6 +37,8 @@ Given(/^I use the following proxies:$/) do |table|
37
37
 
38
38
  p
39
39
  end
40
+
41
+ proxies.concat new_proxies
40
42
  end
41
43
 
42
44
  Then(/the following requests are( not)? allowed to pass the proxy:/) do |forbidden, table|
@@ -50,5 +50,13 @@ module ProxyRb
50
50
  def full_url
51
51
  ProxyUrl.build url.to_hash.merge(credentials.to_hash)
52
52
  end
53
+
54
+ # Convert proxy to string
55
+ #
56
+ # @return [String]
57
+ # the proxy as string url
58
+ def to_s
59
+ full_url.to_s
60
+ end
53
61
  end
54
62
  end
data/lib/proxy_rb/main.rb CHANGED
@@ -6,6 +6,15 @@ module ProxyRb
6
6
  @debug_mode = false
7
7
  @logger = Logger.new($stderr)
8
8
 
9
+ ANNOUNCERS = %i(
10
+ proxy
11
+ proxy_user
12
+ resource
13
+ resource_user
14
+ http_response_headers
15
+ status_code
16
+ )
17
+
9
18
  class << self
10
19
  protected
11
20
 
@@ -15,6 +24,7 @@ module ProxyRb
15
24
 
16
25
  attr_reader :logger
17
26
 
27
+ # What kind of information can be announce while debugging
18
28
  def debug_mode_enabled?
19
29
  debug_mode == true
20
30
  end
@@ -2,17 +2,36 @@
2
2
  RSpec::Matchers.define :be_forbidden do
3
3
  match do |actual|
4
4
  next true if proxy_rb.config.strict == false && (actual.status_code.nil? || actual.status_code == 0)
5
- require 'pry'
6
5
  sleep 0.5 # handle network latency
7
6
 
8
7
  values_match?(403, actual.status_code)
9
8
  end
10
9
 
11
10
  failure_message do |actual|
12
- %(expected that response has status code 403, but has #{actual.status_code})
11
+ msg = []
12
+
13
+ msg << %(expected that response of "#{resource}" has status code 403, but has #{actual.status_code}.)
14
+
15
+ if proxy.nil? || proxy.empty?
16
+ msg << %(No proxy was used.)
17
+ else
18
+ msg << %(It was fetched via proxy "#{proxy.to_s}".)
19
+ end
20
+
21
+ msg.join ' '
13
22
  end
14
23
 
15
24
  failure_message_when_negated do
16
- %(expected that response does not have status code 403)
25
+ msg = []
26
+
27
+ msg << %(expected that response of "#{resource}" does not have status code 403.)
28
+
29
+ if proxy.nil? || proxy.empty?
30
+ msg << %(No proxy was used.)
31
+ else
32
+ msg << %(It was fetched via proxy "#{proxy.to_s}".)
33
+ end
34
+
35
+ msg.join ' '
17
36
  end
18
37
  end
@@ -2,16 +2,36 @@
2
2
  RSpec::Matchers.define :be_successful do
3
3
  match do |actual|
4
4
  next true if proxy_rb.config.strict == false && (actual.status_code.nil? || actual.status_code == 0)
5
+ sleep 0.5 # handle network latency
5
6
 
6
- sleep 0.5
7
7
  actual.status_code.to_s.start_with?('2', '3')
8
8
  end
9
9
 
10
10
  failure_message do |actual|
11
- %(expected that response has status code 2xx, but has #{actual.status_code})
11
+ msg = []
12
+
13
+ msg << %(expected that response of "#{resource}" has status code 2xx, but has #{actual.status_code}.)
14
+
15
+ if proxy.nil? || proxy.empty?
16
+ msg << %(No proxy was used.)
17
+ else
18
+ msg << %(It was fetched via proxy "#{proxy.to_s}".)
19
+ end
20
+
21
+ msg.join ' '
12
22
  end
13
23
 
14
24
  failure_message_when_negated do
15
- %(expected that response does not have status code 2xx)
25
+ msg = []
26
+
27
+ msg << %(expected that response of "#{resource}" does not have status code 2xx.)
28
+
29
+ if proxy.nil? || proxy.empty?
30
+ msg << %(No proxy was used.)
31
+ else
32
+ msg << %(It was fetched via proxy "#{proxy.to_s}".)
33
+ end
34
+
35
+ msg.join ' '
16
36
  end
17
37
  end
@@ -4,6 +4,34 @@ RSpec::Matchers.define :have_mime_type do |expected|
4
4
  @actual = actual.mime_type
5
5
  values_match?(expected, @actual)
6
6
  end
7
+
8
+ failure_message do |actual|
9
+ msg = []
10
+
11
+ msg << %(expected that response of "#{resource}" has mime type "#{expected}", but has "#{actual}".)
12
+
13
+ if proxy.nil? || proxy.empty?
14
+ msg << %(No proxy was used.)
15
+ else
16
+ msg << %(It was fetched via proxy "#{proxy.to_s}".)
17
+ end
18
+
19
+ msg.join ' '
20
+ end
21
+
22
+ failure_message_when_negated do
23
+ msg = []
24
+
25
+ msg << %(expected that response of "#{resource}" does not have mime type "#{expected}".)
26
+
27
+ if proxy.nil? || proxy.empty?
28
+ msg << %(No proxy was used.)
29
+ else
30
+ msg << %(It was fetched via proxy "#{proxy.to_s}".)
31
+ end
32
+
33
+ msg.join ' '
34
+ end
7
35
  end
8
36
 
9
37
  RSpec::Matchers.alias_matcher :be_of_mime_type, :have_mime_type
@@ -84,6 +84,8 @@ module ProxyRb
84
84
  # @return [Hash]
85
85
  # the converted url
86
86
  def to_hash
87
+ return {} if empty?
88
+
87
89
  url.to_hash
88
90
  end
89
91
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  require 'proxy_rb/api'
3
+ require 'proxy_rb/main'
3
4
 
4
5
  # Main Module
5
6
  module ProxyRb
@@ -33,24 +34,12 @@ RSpec.configure do |config|
33
34
  config.before :each do |example|
34
35
  next unless self.class.include? ProxyRb::Api
35
36
 
36
- %i(
37
- proxy
38
- proxy_user
39
- resource
40
- resource_user
41
- http_response_headers
42
- ).each do |announcer|
37
+ ProxyRb::ANNOUNCERS.each do |announcer|
43
38
  proxy_rb.announcer.activate(announcer) if example.metadata["announce_#{announcer}".to_sym]
44
39
  end
45
40
 
46
41
  if example.metadata[:announce]
47
- %i(
48
- proxy
49
- proxy_user
50
- resource
51
- resource_user
52
- http_response_headers
53
- ).each do |announcer|
42
+ ProxyRb::ANNOUNCERS.each do |announcer|
54
43
  proxy_rb.announcer.activate(announcer)
55
44
  end
56
45
  end
@@ -61,6 +61,7 @@ module ProxyRb
61
61
  proc do |event|
62
62
  begin
63
63
  runtime.announcer.announce :http_response_headers, event.entity.driver.response_headers
64
+ runtime.announcer.announce :status_code, event.entity.driver.status_code
64
65
  rescue Capybara::NotSupportedByDriverError
65
66
  runtime.announcer.announce :http_response_headers, 'Message': format('Using #response_headers with the current driver "%s" is currently not supported', event.entity.driver.class)
66
67
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
  # Main Module
3
3
  module ProxyRb
4
- VERSION = '0.10.4'
4
+ VERSION = '0.10.5'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: proxy_rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.4
4
+ version: 0.10.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Max Meyer