lib/httparty.rb in alexvollmer-httparty-0.1.5 vs lib/httparty.rb in alexvollmer-httparty-0.2.6

- old
+ new

@@ -1,53 +1,45 @@ +$:.unshift(File.dirname(__FILE__)) + require 'net/http' require 'net/https' -require 'uri' -require 'ostruct' require 'rubygems' -require 'active_support' +gem 'json', '>= 1.1.3' +require 'json' -directory = File.dirname(__FILE__) -$:.unshift(directory) unless $:.include?(directory) || $:.include?(File.expand_path(directory)) +require 'module_level_inheritable_attributes' +require 'core_extensions' -require 'httparty/request' - -module HTTParty - class UnsupportedFormat < StandardError; end - class RedirectionTooDeep < StandardError; end - +module HTTParty AllowedFormats = {:xml => 'text/xml', :json => 'application/json', :html => 'text/html'} - + def self.included(base) base.extend ClassMethods + base.send :include, ModuleLevelInheritableAttributes + base.send(:mattr_inheritable, :default_options) + base.instance_variable_set("@default_options", {}) end - + module ClassMethods def default_options - @@default_options ||= {} + @default_options end - # - # Set an http proxy - # - # class Twitter - # include HTTParty - # http_proxy 'http://myProxy', 1080 - # .... def http_proxy(addr=nil, port = nil) default_options[:http_proxyaddr] = addr default_options[:http_proxyport] = port end def base_uri(uri=nil) return default_options[:base_uri] unless uri - default_options[:base_uri] = normalize_base_uri(uri) + default_options[:base_uri] = HTTParty.normalize_base_uri(uri) end def basic_auth(u, p) default_options[:basic_auth] = {:username => u, :password => p} end - + def default_params(h={}) raise ArgumentError, 'Default params must be a hash' unless h.is_a?(Hash) default_options[:default_params] ||= {} default_options[:default_params].merge!(h) end @@ -55,16 +47,16 @@ def headers(h={}) raise ArgumentError, 'Headers must be a hash' unless h.is_a?(Hash) default_options[:headers] ||= {} default_options[:headers].merge!(h) end - + def format(f) raise UnsupportedFormat, "Must be one of: #{AllowedFormats.keys.join(', ')}" unless AllowedFormats.key?(f) default_options[:format] = f end - + def get(path, options={}) perform_request Net::HTTP::Get, path, options end def post(path, options={}) @@ -79,29 +71,42 @@ perform_request Net::HTTP::Delete, path, options end private def perform_request(http_method, path, options) #:nodoc: - Request.new(http_method, path, default_options.merge(options)).perform + Request.new(http_method, path, default_options.dup.merge(options)).perform end + end - # Makes it so uri is sure to parse stuff like google.com without the http - def normalize_base_uri(url) #:nodoc: - use_ssl = (url =~ /^https/) || url.include?(':443') - url.chop! if url.ends_with?('/') - url.gsub!(/^https?:\/\//i, '') - "http#{'s' if use_ssl}://#{url}" - end + def self.normalize_base_uri(url) #:nodoc: + use_ssl = (url =~ /^https/) || url.include?(':443') + ends_with_slash = url =~ /\/$/ + + url.chop! if ends_with_slash + url.gsub!(/^https?:\/\//i, '') + + "http#{'s' if use_ssl}://#{url}" + end + + class Basement + include HTTParty + end + + def self.get(*args) + Basement.get(*args) + end + + def self.post(*args) + Basement.post(*args) + end - # Figure out the Content-Type from the path extension - def format_from_path(path) #:nodoc: - case path - when /\.xml$/ - 'xml' - when /\.json$/ - 'json' - else - nil - end - end + def self.put(*args) + Basement.put(*args) end + + def self.delete(*args) + Basement.delete(*args) + end end + +require 'httparty/exceptions' +require 'httparty/request' \ No newline at end of file