quke 0.6.0 → 0.7.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
- SHA256:
3
- metadata.gz: b1912f6775017bdec69bd6e8b15f15b95829a6593910a0c27f0330fdb0f66774
4
- data.tar.gz: 88777a66fabbd0fa786b47dd45d56a6c7a24d797f6289dd2803abc9ae058f6a2
2
+ SHA1:
3
+ metadata.gz: 8861cc9092349b180b66c0cc650d29012a7eae69
4
+ data.tar.gz: 189b186c7b0606373a89b419c430933352b2799f
5
5
  SHA512:
6
- metadata.gz: 836c1c82284d6960b2dab3ecfecfe4c6053ad2361576ff891146ace43dd2188d168a5573ca4abeb11891a574a001617a775a97fc619f46f9e7c5dfd70d7a0b57
7
- data.tar.gz: 8c906791e4c8d0b54115de9684606dd9363eb4bf7cc92708ef7445aa0e5f9ab3dc097774f5803dd60ef7f02540c033f9af0cd606760798380b611a1b5b598332
6
+ metadata.gz: 6990b5aebeb9c93a8623f6f97b0fe4f7d637c96bc76b9f887bdb950ecd2541242e69b9d012d8ad60b745bfc1e07054bbd7035752211d84c649cd51555226ea4d
7
+ data.tar.gz: 9d43a939c2c6d746c25077c68e955baf27f5e24902cb9c0ae5312763eb801e18f071315eb9311b46fb2e9270a0cfb6bbf9fe135ba072ec925818ed9f1271af31
data/README.md CHANGED
@@ -1,11 +1,11 @@
1
- <img src="/quke.png" alt="Git flow" />
1
+ <img src="/quke.png" alt="Quke logo" />
2
2
 
