dato 0.5.1 → 0.6.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 +4 -4
- data/Rakefile +0 -38
- data/lib/dato/account/client.rb +3 -70
- data/lib/dato/api_client.rb +98 -0
- data/lib/dato/json_api_serializer.rb +72 -17
- data/lib/dato/paginator.rb +33 -0
- data/lib/dato/repo.rb +91 -0
- data/lib/dato/site/client.rb +3 -91
- data/lib/dato/upload/file.rb +1 -1
- data/lib/dato/version.rb +1 -1
- metadata +5 -20
- data/lib/dato/account/repo/account.rb +0 -23
- data/lib/dato/account/repo/base.rb +0 -27
- data/lib/dato/account/repo/deploy_event.rb +0 -18
- data/lib/dato/account/repo/site.rb +0 -49
- data/lib/dato/site/paginator.rb +0 -35
- data/lib/dato/site/repo/access_token.rb +0 -47
- data/lib/dato/site/repo/base.rb +0 -27
- data/lib/dato/site/repo/deploy_event.rb +0 -18
- data/lib/dato/site/repo/field.rb +0 -41
- data/lib/dato/site/repo/item.rb +0 -80
- data/lib/dato/site/repo/item_type.rb +0 -50
- data/lib/dato/site/repo/menu_item.rb +0 -44
- data/lib/dato/site/repo/role.rb +0 -42
- data/lib/dato/site/repo/search_result.rb +0 -14
- data/lib/dato/site/repo/site.rb +0 -23
- data/lib/dato/site/repo/upload.rb +0 -59
- data/lib/dato/site/repo/upload_request.rb +0 -19
- data/lib/dato/site/repo/user.rb +0 -44
data/lib/dato/site/client.rb
CHANGED
@@ -1,51 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require '
|
3
|
-
require 'faraday_middleware'
|
4
|
-
require 'json'
|
5
|
-
require 'active_support/core_ext/hash/indifferent_access'
|
6
|
-
|
7
|
-
require 'dato/version'
|
8
|
-
|
9
|
-
require 'dato/site/repo/field'
|
10
|
-
require 'dato/site/repo/item_type'
|
11
|
-
require 'dato/site/repo/menu_item'
|
12
|
-
require 'dato/site/repo/site'
|
13
|
-
require 'dato/site/repo/upload_request'
|
14
|
-
require 'dato/site/repo/user'
|
15
|
-
require 'dato/site/repo/item'
|
16
|
-
require 'dato/site/repo/role'
|
17
|
-
require 'dato/site/repo/access_token'
|
18
|
-
require 'dato/site/repo/upload'
|
19
|
-
|
2
|
+
require 'dato/api_client'
|
20
3
|
require 'dato/upload/file'
|
21
4
|
require 'dato/upload/image'
|
22
|
-
require 'dato/api_error'
|
23
|
-
|
24
|
-
require 'cacert'
|
25
5
|
|
26
6
|
module Dato
|
27
7
|
module Site
|
28
8
|
class Client
|
29
|
-
|
30
|
-
fields: Repo::Field,
|
31
|
-
item_types: Repo::ItemType,
|
32
|
-
menu_items: Repo::MenuItem,
|
33
|
-
site: Repo::Site,
|
34
|
-
upload_requests: Repo::UploadRequest,
|
35
|
-
users: Repo::User,
|
36
|
-
items: Repo::Item,
|
37
|
-
roles: Repo::Role,
|
38
|
-
access_tokens: Repo::AccessToken,
|
39
|
-
uploads: Repo::Upload
|
40
|
-
}.freeze
|
9
|
+
include ApiClient
|
41
10
|
|
42
|
-
|
43
|
-
|
44
|
-
def initialize(token, options = {})
|
45
|
-
@token = token
|
46
|
-
@base_url = options[:base_url] || 'https://site-api.datocms.com'
|
47
|
-
@extra_headers = options[:extra_headers] || {}
|
48
|
-
end
|
11
|
+
json_schema 'site-api'
|
49
12
|
|
50
13
|
def upload_file(path_or_url)
|
51
14
|
file = Upload::File.new(self, path_or_url)
|
@@ -56,57 +19,6 @@ module Dato
|
|
56
19
|
file = Upload::Image.new(self, path_or_url)
|
57
20
|
file.upload
|
58
21
|
end
|
59
|
-
|
60
|
-
REPOS.each do |method_name, repo_klass|
|
61
|
-
define_method method_name do
|
62
|
-
instance_variable_set(
|
63
|
-
"@#{method_name}",
|
64
|
-
instance_variable_get("@#{method_name}") ||
|
65
|
-
repo_klass.new(self)
|
66
|
-
)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
def request(*args)
|
71
|
-
connection.send(*args).body.with_indifferent_access
|
72
|
-
rescue Faraday::SSLError => e
|
73
|
-
raise e if ENV['SSL_CERT_FILE'] == Cacert.pem
|
74
|
-
|
75
|
-
Cacert.set_in_env
|
76
|
-
request(*args)
|
77
|
-
rescue Faraday::ConnectionFailed, Faraday::TimeoutError => e
|
78
|
-
puts e.message
|
79
|
-
raise e
|
80
|
-
rescue Faraday::ClientError => e
|
81
|
-
error = ApiError.new(e)
|
82
|
-
puts '===='
|
83
|
-
puts error.message
|
84
|
-
puts '===='
|
85
|
-
raise error
|
86
|
-
end
|
87
|
-
|
88
|
-
private
|
89
|
-
|
90
|
-
def connection
|
91
|
-
options = {
|
92
|
-
url: base_url,
|
93
|
-
headers: extra_headers.merge(
|
94
|
-
'Accept' => 'application/json',
|
95
|
-
'Content-Type' => 'application/json',
|
96
|
-
'Authorization' => "Bearer #{@token}",
|
97
|
-
'User-Agent' => "ruby-client v#{Dato::VERSION}",
|
98
|
-
'X-Api-Version' => "2"
|
99
|
-
)
|
100
|
-
}
|
101
|
-
|
102
|
-
@connection ||= Faraday.new(options) do |c|
|
103
|
-
c.request :json
|
104
|
-
c.response :json, content_type: /\bjson$/
|
105
|
-
c.response :raise_error
|
106
|
-
c.use FaradayMiddleware::FollowRedirects
|
107
|
-
c.adapter :net_http
|
108
|
-
end
|
109
|
-
end
|
110
22
|
end
|
111
23
|
end
|
112
24
|
end
|
data/lib/dato/upload/file.rb
CHANGED
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.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stefano Verna
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-06-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -370,10 +370,7 @@ files:
|
|
370
370
|
- exe/dato
|
371
371
|
- lib/dato.rb
|
372
372
|
- lib/dato/account/client.rb
|
373
|
-
- lib/dato/
|
374
|
-
- lib/dato/account/repo/base.rb
|
375
|
-
- lib/dato/account/repo/deploy_event.rb
|
376
|
-
- lib/dato/account/repo/site.rb
|
373
|
+
- lib/dato/api_client.rb
|
377
374
|
- lib/dato/api_error.rb
|
378
375
|
- lib/dato/cli.rb
|
379
376
|
- lib/dato/dump/dsl/add_to_data_file.rb
|
@@ -420,21 +417,9 @@ files:
|
|
420
417
|
- lib/dato/local/json_api_entity.rb
|
421
418
|
- lib/dato/local/loader.rb
|
422
419
|
- lib/dato/local/site.rb
|
420
|
+
- lib/dato/paginator.rb
|
421
|
+
- lib/dato/repo.rb
|
423
422
|
- lib/dato/site/client.rb
|
424
|
-
- lib/dato/site/paginator.rb
|
425
|
-
- lib/dato/site/repo/access_token.rb
|
426
|
-
- lib/dato/site/repo/base.rb
|
427
|
-
- lib/dato/site/repo/deploy_event.rb
|
428
|
-
- lib/dato/site/repo/field.rb
|
429
|
-
- lib/dato/site/repo/item.rb
|
430
|
-
- lib/dato/site/repo/item_type.rb
|
431
|
-
- lib/dato/site/repo/menu_item.rb
|
432
|
-
- lib/dato/site/repo/role.rb
|
433
|
-
- lib/dato/site/repo/search_result.rb
|
434
|
-
- lib/dato/site/repo/site.rb
|
435
|
-
- lib/dato/site/repo/upload.rb
|
436
|
-
- lib/dato/site/repo/upload_request.rb
|
437
|
-
- lib/dato/site/repo/user.rb
|
438
423
|
- lib/dato/upload/file.rb
|
439
424
|
- lib/dato/upload/image.rb
|
440
425
|
- lib/dato/utils/favicon_tags_builder.rb
|
@@ -1,23 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'dato/account/repo/base'
|
3
|
-
|
4
|
-
module Dato
|
5
|
-
module Account
|
6
|
-
module Repo
|
7
|
-
class Account < Base
|
8
|
-
def update(resource_attributes)
|
9
|
-
body = JsonApiSerializer.new(
|
10
|
-
type: :account,
|
11
|
-
attributes: %i(email password)
|
12
|
-
).serialize(resource_attributes)
|
13
|
-
|
14
|
-
put_request '/account', body
|
15
|
-
end
|
16
|
-
|
17
|
-
def find
|
18
|
-
get_request '/account'
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'dato/json_api_serializer'
|
3
|
-
require 'dato/json_api_deserializer'
|
4
|
-
|
5
|
-
module Dato
|
6
|
-
module Account
|
7
|
-
module Repo
|
8
|
-
class Base
|
9
|
-
attr_reader :client
|
10
|
-
|
11
|
-
def initialize(client)
|
12
|
-
@client = client
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
%i(post put delete get).each do |method|
|
18
|
-
define_method "#{method}_request" do |*args|
|
19
|
-
JsonApiDeserializer.new.deserialize(
|
20
|
-
client.request(method, *args)
|
21
|
-
)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'dato/account/repo/base'
|
3
|
-
|
4
|
-
module Dato
|
5
|
-
module Account
|
6
|
-
module Repo
|
7
|
-
class DeployEvent < Base
|
8
|
-
def all
|
9
|
-
get_request '/deploy-events'
|
10
|
-
end
|
11
|
-
|
12
|
-
def find(deploy_event_id)
|
13
|
-
get_request "/deploy-events/#{deploy_event_id}"
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'dato/account/repo/base'
|
3
|
-
|
4
|
-
module Dato
|
5
|
-
module Account
|
6
|
-
module Repo
|
7
|
-
class Site < Base
|
8
|
-
def find(site_id)
|
9
|
-
get_request "/sites/#{site_id}"
|
10
|
-
end
|
11
|
-
|
12
|
-
def all
|
13
|
-
get_request '/sites'
|
14
|
-
end
|
15
|
-
|
16
|
-
def create(resource_attributes)
|
17
|
-
body = JsonApiSerializer.new(
|
18
|
-
type: :site,
|
19
|
-
attributes: %i(domain internal_subdomain name notes ssg template)
|
20
|
-
).serialize(resource_attributes)
|
21
|
-
|
22
|
-
post_request '/sites', body
|
23
|
-
end
|
24
|
-
|
25
|
-
def update(site_id, resource_attributes)
|
26
|
-
body = JsonApiSerializer.new(
|
27
|
-
type: :site,
|
28
|
-
attributes: %i(domain internal_subdomain name notes)
|
29
|
-
).serialize(resource_attributes, site_id)
|
30
|
-
|
31
|
-
put_request "/sites/#{site_id}", body
|
32
|
-
end
|
33
|
-
|
34
|
-
def destroy(site_id)
|
35
|
-
delete_request "/sites/#{site_id}"
|
36
|
-
end
|
37
|
-
|
38
|
-
def duplicate(site_id, resource_attributes)
|
39
|
-
body = JsonApiSerializer.new(
|
40
|
-
type: :site,
|
41
|
-
attributes: %i(name)
|
42
|
-
).serialize(resource_attributes)
|
43
|
-
|
44
|
-
post_request "/sites/#{site_id}/duplicate", body
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
data/lib/dato/site/paginator.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
module Dato
|
2
|
-
module Site
|
3
|
-
class Paginator
|
4
|
-
def initialize(client, base_endpoint, filters)
|
5
|
-
@client, @base_endpoint, @filters = client, base_endpoint, filters
|
6
|
-
end
|
7
|
-
|
8
|
-
def response
|
9
|
-
items_per_page = 100
|
10
|
-
|
11
|
-
base_response = @client.request(
|
12
|
-
:get, @base_endpoint, @filters.dup.merge('page[limit]' => items_per_page)
|
13
|
-
)
|
14
|
-
|
15
|
-
extra_pages = (
|
16
|
-
base_response[:meta][:total_count] / items_per_page.to_f
|
17
|
-
).ceil - 1
|
18
|
-
|
19
|
-
extra_pages.times do |page|
|
20
|
-
base_response[:data] += @client.request(
|
21
|
-
:get,
|
22
|
-
@base_endpoint,
|
23
|
-
@filters.dup.merge(
|
24
|
-
'page[offset]' => items_per_page * (page + 1),
|
25
|
-
'page[limit]' => items_per_page
|
26
|
-
)
|
27
|
-
)[:data]
|
28
|
-
end
|
29
|
-
|
30
|
-
base_response
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
@@ -1,47 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'dato/site/repo/base'
|
3
|
-
|
4
|
-
module Dato
|
5
|
-
module Site
|
6
|
-
module Repo
|
7
|
-
class AccessToken < Base
|
8
|
-
def create(resource_attributes)
|
9
|
-
body = JsonApiSerializer.new(
|
10
|
-
type: :access_token,
|
11
|
-
attributes: %i(name),
|
12
|
-
relationships: { role: { collection: false, type: :role } },
|
13
|
-
required_attributes: %i(name)
|
14
|
-
).serialize(resource_attributes)
|
15
|
-
|
16
|
-
post_request '/access_tokens', body
|
17
|
-
end
|
18
|
-
|
19
|
-
def update(user_id, resource_attributes)
|
20
|
-
body = JsonApiSerializer.new(
|
21
|
-
type: :access_token,
|
22
|
-
attributes: %i(name),
|
23
|
-
relationships: { role: { collection: false, type: :role } }
|
24
|
-
).serialize(resource_attributes, user_id)
|
25
|
-
|
26
|
-
put_request "/access_tokens/#{user_id}", body
|
27
|
-
end
|
28
|
-
|
29
|
-
def all
|
30
|
-
get_request '/access_tokens'
|
31
|
-
end
|
32
|
-
|
33
|
-
def find(user_id)
|
34
|
-
get_request "/access_tokens/#{user_id}"
|
35
|
-
end
|
36
|
-
|
37
|
-
def regenerate_token(user_id)
|
38
|
-
post_request "/access_tokens/#{user_id}/regenerate_token"
|
39
|
-
end
|
40
|
-
|
41
|
-
def destroy(user_id)
|
42
|
-
delete_request "/access_tokens/#{user_id}"
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
data/lib/dato/site/repo/base.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'dato/json_api_serializer'
|
3
|
-
require 'dato/json_api_deserializer'
|
4
|
-
|
5
|
-
module Dato
|
6
|
-
module Site
|
7
|
-
module Repo
|
8
|
-
class Base
|
9
|
-
attr_reader :client
|
10
|
-
|
11
|
-
def initialize(client)
|
12
|
-
@client = client
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
%i(post put delete get).each do |method|
|
18
|
-
define_method "#{method}_request" do |*args|
|
19
|
-
JsonApiDeserializer.new.deserialize(
|
20
|
-
client.request(method, *args)
|
21
|
-
)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'dato/site/repo/base'
|
3
|
-
|
4
|
-
module Dato
|
5
|
-
module Site
|
6
|
-
module Repo
|
7
|
-
class DeployEvent < Base
|
8
|
-
def all
|
9
|
-
get_request '/deploy-events'
|
10
|
-
end
|
11
|
-
|
12
|
-
def find(deploy_event_id)
|
13
|
-
get_request "/deploy-events/#{deploy_event_id}"
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
data/lib/dato/site/repo/field.rb
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'dato/site/repo/base'
|
3
|
-
|
4
|
-
module Dato
|
5
|
-
module Site
|
6
|
-
module Repo
|
7
|
-
class Field < Base
|
8
|
-
def create(item_type_id, resource_attributes)
|
9
|
-
body = JsonApiSerializer.new(
|
10
|
-
type: :field,
|
11
|
-
attributes: %i(api_key appeareance field_type hint label localized position validators),
|
12
|
-
required_attributes: %i(api_key appeareance field_type hint label localized position validators)
|
13
|
-
).serialize(resource_attributes)
|
14
|
-
|
15
|
-
post_request "/item-types/#{item_type_id}/fields", body
|
16
|
-
end
|
17
|
-
|
18
|
-
def update(field_id, resource_attributes)
|
19
|
-
body = JsonApiSerializer.new(
|
20
|
-
type: :field,
|
21
|
-
attributes: %i(api_key appeareance field_type hint label localized position validators)
|
22
|
-
).serialize(resource_attributes, field_id)
|
23
|
-
|
24
|
-
put_request "/fields/#{field_id}", body
|
25
|
-
end
|
26
|
-
|
27
|
-
def all(item_type_id)
|
28
|
-
get_request "/item-types/#{item_type_id}/fields"
|
29
|
-
end
|
30
|
-
|
31
|
-
def find(field_id)
|
32
|
-
get_request "/fields/#{field_id}"
|
33
|
-
end
|
34
|
-
|
35
|
-
def destroy(field_id)
|
36
|
-
delete_request "/fields/#{field_id}"
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|