dato 0.5.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,51 +1,14 @@
1
1
  # frozen_string_literal: true
2
- require 'faraday'
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
- REPOS = {
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
- attr_reader :token, :base_url, :schema, :extra_headers
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
@@ -45,7 +45,7 @@ module Dato
45
45
  end
46
46
 
47
47
  def upload
48
- upload_request = client.upload_requests.create(filename: filename)
48
+ upload_request = client.upload_request.create(filename: filename)
49
49
  uri = URI.parse(upload_request[:url])
50
50
 
51
51
  request = Net::HTTP::Put.new(
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Dato
3
- VERSION = '0.5.1'
3
+ VERSION = '0.6.0'
4
4
  end
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.5.1
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-05-18 00:00:00.000000000 Z
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/account/repo/account.rb
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
@@ -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
@@ -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
@@ -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