class PrestaShop::API
Each instance represents a Prestashop API
instance.
Constants
- XPATH_MAP
Attributes
api_uri[R]
@return [String] URI of the Prestashop API
client[R]
key[R]
@return [String] API
key
Public Class Methods
new(url, key)
click to toggle source
Create a new instance @param url [String] base URL of the Prestashop installation. Do not append “/api” to it, the gem does it internally.
E.g. use "http://my.prestashop.com", not "http://my.prestashop.com/api"
@param key [String] a valid API
key
# File lib/presta_shop/api.rb, line 43 def initialize(url, key) @api_uri = UriHandler.api_uri url @key = key @client = RestClient::Resource.new api_uri, user: key, password: '' end
normalize_resource(resource)
click to toggle source
# File lib/presta_shop/api.rb, line 32 def normalize_resource(resource) resource = resource.to_s.pluralize.to_sym resource = resource.to_s.singularize.to_sym if [:order_slips, :content_management_systems].include?(resource) resource end
Public Instance Methods
get(resource, *args)
click to toggle source
# # THIS NEEDS TO BE A NEW REQUESTOR TYPE # # api.images.find(‘general/header’) << this works def image(*image_path)
client[([:images]+image_path).join('/')].get.body
end
# File lib/presta_shop/api.rb, line 61 def get(resource, *args) resource = normalize_resource(resource) raise RestClient::MethodNotAllowed unless resources.include?(resource) return image(*args) if resource == :images ids = extract_ids(args) params = extract_params(args) case ids when Array then get_resources(resource, ids, params) when NilClass then get_resource_ids(resource, params) when /^schema$/, /^synopsis$/ then generate_resource_object(resource, nil, params.merge({schema: :synopsis})) when /^blank$/ then generate_resource_object(resource, nil, params.merge({schema: :blank}), resource_class(resource)) else get_resource(resource, ids, params, true) end end
method_missing(method, *args, &block)
click to toggle source
Calls superclass method
# File lib/presta_shop/api.rb, line 78 def method_missing(method, *args, &block) if resources.include?(resource = normalize_resource(method)) resource_requestor(resource) else super end end
resources()
click to toggle source
Private Instance Methods
build_query_params(params)
click to toggle source
# File lib/presta_shop/api.rb, line 119 def build_query_params(params) "?#{params.to_query}" if params.any? end
extract_ids(args)
click to toggle source
# File lib/presta_shop/api.rb, line 123 def extract_ids(args) ids = args.dup ids.pop if ids.last.is_a? Hash ids = ids.first if ids.one? || ids.none? raise ArgumentError, 'invalid arguments' unless [NilClass, Numeric, String, Symbol, Array].any? { |klass| ids.is_a? klass } raise ArgumentError, 'invalid arguments' unless Array(ids).all? { |id| [Numeric, String, Symbol].any? { |klass| id.is_a? klass } } ids end
extract_params(args)
click to toggle source
# File lib/presta_shop/api.rb, line 132 def extract_params(args) args.last.is_a?(Hash) ? args.last : {} end
generate_resource_object(resource, id, params = {}, object_class = OpenStruct, object_schema = nil)
click to toggle source
# File lib/presta_shop/api.rb, line 154 def generate_resource_object(resource, id, params = {}, object_class = OpenStruct, object_schema = nil) xpath = XPATH_MAP.dig(resource, :find) || resource.to_s.singularize xml_response = Nokogiri::XML(client[resource][id][build_query_params(params)].get.body).remove_namespaces!.xpath("/prestashop/#{xpath}") resource_object = JSON.parse(Hash.from_xml(xml_response.to_s).values.first.to_json, object_class: object_class) resource_object.xml = xml_response resource_object.schema_synopsis = object_schema resource_object end
get_resource(resource, id, params, raise_not_found_exception = false)
click to toggle source
# File lib/presta_shop/api.rb, line 141 def get_resource(resource, id, params, raise_not_found_exception = false) begin generate_resource_object(resource, id, params, resource_class(resource), schema(resource)) rescue RestClient::NotFound raise if raise_not_found_exception nil end end
get_resource_ids(resource, params)
click to toggle source
# File lib/presta_shop/api.rb, line 136 def get_resource_ids(resource, params) xpath = XPATH_MAP.dig(resource, :list) || resource Nokogiri::XML(client[resource][build_query_params(params)].get.body).xpath("/prestashop/#{xpath}/*/@id").collect(&:value) end
get_resources(resource, ids, params = {})
click to toggle source
# File lib/presta_shop/api.rb, line 150 def get_resources(resource, ids, params = {}) ids.uniq.sort.collect { |id| get_resource(resource, id, params) }.compact end
normalize_resource(resource)
click to toggle source
# File lib/presta_shop/api.rb, line 115 def normalize_resource(resource) self.class.normalize_resource(resource) end
resource_class(resource)
click to toggle source
# File lib/presta_shop/api.rb, line 88 def resource_class(resource) resource_class_name = resource.to_s.classify "PrestaShop::#{resource_class_name}".safe_constantize || PrestaShop.const_set(resource_class_name, Class.new(PrestaShop::Resource)) end
resource_language(language_id)
click to toggle source
# File lib/presta_shop/api.rb, line 107 def resource_language(language_id) resource_languages.include?(language_id) ? resource_languages[language_id] ||= get(:languages, language_id).name : language_id end
resource_languages()
click to toggle source
# File lib/presta_shop/api.rb, line 103 def resource_languages @resource_languages ||= resources.include?(:languages) ? get(:languages).zip({}).to_h : {} end
resource_requestor(resource)
click to toggle source
# File lib/presta_shop/api.rb, line 97 def resource_requestor(resource) resource = normalize_resource(resource) resource_requestors[resource] ||= ("PrestaShop::Requestor::#{resource.to_s.classify}".safe_constantize || PrestaShop::Requestor).new( api: self, resource_name: resource, schema: generate_resource_object(resource, nil, {schema: :synopsis})) end
resource_requestors()
click to toggle source
# File lib/presta_shop/api.rb, line 93 def resource_requestors @resource_requestors ||= resources.zip({}).to_h end
schema(resource)
click to toggle source
# File lib/presta_shop/api.rb, line 111 def schema(resource) resource_requestor(resource).schema end