apisync 0.1.3 → 0.1.4
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 +4 -4
- data/README.md +24 -6
- data/apisync.gemspec +1 -0
- data/lib/apisync/exceptions.rb +1 -0
- data/lib/apisync/http_client.rb +43 -35
- data/lib/apisync/resource.rb +21 -16
- data/lib/apisync/version.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b45094cd8302949db5ed09514381ba31e9901ec4
|
4
|
+
data.tar.gz: 99ba7178a22c9a1894a9ffac0b7ec9bbc5d72e70
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e54efe32dadb1fe4832132ffa6635c8f737042a74d218887af6d81ef5d6e46585fbc6e34a3e1e9d455f4c99e38d6af2651b193aee6bbb008c802575940e15d1
|
7
|
+
data.tar.gz: e5da6cfb47427a575b9db484382e7f491471678193790e2716f3f13ca5c3478efc4c9193001958d9921b43344e8a7f4e50325ef0c6dfcc991ba2b4b953ad041b
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# apisync-ruby
|
2
2
|
|
3
3
|
This gem gives you the tools to interact with [apisync.io](apisync.io).
|
4
4
|
|
@@ -12,6 +12,10 @@ gem 'apisync'
|
|
12
12
|
|
13
13
|
## Usage
|
14
14
|
|
15
|
+
**On Rails?** Please use
|
16
|
+
[apisync-rails](https://github.com/apisync/apisync-rails) instead. It has
|
17
|
+
automatic integration with ActiveRecord.
|
18
|
+
|
15
19
|
### Vanilla Ruby
|
16
20
|
|
17
21
|
To create an inventory item:
|
@@ -21,15 +25,29 @@ client = Apisync.new(api_key: token)
|
|
21
25
|
client.inventory_items.save({
|
22
26
|
attributes: {
|
23
27
|
ad_template_type: "vehicle",
|
24
|
-
|
25
|
-
brand:
|
26
|
-
condition:
|
27
|
-
content_language: "pt-br"
|
28
|
-
|
28
|
+
available: true,
|
29
|
+
brand: "brand",
|
30
|
+
condition: "new",
|
31
|
+
content_language: "pt-br",
|
32
|
+
reference_id: "1"
|
33
|
+
|
34
|
+
# more attributes
|
29
35
|
}
|
30
36
|
})
|
31
37
|
```
|
32
38
|
|
39
|
+
For details on the attributes, see the
|
40
|
+
[API Reference documentation](https://docs.apisync.io/api/).
|
41
|
+
|
42
|
+
You can also define a global API key:
|
43
|
+
|
44
|
+
```ruby
|
45
|
+
Apisync.api_key = "my-key"
|
46
|
+
|
47
|
+
# Instantiate the client now without passing a token
|
48
|
+
client = Apisync.new
|
49
|
+
```
|
50
|
+
|
33
51
|
## Development
|
34
52
|
|
35
53
|
To run tests:
|
data/apisync.gemspec
CHANGED
data/lib/apisync/exceptions.rb
CHANGED
data/lib/apisync/http_client.rb
CHANGED
@@ -7,58 +7,58 @@ class Apisync
|
|
7
7
|
"Accept" => "application/vnd.api+json"
|
8
8
|
}.freeze
|
9
9
|
|
10
|
-
def
|
11
|
-
|
12
|
-
|
13
|
-
options: options
|
14
|
-
)
|
15
|
-
payload = payload_from_data(data)
|
16
|
-
HTTParty.post(
|
17
|
-
url.to_s,
|
18
|
-
body: {data: payload}.to_json,
|
19
|
-
headers: header(api_key: options[:api_key])
|
20
|
-
)
|
10
|
+
def initialize(resource_name:, options: {})
|
11
|
+
@resource_name = resource_name
|
12
|
+
@options = options
|
21
13
|
end
|
22
14
|
|
23
|
-
def
|
15
|
+
def post(data:, headers: {})
|
16
|
+
wrap_response(HTTParty.post(
|
17
|
+
url,
|
18
|
+
body: {data: payload_from_data(data)}.to_json,
|
19
|
+
headers: header.merge(headers)
|
20
|
+
))
|
21
|
+
end
|
22
|
+
|
23
|
+
def put(id:, data:, headers: {})
|
24
24
|
raise Apisync::UrlAndPayloadIdMismatch unless id == data[:id]
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
)
|
31
|
-
payload = payload_from_data(data)
|
32
|
-
HTTParty.put(
|
33
|
-
url.to_s,
|
34
|
-
body: {data: payload}.to_json,
|
35
|
-
headers: header(api_key: options[:api_key])
|
36
|
-
)
|
26
|
+
wrap_response(HTTParty.put(
|
27
|
+
url(id: id),
|
28
|
+
body: {data: payload_from_data(data)}.to_json,
|
29
|
+
headers: header.merge(headers)
|
30
|
+
))
|
37
31
|
end
|
38
32
|
|
39
|
-
def
|
33
|
+
def get(id: nil, filters: nil, headers: {})
|
40
34
|
raise Apisync::InvalidFilter if !filters.nil? && !filters.is_a?(Hash)
|
41
35
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
options: options
|
47
|
-
)
|
48
|
-
HTTParty.get(url.to_s, headers: header(api_key: options[:api_key]))
|
36
|
+
wrap_response(HTTParty.get(
|
37
|
+
url(id: id, filters: filters),
|
38
|
+
headers: header.merge(headers)
|
39
|
+
))
|
49
40
|
end
|
50
41
|
|
51
42
|
private
|
52
43
|
|
53
|
-
def
|
44
|
+
def url(id: nil, filters: nil)
|
45
|
+
Apisync::Http::Url.new(
|
46
|
+
resource_name: @resource_name,
|
47
|
+
id: id,
|
48
|
+
filters: filters,
|
49
|
+
options: @options
|
50
|
+
).to_s
|
51
|
+
end
|
52
|
+
|
53
|
+
def header
|
54
54
|
final = HEADER
|
55
|
-
if api_key
|
56
|
-
final = final.merge("Authorization" => "ApiToken #{api_key}")
|
55
|
+
if @options[:api_key]
|
56
|
+
final = final.merge("Authorization" => "ApiToken #{@options[:api_key]}")
|
57
57
|
end
|
58
58
|
final
|
59
59
|
end
|
60
60
|
|
61
|
-
def
|
61
|
+
def payload_from_data(data)
|
62
62
|
transformed_payload = {}
|
63
63
|
data.each do |key, value|
|
64
64
|
if value.is_a?(Hash)
|
@@ -70,5 +70,13 @@ class Apisync
|
|
70
70
|
end
|
71
71
|
transformed_payload
|
72
72
|
end
|
73
|
+
|
74
|
+
def wrap_response(response)
|
75
|
+
if response.code.to_i == 429
|
76
|
+
raise Apisync::TooManyRequests
|
77
|
+
else
|
78
|
+
response
|
79
|
+
end
|
80
|
+
end
|
73
81
|
end
|
74
82
|
end
|
data/lib/apisync/resource.rb
CHANGED
@@ -12,10 +12,12 @@ class Apisync
|
|
12
12
|
#
|
13
13
|
def save(data)
|
14
14
|
data[:type] = @name.to_s.gsub("_", "-")
|
15
|
+
headers = data.delete(:headers) || {}
|
16
|
+
|
15
17
|
if data[:id].nil?
|
16
|
-
post(data)
|
18
|
+
post(data, headers: headers)
|
17
19
|
else
|
18
|
-
put(data)
|
20
|
+
put(data, headers: headers)
|
19
21
|
end
|
20
22
|
end
|
21
23
|
|
@@ -30,38 +32,41 @@ class Apisync
|
|
30
32
|
# get(filters: {column_name: 'customer-id' }})
|
31
33
|
#
|
32
34
|
def get(conditions)
|
33
|
-
|
35
|
+
client = Apisync::HttpClient.new(
|
34
36
|
resource_name: @name,
|
37
|
+
options: @options
|
38
|
+
)
|
39
|
+
client.get(
|
35
40
|
id: conditions[:id],
|
36
41
|
filters: conditions[:filters],
|
37
|
-
|
42
|
+
headers: conditions[:headers] || {}
|
38
43
|
)
|
39
44
|
end
|
40
45
|
|
41
46
|
private
|
42
47
|
|
43
48
|
|
44
|
-
def post(data)
|
45
|
-
|
49
|
+
def post(data, headers: {})
|
50
|
+
client = Apisync::HttpClient.new(
|
46
51
|
resource_name: @name,
|
47
|
-
data: data,
|
48
52
|
options: @options
|
49
53
|
)
|
54
|
+
client.post(
|
55
|
+
data: data,
|
56
|
+
headers: headers
|
57
|
+
)
|
50
58
|
end
|
51
59
|
|
52
|
-
def put(data)
|
53
|
-
|
60
|
+
def put(data, headers: {})
|
61
|
+
client = Apisync::HttpClient.new(
|
54
62
|
resource_name: @name,
|
63
|
+
options: @options
|
64
|
+
)
|
65
|
+
client.put(
|
55
66
|
id: data[:id],
|
56
67
|
data: data,
|
57
|
-
|
68
|
+
headers: headers
|
58
69
|
)
|
59
70
|
end
|
60
|
-
|
61
|
-
private
|
62
|
-
|
63
|
-
def http_client
|
64
|
-
Apisync::HttpClient
|
65
|
-
end
|
66
71
|
end
|
67
72
|
end
|
data/lib/apisync/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: apisync
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexandre de Oliveira
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-10-
|
11
|
+
date: 2017-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: webmock
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
97
111
|
description:
|
98
112
|
email:
|
99
113
|
- chavedomundo@gmail.com
|