require "uri" module Tim module ImageFactory class Base < ActiveResource::Base self.format = :json # TODO Verify Image Factory Certification Concerns that warrent removing SSL Verfication self.ssl_options = {:verify_mode => OpenSSL::SSL::VERIFY_NONE} class << self # Add Callback URL for listening to callback requests def callback_url=(url) @callback_url = URI.parse(url) end def callback_url @callback_url end ## Remove format from the url for resources def element_path(id, prefix_options = {}, query_options = nil) prefix_options, query_options = split_options(prefix_options) if query_options.nil? "#{prefix(prefix_options)}#{collection_name}/#{id}#{query_string(query_options)}" end ## Remove format from the url for collections def collection_path(prefix_options = {}, query_options = nil) prefix_options, query_options = split_options(prefix_options) if query_options.nil? "#{prefix(prefix_options)}#{collection_name}#{query_string(query_options)}" end ## For a collection call, ActiveResource formatting is not ## compliant with Factory's output. def instantiate_collection(collection, prefix_options = {}) unless collection.kind_of? Array [instantiate_record(collection, prefix_options)] else collection.collect! { |record| instantiate_record(record, prefix_options) } end end ## The objects returned from this method are not automatically converted into ActiveResource instances - they are ordinary Hashes. ## Modifications below ensures that you get ActiveResource instances. def get(method_name, options = {}) object_array = connection.get(custom_method_collection_url(method_name, options), headers) if object_array.class.to_s=="Array" object_array.collect! {|record| self.class.new.load(record)} else self.class.new.load(object_array) end end # This approach does mean you're limited to one server at a time def config defined?(@@config) ? @@config : {} end def config=(conf={}) @@config = conf self.site = @@config[:site] end # Should we use OAuth? def use_oauth? config[:consumer_key] && config[:consumer_secret] && config[:site] end end ## Instance Methods: (modifying the ActiveRecord::CustomMethods). ## This modification is same as defined in above method def get(method_name, options = {}) self.class.new.load(connection.get(custom_method_element_url(method_name, options), self.class.headers)) end # Modifying the url formations to make them Factory compliant def custom_method_element_url(method_name, options = {}) "#{self.class.prefix(prefix_options)}#{self.class.collection_name}/#{id}/" + "#{method_name}#{self.class.send!(:query_string, options)}" end # Modifying the url formations to make them Factory compliant def self.custom_method_collection_url(method_name, options = {}) prefix_options, query_options = split_options(options) url = "#{prefix(prefix_options)}#{collection_name}/#{method_name}#{query_string(query_options)}" url end end end end