dato 0.1.1 → 0.1.2
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/.gitignore +1 -0
- data/README.md +3 -1
- data/Rakefile +14 -3
- data/dato.gemspec +3 -0
- data/lib/dato.rb +3 -1
- data/lib/dato/account/client.rb +67 -0
- data/lib/dato/account/repo/account.rb +44 -0
- data/lib/dato/account/repo/base.rb +27 -0
- data/lib/dato/account/repo/site.rb +41 -0
- data/lib/dato/site/client.rb +76 -0
- data/lib/dato/site/repo/base.rb +26 -0
- data/lib/dato/site/repo/field.rb +42 -0
- data/lib/dato/site/repo/item.rb +53 -0
- data/lib/dato/site/repo/item_type.rb +43 -0
- data/lib/dato/site/repo/menu_item.rb +46 -0
- data/lib/dato/site/repo/site.rb +24 -0
- data/lib/dato/site/repo/upload_request.rb +20 -0
- data/lib/dato/site/repo/user.rb +52 -0
- data/lib/dato/version.rb +1 -1
- metadata +58 -11
- data/lib/dato/client.rb +0 -73
- data/lib/dato/repo/base.rb +0 -24
- data/lib/dato/repo/field.rb +0 -40
- data/lib/dato/repo/item.rb +0 -44
- data/lib/dato/repo/item_type.rb +0 -41
- data/lib/dato/repo/menu_item.rb +0 -45
- data/lib/dato/repo/site.rb +0 -22
- data/lib/dato/repo/upload_request.rb +0 -18
- data/lib/dato/repo/user.rb +0 -50
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d2cfedd8e15769b9218672800af0046479d30ccc
|
4
|
+
data.tar.gz: eb04df8bdb2301f4359dbf138b7a285e42071499
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 427934ad134d83a54495b354d8cf7b49b74278f7970b17ba8780eb73e0db49ca8d1c5d52c3df9c69561cf3a476f72b85384da243c3442b510ffc8845b63627cc
|
7
|
+
data.tar.gz: 3e5092deff45594a4539c7c757a90d5697273089775cb9436648fadd1d493ac1b10739cf29e28376907953350a1a542a4eb060537fa3d36dac0050138eab3e07
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
#
|
1
|
+
# DatoCMS Ruby Client
|
2
|
+
|
3
|
+
[](https://travis-ci.org/datocms/ruby-datocms-client)
|
2
4
|
|
3
5
|
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/dato`. To experiment with that code, run `bin/console` for an interactive prompt.
|
4
6
|
|
data/Rakefile
CHANGED
@@ -8,7 +8,18 @@ RSpec::Core::RakeTask.new(:spec)
|
|
8
8
|
|
9
9
|
task :default => :spec
|
10
10
|
|
11
|
-
task :
|
12
|
-
|
13
|
-
|
11
|
+
task :build_repos do
|
12
|
+
downloader = DownloadSchema.new("y32upcTKLupUjXiC9nFW", "182")
|
13
|
+
|
14
|
+
BuildClient.new(
|
15
|
+
downloader.schema("backend-hyperschema.json"),
|
16
|
+
"site",
|
17
|
+
%w(session item)
|
18
|
+
).build
|
19
|
+
|
20
|
+
BuildClient.new(
|
21
|
+
downloader.schema("frontend-hyperschema.json"),
|
22
|
+
"account",
|
23
|
+
%w(session item)
|
24
|
+
).build
|
14
25
|
end
|
data/dato.gemspec
CHANGED
@@ -24,6 +24,9 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_development_dependency "rspec", "~> 3.0"
|
25
25
|
spec.add_development_dependency "rubyzip"
|
26
26
|
spec.add_development_dependency "json_schema"
|
27
|
+
spec.add_development_dependency "simplecov"
|
28
|
+
spec.add_development_dependency "vcr"
|
29
|
+
spec.add_development_dependency "webmock"
|
27
30
|
|
28
31
|
spec.add_runtime_dependency "faraday", [">= 0.9.0"]
|
29
32
|
spec.add_runtime_dependency "faraday_middleware", [">= 0.9.0"]
|
data/lib/dato.rb
CHANGED
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'faraday_middleware'
|
3
|
+
require 'json'
|
4
|
+
require 'active_support/core_ext/hash/indifferent_access'
|
5
|
+
|
6
|
+
require 'dato/account/repo/account'
|
7
|
+
require 'dato/account/repo/site'
|
8
|
+
|
9
|
+
module Dato
|
10
|
+
module Account
|
11
|
+
class Client
|
12
|
+
REPOS = {
|
13
|
+
account: Repo::Account,
|
14
|
+
sites: Repo::Site,
|
15
|
+
}
|
16
|
+
|
17
|
+
attr_reader :token, :domain, :schema
|
18
|
+
|
19
|
+
def initialize(token, domain: 'https://account-api.datocms.com')
|
20
|
+
@domain = domain
|
21
|
+
@token = token
|
22
|
+
end
|
23
|
+
|
24
|
+
REPOS.each do |method_name, repo_klass|
|
25
|
+
define_method method_name do
|
26
|
+
instance_variable_set(
|
27
|
+
"@#{method_name}",
|
28
|
+
instance_variable_get("@#{method_name}") ||
|
29
|
+
repo_klass.new(self)
|
30
|
+
)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def request(*args)
|
35
|
+
begin
|
36
|
+
connection.send(*args).body.with_indifferent_access
|
37
|
+
rescue Faraday::ClientError => e
|
38
|
+
puts e.response
|
39
|
+
body = JSON.parse(e.response[:body])
|
40
|
+
puts JSON.pretty_generate(body)
|
41
|
+
raise e
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def connection
|
48
|
+
options = {
|
49
|
+
url: domain,
|
50
|
+
headers: {
|
51
|
+
'Accept' => "application/json",
|
52
|
+
'Content-Type' => "application/json",
|
53
|
+
'Authorization' => "Bearer #{@token}"
|
54
|
+
}
|
55
|
+
}
|
56
|
+
|
57
|
+
@connection ||= Faraday.new(options) do |c|
|
58
|
+
c.request :json
|
59
|
+
c.response :json, content_type: /\bjson$/
|
60
|
+
c.response :raise_error
|
61
|
+
c.use FaradayMiddleware::FollowRedirects
|
62
|
+
c.adapter :net_http
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'dato/account/repo/base'
|
2
|
+
|
3
|
+
module Dato
|
4
|
+
module Account
|
5
|
+
module Repo
|
6
|
+
class Account < Base
|
7
|
+
|
8
|
+
def create(resource_attributes)
|
9
|
+
body = JsonApiSerializer.new(
|
10
|
+
type: :account,
|
11
|
+
attributes: %i(email password),
|
12
|
+
required_attributes: %i(email password),
|
13
|
+
).serialize(resource_attributes)
|
14
|
+
|
15
|
+
post_request "/account", body
|
16
|
+
end
|
17
|
+
|
18
|
+
def update(resource_attributes)
|
19
|
+
body = JsonApiSerializer.new(
|
20
|
+
type: :account,
|
21
|
+
attributes: %i(email password),
|
22
|
+
).serialize(resource_attributes)
|
23
|
+
|
24
|
+
put_request "/account", body
|
25
|
+
end
|
26
|
+
|
27
|
+
def find()
|
28
|
+
get_request "/account"
|
29
|
+
end
|
30
|
+
|
31
|
+
def reset_password(resource_attributes)
|
32
|
+
body = JsonApiSerializer.new(
|
33
|
+
type: :account,
|
34
|
+
attributes: %i(email),
|
35
|
+
required_attributes: %i(email),
|
36
|
+
).serialize(resource_attributes)
|
37
|
+
|
38
|
+
post_request "/account/reset_password", body
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "dato/json_api_serializer"
|
2
|
+
require "dato/json_api_deserializer"
|
3
|
+
|
4
|
+
module Dato
|
5
|
+
module Account
|
6
|
+
module Repo
|
7
|
+
class Base
|
8
|
+
attr_reader :client
|
9
|
+
|
10
|
+
def initialize(client)
|
11
|
+
@client = client
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
%i(post put delete get).each do |method|
|
17
|
+
define_method "#{method}_request" do |*args|
|
18
|
+
JsonApiDeserializer.new.deserialize(
|
19
|
+
client.request(method, *args)
|
20
|
+
)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'dato/account/repo/base'
|
2
|
+
|
3
|
+
module Dato
|
4
|
+
module Account
|
5
|
+
module Repo
|
6
|
+
class Site < Base
|
7
|
+
|
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 name notes),
|
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 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
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'faraday_middleware'
|
3
|
+
require 'json'
|
4
|
+
require 'active_support/core_ext/hash/indifferent_access'
|
5
|
+
|
6
|
+
require 'dato/site/repo/field'
|
7
|
+
require 'dato/site/repo/item_type'
|
8
|
+
require 'dato/site/repo/menu_item'
|
9
|
+
require 'dato/site/repo/site'
|
10
|
+
require 'dato/site/repo/upload_request'
|
11
|
+
require 'dato/site/repo/user'
|
12
|
+
require 'dato/site/repo/item'
|
13
|
+
|
14
|
+
module Dato
|
15
|
+
module Site
|
16
|
+
class Client
|
17
|
+
REPOS = {
|
18
|
+
fields: Repo::Field,
|
19
|
+
item_types: Repo::ItemType,
|
20
|
+
menu_items: Repo::MenuItem,
|
21
|
+
site: Repo::Site,
|
22
|
+
upload_requests: Repo::UploadRequest,
|
23
|
+
users: Repo::User,
|
24
|
+
items: Repo::Item,
|
25
|
+
}
|
26
|
+
|
27
|
+
attr_reader :token, :domain, :schema
|
28
|
+
|
29
|
+
def initialize(token, domain: 'https://site-api.datocms.com')
|
30
|
+
@domain = domain
|
31
|
+
@token = token
|
32
|
+
end
|
33
|
+
|
34
|
+
REPOS.each do |method_name, repo_klass|
|
35
|
+
define_method method_name do
|
36
|
+
instance_variable_set(
|
37
|
+
"@#{method_name}",
|
38
|
+
instance_variable_get("@#{method_name}") ||
|
39
|
+
repo_klass.new(self)
|
40
|
+
)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def request(*args)
|
45
|
+
begin
|
46
|
+
connection.send(*args).body.with_indifferent_access
|
47
|
+
rescue Faraday::ClientError => e
|
48
|
+
body = JSON.parse(e.response[:body])
|
49
|
+
puts JSON.pretty_generate(body)
|
50
|
+
raise e
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def connection
|
57
|
+
options = {
|
58
|
+
url: domain,
|
59
|
+
headers: {
|
60
|
+
'Accept' => "application/json",
|
61
|
+
'Content-Type' => "application/json",
|
62
|
+
'Authorization' => "Bearer #{@token}"
|
63
|
+
}
|
64
|
+
}
|
65
|
+
|
66
|
+
@connection ||= Faraday.new(options) do |c|
|
67
|
+
c.request :json
|
68
|
+
c.response :json, content_type: /\bjson$/
|
69
|
+
c.response :raise_error
|
70
|
+
c.use FaradayMiddleware::FollowRedirects
|
71
|
+
c.adapter :net_http
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require "dato/json_api_serializer"
|
2
|
+
require "dato/json_api_deserializer"
|
3
|
+
|
4
|
+
module Dato
|
5
|
+
module Site
|
6
|
+
module Repo
|
7
|
+
class Base
|
8
|
+
attr_reader :client
|
9
|
+
|
10
|
+
def initialize(client)
|
11
|
+
@client = client
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
%i(post put delete get).each do |method|
|
17
|
+
define_method "#{method}_request" do |*args|
|
18
|
+
JsonApiDeserializer.new.deserialize(
|
19
|
+
client.request(method, *args)
|
20
|
+
)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'dato/site/repo/base'
|
2
|
+
|
3
|
+
module Dato
|
4
|
+
module Site
|
5
|
+
module Repo
|
6
|
+
class Field < Base
|
7
|
+
|
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 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
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'dato/site/repo/base'
|
2
|
+
require 'active_support/core_ext/hash/except'
|
3
|
+
|
4
|
+
module Dato
|
5
|
+
module Site
|
6
|
+
module Repo
|
7
|
+
class Item < Base
|
8
|
+
|
9
|
+
def create(resource_attributes)
|
10
|
+
body = JsonApiSerializer.new(
|
11
|
+
type: :item,
|
12
|
+
attributes: resource_attributes.keys - [:item_type, :id],
|
13
|
+
relationships: {
|
14
|
+
item_type: { collection: false, type: "item_type" }
|
15
|
+
},
|
16
|
+
required_relationships: %i(item_type),
|
17
|
+
).serialize(resource_attributes)
|
18
|
+
|
19
|
+
post_request "/items", body
|
20
|
+
end
|
21
|
+
|
22
|
+
def update(item_id, resource_attributes)
|
23
|
+
resource_attributes = resource_attributes.except(
|
24
|
+
:id,
|
25
|
+
:updated_at,
|
26
|
+
:is_valid,
|
27
|
+
:item_type
|
28
|
+
)
|
29
|
+
|
30
|
+
body = JsonApiSerializer.new(
|
31
|
+
type: :item,
|
32
|
+
attributes: resource_attributes.keys,
|
33
|
+
).serialize(resource_attributes, item_id)
|
34
|
+
|
35
|
+
put_request "/items/#{item_id}", body
|
36
|
+
end
|
37
|
+
|
38
|
+
def all(filters)
|
39
|
+
get_request "/items", filters
|
40
|
+
end
|
41
|
+
|
42
|
+
def find(item_id)
|
43
|
+
get_request "/items/#{item_id}"
|
44
|
+
end
|
45
|
+
|
46
|
+
def destroy(item_id)
|
47
|
+
delete_request "/items/#{item_id}"
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'dato/site/repo/base'
|
2
|
+
|
3
|
+
module Dato
|
4
|
+
module Site
|
5
|
+
module Repo
|
6
|
+
class ItemType < Base
|
7
|
+
|
8
|
+
def create(resource_attributes)
|
9
|
+
body = JsonApiSerializer.new(
|
10
|
+
type: :item_type,
|
11
|
+
attributes: %i(api_key name singleton sortable),
|
12
|
+
required_attributes: %i(api_key name singleton sortable),
|
13
|
+
).serialize(resource_attributes)
|
14
|
+
|
15
|
+
post_request "/item-types", body
|
16
|
+
end
|
17
|
+
|
18
|
+
def update(item_type_id, resource_attributes)
|
19
|
+
body = JsonApiSerializer.new(
|
20
|
+
type: :item_type,
|
21
|
+
attributes: %i(api_key name singleton sortable),
|
22
|
+
required_attributes: %i(api_key name singleton sortable),
|
23
|
+
).serialize(resource_attributes, item_type_id)
|
24
|
+
|
25
|
+
put_request "/item-types/#{item_type_id}", body
|
26
|
+
end
|
27
|
+
|
28
|
+
def all()
|
29
|
+
get_request "/item-types"
|
30
|
+
end
|
31
|
+
|
32
|
+
def find(item_type_id)
|
33
|
+
get_request "/item-types/#{item_type_id}"
|
34
|
+
end
|
35
|
+
|
36
|
+
def destroy(item_type_id)
|
37
|
+
delete_request "/item-types/#{item_type_id}"
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'dato/site/repo/base'
|
2
|
+
|
3
|
+
module Dato
|
4
|
+
module Site
|
5
|
+
module Repo
|
6
|
+
class MenuItem < Base
|
7
|
+
|
8
|
+
def create(resource_attributes)
|
9
|
+
body = JsonApiSerializer.new(
|
10
|
+
type: :menu_item,
|
11
|
+
attributes: %i(label position),
|
12
|
+
relationships: {:item_type=>{:collection=>false, :type=>:item_type}, :parent=>{:collection=>false, :type=>:menu_item}},
|
13
|
+
required_attributes: %i(label position),
|
14
|
+
).serialize(resource_attributes)
|
15
|
+
|
16
|
+
post_request "/menu-items", body
|
17
|
+
end
|
18
|
+
|
19
|
+
def update(menu_item_id, resource_attributes)
|
20
|
+
body = JsonApiSerializer.new(
|
21
|
+
type: :menu_item,
|
22
|
+
attributes: %i(label position),
|
23
|
+
relationships: {:item_type=>{:collection=>false, :type=>:item_type}, :parent=>{:collection=>false, :type=>:menu_item}},
|
24
|
+
required_attributes: %i(label position),
|
25
|
+
required_relationships: %i(item_type),
|
26
|
+
).serialize(resource_attributes, menu_item_id)
|
27
|
+
|
28
|
+
put_request "/menu-items/#{menu_item_id}", body
|
29
|
+
end
|
30
|
+
|
31
|
+
def all()
|
32
|
+
get_request "/menu-items"
|
33
|
+
end
|
34
|
+
|
35
|
+
def find(menu_item_id)
|
36
|
+
get_request "/menu-items/#{menu_item_id}"
|
37
|
+
end
|
38
|
+
|
39
|
+
def destroy(menu_item_id)
|
40
|
+
delete_request "/menu-items/#{menu_item_id}"
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'dato/site/repo/base'
|
2
|
+
|
3
|
+
module Dato
|
4
|
+
module Site
|
5
|
+
module Repo
|
6
|
+
class Site < Base
|
7
|
+
|
8
|
+
def find()
|
9
|
+
get_request "/site"
|
10
|
+
end
|
11
|
+
|
12
|
+
def update(resource_attributes)
|
13
|
+
body = JsonApiSerializer.new(
|
14
|
+
type: :site,
|
15
|
+
attributes: %i(deploy_adapter deploy_settings favicon global_seo locales name no_index theme_hue timezone),
|
16
|
+
).serialize(resource_attributes)
|
17
|
+
|
18
|
+
put_request "/site", body
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'dato/site/repo/base'
|
2
|
+
|
3
|
+
module Dato
|
4
|
+
module Site
|
5
|
+
module Repo
|
6
|
+
class UploadRequest < Base
|
7
|
+
|
8
|
+
def create(resource_attributes)
|
9
|
+
body = JsonApiSerializer.new(
|
10
|
+
type: :upload_request,
|
11
|
+
attributes: %i(filename),
|
12
|
+
).serialize(resource_attributes)
|
13
|
+
|
14
|
+
post_request "/upload-requests", body
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'dato/site/repo/base'
|
2
|
+
|
3
|
+
module Dato
|
4
|
+
module Site
|
5
|
+
module Repo
|
6
|
+
class User < Base
|
7
|
+
|
8
|
+
def create(resource_attributes)
|
9
|
+
body = JsonApiSerializer.new(
|
10
|
+
type: :user,
|
11
|
+
attributes: %i(email first_name is_admin last_name),
|
12
|
+
required_attributes: %i(email first_name last_name),
|
13
|
+
).serialize(resource_attributes)
|
14
|
+
|
15
|
+
post_request "/users", body
|
16
|
+
end
|
17
|
+
|
18
|
+
def update(user_id, resource_attributes)
|
19
|
+
body = JsonApiSerializer.new(
|
20
|
+
type: :user,
|
21
|
+
attributes: %i(email first_name is_admin last_name password),
|
22
|
+
).serialize(resource_attributes, user_id)
|
23
|
+
|
24
|
+
put_request "/users/#{user_id}", body
|
25
|
+
end
|
26
|
+
|
27
|
+
def all()
|
28
|
+
get_request "/users"
|
29
|
+
end
|
30
|
+
|
31
|
+
def find(user_id)
|
32
|
+
get_request "/users/#{user_id}"
|
33
|
+
end
|
34
|
+
|
35
|
+
def reset_password(resource_attributes)
|
36
|
+
body = JsonApiSerializer.new(
|
37
|
+
type: :user,
|
38
|
+
attributes: %i(email),
|
39
|
+
required_attributes: %i(email),
|
40
|
+
).serialize(resource_attributes)
|
41
|
+
|
42
|
+
post_request "/users/reset_password", body
|
43
|
+
end
|
44
|
+
|
45
|
+
def destroy(user_id)
|
46
|
+
delete_request "/users/#{user_id}"
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
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.2
|
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-07-
|
11
|
+
date: 2016-07-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -80,6 +80,48 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: simplecov
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: vcr
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: webmock
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
83
125
|
- !ruby/object:Gem::Dependency
|
84
126
|
name: faraday
|
85
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -141,17 +183,21 @@ files:
|
|
141
183
|
- bin/setup
|
142
184
|
- dato.gemspec
|
143
185
|
- lib/dato.rb
|
144
|
-
- lib/dato/client.rb
|
186
|
+
- lib/dato/account/client.rb
|
187
|
+
- lib/dato/account/repo/account.rb
|
188
|
+
- lib/dato/account/repo/base.rb
|
189
|
+
- lib/dato/account/repo/site.rb
|
145
190
|
- lib/dato/json_api_deserializer.rb
|
146
191
|
- lib/dato/json_api_serializer.rb
|
147
|
-
- lib/dato/
|
148
|
-
- lib/dato/repo/
|
149
|
-
- lib/dato/repo/
|
150
|
-
- lib/dato/repo/
|
151
|
-
- lib/dato/repo/
|
152
|
-
- lib/dato/repo/
|
153
|
-
- lib/dato/repo/
|
154
|
-
- lib/dato/repo/
|
192
|
+
- lib/dato/site/client.rb
|
193
|
+
- lib/dato/site/repo/base.rb
|
194
|
+
- lib/dato/site/repo/field.rb
|
195
|
+
- lib/dato/site/repo/item.rb
|
196
|
+
- lib/dato/site/repo/item_type.rb
|
197
|
+
- lib/dato/site/repo/menu_item.rb
|
198
|
+
- lib/dato/site/repo/site.rb
|
199
|
+
- lib/dato/site/repo/upload_request.rb
|
200
|
+
- lib/dato/site/repo/user.rb
|
155
201
|
- lib/dato/version.rb
|
156
202
|
homepage: https://github.com/datocms/ruby-datocms-client
|
157
203
|
licenses:
|
@@ -178,3 +224,4 @@ signing_key:
|
|
178
224
|
specification_version: 4
|
179
225
|
summary: Ruby client for DatoCMS API
|
180
226
|
test_files: []
|
227
|
+
has_rdoc:
|
data/lib/dato/client.rb
DELETED
@@ -1,73 +0,0 @@
|
|
1
|
-
require 'faraday'
|
2
|
-
require 'faraday_middleware'
|
3
|
-
require 'json'
|
4
|
-
require 'active_support/core_ext/hash/indifferent_access'
|
5
|
-
|
6
|
-
require 'dato/repo/field'
|
7
|
-
require 'dato/repo/item_type'
|
8
|
-
require 'dato/repo/menu_item'
|
9
|
-
require 'dato/repo/site'
|
10
|
-
require 'dato/repo/upload_request'
|
11
|
-
require 'dato/repo/user'
|
12
|
-
require 'dato/repo/item'
|
13
|
-
|
14
|
-
module Dato
|
15
|
-
class Client
|
16
|
-
REPOS = {
|
17
|
-
fields: Repo::Field,
|
18
|
-
item_types: Repo::ItemType,
|
19
|
-
menu_items: Repo::MenuItem,
|
20
|
-
site: Repo::Site,
|
21
|
-
upload_requests: Repo::UploadRequest,
|
22
|
-
users: Repo::User,
|
23
|
-
items: Repo::Item,
|
24
|
-
}
|
25
|
-
|
26
|
-
attr_reader :token, :domain, :schema
|
27
|
-
|
28
|
-
def initialize(token, domain: 'http://site-api.datocms.com')
|
29
|
-
@domain = domain
|
30
|
-
@token = token
|
31
|
-
end
|
32
|
-
|
33
|
-
REPOS.each do |method_name, repo_klass|
|
34
|
-
define_method method_name do
|
35
|
-
instance_variable_set(
|
36
|
-
"@#{method_name}",
|
37
|
-
instance_variable_get("@#{method_name}") ||
|
38
|
-
repo_klass.new(self)
|
39
|
-
)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def request(*args)
|
44
|
-
begin
|
45
|
-
connection.send(*args).body.with_indifferent_access
|
46
|
-
rescue Faraday::ClientError => e
|
47
|
-
body = JSON.parse(e.response[:body])
|
48
|
-
puts JSON.pretty_generate(body)
|
49
|
-
raise e
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
private
|
54
|
-
|
55
|
-
def connection
|
56
|
-
options = {
|
57
|
-
url: domain,
|
58
|
-
headers: {
|
59
|
-
'Accept' => "application/json",
|
60
|
-
'Content-Type' => "application/json",
|
61
|
-
'Authorization' => "Bearer #{@token}"
|
62
|
-
}
|
63
|
-
}
|
64
|
-
|
65
|
-
@connection ||= Faraday.new(options) do |c|
|
66
|
-
c.request :json
|
67
|
-
c.response :json, content_type: /\bjson$/
|
68
|
-
c.response :raise_error
|
69
|
-
c.adapter :net_http
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
data/lib/dato/repo/base.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
require "dato/json_api_serializer"
|
2
|
-
require "dato/json_api_deserializer"
|
3
|
-
|
4
|
-
module Dato
|
5
|
-
module Repo
|
6
|
-
class Base
|
7
|
-
attr_reader :client
|
8
|
-
|
9
|
-
def initialize(client)
|
10
|
-
@client = client
|
11
|
-
end
|
12
|
-
|
13
|
-
private
|
14
|
-
|
15
|
-
%i(post put delete get).each do |method|
|
16
|
-
define_method "#{method}_request" do |*args|
|
17
|
-
JsonApiDeserializer.new.deserialize(
|
18
|
-
client.request(method, *args)
|
19
|
-
)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
data/lib/dato/repo/field.rb
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'dato/repo/base'
|
2
|
-
|
3
|
-
module Dato
|
4
|
-
module Repo
|
5
|
-
class Field < Base
|
6
|
-
|
7
|
-
def create(item_type_id, resource_attributes)
|
8
|
-
body = JsonApiSerializer.new(
|
9
|
-
type: :field,
|
10
|
-
attributes: %i(api_key appeareance field_type hint label localized position validators),
|
11
|
-
required_attributes: %i(api_key appeareance field_type hint label localized position validators),
|
12
|
-
).serialize(resource_attributes)
|
13
|
-
|
14
|
-
post_request "/item-types/#{item_type_id}/fields", body
|
15
|
-
end
|
16
|
-
|
17
|
-
def update(field_id, resource_attributes)
|
18
|
-
body = JsonApiSerializer.new(
|
19
|
-
type: :field,
|
20
|
-
attributes: %i(api_key appeareance hint label localized position validators),
|
21
|
-
).serialize(resource_attributes, field_id)
|
22
|
-
|
23
|
-
put_request "/fields/#{field_id}", body
|
24
|
-
end
|
25
|
-
|
26
|
-
def all(item_type_id)
|
27
|
-
get_request "/item-types/#{item_type_id}/fields"
|
28
|
-
end
|
29
|
-
|
30
|
-
def find(field_id)
|
31
|
-
get_request "/fields/#{field_id}"
|
32
|
-
end
|
33
|
-
|
34
|
-
def destroy(field_id)
|
35
|
-
delete_request "/fields/#{field_id}"
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
data/lib/dato/repo/item.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
require 'dato/repo/base'
|
2
|
-
|
3
|
-
module Dato
|
4
|
-
module Repo
|
5
|
-
class Item < Base
|
6
|
-
|
7
|
-
def create(resource_attributes)
|
8
|
-
body = JsonApiSerializer.new(
|
9
|
-
type: :item,
|
10
|
-
attributes: resource_attributes.keys - [:item_type, :id],
|
11
|
-
relationships: {
|
12
|
-
item_type: { collection: false, type: "item_type" }
|
13
|
-
},
|
14
|
-
required_relationships: %i(item_type),
|
15
|
-
).serialize(resource_attributes)
|
16
|
-
|
17
|
-
post_request "/items", body
|
18
|
-
end
|
19
|
-
|
20
|
-
def update(item_id, resource_attributes)
|
21
|
-
body = JsonApiSerializer.new(
|
22
|
-
type: :item,
|
23
|
-
attributes: resource_attributes.keys - [:id],
|
24
|
-
).serialize(resource_attributes, item_id)
|
25
|
-
puts body
|
26
|
-
|
27
|
-
put_request "/items/#{item_id}", body
|
28
|
-
end
|
29
|
-
|
30
|
-
def all(filters)
|
31
|
-
get_request "/items", filters
|
32
|
-
end
|
33
|
-
|
34
|
-
def find(item_id)
|
35
|
-
get_request "/items/#{item_id}"
|
36
|
-
end
|
37
|
-
|
38
|
-
def destroy(item_id)
|
39
|
-
delete_request "/items/#{item_id}"
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
data/lib/dato/repo/item_type.rb
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'dato/repo/base'
|
2
|
-
|
3
|
-
module Dato
|
4
|
-
module Repo
|
5
|
-
class ItemType < Base
|
6
|
-
|
7
|
-
def create(resource_attributes)
|
8
|
-
body = JsonApiSerializer.new(
|
9
|
-
type: :item_type,
|
10
|
-
attributes: %i(api_key name singleton sortable),
|
11
|
-
required_attributes: %i(api_key name singleton sortable),
|
12
|
-
).serialize(resource_attributes)
|
13
|
-
|
14
|
-
post_request "/item-types", body
|
15
|
-
end
|
16
|
-
|
17
|
-
def update(item_type_id, resource_attributes)
|
18
|
-
body = JsonApiSerializer.new(
|
19
|
-
type: :item_type,
|
20
|
-
attributes: %i(api_key name singleton sortable),
|
21
|
-
required_attributes: %i(api_key name singleton sortable),
|
22
|
-
).serialize(resource_attributes, item_type_id)
|
23
|
-
|
24
|
-
put_request "/item-types/#{item_type_id}", body
|
25
|
-
end
|
26
|
-
|
27
|
-
def all()
|
28
|
-
get_request "/item-types"
|
29
|
-
end
|
30
|
-
|
31
|
-
def find(item_type_id)
|
32
|
-
get_request "/item-types/#{item_type_id}"
|
33
|
-
end
|
34
|
-
|
35
|
-
def destroy(item_type_id)
|
36
|
-
delete_request "/item-types/#{item_type_id}"
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
data/lib/dato/repo/menu_item.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
require 'dato/repo/base'
|
2
|
-
|
3
|
-
module Dato
|
4
|
-
module Repo
|
5
|
-
class MenuItem < Base
|
6
|
-
|
7
|
-
def create(resource_attributes)
|
8
|
-
body = JsonApiSerializer.new(
|
9
|
-
type: :menu_item,
|
10
|
-
attributes: %i(label position),
|
11
|
-
relationships: {:item_type=>{:collection=>false, :type=>:item_type}, :parent=>{:collection=>false, :type=>:menu_item}},
|
12
|
-
required_attributes: %i(label position),
|
13
|
-
required_relationships: %i(item_type),
|
14
|
-
).serialize(resource_attributes)
|
15
|
-
|
16
|
-
post_request "/menu-items", body
|
17
|
-
end
|
18
|
-
|
19
|
-
def update(menu_item_id, resource_attributes)
|
20
|
-
body = JsonApiSerializer.new(
|
21
|
-
type: :menu_item,
|
22
|
-
attributes: %i(label position),
|
23
|
-
relationships: {:item_type=>{:collection=>false, :type=>:item_type}, :parent=>{:collection=>false, :type=>:menu_item}},
|
24
|
-
required_attributes: %i(label position),
|
25
|
-
required_relationships: %i(item_type),
|
26
|
-
).serialize(resource_attributes, menu_item_id)
|
27
|
-
|
28
|
-
put_request "/menu-items/#{menu_item_id}", body
|
29
|
-
end
|
30
|
-
|
31
|
-
def all()
|
32
|
-
get_request "/menu-items"
|
33
|
-
end
|
34
|
-
|
35
|
-
def find(menu_item_id)
|
36
|
-
get_request "/menu-items/#{menu_item_id}"
|
37
|
-
end
|
38
|
-
|
39
|
-
def destroy(menu_item_id)
|
40
|
-
delete_request "/menu-items/#{menu_item_id}"
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
data/lib/dato/repo/site.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
require 'dato/repo/base'
|
2
|
-
|
3
|
-
module Dato
|
4
|
-
module Repo
|
5
|
-
class Site < Base
|
6
|
-
|
7
|
-
def find()
|
8
|
-
get_request "/site"
|
9
|
-
end
|
10
|
-
|
11
|
-
def update(resource_attributes)
|
12
|
-
body = JsonApiSerializer.new(
|
13
|
-
type: :site,
|
14
|
-
attributes: %i(deploy_adapter deploy_settings favicon global_seo locales name no_index theme_hue timezone),
|
15
|
-
).serialize(resource_attributes)
|
16
|
-
|
17
|
-
put_request "/site", body
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'dato/repo/base'
|
2
|
-
|
3
|
-
module Dato
|
4
|
-
module Repo
|
5
|
-
class UploadRequest < Base
|
6
|
-
|
7
|
-
def create(resource_attributes)
|
8
|
-
body = JsonApiSerializer.new(
|
9
|
-
type: :upload_request,
|
10
|
-
attributes: %i(filename),
|
11
|
-
).serialize(resource_attributes)
|
12
|
-
|
13
|
-
post_request "/upload-requests", body
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
data/lib/dato/repo/user.rb
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
require 'dato/repo/base'
|
2
|
-
|
3
|
-
module Dato
|
4
|
-
module Repo
|
5
|
-
class User < Base
|
6
|
-
|
7
|
-
def create(resource_attributes)
|
8
|
-
body = JsonApiSerializer.new(
|
9
|
-
type: :user,
|
10
|
-
attributes: %i(email first_name is_admin last_name),
|
11
|
-
required_attributes: %i(email first_name last_name),
|
12
|
-
).serialize(resource_attributes)
|
13
|
-
|
14
|
-
post_request "/users", body
|
15
|
-
end
|
16
|
-
|
17
|
-
def update(user_id, resource_attributes)
|
18
|
-
body = JsonApiSerializer.new(
|
19
|
-
type: :user,
|
20
|
-
attributes: %i(email first_name is_admin last_name password),
|
21
|
-
).serialize(resource_attributes, user_id)
|
22
|
-
|
23
|
-
put_request "/users/#{user_id}", body
|
24
|
-
end
|
25
|
-
|
26
|
-
def all()
|
27
|
-
get_request "/users"
|
28
|
-
end
|
29
|
-
|
30
|
-
def find(user_id)
|
31
|
-
get_request "/users/#{user_id}"
|
32
|
-
end
|
33
|
-
|
34
|
-
def reset_password(resource_attributes)
|
35
|
-
body = JsonApiSerializer.new(
|
36
|
-
type: :user,
|
37
|
-
attributes: %i(email),
|
38
|
-
required_attributes: %i(email),
|
39
|
-
).serialize(resource_attributes)
|
40
|
-
|
41
|
-
post_request "/users/reset_password", body
|
42
|
-
end
|
43
|
-
|
44
|
-
def destroy(user_id)
|
45
|
-
delete_request "/users/#{user_id}"
|
46
|
-
end
|
47
|
-
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|