prestashopper 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fb45387162f612a1a13f6fddc9aa76fe44439c7d
4
- data.tar.gz: f9cbe7668eeae82ca4aab0d8a8b53f86f99693ab
3
+ metadata.gz: a7defedaa887ce629c6fbd24c8d898ed9a53bff7
4
+ data.tar.gz: bc8db2121a7c38e8fe0099c474cab3810c4463c9
5
5
  SHA512:
6
- metadata.gz: fe784e19c467bbb8d600fe7a53634584a45bfa538207d485468f20d35d89116f099f3b438d62828343458215fb35d7e6b944257714f7d308a8a3587054c4190a
7
- data.tar.gz: 6902fa4d21968891c88db3450b4868741a2d690d8f4d75a795936529020931285a711721908f99f170de1f4fbdb7cbed016ffca1668d0607157ab0b418163101
6
+ metadata.gz: 191b15c18a9d4d1cf3da933f5ecd9a0d6442487a70dfb7cb064717267c59a671235c7dd5d4674c24fda1449cf3e2c52dd2e2fa16704be6dd8c10cb72897c7078
7
+ data.tar.gz: 8850f7fb3acef3b9ee0d7b936c7833b1d878f89b35eb067ea25062043e4d25d049d23aed4c8f1a133645f399fea77620180fa2a1e3253906705a5b4cb318bad7
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.0 (August 19, 2016)
4
+
5
+ Features:
6
+
7
+ - Added badges to README (gem version, build status, rubydoc.info docs)
8
+ - Get list of resources an API key can access
9
+ - Get all products as an array of hashes
10
+
3
11
  ## 0.1.0 (August 12, 2016)
4
12
 
5
13
  Features:
