Class: Sauce::Config
- Inherits:
-
Object
- Object
- Sauce::Config
- Defined in:
- lib/sauce/config.rb
Constant Summary collapse
- DEFAULT_OPTIONS =
{ :host => "ondemand.saucelabs.com", :port => 80, :browser_url => "http://saucelabs.com", :job_name => "Unnamed Ruby job", :start_tunnel => true, :start_local_application => true, :warn_on_skipped_integration => true, :skip_connection_test => false }
- DEFAULT_BROWSERS =
{ :browsers => [ ["Windows 8", "Internet Explorer", "10"], ["Windows 7", "Firefox", "20"], ["OS X 10.8", "Safari", "6"], ["Linux", "Chrome", nil] ] }
- POTENTIAL_PORTS =
[ 3000, 3001, 3030, 3210, 3333, 4000, 4001, 4040, 4321, 4502, 4503, 5000, 5001, 5050, 5555, 5432, 6000, 6001, 6060, 6666, 6543, 7000, 7070, 7774, 7777, 8000, 8001, 8003, 8031, 8080, 8081, 8765, 8888, 9000, 9001, 9080, 9090, 9876, 9999, 49221, 55001, 80, 443, 888, 2000, 2001, 2020, 2109, 2222, 2310 ]
- ENVIRONMENT_VARIABLES =
%w{SAUCE_HOST SAUCE_PORT SAUCE_BROWSER_URL SAUCE_USERNAME SAUCE_ACCESS_KEY SAUCE_OS SAUCE_BROWSER SAUCE_BROWSER_VERSION SAUCE_JOB_NAME SAUCE_FIREFOX_PROFILE_URL SAUCE_USER_EXTENSIONS_URL SAUCE_ONDEMAND_BROWSERS SAUCE_USER_NAME SAUCE_API_KEY}
- PLATFORMS =
{ "Windows 2003" => "WINDOWS", "Windows 2008" => "VISTA", "Linux" => "LINUX" }
- BROWSERS =
{ "iexplore" => "internet explorer", "ie" => "internet explorer" }
- SAUCE_OPTIONS =
%w{record-video record-screenshots capture-html tags sauce-advisor single-window user-extensions-url firefox-profile-url max-duration idle-timeout build custom-data tunnel-identifier selenium-version command-timeout prerun prerun-args screen-resolution disable-popup-handler avoid-proxy public name iedriver-version parent-tunnel time-zone device-orientation record-logs webdriver-remote-quiet-exceptions iedriver-version }
Instance Attribute Summary collapse
-
#opts ⇒ Object
readonly
Returns the value of attribute opts.
Class Method Summary collapse
- .called_from_integrations ⇒ Object
- .called_from_integrations? ⇒ Boolean
- .get_application_port ⇒ Object
Instance Method Summary collapse
- #[](key) ⇒ Object
- #[]=(key, value) ⇒ Object
- #access_key ⇒ Object
- #after_job(hook, &block) ⇒ Object
- #browser ⇒ Object
- #browser_version ⇒ Object
- #browsers ⇒ Object
- #caps_for_location(file, linenumber = nil) ⇒ Object
- #domain ⇒ Object
- #has_key?(key) ⇒ Boolean
- #host ⇒ Object
-
#initialize(opts = {}) ⇒ Sauce::Config
constructor
Creates a new instance of Sauce::Config.
-
#is_defined?(top_mod, sub_mod = nil) ⇒ Boolean
Only here to be stubbed for testing.
- #local? ⇒ Boolean
- #method_missing(meth, *args) ⇒ Object
- #os ⇒ Object
- #port ⇒ Object
- #run_post_job_hooks(job_id, platform, job_name, job_success) ⇒ Object
- #silence_warnings ⇒ Object
- #to_browser_string ⇒ Object
- #to_desired_capabilities ⇒ Object
- #tools ⇒ Object
- #username ⇒ Object
- #whitelist(capability) ⇒ Object
- #whitelisted_capabilities ⇒ Object
Constructor Details
#initialize(opts = {}) ⇒ Sauce::Config
Creates a new instance of Sauce::Config
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/sauce/config.rb', line 94 def initialize(opts={}) @opts = {} @undefaulted_opts = {} if opts != false if (!opts[:without_defaults]) @opts.merge! DEFAULT_OPTIONS @opts.merge! DEFAULT_BROWSERS @opts.merge!({:application_port => Sauce::Config.get_application_port}) @undefaulted_opts.merge! @undefaulted_opts.merge! @undefaulted_opts.merge! unless ENV["SAUCE_DISABLE_HEROKU_CONFIG"] global_config = Sauce.get_config @undefaulted_opts.merge! global_config.opts if global_config.opts @whitelisted_capabilities = global_config.whitelisted_capabilities end @undefaulted_opts.merge! opts @opts.merge! @undefaulted_opts end end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(meth, *args) ⇒ Object
137 138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'lib/sauce/config.rb', line 137 def method_missing(meth, *args) unless self.silence_warnings warn "[DEPRECATED] This method (#{meth}) is deprecated, please use the [] and []= accessors instead" end if meth.to_s =~ /(.*)=$/ self[$1.to_sym] = args[0] return args[0] elsif meth.to_s =~ /(.*)\?$/ return self[$1.to_sym] else return self[meth] end end |
Instance Attribute Details
#opts ⇒ Object (readonly)
Returns the value of attribute opts.
20 21 22 |
# File 'lib/sauce/config.rb', line 20 def opts @opts end |
Class Method Details
.called_from_integrations ⇒ Object
84 85 86 |
# File 'lib/sauce/config.rb', line 84 def self.called_from_integrations @called_from_integrations = true end |
.called_from_integrations? ⇒ Boolean
80 81 82 |
# File 'lib/sauce/config.rb', line 80 def self.called_from_integrations? @called_from_integrations || false end |
.get_application_port ⇒ Object
75 76 77 78 |
# File 'lib/sauce/config.rb', line 75 def self.get_application_port port_index = ENV["TEST_ENV_NUMBER"].to_i return POTENTIAL_PORTS[port_index] end |
Instance Method Details
#[](key) ⇒ Object
117 118 119 |
# File 'lib/sauce/config.rb', line 117 def [](key) @opts[key] end |
#[]=(key, value) ⇒ Object
121 122 123 124 125 126 127 |
# File 'lib/sauce/config.rb', line 121 def []=(key, value) if(key == :browsers) value = [value] unless value.first.instance_of?(Array) end @undefaulted_opts.merge!({key => value}) @opts[key] = value end |
#access_key ⇒ Object
278 279 280 |
# File 'lib/sauce/config.rb', line 278 def access_key @opts[:access_key] end |
#after_job(hook, &block) ⇒ Object
290 291 292 293 294 |
# File 'lib/sauce/config.rb', line 290 def after_job(hook, &block) hooks = @opts[:after_job_hooks] || {} hooks[hook] = block unless hooks[hook] @opts[:after_job_hooks] = hooks end |
#browser ⇒ Object
232 233 234 235 236 237 238 239 240 241 |
# File 'lib/sauce/config.rb', line 232 def browser if single_browser_set? return @undefaulted_opts[:browser] end if !ENV["TEST_ENV_NUMBER"] && @opts[:browsers] @opts[:browsers][0][1] else raise StandardError, end end |
#browser_version ⇒ Object
254 255 256 257 258 259 260 261 262 263 |
# File 'lib/sauce/config.rb', line 254 def browser_version if single_browser_set? return @undefaulted_opts[:browser_version] || @undefaulted_opts[:version] end if !ENV["TEST_ENV_NUMBER"] && @opts[:browsers] @opts[:browsers][0][2] else @opts[:browser_version] end end |
#browsers ⇒ Object
202 203 204 205 206 207 208 209 210 211 212 |
# File 'lib/sauce/config.rb', line 202 def browsers if @undefaulted_opts[:browser] # If a specific browser was requested, ignore :browsers and # use that one. This allows a setup with :browsers to launch # sub-processes pointed just at each browser in the list. return [[os, browser, browser_version]] end return @opts[:browsers] if @opts.include? :browsers return [[os, browser, browser_version]] end |
#caps_for_location(file, linenumber = nil) ⇒ Object
214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 |
# File 'lib/sauce/config.rb', line 214 def caps_for_location(file, linenumber=nil) Sauce::Config.called_from_integrations perfile_browsers = @opts[:perfile_browsers] if perfile_browsers platforms = [] test_location = "#{file}:#{linenumber}" if linenumber && (perfile_browsers.include? test_location) platforms = perfile_browsers[test_location] else platforms = perfile_browsers[file] end platforms.map { |p| [p['os'], p['browser'], p['version'], (p['caps'] || {})] } else browsers end end |
#domain ⇒ Object
265 266 267 268 |
# File 'lib/sauce/config.rb', line 265 def domain return @opts[:domain] if @opts.include? :domain return URI.parse(@opts[:browser_url]).host end |
#has_key?(key) ⇒ Boolean
129 130 131 |
# File 'lib/sauce/config.rb', line 129 def has_key?(key) @opts.has_key? key end |
#host ⇒ Object
282 283 284 |
# File 'lib/sauce/config.rb', line 282 def host @opts[:host] end |
#is_defined?(top_mod, sub_mod = nil) ⇒ Boolean
Only here to be stubbed for testing. Gross.
312 313 314 315 316 317 318 319 |
# File 'lib/sauce/config.rb', line 312 def is_defined? (top_mod, sub_mod = nil) return_value = Object.const_defined? top_mod unless !return_value || sub_mod.nil? return_value = Object.const_get(top_mod).const_defined? sub_mod end return_value end |
#local? ⇒ Boolean
270 271 272 |
# File 'lib/sauce/config.rb', line 270 def local? return ENV['LOCAL_SELENIUM'] end |
#os ⇒ Object
243 244 245 246 247 248 249 250 251 252 |
# File 'lib/sauce/config.rb', line 243 def os if single_browser_set? return @undefaulted_opts[:os] end if !ENV["TEST_ENV_NUMBER"] && @opts[:browsers] @opts[:browsers][0][0] else @opts[:os] end end |
#port ⇒ Object
286 287 288 |
# File 'lib/sauce/config.rb', line 286 def port @opts[:port] end |
#run_post_job_hooks(job_id, platform, job_name, job_success) ⇒ Object
296 297 298 299 300 |
# File 'lib/sauce/config.rb', line 296 def run_post_job_hooks(job_id, platform, job_name, job_success) @opts[:after_job_hooks].each do |key, hook| hook.call job_id, platform, job_name, job_success end end |
#silence_warnings ⇒ Object
133 134 135 |
# File 'lib/sauce/config.rb', line 133 def silence_warnings false end |
#to_browser_string ⇒ Object
161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 |
# File 'lib/sauce/config.rb', line 161 def to_browser_string = { 'username' => @opts[:username], 'access-key' => @opts[:access_key], 'os' => os, 'browser' => browser, 'browser-version' => browser_version, 'name' => @opts[:name] || @opts[:job_name]} SAUCE_OPTIONS.each do |opt| [opt, opt.gsub("-", "_")].map(&:to_sym).each do |sym| [opt] = @opts[sym] if @opts.include? sym end end return .to_json end |
#to_desired_capabilities ⇒ Object
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 |
# File 'lib/sauce/config.rb', line 178 def to_desired_capabilities desired_capabilities = { :browserName => BROWSERS[browser] || browser, :version => browser_version, :platform => PLATFORMS[os] || os, :name =>@opts[:job_name], :client_version => client_version } = whitelisted_capabilities + SAUCE_OPTIONS .each do |opt| [opt, opt.gsub("-", "_")].map(&:to_sym).each do |sym| if @opts.include? sym desired_capabilities[opt.to_sym] = @opts[sym] elsif @opts.include? sym.to_s desired_capabilities[opt.to_sym] = @opts[sym.to_s] end end end desired_capabilities end |
#tools ⇒ Object
302 303 304 305 306 307 308 309 |
# File 'lib/sauce/config.rb', line 302 def tools tools = [] tools << "Rspec" if is_defined? "RSpec" tools << "Capybara" if is_defined? "Capybara" tools << "Cucumber" if is_defined? "Cucumber" tools << "Test::Unit" if is_defined?("Test", "Unit") tools end |
#username ⇒ Object
274 275 276 |
# File 'lib/sauce/config.rb', line 274 def username @opts[:username] end |
#whitelist(capability) ⇒ Object
155 156 157 158 159 |
# File 'lib/sauce/config.rb', line 155 def whitelist capability cap = capability.to_s wl = whitelisted_capabilities || Set.new @whitelisted_capabilities = wl.add cap end |
#whitelisted_capabilities ⇒ Object
151 152 153 |
# File 'lib/sauce/config.rb', line 151 def whitelisted_capabilities @whitelisted_capabilities ||= Set.new end |