dato 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +40 -1
- data/dato.gemspec +3 -0
- data/lib/dato/account/client.rb +8 -12
- data/lib/dato/api_error.rb +18 -0
- data/lib/dato/site/client.rb +21 -11
- data/lib/dato/upload/file.rb +68 -0
- data/lib/dato/upload/image.rb +19 -0
- data/lib/dato/version.rb +1 -1
- metadata +47 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 625bd39b3b678607cd376d9ba1edc2e725bc2b86
|
4
|
+
data.tar.gz: 272fee3a00041493b597d137697b10f8a4fde371
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d0351d838f7799d1bf129b9dd7e81848cadc4ff638e252f8a3e6b6f636e53ac79fb2f8db1c75b3b66130c93d2a50f4b4ee7b4fd39551a0299403d688c0b4121
|
7
|
+
data.tar.gz: 0f74932dbec7b9f7bdf326f904f99cab5233e33d586ad3118dff08954fc818154d8a628ea32db475262c7f5652ddd0bb53a5192f12e4737b3229e83519be906c
|
data/README.md
CHANGED
@@ -24,7 +24,46 @@ Or install it yourself as:
|
|
24
24
|
|
25
25
|
## Usage
|
26
26
|
|
27
|
-
|
27
|
+
```ruby
|
28
|
+
client = Dato::Site::Client.new("YOUR_SITE_API_TOKEN")
|
29
|
+
|
30
|
+
article_type = client.item_types.create(
|
31
|
+
name: "Article",
|
32
|
+
singleton: false,
|
33
|
+
sortable: false,
|
34
|
+
api_key: "article"
|
35
|
+
)
|
36
|
+
|
37
|
+
client.fields.create(
|
38
|
+
article_type[:id],
|
39
|
+
api_key: "title",
|
40
|
+
field_type: "string",
|
41
|
+
appeareance: { type: "title" },
|
42
|
+
label: "Title",
|
43
|
+
localized: false,
|
44
|
+
position: 99,
|
45
|
+
hint: "",
|
46
|
+
validators: { required: {} },
|
47
|
+
)
|
48
|
+
|
49
|
+
client.fields.create(
|
50
|
+
article_type[:id],
|
51
|
+
api_key: "image",
|
52
|
+
field_type: "image",
|
53
|
+
appeareance: nil,
|
54
|
+
label: "Image",
|
55
|
+
localized: false,
|
56
|
+
position: 99,
|
57
|
+
hint: "",
|
58
|
+
validators: { required: {} },
|
59
|
+
)
|
60
|
+
|
61
|
+
client.items.create(
|
62
|
+
item_type: article_type[:id],
|
63
|
+
title: "First post!",
|
64
|
+
image: client.upload_image("http://i.giphy.com/NXOF5rlaSXdAc.gif")
|
65
|
+
)
|
66
|
+
```
|
28
67
|
|
29
68
|
## Development
|
30
69
|
|
data/dato.gemspec
CHANGED
@@ -31,4 +31,7 @@ Gem::Specification.new do |spec|
|
|
31
31
|
spec.add_runtime_dependency "faraday", [">= 0.9.0"]
|
32
32
|
spec.add_runtime_dependency "faraday_middleware", [">= 0.9.0"]
|
33
33
|
spec.add_runtime_dependency "activesupport"
|
34
|
+
spec.add_runtime_dependency "fastimage"
|
35
|
+
spec.add_runtime_dependency "downloadr"
|
36
|
+
spec.add_runtime_dependency "addressable"
|
34
37
|
end
|
data/lib/dato/account/client.rb
CHANGED
@@ -5,6 +5,7 @@ require 'active_support/core_ext/hash/indifferent_access'
|
|
5
5
|
|
6
6
|
require 'dato/account/repo/account'
|
7
7
|
require 'dato/account/repo/site'
|
8
|
+
require 'dato/api_error'
|
8
9
|
|
9
10
|
module Dato
|
10
11
|
module Account
|
@@ -14,10 +15,10 @@ module Dato
|
|
14
15
|
sites: Repo::Site,
|
15
16
|
}
|
16
17
|
|
17
|
-
attr_reader :token, :
|
18
|
+
attr_reader :token, :base_url, :schema
|
18
19
|
|
19
|
-
def initialize(token,
|
20
|
-
@
|
20
|
+
def initialize(token, base_url: 'https://account-api.datocms.com')
|
21
|
+
@base_url = base_url
|
21
22
|
@token = token
|
22
23
|
end
|
23
24
|
|
@@ -32,21 +33,16 @@ module Dato
|
|
32
33
|
end
|
33
34
|
|
34
35
|
def request(*args)
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
puts e.response
|
39
|
-
body = JSON.parse(e.response[:body])
|
40
|
-
puts JSON.pretty_generate(body)
|
41
|
-
raise e
|
42
|
-
end
|
36
|
+
connection.send(*args).body.with_indifferent_access
|
37
|
+
rescue Faraday::ClientError => e
|
38
|
+
raise ApiError.new(e)
|
43
39
|
end
|
44
40
|
|
45
41
|
private
|
46
42
|
|
47
43
|
def connection
|
48
44
|
options = {
|
49
|
-
url:
|
45
|
+
url: base_url,
|
50
46
|
headers: {
|
51
47
|
'Accept' => "application/json",
|
52
48
|
'Content-Type' => "application/json",
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Dato
|
2
|
+
class ApiError < StandardError
|
3
|
+
attr_reader :faraday_error
|
4
|
+
|
5
|
+
def initialize(faraday_error)
|
6
|
+
@faraday_error = faraday_error
|
7
|
+
end
|
8
|
+
|
9
|
+
def message
|
10
|
+
[
|
11
|
+
"DatoCMS API Error",
|
12
|
+
"Status: #{faraday_error.response[:status]}",
|
13
|
+
"Response:",
|
14
|
+
JSON.pretty_generate(JSON.load(faraday_error.response[:body]))
|
15
|
+
].join("\n")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/dato/site/client.rb
CHANGED
@@ -11,6 +11,10 @@ require 'dato/site/repo/upload_request'
|
|
11
11
|
require 'dato/site/repo/user'
|
12
12
|
require 'dato/site/repo/item'
|
13
13
|
|
14
|
+
require 'dato/upload/file'
|
15
|
+
require 'dato/upload/image'
|
16
|
+
require 'dato/api_error'
|
17
|
+
|
14
18
|
module Dato
|
15
19
|
module Site
|
16
20
|
class Client
|
@@ -24,13 +28,23 @@ module Dato
|
|
24
28
|
items: Repo::Item,
|
25
29
|
}
|
26
30
|
|
27
|
-
attr_reader :token, :
|
31
|
+
attr_reader :token, :base_url, :schema
|
28
32
|
|
29
|
-
def initialize(token,
|
30
|
-
@
|
33
|
+
def initialize(token, base_url: 'https://site-api.datocms.com')
|
34
|
+
@base_url = base_url
|
31
35
|
@token = token
|
32
36
|
end
|
33
37
|
|
38
|
+
def upload_file(path_or_url)
|
39
|
+
file = Upload::File.new(self, path_or_url)
|
40
|
+
file.upload
|
41
|
+
end
|
42
|
+
|
43
|
+
def upload_image(path_or_url)
|
44
|
+
file = Upload::Image.new(self, path_or_url)
|
45
|
+
file.upload
|
46
|
+
end
|
47
|
+
|
34
48
|
REPOS.each do |method_name, repo_klass|
|
35
49
|
define_method method_name do
|
36
50
|
instance_variable_set(
|
@@ -42,20 +56,16 @@ module Dato
|
|
42
56
|
end
|
43
57
|
|
44
58
|
def request(*args)
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
body = JSON.parse(e.response[:body])
|
49
|
-
puts JSON.pretty_generate(body)
|
50
|
-
raise e
|
51
|
-
end
|
59
|
+
connection.send(*args).body.with_indifferent_access
|
60
|
+
rescue Faraday::ClientError => e
|
61
|
+
raise ApiError.new(e)
|
52
62
|
end
|
53
63
|
|
54
64
|
private
|
55
65
|
|
56
66
|
def connection
|
57
67
|
options = {
|
58
|
-
url:
|
68
|
+
url: base_url,
|
59
69
|
headers: {
|
60
70
|
'Accept' => "application/json",
|
61
71
|
'Content-Type' => "application/json",
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require "downloadr"
|
2
|
+
require "tempfile"
|
3
|
+
require "addressable"
|
4
|
+
require "net/http"
|
5
|
+
|
6
|
+
module Dato
|
7
|
+
module Upload
|
8
|
+
class File
|
9
|
+
attr_reader :client, :source
|
10
|
+
|
11
|
+
def initialize(client, source)
|
12
|
+
@client = client
|
13
|
+
@source = source
|
14
|
+
end
|
15
|
+
|
16
|
+
def file
|
17
|
+
@file ||= if http_source?
|
18
|
+
Tempfile.new('file').tap do |file|
|
19
|
+
Downloadr::HTTP.new(source, file).download
|
20
|
+
end
|
21
|
+
else
|
22
|
+
::File.new(::File.expand_path(source))
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def http_source?
|
27
|
+
uri = Addressable::URI.parse(source)
|
28
|
+
uri.scheme == "http" || uri.scheme == "https"
|
29
|
+
rescue Addressable::URI::InvalidURIError
|
30
|
+
false
|
31
|
+
end
|
32
|
+
|
33
|
+
def filename
|
34
|
+
if http_source?
|
35
|
+
::File.basename(source)
|
36
|
+
else
|
37
|
+
::File.basename(file.path)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def upload
|
42
|
+
upload_request = client.upload_requests.create(filename: filename)
|
43
|
+
uri = URI.parse(upload_request[:url])
|
44
|
+
|
45
|
+
request = Net::HTTP::Put.new(
|
46
|
+
uri,
|
47
|
+
'x-amz-acl' => 'public-read'
|
48
|
+
)
|
49
|
+
request.body = file.read
|
50
|
+
|
51
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
52
|
+
http.use_ssl = true
|
53
|
+
|
54
|
+
http.request(request)
|
55
|
+
|
56
|
+
format_resource(upload_request)
|
57
|
+
end
|
58
|
+
|
59
|
+
def format_resource(upload_request)
|
60
|
+
{
|
61
|
+
path: upload_request[:id],
|
62
|
+
size: ::File.size(file.path),
|
63
|
+
format: ::File.extname(::File.basename(file.path)).delete('.')
|
64
|
+
}
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "dato/upload/file"
|
2
|
+
require "fastimage"
|
3
|
+
|
4
|
+
module Dato
|
5
|
+
module Upload
|
6
|
+
class Image < Dato::Upload::File
|
7
|
+
def format_resource(upload_request)
|
8
|
+
width, height = FastImage.size(file.path)
|
9
|
+
|
10
|
+
super(upload_request).merge(
|
11
|
+
width: width,
|
12
|
+
height: height,
|
13
|
+
format: FastImage.type(file.path).to_s
|
14
|
+
)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
data/lib/dato/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dato
|
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
|
- Stefano Verna
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-08-
|
11
|
+
date: 2016-08-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -164,6 +164,48 @@ dependencies:
|
|
164
164
|
- - ">="
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: fastimage
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: downloadr
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :runtime
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: addressable
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - ">="
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '0'
|
202
|
+
type: :runtime
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - ">="
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '0'
|
167
209
|
description: Ruby client for DatoCMS API
|
168
210
|
email:
|
169
211
|
- s.verna@cantierecreativo.net
|
@@ -187,6 +229,7 @@ files:
|
|
187
229
|
- lib/dato/account/repo/account.rb
|
188
230
|
- lib/dato/account/repo/base.rb
|
189
231
|
- lib/dato/account/repo/site.rb
|
232
|
+
- lib/dato/api_error.rb
|
190
233
|
- lib/dato/json_api_deserializer.rb
|
191
234
|
- lib/dato/json_api_serializer.rb
|
192
235
|
- lib/dato/site/client.rb
|
@@ -198,6 +241,8 @@ files:
|
|
198
241
|
- lib/dato/site/repo/site.rb
|
199
242
|
- lib/dato/site/repo/upload_request.rb
|
200
243
|
- lib/dato/site/repo/user.rb
|
244
|
+
- lib/dato/upload/file.rb
|
245
|
+
- lib/dato/upload/image.rb
|
201
246
|
- lib/dato/version.rb
|
202
247
|
homepage: https://github.com/datocms/ruby-datocms-client
|
203
248
|
licenses:
|
@@ -224,4 +269,3 @@ signing_key:
|
|
224
269
|
specification_version: 4
|
225
270
|
summary: Ruby client for DatoCMS API
|
226
271
|
test_files: []
|
227
|
-
has_rdoc:
|