promoqui-api-sdk 1.0.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 +7 -0
- data/lib/pqsdk.rb +10 -0
- data/lib/pqsdk/city.rb +46 -0
- data/lib/pqsdk/leaflet.rb +55 -0
- data/lib/pqsdk/rest_layer.rb +66 -0
- data/lib/pqsdk/settings.rb +22 -0
- data/lib/pqsdk/store.rb +74 -0
- data/lib/pqsdk/token.rb +25 -0
- data/lib/pqsdk/version.rb +3 -0
- metadata +65 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a65b12aea27b17e9b2e5d6d73d5ffa05b3997201
|
4
|
+
data.tar.gz: 1b8295cd31a68857a5f6ff9eded09a2b3df8fc27
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 912165fb1e50e7c0573b4d05ef997d4baac0f99e04acc5d8c2d2139f47f2fffc395957124fcdaf68b7d79dacc8b132f1eb400ebd7856793717fc98eace54b193
|
7
|
+
data.tar.gz: c37b57cde25cda4a1e6dc6ea3dfce046a7a1b16b3c68d44e5eee922e83bce9cbad3a170c48037dab1dd45b62334455bfd13b42ac730ee72a3b22a73755f58eab
|
data/lib/pqsdk.rb
ADDED
data/lib/pqsdk/city.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
module PQSDK
|
2
|
+
class City
|
3
|
+
attr_accessor :id, :name, :inhabitants, :latitude, :longitude
|
4
|
+
|
5
|
+
def self.find(name)
|
6
|
+
res = RestLayer.get('v1/cities', { q: name }, { 'Authorization' => "Bearer #{Token.access_token}" })
|
7
|
+
if res[0] == 200
|
8
|
+
City.from_json res[1]
|
9
|
+
elsif res[0] == 404
|
10
|
+
nil
|
11
|
+
else
|
12
|
+
raise Exception.new("Unexpected HTTP status code #{res[0]}")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.find_or_create(name)
|
17
|
+
city = self.find(name)
|
18
|
+
return city if city
|
19
|
+
|
20
|
+
city = City.new
|
21
|
+
city.name = name
|
22
|
+
city.save
|
23
|
+
|
24
|
+
city
|
25
|
+
end
|
26
|
+
|
27
|
+
def save
|
28
|
+
res = RestLayer.post('v1/cities', { name: name }, { 'Authorization' => "Bearer #{Token.access_token}" })
|
29
|
+
|
30
|
+
if res[0] != 201
|
31
|
+
raise Exception.new("Unexpected HTTP status code #{res[0]}")
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
def self.from_json(json)
|
37
|
+
result = City.new
|
38
|
+
|
39
|
+
json.each do |key, val|
|
40
|
+
result.send("#{key}=", val)
|
41
|
+
end
|
42
|
+
|
43
|
+
result
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module PQSDK
|
2
|
+
class Leaflet
|
3
|
+
attr_accessor :id, :name, :url, :start_date, :end_date, :pdf_data, :store_ids
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
self.store_ids = []
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.find(url)
|
10
|
+
res = RestLayer.get('v1/leaflets', { url: url }, { 'Authorization' => "Bearer #{Token.access_token}" })
|
11
|
+
if res[0] == 200
|
12
|
+
Leaflet.from_json res[1]
|
13
|
+
elsif res[0] == 404
|
14
|
+
nil
|
15
|
+
else
|
16
|
+
raise Exception.new("Unexpected HTTP status code #{res[0]}")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def save
|
21
|
+
method = :post
|
22
|
+
endpoint = "v1/leaflets"
|
23
|
+
expected_status = 201
|
24
|
+
|
25
|
+
fields = {}
|
26
|
+
fields['name'] = name unless name.nil?
|
27
|
+
fields['url'] = url unless url.nil?
|
28
|
+
fields['start_date'] = start_date unless start_date.nil?
|
29
|
+
fields['end_date'] = end_date unless end_date.nil?
|
30
|
+
fields['pdf_data'] = pdf_data unless pdf_data.nil?
|
31
|
+
fields['store_ids'] = store_ids unless store_ids.nil?
|
32
|
+
|
33
|
+
res = RestLayer.send(method, endpoint, fields, { 'Authorization' => "Bearer #{Token.access_token}" })
|
34
|
+
|
35
|
+
if res[0] != expected_status
|
36
|
+
raise Exception.new("Unexpected HTTP status code #{res[0]}")
|
37
|
+
else
|
38
|
+
if method == :post
|
39
|
+
self.id = res[1]['id']
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
def self.from_json(json)
|
46
|
+
result = Leaflet.new
|
47
|
+
|
48
|
+
json.each do |key, val|
|
49
|
+
result.send("#{key}=", val)
|
50
|
+
end
|
51
|
+
|
52
|
+
result
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module PQSDK
|
2
|
+
class RestLayer
|
3
|
+
def self.get(endpoint, parameters, headers)
|
4
|
+
url = URI.parse("http://#{Settings.host}/#{endpoint}")
|
5
|
+
url.query = URI.encode_www_form(parameters)
|
6
|
+
req = Net::HTTP::Get.new(url.request_uri)
|
7
|
+
|
8
|
+
headers.each do |name, value|
|
9
|
+
req[name.to_s] = value
|
10
|
+
end
|
11
|
+
|
12
|
+
res = Net::HTTP.start(url.host, url.port) do |http|
|
13
|
+
http.request(req)
|
14
|
+
end
|
15
|
+
|
16
|
+
check_status(res.code.to_i, res.body)
|
17
|
+
|
18
|
+
[ res.code.to_i, JSON.parse(res.body), res.to_hash ]
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.post(endpoint, parameters, headers)
|
22
|
+
url = URI.parse("http://#{Settings.host}/#{endpoint}")
|
23
|
+
req = Net::HTTP::Post.new(url.request_uri)
|
24
|
+
req.set_form_data(parameters)
|
25
|
+
|
26
|
+
headers.each do |name, value|
|
27
|
+
req[name.to_s] = value
|
28
|
+
end
|
29
|
+
|
30
|
+
res = Net::HTTP.start(url.host, url.port) do |http|
|
31
|
+
http.request(req)
|
32
|
+
end
|
33
|
+
|
34
|
+
check_status(res.code.to_i, res.body)
|
35
|
+
[ res.code.to_i, JSON.parse(res.body), res.to_hash ]
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.put(endpoint, parameters, headers)
|
39
|
+
url = URI.parse("http://#{Settings.host}/#{endpoint}")
|
40
|
+
req = Net::HTTP::Put.new(url.request_uri)
|
41
|
+
req.set_form_data(parameters)
|
42
|
+
|
43
|
+
headers.each do |name, value|
|
44
|
+
req[name.to_s] = value
|
45
|
+
end
|
46
|
+
|
47
|
+
res = Net::HTTP.start(url.host, url.port) do |http|
|
48
|
+
http.request(req)
|
49
|
+
end
|
50
|
+
|
51
|
+
check_status(res.code.to_i, res.body)
|
52
|
+
[ res.code.to_i, JSON.parse(res.body), res.to_hash ]
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
def self.check_status(code, body)
|
57
|
+
if code >= 500
|
58
|
+
raise Exception.new("Internal Server Error")
|
59
|
+
elsif code == 400
|
60
|
+
raise Exception.new("Bad Request. This usually imples a bug in this gem! Error: #{JSON.parse(body)['error']}")
|
61
|
+
elsif code == 401
|
62
|
+
raise Exception.new("You are not authorized to perform that request")
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module PQSDK
|
2
|
+
class Settings
|
3
|
+
@@host = nil
|
4
|
+
@@app_secret = nil
|
5
|
+
|
6
|
+
def self.host
|
7
|
+
@@host
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.host=(val)
|
11
|
+
@@host = val
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.app_secret
|
15
|
+
@@app_secret
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.app_secret=(val)
|
19
|
+
@@app_secret = val
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/pqsdk/store.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
module PQSDK
|
2
|
+
class Store
|
3
|
+
attr_accessor :id, :name, :address, :zipcode, :latitude, :longitude, :phone, :city_id, :origin, :opening_hours
|
4
|
+
|
5
|
+
def self.find(address, zipcode, retailer = nil)
|
6
|
+
res = RestLayer.get('v1/stores', { address: address, zipcode: zipcode, retailer: retailer }, { 'Authorization' => "Bearer #{Token.access_token}" })
|
7
|
+
if res[0] == 200
|
8
|
+
Store.from_json res[1]
|
9
|
+
elsif res[0] == 404
|
10
|
+
nil
|
11
|
+
else
|
12
|
+
raise Exception.new("Unexpected HTTP status code #{res[0]}")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.get(id)
|
17
|
+
res = RestLayer.get("v1/stores/#{id}", { }, { 'Authorization' => "Bearer #{Token.access_token}" })
|
18
|
+
if res[0] == 200
|
19
|
+
Store.from_json res[1]
|
20
|
+
elsif res[0] == 404
|
21
|
+
nil
|
22
|
+
else
|
23
|
+
raise Exception.new("Unexpected HTTP status code #{res[0]}")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def save
|
28
|
+
if self.id != nil
|
29
|
+
method = :put
|
30
|
+
url = "v1/stores/#{self.id}"
|
31
|
+
expected_status = 200
|
32
|
+
else
|
33
|
+
method = :post
|
34
|
+
url = "v1/stores"
|
35
|
+
expected_status = 201
|
36
|
+
end
|
37
|
+
|
38
|
+
fields = {}
|
39
|
+
fields['name'] = name unless name.nil?
|
40
|
+
fields['address'] = address unless address.nil?
|
41
|
+
fields['zipcode'] = zipcode unless zipcode.nil?
|
42
|
+
fields['latitude'] = latitude unless latitude.nil?
|
43
|
+
fields['longitude'] = longitude unless longitude.nil?
|
44
|
+
fields['city_id'] = city_id unless city_id.nil?
|
45
|
+
fields['origin'] = origin unless origin.nil?
|
46
|
+
fields['opening_hours'] = opening_hours.to_json unless opening_hours.nil?
|
47
|
+
|
48
|
+
res = RestLayer.send(method, url, fields, { 'Authorization' => "Bearer #{Token.access_token}" })
|
49
|
+
|
50
|
+
if res[0] != expected_status
|
51
|
+
raise Exception.new("Unexpected HTTP status code #{res[0]}")
|
52
|
+
else
|
53
|
+
if method == :post
|
54
|
+
self.id = res[1]['id']
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
def self.from_json(json)
|
61
|
+
result = Store.new
|
62
|
+
|
63
|
+
json.each do |key, val|
|
64
|
+
if key != 'country' && key != 'city'
|
65
|
+
result.send("#{key}=", val)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
result.city_id = PQSDK::City.find(json['city']).id
|
70
|
+
|
71
|
+
result
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
data/lib/pqsdk/token.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
module PQSDK
|
2
|
+
class Token
|
3
|
+
@@access_token = nil
|
4
|
+
@@expiration = nil
|
5
|
+
|
6
|
+
def self.get
|
7
|
+
res = RestLayer.get('v1/token', {}, { 'Authentication' => "Key #{Settings.app_secret}" })
|
8
|
+
|
9
|
+
if res[0] == 200
|
10
|
+
@@access_token = res[1]['token']
|
11
|
+
@@expiration = Time.parse(res[1]['expired_at'])
|
12
|
+
end
|
13
|
+
|
14
|
+
@@access_token
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.access_token
|
18
|
+
if @@access_token == nil || @@expiration <= Time.now
|
19
|
+
self.get
|
20
|
+
else
|
21
|
+
@@access_token
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: promoqui-api-sdk
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Francesco Boffa
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-01-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: json
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: This gem helps Crawler Writers to interact with the PromoQui REST API
|
28
|
+
email: f.boffa@promoqui.it
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- lib/pqsdk.rb
|
34
|
+
- lib/pqsdk/city.rb
|
35
|
+
- lib/pqsdk/leaflet.rb
|
36
|
+
- lib/pqsdk/rest_layer.rb
|
37
|
+
- lib/pqsdk/settings.rb
|
38
|
+
- lib/pqsdk/store.rb
|
39
|
+
- lib/pqsdk/token.rb
|
40
|
+
- lib/pqsdk/version.rb
|
41
|
+
homepage: ''
|
42
|
+
licenses:
|
43
|
+
- MIT
|
44
|
+
metadata: {}
|
45
|
+
post_install_message:
|
46
|
+
rdoc_options: []
|
47
|
+
require_paths:
|
48
|
+
- lib
|
49
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - '>='
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: '0'
|
59
|
+
requirements: []
|
60
|
+
rubyforge_project:
|
61
|
+
rubygems_version: 2.4.5
|
62
|
+
signing_key:
|
63
|
+
specification_version: 4
|
64
|
+
summary: A wrapper around PromoQui HTTP Crawler API
|
65
|
+
test_files: []
|