dato 0.7.5 → 0.7.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +2 -2
- data/dato.gemspec +4 -4
- data/lib/dato/api_client.rb +27 -4
- data/lib/dato/api_error.rb +7 -5
- data/lib/dato/json_api_deserializer.rb +4 -5
- data/lib/dato/local/field_type/file.rb +61 -22
- data/lib/dato/local/field_type/seo.rb +1 -1
- data/lib/dato/local/field_type/theme.rb +1 -1
- data/lib/dato/local/field_type/upload_id.rb +68 -0
- data/lib/dato/local/field_type/video.rb +0 -2
- data/lib/dato/local/loader.rb +2 -3
- data/lib/dato/local/site.rb +1 -1
- data/lib/dato/paginator.rb +3 -4
- data/lib/dato/repo.rb +61 -29
- data/lib/dato/upload/file.rb +7 -2
- data/lib/dato/version.rb +1 -1
- metadata +16 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 118ea91dc3caa834412e342a2350b594c94880bbbafba6f37d2b6041b5570acc
|
4
|
+
data.tar.gz: 64e1a53c6292a41ad4e361e4b01bdff416d09e3acebbd133afc123c2f80fe74b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a93f7dccda38b47237a585a7274754b2a3c370918c476e5556bc42ec13a2326a53e594f25b48fdc240a456f707d71dedfe9d9587a978ff38a177c398d5627ffa
|
7
|
+
data.tar.gz: b74c22160ba51d703705213b12c60d795eb499855fc6179a8b2c576ff8e32d1cd7bb94747a7e3a6a5bd957ff527e34964ca01eb47dbfdc078f16519272dfb6a4
|
data/.travis.yml
CHANGED
data/dato.gemspec
CHANGED
@@ -20,9 +20,9 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
21
|
spec.require_paths = ['lib']
|
22
22
|
|
23
|
-
spec.add_development_dependency 'bundler'
|
24
|
-
spec.add_development_dependency 'rake'
|
25
|
-
spec.add_development_dependency 'rspec'
|
23
|
+
spec.add_development_dependency 'bundler'
|
24
|
+
spec.add_development_dependency 'rake'
|
25
|
+
spec.add_development_dependency 'rspec'
|
26
26
|
spec.add_development_dependency 'rubyzip'
|
27
27
|
spec.add_development_dependency 'simplecov'
|
28
28
|
spec.add_development_dependency 'vcr'
|
@@ -43,6 +43,6 @@ Gem::Specification.new do |spec|
|
|
43
43
|
spec.add_runtime_dependency 'dotenv'
|
44
44
|
spec.add_runtime_dependency 'pusher-client'
|
45
45
|
spec.add_runtime_dependency 'listen'
|
46
|
-
spec.add_runtime_dependency '
|
46
|
+
spec.add_runtime_dependency 'dato_json_schema'
|
47
47
|
spec.add_runtime_dependency 'mime-types'
|
48
48
|
end
|
data/lib/dato/api_client.rb
CHANGED
@@ -56,8 +56,31 @@ module Dato
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
+
def put(absolute_path, body = {}, params = {})
|
60
|
+
request(:put, absolute_path, body, params)
|
61
|
+
end
|
62
|
+
|
63
|
+
def post(absolute_path, body = {}, params = {})
|
64
|
+
request(:post, absolute_path, body, params)
|
65
|
+
end
|
66
|
+
|
67
|
+
def get(absolute_path, params = {})
|
68
|
+
request(:get, absolute_path, nil, params)
|
69
|
+
end
|
70
|
+
|
71
|
+
def delete(absolute_path, params = {})
|
72
|
+
request(:delete, absolute_path, nil, params)
|
73
|
+
end
|
74
|
+
|
59
75
|
def request(*args)
|
60
|
-
|
76
|
+
method, absolute_path, body, params = args
|
77
|
+
|
78
|
+
response = connection.send(method, absolute_path, body) do |c|
|
79
|
+
if params
|
80
|
+
c.params = params
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
61
84
|
if response.body.is_a?(Hash)
|
62
85
|
response.body.with_indifferent_access
|
63
86
|
else
|
@@ -82,7 +105,7 @@ module Dato
|
|
82
105
|
sleep(1)
|
83
106
|
request(*args)
|
84
107
|
else
|
85
|
-
error = ApiError.new(e)
|
108
|
+
error = ApiError.new(e.response)
|
86
109
|
puts "===="
|
87
110
|
puts error.message
|
88
111
|
puts "===="
|
@@ -115,12 +138,12 @@ module Dato
|
|
115
138
|
'Content-Type' => 'application/json',
|
116
139
|
'Authorization' => "Bearer #{@token}",
|
117
140
|
'User-Agent' => "ruby-client v#{Dato::VERSION}",
|
118
|
-
'X-Api-Version' => '
|
141
|
+
'X-Api-Version' => '3'
|
119
142
|
}
|
120
143
|
|
121
144
|
options = {
|
122
145
|
url: base_url,
|
123
|
-
headers: default_headers.merge(extra_headers)
|
146
|
+
headers: default_headers.merge(extra_headers),
|
124
147
|
}
|
125
148
|
|
126
149
|
@connection ||= Faraday.new(options) do |c|
|
data/lib/dato/api_error.rb
CHANGED
@@ -2,23 +2,25 @@
|
|
2
2
|
|
3
3
|
module Dato
|
4
4
|
class ApiError < StandardError
|
5
|
-
attr_reader :
|
5
|
+
attr_reader :response
|
6
6
|
|
7
|
-
def initialize(
|
8
|
-
@
|
7
|
+
def initialize(response)
|
8
|
+
@response = response
|
9
9
|
end
|
10
10
|
|
11
11
|
def message
|
12
12
|
[
|
13
13
|
'DatoCMS API Error',
|
14
|
-
"Status: #{
|
14
|
+
"Status: #{response[:status]}",
|
15
15
|
'Response:',
|
16
16
|
JSON.pretty_generate(body)
|
17
17
|
].join("\n")
|
18
18
|
end
|
19
19
|
|
20
20
|
def body
|
21
|
-
|
21
|
+
if response[:body]
|
22
|
+
JSON.parse(response[:body])
|
23
|
+
end
|
22
24
|
end
|
23
25
|
end
|
24
26
|
end
|
@@ -3,10 +3,10 @@ require 'dato/json_schema_relationships'
|
|
3
3
|
|
4
4
|
module Dato
|
5
5
|
class JsonApiDeserializer
|
6
|
-
attr_reader :
|
6
|
+
attr_reader :schema
|
7
7
|
|
8
|
-
def initialize(
|
9
|
-
@
|
8
|
+
def initialize(schema)
|
9
|
+
@schema = schema
|
10
10
|
end
|
11
11
|
|
12
12
|
def deserialize(data)
|
@@ -23,7 +23,6 @@ module Dato
|
|
23
23
|
|
24
24
|
def deserialize_resource(data)
|
25
25
|
result = { id: data[:id] }
|
26
|
-
|
27
26
|
result[:meta] = data[:meta] if data[:meta]
|
28
27
|
result.merge!(data[:attributes]) if data[:attributes]
|
29
28
|
|
@@ -51,7 +50,7 @@ module Dato
|
|
51
50
|
end
|
52
51
|
|
53
52
|
def relationships
|
54
|
-
@relationships ||= JsonSchemaRelationships.new(
|
53
|
+
@relationships ||= JsonSchemaRelationships.new(schema).relationships
|
55
54
|
end
|
56
55
|
end
|
57
56
|
end
|
@@ -6,21 +6,18 @@ module Dato
|
|
6
6
|
module Local
|
7
7
|
module FieldType
|
8
8
|
class File
|
9
|
-
|
9
|
+
def self.parse(value, repo)
|
10
|
+
if value
|
11
|
+
v = value.with_indifferent_access
|
10
12
|
|
11
|
-
|
12
|
-
if upload_id
|
13
|
-
upload = repo.entities_repo.find_entity('upload', upload_id)
|
13
|
+
upload = repo.entities_repo.find_entity('upload', v[:upload_id])
|
14
14
|
|
15
15
|
if upload
|
16
16
|
new(
|
17
|
-
upload
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
upload.height,
|
22
|
-
upload.alt,
|
23
|
-
upload.title,
|
17
|
+
upload,
|
18
|
+
v[:alt],
|
19
|
+
v[:title],
|
20
|
+
v[:custom_data],
|
24
21
|
repo.site.entity.imgix_host
|
25
22
|
)
|
26
23
|
end
|
@@ -28,23 +25,64 @@ module Dato
|
|
28
25
|
end
|
29
26
|
|
30
27
|
def initialize(
|
31
|
-
|
32
|
-
format,
|
33
|
-
size,
|
34
|
-
width,
|
35
|
-
height,
|
28
|
+
upload,
|
36
29
|
alt,
|
37
30
|
title,
|
31
|
+
custom_data,
|
38
32
|
imgix_host
|
39
33
|
)
|
40
|
-
@
|
41
|
-
@format = format
|
42
|
-
@size = size
|
43
|
-
@imgix_host = imgix_host
|
44
|
-
@width = width
|
45
|
-
@height = height
|
34
|
+
@upload = upload
|
46
35
|
@alt = alt
|
47
36
|
@title = title
|
37
|
+
@custom_data = custom_data
|
38
|
+
@imgix_host = imgix_host
|
39
|
+
end
|
40
|
+
|
41
|
+
def path
|
42
|
+
@upload.path
|
43
|
+
end
|
44
|
+
|
45
|
+
def format
|
46
|
+
@upload.format
|
47
|
+
end
|
48
|
+
|
49
|
+
def size
|
50
|
+
@upload.size
|
51
|
+
end
|
52
|
+
|
53
|
+
def width
|
54
|
+
@upload.width
|
55
|
+
end
|
56
|
+
|
57
|
+
def height
|
58
|
+
@upload.height
|
59
|
+
end
|
60
|
+
|
61
|
+
def author
|
62
|
+
@upload.author
|
63
|
+
end
|
64
|
+
|
65
|
+
def notes
|
66
|
+
@upload.notes
|
67
|
+
end
|
68
|
+
|
69
|
+
def copyright
|
70
|
+
@upload.copyright
|
71
|
+
end
|
72
|
+
|
73
|
+
def alt
|
74
|
+
default_metadata = @upload.default_field_metadata.deep_stringify_keys.fetch(I18n.locale.to_s, {})
|
75
|
+
@alt || default_metadata["alt"]
|
76
|
+
end
|
77
|
+
|
78
|
+
def title
|
79
|
+
default_metadata = @upload.default_field_metadata.deep_stringify_keys.fetch(I18n.locale.to_s, {})
|
80
|
+
@title || default_metadata["title"]
|
81
|
+
end
|
82
|
+
|
83
|
+
def custom_data
|
84
|
+
default_metadata = @upload.default_field_metadata.deep_stringify_keys.fetch(I18n.locale.to_s, {})
|
85
|
+
@custom_data.merge(default_metadata.fetch("custom_data", {}))
|
48
86
|
end
|
49
87
|
|
50
88
|
def file
|
@@ -67,6 +105,7 @@ module Dato
|
|
67
105
|
height: height,
|
68
106
|
alt: alt,
|
69
107
|
title: title,
|
108
|
+
custom_data: custom_data,
|
70
109
|
url: url
|
71
110
|
}
|
72
111
|
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'imgix'
|
4
|
+
|
5
|
+
module Dato
|
6
|
+
module Local
|
7
|
+
module FieldType
|
8
|
+
class UploadId
|
9
|
+
attr_reader :path, :format, :size, :width, :height
|
10
|
+
|
11
|
+
def self.parse(upload_id, repo)
|
12
|
+
if upload_id
|
13
|
+
upload = repo.entities_repo.find_entity('upload', upload_id)
|
14
|
+
|
15
|
+
if upload
|
16
|
+
new(
|
17
|
+
upload.path,
|
18
|
+
upload.format,
|
19
|
+
upload.size,
|
20
|
+
upload.width,
|
21
|
+
upload.height,
|
22
|
+
repo.site.entity.imgix_host
|
23
|
+
)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def initialize(
|
29
|
+
path,
|
30
|
+
format,
|
31
|
+
size,
|
32
|
+
width,
|
33
|
+
height,
|
34
|
+
imgix_host
|
35
|
+
)
|
36
|
+
@path = path
|
37
|
+
@format = format
|
38
|
+
@size = size
|
39
|
+
@imgix_host = imgix_host
|
40
|
+
@width = width
|
41
|
+
@height = height
|
42
|
+
end
|
43
|
+
|
44
|
+
def file
|
45
|
+
Imgix::Client.new(
|
46
|
+
host: @imgix_host,
|
47
|
+
secure: true,
|
48
|
+
include_library_param: false
|
49
|
+
).path(path)
|
50
|
+
end
|
51
|
+
|
52
|
+
def url(opts = {})
|
53
|
+
file.to_url(opts)
|
54
|
+
end
|
55
|
+
|
56
|
+
def to_hash(*_args)
|
57
|
+
{
|
58
|
+
format: format,
|
59
|
+
size: size,
|
60
|
+
width: width,
|
61
|
+
height: height,
|
62
|
+
url: url
|
63
|
+
}
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
data/lib/dato/local/loader.rb
CHANGED
@@ -39,7 +39,7 @@ module Dato
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def watch(&block)
|
42
|
-
site_id = client.
|
42
|
+
site_id = client.get('/site')['data']['id']
|
43
43
|
|
44
44
|
return if pusher && pusher.connected
|
45
45
|
|
@@ -172,8 +172,7 @@ module Dato
|
|
172
172
|
end
|
173
173
|
|
174
174
|
def site
|
175
|
-
include
|
176
|
-
client.request(:get, '/site', include: include)
|
175
|
+
client.get('/site', include: ['item_types', 'item_types.fields'])
|
177
176
|
end
|
178
177
|
|
179
178
|
def all_items
|
data/lib/dato/local/site.rb
CHANGED
data/lib/dato/paginator.rb
CHANGED
@@ -11,8 +11,8 @@ module Dato
|
|
11
11
|
def response
|
12
12
|
items_per_page = 100
|
13
13
|
|
14
|
-
base_response = @client.
|
15
|
-
|
14
|
+
base_response = @client.get(
|
15
|
+
@base_endpoint, @filters.dup.merge('page[limit]' => items_per_page)
|
16
16
|
)
|
17
17
|
|
18
18
|
extra_pages = (
|
@@ -20,8 +20,7 @@ module Dato
|
|
20
20
|
).ceil - 1
|
21
21
|
|
22
22
|
extra_pages.times do |page|
|
23
|
-
base_response[:data] += @client.
|
24
|
-
:get,
|
23
|
+
base_response[:data] += @client.get(
|
25
24
|
@base_endpoint,
|
26
25
|
@filters.dup.merge(
|
27
26
|
'page[offset]' => items_per_page * (page + 1),
|
data/lib/dato/repo.rb
CHANGED
@@ -54,47 +54,79 @@ module Dato
|
|
54
54
|
placeholder
|
55
55
|
end
|
56
56
|
|
57
|
-
|
58
|
-
|
59
|
-
unserialized_body = args.shift
|
57
|
+
body = nil
|
58
|
+
query_string = nil
|
60
59
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
)
|
65
|
-
else
|
66
|
-
{}
|
67
|
-
end
|
60
|
+
if %i[post put].include?(link.method)
|
61
|
+
body = link.schema ? args.shift : {}
|
62
|
+
query_string = args.shift || {}
|
68
63
|
|
69
|
-
|
64
|
+
elsif link.method == :delete
|
65
|
+
query_string = args.shift || {}
|
70
66
|
|
71
|
-
|
72
|
-
|
67
|
+
elsif link.method == :get
|
68
|
+
query_string = args.shift || {}
|
69
|
+
end
|
73
70
|
|
74
|
-
|
75
|
-
query_string = args.shift
|
71
|
+
options = args.any? ? args.shift.symbolize_keys : {}
|
76
72
|
|
77
|
-
|
78
|
-
|
79
|
-
|
73
|
+
if link.schema && %i[post put].include?(link.method) && options.fetch(:serialize_response, true)
|
74
|
+
body = JsonApiSerializer.new(type, link).serialize(
|
75
|
+
body,
|
76
|
+
link.method == :post ? nil : placeholders.last
|
77
|
+
)
|
78
|
+
end
|
80
79
|
|
81
|
-
|
80
|
+
response = if %i[post put].include?(link.method)
|
81
|
+
client.send(link.method, url, body, query_string)
|
82
|
+
elsif link.method == :delete
|
83
|
+
client.delete(url, query_string)
|
84
|
+
elsif link.method == :get
|
85
|
+
if options.fetch(:all_pages, false)
|
82
86
|
Paginator.new(client, url, query_string).response
|
83
87
|
else
|
84
|
-
client.
|
88
|
+
client.get(url, query_string)
|
85
89
|
end
|
86
90
|
end
|
87
91
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
92
|
+
if response && response[:data] && response[:data].is_a?(Hash) && response[:data][:type] == "job"
|
93
|
+
job_result = nil
|
94
|
+
|
95
|
+
while !job_result do
|
96
|
+
begin
|
97
|
+
sleep(1)
|
98
|
+
job_result = client.job_result.find(response[:data][:id])
|
99
|
+
rescue ApiError => error
|
100
|
+
if error.response[:status] != 404
|
101
|
+
raise error
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
if job_result[:status] < 200 || job_result[:status] >= 300
|
107
|
+
error = ApiError.new(
|
108
|
+
status: job_result[:status],
|
109
|
+
body: JSON.dump(job_result[:payload])
|
110
|
+
)
|
111
|
+
|
112
|
+
puts "===="
|
113
|
+
puts error.message
|
114
|
+
puts "===="
|
115
|
+
|
116
|
+
raise error
|
117
|
+
end
|
118
|
+
|
119
|
+
if options.fetch(:deserialize_response, true)
|
120
|
+
JsonApiDeserializer.new(link.job_schema).deserialize(job_result[:payload])
|
121
|
+
else
|
122
|
+
job_result.payload
|
123
|
+
end
|
96
124
|
else
|
97
|
-
|
125
|
+
if options.fetch(:deserialize_response, true)
|
126
|
+
JsonApiDeserializer.new(link.target_schema).deserialize(response)
|
127
|
+
else
|
128
|
+
response
|
129
|
+
end
|
98
130
|
end
|
99
131
|
end
|
100
132
|
end
|
data/lib/dato/upload/file.rb
CHANGED
@@ -63,9 +63,14 @@ module Dato
|
|
63
63
|
|
64
64
|
http.request(request)
|
65
65
|
|
66
|
-
|
66
|
+
upload = client.uploads.create(path: upload_request[:id])
|
67
67
|
|
68
|
-
|
68
|
+
{
|
69
|
+
upload_id: upload['id'],
|
70
|
+
alt: nil,
|
71
|
+
title: nil,
|
72
|
+
custom_data: {},
|
73
|
+
}
|
69
74
|
end
|
70
75
|
|
71
76
|
def download_file(url)
|
data/lib/dato/version.rb
CHANGED
metadata
CHANGED
@@ -1,57 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dato
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stefano Verna
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-10-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rubyzip
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -319,7 +319,7 @@ dependencies:
|
|
319
319
|
- !ruby/object:Gem::Version
|
320
320
|
version: '0'
|
321
321
|
- !ruby/object:Gem::Dependency
|
322
|
-
name:
|
322
|
+
name: dato_json_schema
|
323
323
|
requirement: !ruby/object:Gem::Requirement
|
324
324
|
requirements:
|
325
325
|
- - ">="
|
@@ -414,6 +414,7 @@ files:
|
|
414
414
|
- lib/dato/local/field_type/string.rb
|
415
415
|
- lib/dato/local/field_type/text.rb
|
416
416
|
- lib/dato/local/field_type/theme.rb
|
417
|
+
- lib/dato/local/field_type/upload_id.rb
|
417
418
|
- lib/dato/local/field_type/video.rb
|
418
419
|
- lib/dato/local/item.rb
|
419
420
|
- lib/dato/local/items_repo.rb
|