lib/stella/data/http.rb in stella-0.7.3.002 vs lib/stella/data/http.rb in stella-0.7.4.001
- old
+ new
@@ -1,4 +1,128 @@
-module Stella::Data::HTTP; end
-Stella::Utils.require_glob(STELLA_LIB_HOME, 'stella', 'data', 'http', '*.rb')
+module Stella::Data::HTTP
+ class Request < Storable
+ include Gibbler::Complex
+ include Stella::Data::Helpers
+
+ # A hash containing blocks to be executed depending on the HTTP response status.
+ # The hash keys are numeric HTTP Status Codes.
+ #
+ # 200 => { ... }
+ # 304 => { ... }
+ # 500 => { ... }
+ #
+ attr_accessor :response_handler
+
+ field :desc
+ field :header
+ field :uri
+ field :wait
+ field :params
+ field :body
+ field :http_method
+ field :http_version
+ field :content_type
+ field :http_auth
+
+ def has_body?
+ !@body.nil?
+ end
+
+ def initialize (method, uri_str, version="1.1", &definition)
+ @uri = uri_str
+ @http_method, @http_version = method, version
+ @headers, @params, @response_handler = {}, {}, {}
+ @resources = {}
+ @wait = 0
+ @desc = "Request"
+ instance_eval &definition unless definition.nil?
+ end
+
+ def auth(user=nil, pass=nil, kind=:basic)
+ @http_auth ||= Stella::Testplan::Usecase::Auth.new
+ @http_auth.user, @http_auth.pass, @http_auth.kind = user, pass, kind
+ end
+
+ def desc(*args)
+ @desc = args.first unless args.empty?
+ @desc
+ end
+
+ def content_type(*args)
+ @content_type = args.first unless args.empty?
+ @content_type
+ end
+
+ def wait(*args)
+ @wait = args.first unless args.empty?
+ @wait
+ end
+ alias_method :sleep, :wait
+
+ def headers(*args)
+ unless args.empty?
+ h = Hash === args[0] ? args[0] : {args[0]=> args[1]}
+ @headers.merge! h unless h.empty?
+ end
+ @headers
+ end
+ alias_method :header, :headers
+
+ # Set a resource key value pair in the get, post block.
+ # These will be process later in Stella::Client
+ def set(*args)
+ unless args.empty?
+ h = Hash === args[0] ? args[0] : {args[0]=> args[1]}
+ @resources.merge! h unless h.empty?
+ end
+ @resources
+ end
+ alias_method :resources, :set
+
+ def params(*args)
+ unless args.empty?
+ h = Hash === args[0] ? args[0] : {args[0]=> args[1]}
+ @params.merge! h unless h.empty?
+ end
+ @params
+ end
+ alias_method :param, :params
+
+ def response(*args, &definition)
+ if definition.nil?
+ @response_handler
+ else
+ args << /.+/ if args.empty?
+ args.each do |status|
+ @response_handler[status] = definition
+ end
+ end
+ end
+
+ # +content+ can be literal content or a file path
+ def body(*args)
+ return @body if args.empty?
+ @body = args.first
+ end
+
+ def inspect
+ str = "%s %s" % [http_method, uri.to_s, http_version]
+ #str << $/ + headers.join($/) unless headers.empty?
+ #str << $/ + $/ + body.to_s if body
+ str
+ end
+
+ def to_s
+ str = "%s %s" % [http_method, uri.to_s, http_version]
+ str
+ end
+
+ def cookies
+ return [] if !header.is_a?(Hash) || header[:Cookie].empty?
+ header[:Cookie]
+ end
+
+ end
+
+end
\ No newline at end of file