require "shippinglogic/fedex/enumerations" require "shippinglogic/fedex/error" require "shippinglogic/fedex/service" require "shippinglogic/fedex/cancel" require "shippinglogic/fedex/rate" require "shippinglogic/fedex/ship" require "shippinglogic/fedex/signature" require "shippinglogic/fedex/track" module Shippinglogic class FedEx # A hash representing default the options. If you are using this in a Rails app the best place # to modify or change these options is either in an initializer or your specific environment file. Keep # in mind that these options can be modified on the instance level when creating an object. See #initialize # for more details. # # === Options # # * :test - this basically tells us which url to use. If set to true we will use the FedEx test URL, if false we # will use the production URL. If you are using this in a rails app, unless you are in your production environment, this # will default to true automatically. # * :test_url - the test URL for FedEx's webservices. (default: https://gatewaybeta.fedex.com:443/xml) # * :production_url - the production URL for FedEx's webservices. (default: https://gateway.fedex.com:443/xml) def self.options @options ||= { :test => defined?(Rails) && !Rails.env.production?, :production_url => "https://gateway.fedex.com:443/xml", :test_url => "https://gatewaybeta.fedex.com:443/xml" } end attr_accessor :key, :password, :account, :meter, :options # Before you can use the FedEx web services you need to provide 4 credentials: # # 1. Your fedex web service key # 2. Your fedex password # 3. Your fedex account number # 4. Your fedex meter number # # You can easily get these things by logging into your fedex account and going to: # # https://www.fedex.com/wpor/wpor/editConsult.do # # If for some reason this link no longer works because FedEx changed it, just go to the # developer resources area and then navigate to the FedEx web services for shipping area. Once # there you should see a link to apply for a develop test key. # # The last parameter allows you to modify the class options on an instance level. It accepts the # same options that the class level method #options accepts. If you don't want to change any of # them, don't supply this parameter. def initialize(key, password, account, meter, options = {}) self.key = key self.password = password self.account = account self.meter = meter self.options = self.class.options.merge(options) end def cancel(attributes = {}) @cancel ||= Cancel.new(self, attributes) end def rate(attributes = {}) @rate ||= Rate.new(self, attributes) end def ship(attributes = {}) @ship ||= Ship.new(self, attributes) end def signature(attributes = {}) @signature ||= Signature.new(self, attributes) end def track(attributes = {}) @track ||= Track.new(self, attributes) end end end