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.
@@ -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