Methods
public class
public instance
External Aliases
params | -> | param |
headers | -> | header |
vars | -> | session |
Attributes
base_uri | [RW] | |
events | [R] | |
exception | [RW] | |
headers | [RW] | |
http_auth | [R] | |
http_client | [RW] | |
http_method | [RW] | |
params | [RW] | |
previous_doc | [R] | |
redirect_uri | [RW] | |
req | [R] | |
res | [R] | |
response_handler | [R] | |
rt | [R] | |
uri | [RW] | |
vars | [R] |
Public class methods
new
(base_uri=nil)
[show source]
# File lib/stella/client.rb, line 235 def initialize(base_uri=nil) @base_uri = base_uri @vars = indifferent_hash @base_uri &&= Addressable::URI.parse(@base_uri) if String === @base_uri @events = SelectableArray.new end
Public instance methods
clear_previous_request
()
[show source]
# File lib/stella/client.rb, line 379 def clear_previous_request [:doc, :location, :res, :req, :rt, :params, :headers, :cookie, :form, :response_handler, :http_method, :exception].each do |n| instance_variable_set :"@#{n}", nil end end
content_type?
(guess)
[show source]
# File lib/stella/client.rb, line 350 def content_type? guess guess = Regexp.new guess unless Regexp === guess guess.match((res.header['Content-Type'] || []).first) end
cookie
()
[show source]
# File lib/stella/client.rb, line 338 def cookie return @cookie unless @cookie.nil? return nil unless http_client.cookie_manager return nil if http_client.cookie_manager.cookies.empty? @cookie = indifferent_hash http_client.cookie_manager.cookies.each do |c| next unless c.match?(uri) @cookie[c.name] = c.value end @cookie end
current_event
()
[show source]
# File lib/stella/client.rb, line 241 def current_event @events.last end
doc
()
[show source]
# File lib/stella/client.rb, line 296 def doc return @doc unless @doc.nil? return nil if @res.content.nil? || @res.content.empty? str = RUBY_VERSION >= "1.9.0" ? @res.content.force_encoding("UTF-8") : @res.content # NOTE: It's important to parse the document on every # request because this container is available for the # entire life of a usecase. @doc = case (@res.header['Content-Type'] || []).first when /text\/html/ Nokogiri::HTML(str) when /text\/xml/ Nokogiri::XML(str) when /text\/yaml/ YAML.load(str) when /application\/json/ Yajl::Parser.parse(str) end @doc.replace indifferent_params(@doc) if Hash === @doc @doc end
error
(msg=nil)
[show source]
# File lib/stella/client.rb, line 391 def error(msg=nil); raise RequestError.new(msg); end
fail
(msg=nil)
[show source]
# File lib/stella/client.rb, line 390 def fail(msg=nil); raise UsecaseFail.new(msg); end
find_response_handler
(status)
[show source]
# File lib/stella/client.rb, line 359 def find_response_handler(status) return if response_handler.nil? key = response_handler.keys.select { |range| range.member?(status) }.first response_handler[key] if key end
follow
(uri=nil,&blk)
[show source]
# File lib/stella/client.rb, line 393 def follow(uri=nil,&blk); raise ForcedRedirect.new(uri,&blk); end
form
()
[show source]
# File lib/stella/client.rb, line 316 def form return @form unless @form.nil? return nil if doc.nil? return nil unless content_type?('text/html') @form = indifferent_hash forms = doc.css('form') forms.each_with_index do |html,idx| name = html['id'] || html['name'] || html['class'] Stella.ld [:form, idx, name].inspect form = indifferent_hash # Store form attributes in keys prefixed with an underscore. html.each { |att,val| form["_#{att}"] = val } # Store input name and values in the form hash. html.css('input').each do |input| form[input['name']] = input['value'] end # Store the form by the name and index in the document @form[name] = @form[idx] = form end @form end
generate_request
(event_id)
[show source]
# File lib/stella/client.rb, line 283 def generate_request(event_id) @res = http_client.send(@http_method.to_s.downcase, @uri, params, headers) @req = @res.request @events << event_id @res end
handle_response
()
[show source]
# File lib/stella/client.rb, line 354 def handle_response return unless response_handler? instance_exec(&find_response_handler(@res.status)) @previous_doc = doc end
location
()
[show source]
# File lib/stella/client.rb, line 289 def location @location ||= Addressable::URI.parse(@res.header['location'].first || '') @location end
prepare_request
(uc, rt)
[show source]
# File lib/stella/client.rb, line 246 def prepare_request uc, rt clear_previous_request @rt = rt @vars.merge! uc.class.session || {} registered_classes = [] if uc.class.testplan @vars.merge! uc.class.testplan.class.session || {} registered_classes = uc.class.testplan.class.registered_classes || [] end registered_classes.push *(uc.class.registered_classes || []) registered_classes.each do |klass| self.extend klass unless self.kind_of?(klass) end @http_method, @params, @headers = rt.http_method, rt.params, rt.headers @http_auth = uc.http_auth instance_exec(&rt.callback) unless rt.callback.nil? @uri = if @redirect_uri @params = {} @headers = {} @http_method = :get if @redirect_uri.scheme tmp = [@redirect_uri.scheme, '://', @redirect_uri.host].join tmp << ":#{@redirect_uri.port}" unless [80,443].member?(@redirect_uri.port) @base_uri = Addressable::URI.parse(tmp) end build_uri @redirect_uri else build_uri @rt.uri end if !http_auth.nil? && !http_auth.empty? Stella.ld " HTTP AUTH: #{http_auth.inspect}" http_auth[:domain] ||= '%s://%s:%d%s' % [base_uri.scheme, base_uri.host, base_uri.port, '/'] http_client.set_auth http_auth[:domain], http_auth[:user], http_auth[:pass] Stella.ld " #{http_client.www_auth.inspect}" end @redirect_uri = nil # one time deal end
quit
(msg=nil)
[show source]
# File lib/stella/client.rb, line 389 def quit(msg=nil); raise TestplanQuit.new(msg); end
redirect?
()
[show source]
# File lib/stella/client.rb, line 293 def redirect? @res && (300..399).member?(@res.status) end
repeat
(t=1)
[show source]
# File lib/stella/client.rb, line 392 def repeat(t=1); raise RepeatRequest.new(t); end
response_handler
(range=nil, &blk)
[show source]
# File lib/stella/client.rb, line 368 def response_handler(range=nil, &blk) @response_handler ||= {} return @response_handler if range.nil? && blk.nil? range = 0..999 if range.nil? || range.zero? range = range.to_i..range.to_i unless Range === range @response_handler[range] = blk unless blk.nil? @response_handler[range] end
response_handler?
()
[show source]
# File lib/stella/client.rb, line 364 def response_handler? status = (@res.status || 0).to_i !find_response_handler(status).nil? end