data/README.md CHANGED
@@ -1,3 +1,7 @@
1
+ [![Gem Version](https://badge.fury.io/rb/prestashopper.svg)](https://badge.fury.io/rb/prestashopper)
2
+ [![Build Status](https://semaphoreci.com/api/v1/amatriain/prestashopper/branches/master/badge.svg)](https://semaphoreci.com/amatriain/prestashopper)
3
+ [![Yard Docs](http://img.shields.io/badge/yard-docs-blue.svg)](http://www.rubydoc.info/github/amatriain/prestashopper/master)
4
+
1
5
  # Prestashopper
2
6
 
3
7
  Prestashopper is a ruby gem to interact with a Prestashop API. It has been tested with Prestashop v1.6.1.2
@@ -42,6 +46,26 @@ Prestashopper.valid_key? 'my.prestashop.com', 'VALID_KEY'
42
46
  => true
43
47
  ```
44
48
 
49
+ ### Getting an API instance
50
+ ```
51
+ api = Prestashopper::API.new 'my.prestashop.com', 'VALID_KEY'
52
+ ```
53
+
54
+ ### Listing resources that can be accessed from an API instance
55
+ ```
56
+ api.resources
57
+ => [:customers, :orders, :products]
58
+ ```
59
+
60
+ ### Gettting products
61
+ ```
62
+ products = api.get_products
63
+ products[0].description
64
+ => "product 1"
65
+ products[0].price
66
+ => "24.71"
67
+ ```
68
+
45
69
  ## Development
46
70
 
47
71
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment. The documentation can be generated from the yard comments running `yard doc`.
@@ -1,6 +1,8 @@
1
1
  require 'prestashopper/version'
2
2
  require 'rest-client'
3
+ require 'nokogiri'
3
4
  require 'prestashopper/api'
5
+ require 'prestashopper/product'
4
6
  require 'prestashopper/uri_handler'
5
7
 
6
8
  # @author Alfredo Amatriain <geralt@gmail.com>
@@ -3,5 +3,52 @@ module Prestashopper
3
3
  # Each instance represents a Prestashop API instance.
4
4
  class API
5
5
 
6
+ # @return [String] URI of the Prestashop API
7
+ attr_reader :api_uri
8
+
9
+ # @return [String] API key
10
+ attr_reader :key
11
+
12
+ # Create a new instance
13
+ # @param url [String] base URL of the Prestashop installation. Do not append "/api" to it, the gem does it internally.
14
+ # E.g. use "http://my.prestashop.com", not "http://my.prestashop.com/api"
15
+ # @param key [String] a valid API key
16
+ def initialize(url, key)
17
+ @api_uri = UriHandler.api_uri url
18
+ @key = key
19
+ @resources_res = RestClient::Resource.new @api_uri, user: @key, password: ''
20
+ end
21
+
22
+ # List resources that the API key can access
23
+ # @return [Array<Symbol>] list of resources the API can access
24
+ def resources
25
+ xml = @resources_res.get.body
26
+ xml_doc = Nokogiri::XML xml
27
+ nodes = xml_doc.xpath '/prestashop/api/*'
28
+ resources_list = []
29
+ nodes.each{|n| resources_list << n.name.to_sym}
30
+ return resources_list
31
+ end
32
+
33
+ # Get all products data
34
+ # @return [Array<Hash>] list of products. Each product is represented by a hash with all its attributes.
35
+ def get_products
36
+ # /api/products returns XML with the IDs of each individual product
37
+ xml_products = @resources_res['products'].get.body
38
+ xml_products_doc = Nokogiri::XML xml_products
39
+ products_nodes = xml_products_doc.xpath '/prestashop/products/*/@id'
40
+ ids_list = []
41
+ products_nodes.each{|n| ids_list << n.value}
42
+
43
+ # GET each individual product to get the whole data
44
+ products = []
45
+ ids_list.each do |id|
46
+ xml_product = @resources_res["products/#{id}"].get.body
47
+ product = Product.xml2hash xml_product
48
+ products << product
49
+ end
50
+
51
+ return products
52
+ end
6
53
  end
7
54
  end
@@ -0,0 +1,21 @@
1
+ require 'active_support/core_ext/hash'
2
+
3
+ module Prestashopper
4
+
5
+ # Has methods to convert the XML returned from the API to a ruby hash
6
+ class Product
7
+
8
+ # Convert a product XML returned by the Prestashop API to a ruby hash, more manageable
9
+ # @param xml [String] XML returned by the Prestashop API
10
+ # @return [Hash] the product converted to a hash representation
11
+ def self.xml2hash(xml)
12
+ xml_doc = Nokogiri::XML( xml).remove_namespaces!
13
+ # Strip surrounding tag
14
+ nodes = xml_doc.xpath '/prestashop/*'
15
+ product_xml = nodes.to_s
16
+ product_hash = Hash.from_xml product_xml
17
+
18
+ return product_hash['product']
19
+ end
20
+ end
21
+ end
@@ -1,3 +1,3 @@
1
1
  module Prestashopper
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.0'
3
3
  end
@@ -19,6 +19,8 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ['lib']
20
20
 
21
21
  spec.add_runtime_dependency 'rest-client', '~> 2.0'
22
+ spec.add_runtime_dependency 'nokogiri', '~> 1.6'
23
+ spec.add_runtime_dependency 'activesupport', '~> 5.0'
22
24
 
23
25
  spec.add_development_dependency 'bundler', '~> 1.12'
24
26
  spec.add_development_dependency 'rake', '~> 10.0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prestashopper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alfredo Amatriain
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-08-12 00:00:00.000000000 Z
11
+ date: 2016-08-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -24,6 +24,34 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: nokogiri
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.6'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.6'
41
+ - !ruby/object:Gem::Dependency
42
+ name: activesupport
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.0'
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: bundler
29
57
  requirement: !ruby/object:Gem::Requirement
@@ -111,6 +139,7 @@ files:
111
139
  - bin/setup
112
140
  - lib/prestashopper.rb
113
141
  - lib/prestashopper/api.rb
142
+ - lib/prestashopper/product.rb
114
143
  - lib/prestashopper/uri_handler.rb
115
144
  - lib/prestashopper/version.rb
116
145
  - prestashopper.gemspec