promoqui-api-sdk 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|