3
3
  [![Build Status](https://travis-ci.org/DEFRA/quke.svg?branch=master)](https://travis-ci.org/DEFRA/quke)
4
- [![Code Climate](https://codeclimate.com/github/DEFRA/quke/badges/gpa.svg)](https://codeclimate.com/github/DEFRA/quke)
5
- [![Test Coverage](https://codeclimate.com/github/DEFRA/quke/badges/coverage.svg)](https://codeclimate.com/github/DEFRA/quke/coverage)
4
+ [![Maintainability](https://api.codeclimate.com/v1/badges/34f915556feb193d7d82/maintainability)](https://codeclimate.com/github/DEFRA/quke/maintainability)
5
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/34f915556feb193d7d82/test_coverage)](https://codeclimate.com/github/DEFRA/quke/test_coverage)
6
6
  [![security](https://hakiri.io/github/DEFRA/quke/master.svg)](https://hakiri.io/github/DEFRA/quke/master)
7
- [![Dependency Status](https://dependencyci.com/github/DEFRA/quke/badge)](https://dependencyci.com/github/DEFRA/quke)
8
7
  [![Gem Version](https://badge.fury.io/rb/quke.svg)](https://badge.fury.io/rb/quke)
8
+ [![Licence](https://img.shields.io/badge/Licence-OGLv3-blue.svg)](http://www.nationalarchives.gov.uk/doc/open-government-licence/version/3)
9
9
 
10
10
  Quke is a gem that helps you to build a suite of [Cucumber](https://cucumber.io/) acceptance tests.
11
11
 
data/Rakefile CHANGED
@@ -1,15 +1,17 @@
1
- require 'bundler/gem_tasks'
2
- require 'rspec/core/rake_task'
3
- require 'rdoc/task'
4
- require 'github_changelog_generator/task'
1
+ # frozen_string_literal: true
5
2
 
6
- task :default => :spec
3
+ require "bundler/gem_tasks"
4
+ require "rspec/core/rake_task"
5
+ require "rdoc/task"
6
+ require "github_changelog_generator/task"
7
+
8
+ task default: :spec
7
9
 
8
10
  RSpec::Core::RakeTask.new(:spec)
9
11
 
10
12
  RDoc::Task.new do |doc|
11
- doc.main = 'README.md'
12
- doc.title = 'Quke'
13
+ doc.main = "README.md"
14
+ doc.title = "Quke"
13
15
  doc.rdoc_files = FileList.new %w[README.md lib LICENSE]
14
16
  end
15
17
 
data/exe/quke CHANGED
@@ -1,7 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop:disable Layout/LeadingCommentSpace
1
4
  #!/usr/bin/env ruby
5
+ # rubocop:enable Layout/LeadingCommentSpace
2
6
 
3
- require 'quke'
4
- require 'quke/configuration'
7
+ require "quke"
8
+ require "quke/configuration"
5
9
 
6
10
  Quke::Quke.config = Quke::Configuration.new
7
11
  Quke::Quke.execute(ARGV)
@@ -1,11 +1,15 @@
1
- require 'quke/configuration'
1
+ # frozen_string_literal: true
2
2
 
3
- After('~@nonweb') do |scenario|
3
+ require "quke/configuration"
4
+
5
+ # Because of the way cucumber works everthing is made global. This also means
6
+ # any variables we set also need to be made global so they can be accessed
7
+ # across the scenarios.
8
+ # rubocop:disable Style/GlobalVars
9
+ After("not @nonweb") do |scenario|
4
10
  $fail_count ||= 0
5
11
 
6
- if Quke::Quke.config.browserstack.using_browserstack?
7
- $session_id = page.driver.browser.session_id
8
- end
12
+ $session_id = page.driver.browser.session_id if Quke::Quke.config.browserstack.using_browserstack?
9
13
 
10
14
  if scenario.failed?
11
15
  $fail_count = $fail_count + 1
@@ -31,9 +35,10 @@ After('~@nonweb') do |scenario|
31
35
  # handle e
32
36
  puts "FAILED: #{scenario.name}"
33
37
  puts "FAILED: URL of the page with the failure #{page.current_path}"
34
- puts ''
38
+ puts ""
35
39
  puts page.html
36
40
  end
37
41
  end
38
42
  end
39
43
  end
44
+ # rubocop:enable Style/GlobalVars
@@ -1,4 +1,6 @@
1
- require 'quke/configuration'
1
+ # frozen_string_literal: true
2
+
3
+ require "quke/configuration"
2
4
 
3
5
  # We use cucumber's AfterStep hook to insert our pause between pages if
4
6
  # one was set
@@ -1,6 +1,8 @@
1
- require 'quke/configuration'
1
+ # frozen_string_literal: true
2
2
 
3
- Before('~@nonweb') do
3
+ require "quke/configuration"
4
+
5
+ Before("not @nonweb") do
4
6
  # We have to make a special case for phantomjs when it comes to implementing
5
7
  # the ability to override the user agent. Unlike the selinium backed drivers
6
8
  # specifying the user agent is not part of the arguments we pass in when
@@ -12,10 +14,10 @@ Before('~@nonweb') do
12
14
  # test is running. Once a test finishes, the changes are lost.
13
15
  # Hence the only way we can ensure its set across all tests is by making use
14
16
  # of the Before hook, and adding the User-Agent header each time.
15
- if Quke::Quke.config.driver == 'phantomjs'
17
+ if Quke::Quke.config.driver == "phantomjs"
16
18
  unless Quke::Quke.config.user_agent.empty?
17
19
  page.driver.add_header(
18
- 'User-Agent',
20
+ "User-Agent",
19
21
  Quke::Quke.config.user_agent,
20
22
  permanent: true
21
23
  )
@@ -1,15 +1,15 @@
1
- require 'rspec/expectations'
2
- require 'capybara/cucumber'
3
- require 'site_prism'
4
- require 'quke/configuration'
5
- require 'quke/driver_configuration'
6
- require 'quke/driver_registration'
7
- require 'browserstack/local'
8
- require 'quke/browserstack_status_reporter'
1
+ # frozen_string_literal: true
9
2
 
10
- unless Quke::Quke.config.app_host.empty?
11
- Capybara.app_host = Quke::Quke.config.app_host
12
- end
3
+ require "rspec/expectations"
4
+ require "capybara/cucumber"
5
+ require "site_prism"
6
+ require "quke/configuration"
7
+ require "quke/driver_configuration"
8
+ require "quke/driver_registration"
9
+ require "browserstack/local"
10
+ require "quke/browserstack_status_reporter"
11
+
12
+ Capybara.app_host = Quke::Quke.config.app_host unless Quke::Quke.config.app_host.empty?
13
13
 
14
14
  driver_config = Quke::DriverConfiguration.new(Quke::Quke.config)
15
15
  driver_reg = Quke::DriverRegistration.new(driver_config, Quke::Quke.config)
@@ -39,15 +39,7 @@ Capybara.run_server = false
39
39
  # automatically in the event of an error when using the selenium driver.
40
40
  # Not setting this leads to Capybara saving the file to the root of the project
41
41
  # which can mess up your project structure.
42
- Capybara.save_path = 'tmp/'
43
-
44
- # By default, SitePrism element and section methods do not utilize Capybara's
45
- # implicit wait methodology and will return immediately if the element or
46
- # section requested is not found on the page. Adding the following code
47
- # enables Capybara's implicit wait methodology to pass through
48
- SitePrism.configure do |config|
49
- config.use_implicit_waits = true
50
- end
42
+ Capybara.save_path = "tmp/"
51
43
 
52
44
  # There aren't specific hooks we can attach to that only get called once before
53
45
  # and after all tests have run in Cucumber. Therefore the next best thing is to
@@ -71,6 +63,10 @@ end
71
63
  # used for final cleanup, we make use of it to kill our browserstack local
72
64
  # testing binary, and update the status of the session in browserstack
73
65
  at_exit do
66
+ # Because of the way cucumber works everthing is made global. This also means
67
+ # any variables we set also need to be made global so they can be accessed
68
+ # across the scenarios.
69
+ # rubocop:disable Style/GlobalVars
74
70
  if $fail_count && Quke::Quke.config.browserstack.using_browserstack?
75
71
  reporter = Quke::BrowserstackStatusReporter.new(Quke::Quke.config.browserstack)
76
72
  begin
@@ -83,6 +79,7 @@ at_exit do
83
79
  puts err
84
80
  end
85
81
  end
82
+ # rubocop:enable Style/GlobalVars
86
83
  if bs_local && Quke::Quke.config.browserstack.test_locally?
87
84
  # stop the local instance
88
85
  bs_local.stop
@@ -1,10 +1,15 @@
1
- require 'quke/version'
2
- require 'quke/browserstack_configuration'
3
- require 'quke/browserstack_status_reporter'
4
- require 'quke/configuration'
5
- require 'quke/cuke_runner'
6
- require 'quke/driver_registration'
7
- require 'quke/driver_configuration'
1
+ # frozen_string_literal: true
2
+
3
+ require "selenium/webdriver"
4
+ require "chromedriver-helper"
5
+
6
+ require "quke/version"
7
+ require "quke/browserstack_configuration"
8
+ require "quke/browserstack_status_reporter"
9
+ require "quke/configuration"
10
+ require "quke/cuke_runner"
11
+ require "quke/driver_registration"
12
+ require "quke/driver_configuration"
8
13
 
9
14
  module Quke #:nodoc:
10
15
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Quke #:nodoc:
2
4
 
3
5
  # Determines the configuration for browserstack, when selected as the driver
@@ -43,20 +45,18 @@ module Quke #:nodoc:
43
45
  # Initialize's the instance based in the +Quke::Configuration+ instance
44
46
  # passed in.
45
47
  #--
46
- # rubocop:disable Metrics/AbcSize
47
48
  # rubocop:disable Metrics/CyclomaticComplexity
48
49
  # rubocop:disable Metrics/PerceivedComplexity
49
50
  #++
50
51
  def initialize(configuration)
51
- @using_browserstack = configuration.data['driver'] == 'browserstack'
52
+ @using_browserstack = configuration.data["driver"] == "browserstack"
52
53
  data = validate_input_data(configuration.data)
53
- @username = ENV['BROWSERSTACK_USERNAME'] || data['username'] || ''
54
- @auth_key = ENV['BROWSERSTACK_AUTH_KEY'] || data['auth_key'] || ''
55
- @local_key = ENV['BROWSERSTACK_LOCAL_KEY'] || data['local_key'] || ''
56
- @capabilities = data['capabilities'] || {}
54
+ @username = ENV["BROWSERSTACK_USERNAME"] || data["username"] || ""
55
+ @auth_key = ENV["BROWSERSTACK_AUTH_KEY"] || data["auth_key"] || ""
56
+ @local_key = ENV["BROWSERSTACK_LOCAL_KEY"] || data["local_key"] || ""
57
+ @capabilities = data["capabilities"] || {}
57
58
  determine_local_testing_args(configuration)
58
59
  end
59
- # rubocop:enable Metrics/AbcSize
60
60
  # rubocop:enable Metrics/CyclomaticComplexity
61
61
  # rubocop:enable Metrics/PerceivedComplexity
62
62
 
@@ -66,7 +66,7 @@ module Quke #:nodoc:
66
66
  # It is used when determing whether to start and stop the binary
67
67
  # Browserstack provides to support local testing.
68
68
  def test_locally?
69
- @capabilities['browserstack.local'] == true && using_browserstack?
69
+ @capabilities["browserstack.local"] == true && using_browserstack?
70
70
  end
71
71
 
72
72
  # Returns true if the driver was set +browserstack+, else false.
@@ -110,35 +110,36 @@ module Quke #:nodoc:
110
110
  # )
111
111
  #
112
112
  def url
113
- return "http://#{@username}:#{@auth_key}@hub.browserstack.com/wd/hub" unless @username == ''
113
+ return "http://#{@username}:#{@auth_key}@hub.browserstack.com/wd/hub" unless @username == ""
114
114
  end
115
115
 
116
116
  private
117
117
 
118
118
  def validate_input_data(data)
119
119
  return {} if data.nil?
120
- return {} unless data['browserstack']
121
- data['browserstack']
120
+ return {} unless data["browserstack"]
121
+
122
+ data["browserstack"]
122
123
  end
123
124
 
124
125
  def determine_local_testing_args(configuration)
125
126
  @local_testing_args = {
126
127
  # Key is the only required arg. Everything else is optional
127
- 'key' => @local_key,
128
+ "key" => @local_key,
128
129
  # Always kill other running Browserstack Local instances
129
- 'force' => 'true',
130
+ "force" => "true",
130
131
  # We only want to enable local testing for automate
131
- 'onlyAutomate' => 'true',
132
+ "onlyAutomate" => "true",
132
133
  # Enable verbose logging. It's of no consequence to the tests, but it
133
134
  # could help in the event of errors
134
- 'v' => 'true',
135
+ "v" => "true",
135
136
  # Rather than
136
- 'logfile' => File.join(Dir.pwd, '/tmp/bowerstack_local_log.txt')
137
+ "logfile" => File.join(Dir.pwd, "/tmp/bowerstack_local_log.txt")
137
138
  }
138
139
  return unless configuration.use_proxy?
139
140
 
140
- @local_testing_args['proxyHost'] = configuration.proxy['host']
141
- @local_testing_args['proxyPort'] = configuration.proxy['port'].to_s
141
+ @local_testing_args["proxyHost"] = configuration.proxy["host"]
142
+ @local_testing_args["proxyPort"] = configuration.proxy["port"].to_s
142
143
  end
143
144
 
144
145
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Quke #:nodoc:
2
4
 
3
5
  # Used to update the status of a session in Browserstack to mark it as passed
@@ -30,7 +32,7 @@ module Quke #:nodoc:
30
32
  # It returns a string which can be used as a message for output confirming
31
33
  # the action.
32
34
  def passed(session_id)
33
- check_before_update(session_id, status: 'passed')
35
+ check_before_update(session_id, status: "passed")
34
36
  "Browserstack session #{session_id} status set to \e[32mpassed\e[0m 😀"
35
37
  end
36
38
 
@@ -40,14 +42,14 @@ module Quke #:nodoc:
40
42
  # It returns a string which can be used as a message for output confirming
41
43
  # the action.
42
44
  def failed(session_id)
43
- check_before_update(session_id, status: 'failed')
45
+ check_before_update(session_id, status: "failed")
44
46
  "Browserstack session #{session_id} status set to \e[31mfailed\e[0m 😢"
45
47
  end
46
48
 
47
49
  private
48
50
 
49
51
  def check_before_update(session_id, body)
50
- raise(ArgumentError, 'Need a session ID to update browserstack status') if session_id.nil?
52
+ raise(ArgumentError, "Need a session ID to update browserstack status") if session_id.nil?
51
53
 
52
54
  uri = URI("https://www.browserstack.com/automate/sessions/#{session_id}.json")
53
55
  set_status(uri, body)
@@ -56,7 +58,7 @@ module Quke #:nodoc:
56
58
  def set_status(uri, body)
57
59
  request = Net::HTTP::Put.new(uri)
58
60
  request.basic_auth @username, @auth_key
59
- request.content_type = 'application/json'
61
+ request.content_type = "application/json"
60
62
  request.body = body.to_json
61
63
 
62
64
  response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
@@ -1,4 +1,6 @@
1
- require 'yaml'
1
+ # frozen_string_literal: true
2
+
3
+ require "yaml"
2
4
 
3
5
  module Quke #:nodoc:
4
6
 
@@ -35,7 +37,7 @@ module Quke #:nodoc:
35
37
  # Return the file name for the config file, either as set by the user in
36
38
  # an environment variable called `QCONFIG` or the default of +.config.yml+.
37
39
  def self.file_name
38
- ENV['QUKE_CONFIG'] || '.config.yml'
40
+ ENV["QUKE_CONFIG"] || ".config.yml"
39
41
  end
40
42
 
41
43
  # When an instance is initialized it will automatically populate itself by
@@ -51,7 +53,7 @@ module Quke #:nodoc:
51
53
  # tells Cucumber where the main features folder which contains the tests is
52
54
  # located. If not set in the +.config.yml+ file it defaults to 'features'.
53
55
  def features_folder
54
- @data['features_folder']
56
+ @data["features_folder"]
55
57
  end
56
58
 
57
59
  # Returns the value set for +app_host+.
@@ -66,7 +68,7 @@ module Quke #:nodoc:
66
68
  #
67
69
  # This saves you from having to repeat the full url each time.
68
70
  def app_host
69
- @data['app_host']
71
+ @data["app_host"]
70
72
  end
71
73
 
72
74
  # Returns the value set for +driver+.
@@ -74,7 +76,7 @@ module Quke #:nodoc:
74
76
  # Tells Quke which browser to use for testing. Choices are firefox,
75
77
  # chrome browserstack and phantomjs, with the default being phantomjs.
76
78
  def driver
77
- @data['driver']
79
+ @data["driver"]
78
80
  end
79
81
 
80
82
  # Return the value set for +pause+.
@@ -83,7 +85,7 @@ module Quke #:nodoc:
83
85
  # browser is responding. Only useful if using a non-headless browser. The
84
86
  # default is 0.
85
87
  def pause
86
- @data['pause']
88
+ @data["pause"]
87
89
  end
88
90
 
89
91
  # Return the value set for +stop_on_error+.
@@ -94,7 +96,9 @@ module Quke #:nodoc:
94
96
  def stop_on_error
95
97
  # This use of Yaml.load to convert a string to a boolean comes from
96
98
  # http://stackoverflow.com/a/21804027/6117745
97
- YAML.load(@data['stop_on_error'])
99
+ # rubocop:disable Security/YAMLLoad
100
+ YAML.load(@data["stop_on_error"])
101
+ # rubocop:enable Security/YAMLLoad
98
102
  end
99
103
 
100
104
  # Return the value for +max_wait_time+
@@ -107,7 +111,7 @@ module Quke #:nodoc:
107
111
  # If the value is not set in config file, it will default to whatever is the
108
112
  # current Capybara value for default_max_wait_time.
109
113
  def max_wait_time
110
- @data['max_wait_time']
114
+ @data["max_wait_time"]
111
115
  end
112
116
 
113
117
  # Return the value set for +user_agent+.
@@ -118,7 +122,7 @@ module Quke #:nodoc:
118
122
  # you want to pretend to be another kind of browser, because the one you
119
123
  # have is not supported by the site.
120
124
  def user_agent
121
- @data['user_agent']
125
+ @data["user_agent"]
122
126
  end
123
127
 
124
128
  # Return the value set for +javascript_errors+.
@@ -131,7 +135,7 @@ module Quke #:nodoc:
131
135
  # are out of your scope. You still want to test other aspects of the site
132
136
  # but not let these errors prevent you from using phantomjs.
133
137
  def javascript_errors
134
- @data['javascript_errors']
138
+ @data["javascript_errors"]
135
139
  end
136
140
 
137
141
  # Return the hash of +proxy+ server settings
@@ -140,7 +144,7 @@ module Quke #:nodoc:
140
144
  # configure Quke to use it by setting the +host+ and +port+ in your config
141
145
  # file.
142
146
  def proxy
143
- @data['proxy']
147
+ @data["proxy"]
144
148
  end
145
149
 
146
150
  # Return true if the +proxy: host+ value has been set in the +.config.yml+
@@ -149,7 +153,7 @@ module Quke #:nodoc:
149
153
  # It is mainly used when determining whether to apply proxy server settings
150
154
  # to the different drivers when registering them with Capybara.
151
155
  def use_proxy?
152
- proxy['host'] != ''
156
+ proxy["host"] != ""
153
157
  end
154
158
 
155
159
  # Return the hash of +custom+ server settings
@@ -165,14 +169,14 @@ module Quke #:nodoc:
165
169
  # http://www.yamllint.com/) Quke will be able to pick it up and make it
166
170
  # available in your tests.
167
171
  def custom
168
- @data['custom']
172
+ @data["custom"]
169
173
  end
170
174
 
171
175
  private
172
176
 
173
177
  def load_data
174
178
  data = default_data!(load_yml_data)
175
- data['proxy'] = proxy_data(data['proxy'])
179
+ data["proxy"] = proxy_data(data["proxy"])
176
180
  data
177
181
  end
178
182
 
@@ -181,13 +185,13 @@ module Quke #:nodoc:
181
185
  # rubocop:disable Metrics/PerceivedComplexity
182
186
  def default_data!(data)
183
187
  data.merge(
184
- 'features_folder' => (data['features'] || 'features').downcase.strip,
185
- 'app_host' => (data['app_host'] || '').downcase.strip,
186
- 'driver' => (data['driver'] || 'phantomjs').downcase.strip,
187
- 'pause' => (data['pause'] || '0').to_s.downcase.strip.to_i,
188
- 'stop_on_error' => (data['stop_on_error'] || 'false').to_s.downcase.strip,
189
- 'max_wait_time' => (data['max_wait_time'] || Capybara.default_max_wait_time).to_s.downcase.strip.to_i,
190
- 'user_agent' => (data['user_agent'] || '').strip,
188
+ "features_folder" => (data["features"] || "features").downcase.strip,
189
+ "app_host" => (data["app_host"] || "").downcase.strip,
190
+ "driver" => (data["driver"] || "phantomjs").downcase.strip,
191
+ "pause" => (data["pause"] || "0").to_s.downcase.strip.to_i,
192
+ "stop_on_error" => (data["stop_on_error"] || "false").to_s.downcase.strip,
193
+ "max_wait_time" => (data["max_wait_time"] || Capybara.default_max_wait_time).to_s.downcase.strip.to_i,
194
+ "user_agent" => (data["user_agent"] || "").strip,
191
195
  # Because we want to default to 'true', but allow users to override it
192
196
  # with 'false' it causes us to mess with the logic. Essentially if the
193
197
  # user does enter false (either as a string or as a boolean) the result
@@ -195,9 +199,9 @@ module Quke #:nodoc:
195
199
  # Else the condition fails and we get 'false', which when flipped gives
196
200
  # us 'true', which is what we want the default value to be
197
201
  # rubocop:disable Style/InverseMethods
198
- 'javascript_errors' => !(data['javascript_errors'].to_s.downcase.strip == 'false'),
202
+ "javascript_errors" => !(data["javascript_errors"].to_s.downcase.strip == "false"),
199
203
  # rubocop:enable Style/InverseMethods
200
- 'custom' => (data['custom'] || nil)
204
+ "custom" => (data["custom"] || nil)
201
205
  )
202
206
  end
203
207
  # rubocop:enable Metrics/AbcSize
@@ -207,9 +211,9 @@ module Quke #:nodoc:
207
211
  def proxy_data(data)
208
212
  data = {} if data.nil?
209
213
  data.merge(
210
- 'host' => (data['host'] || '').downcase.strip,
211
- 'port' => (data['port'] || '0').to_s.downcase.strip.to_i,
212
- 'no_proxy' => (data['no_proxy'] || '').downcase.strip
214
+ "host" => (data["host"] || "").downcase.strip,
215
+ "port" => (data["port"] || "0").to_s.downcase.strip.to_i,
216
+ "no_proxy" => (data["no_proxy"] || "").downcase.strip
213
217
  )
214
218
  end
215
219