dato 0.1.20 → 0.1.21

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cc70f9d4de2606b98ecce757e3f8e3120c5bc012
4
- data.tar.gz: a18ad2fad965780d04847a4525cfeb9489608514
3
+ metadata.gz: d6df40edef1f8ec088780bf5465eed032d37f853
4
+ data.tar.gz: b9a2c1fecc384e608aa7fd483fa8af4ad3a7058b
5
5
  SHA512:
6
- metadata.gz: 01e3d72680dfa9b1a0317d5b62669c9d62dde980a36f6ef6167360d09c97c6b11c2755ab58c25983fe561b599ec44d2d7d340cbe5c494e4a38aef167cf328a98
7
- data.tar.gz: 89424a1a2fb47d901eafb9c7b2bf55aa80b88152351447cf33d773ca7682abaedba01d573da4cebf267699d3be7db1810ae1c8c4671cf42f6a3e54e6ea6ab81f
6
+ metadata.gz: 96981103eb1441d212ad4932a3b595a1dca7f1b01fc47bfe4a78a385c96e612dcd685efab2603d8b82501f003f0389766f65b7aeba8081561c5114272392b8a8
7
+ data.tar.gz: 1b782b8acade363c81060cc31c29ca34fc93a7730f2d4b8df2363308986d6ff160d3d8e5d6e5f2cf84d5590eb505125f3ddc25fa00afcb032518c68df2039e5d
data/.rubocop.yml CHANGED
@@ -14,11 +14,16 @@ Metrics/ModuleLength:
14
14
  Enabled: false
15
15
 
16
16
  Metrics/AbcSize:
17
- Max: 18
17
+ Max: 20
18
18
 
19
19
  Metrics/LineLength:
20
20
  Exclude:
21
21
  - "spec/**/*"
22
22
  - "lib/dato/site/repo/*"
23
23
  - "lib/dato/account/repo/*"
24
+ - "lib/dato/account/repo/*"
24
25
  - "dato.gemspec"
26
+
27
+ Metrics/ParameterLists:
28
+ Exclude:
29
+ - "lib/dato/local/field_type/*"
data/Rakefile CHANGED
@@ -20,7 +20,7 @@ task :regenerate do
20
20
  BuildClient.new(
21
21
  open('https://site-api.datocms.com/docs/account-api-hyperschema.json').read,
22
22
  'account',
23
- %w(session item)
23
+ %w(session account#create account#reset_password)
24
24
  ).build
25
25
  end
26
26
 
data/dato.gemspec CHANGED
@@ -31,6 +31,7 @@ Gem::Specification.new do |spec|
31
31
  spec.add_development_dependency 'vcr'
32
32
  spec.add_development_dependency 'webmock'
33
33
  spec.add_development_dependency 'rubocop'
34
+ spec.add_development_dependency 'diff_dirs'
34
35
 
35
36
  spec.add_runtime_dependency 'faraday', ['>= 0.9.0']
36
37
  spec.add_runtime_dependency 'faraday_middleware', ['>= 0.9.0']
@@ -42,6 +42,8 @@ module Dato
42
42
 
43
43
  def request(*args)
44
44
  connection.send(*args).body.with_indifferent_access
45
+ rescue Faraday::ConnectionFailed => e
46
+ raise e
45
47
  rescue Faraday::ClientError => e
46
48
  raise ApiError, e
47
49
  end
@@ -5,16 +5,6 @@ module Dato
5
5
  module Account
6
6
  module Repo
7
7
  class Account < Base
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
8
  def update(resource_attributes)
19
9
  body = JsonApiSerializer.new(
20
10
  type: :account,
@@ -27,16 +17,6 @@ module Dato
27
17
  def find
28
18
  get_request '/account'
29
19
  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
20
  end
41
21
  end
42
22
  end
@@ -16,7 +16,7 @@ module Dato
16
16
  def create(resource_attributes)
17
17
  body = JsonApiSerializer.new(
18
18
  type: :site,
19
- attributes: %i(domain name notes template)
19
+ attributes: %i(domain internal_subdomain name notes template)
20
20
  ).serialize(resource_attributes)
21
21
 
22
22
  post_request '/sites', body
@@ -25,7 +25,7 @@ module Dato
25
25
  def update(site_id, resource_attributes)
26
26
  body = JsonApiSerializer.new(
27
27
  type: :site,
28
- attributes: %i(domain name notes)
28
+ attributes: %i(domain internal_subdomain name notes)
29
29
  ).serialize(resource_attributes, site_id)
30
30
 
31
31
  put_request "/sites/#{site_id}", body
data/lib/dato/dump/cli.rb CHANGED
@@ -12,7 +12,16 @@ module Dato
12
12
  option :token, default: ENV['DATO_API_TOKEN'], required: true
13
13
  def dump
14
14
  config_file = File.expand_path(options[:config])
15
- Runner.new(config_file, options[:token]).run
15
+
16
+ client = Dato::Site::Client.new(
17
+ options[:token],
18
+ extra_headers: {
19
+ 'X-Reason' => 'dump',
20
+ 'X-SSG' => SsgDetector.new(Dir.pwd).detect
21
+ }
22
+ )
23
+
24
+ Runner.new(config_file, client).run
16
25
  end
17
26
  end
18
27
  end
@@ -14,10 +14,10 @@ module Dato
14
14
  end
15
15
 
16
16
  def self.converter_for(format)
17
- case format
17
+ case format.to_sym
18
18
  when :toml
19
19
  Format::Toml
20
- when :yaml
20
+ when :yaml, :yml
21
21
  Format::Yaml
22
22
  end
23
23
  end
@@ -2,23 +2,25 @@
2
2
  require 'dato/dump/dsl/root'
3
3
  require 'dato/dump/operation/root'
4
4
  require 'dato/dump/ssg_detector'
5
+ require 'dato/local/loader'
5
6
 
6
7
  module Dato
7
8
  module Dump
8
9
  class Runner
9
- attr_reader :config_path, :api_token
10
+ attr_reader :config_path, :client, :destination_path
10
11
 
11
- def initialize(config_path, api_token)
12
+ def initialize(config_path, client, destination_path = Dir.pwd)
12
13
  @config_path = config_path
13
- @api_token = api_token
14
+ @client = client
15
+ @destination_path = destination_path
14
16
  end
15
17
 
16
18
  def run
17
- site.load
19
+ loader.load
18
20
 
19
21
  Dsl::Root.new(
20
22
  File.read(config_path),
21
- site.items_repo,
23
+ loader.items_repo,
22
24
  operation
23
25
  )
24
26
 
@@ -26,25 +28,11 @@ module Dato
26
28
  end
27
29
 
28
30
  def operation
29
- @operation ||= Operation::Root.new(Dir.pwd)
31
+ @operation ||= Operation::Root.new(destination_path)
30
32
  end
31
33
 
32
- def site
33
- @site ||= Dato::Local::Site.new(client)
34
- end
35
-
36
- def client
37
- @client ||= Dato::Site::Client.new(
38
- api_token,
39
- extra_headers: {
40
- 'X-Reason' => 'dump',
41
- 'X-SSG' => generator
42
- }
43
- )
44
- end
45
-
46
- def generator
47
- SsgDetector.new(Dir.pwd).detect
34
+ def loader
35
+ @loader ||= Dato::Local::Loader.new(client)
48
36
  end
49
37
  end
50
38
  end
@@ -31,6 +31,14 @@ module Dato
31
31
  def url(*args)
32
32
  file.to_url(*args)
33
33
  end
34
+
35
+ def to_hash
36
+ {
37
+ format: format,
38
+ size: size,
39
+ url: url
40
+ }
41
+ end
34
42
  end
35
43
  end
36
44
  end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+ require 'dato/local/field_type/seo'
3
+
4
+ module Dato
5
+ module Local
6
+ module FieldType
7
+ class GlobalSeo
8
+ attr_reader :site_name
9
+ attr_reader :title_suffix
10
+ attr_reader :twitter_account
11
+ attr_reader :facebook_page_url
12
+
13
+ def self.parse(value, _repo)
14
+ new(
15
+ value[:site_name],
16
+ value[:title_suffix],
17
+ value[:twitter_account],
18
+ value[:facebook_page_url],
19
+ value[:fallback_seo]
20
+ )
21
+ end
22
+
23
+ def initialize(
24
+ site_name,
25
+ title_suffix,
26
+ twitter_account,
27
+ facebook_page_url,
28
+ fallback_seo
29
+ )
30
+ @site_name = site_name
31
+ @title_suffix = title_suffix
32
+ @twitter_account = twitter_account
33
+ @facebook_page_url = facebook_page_url
34
+ @fallback_seo = fallback_seo
35
+ end
36
+
37
+ def fallback_seo
38
+ @fallback_seo && Seo.parse(@fallback_seo, nil)
39
+ end
40
+
41
+ def to_hash
42
+ {
43
+ site_name: site_name,
44
+ title_suffix: title_suffix,
45
+ twitter_account: twitter_account,
46
+ facebook_page_url: facebook_page_url,
47
+ fallback_seo: fallback_seo && fallback_seo.to_hash
48
+ }
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -26,6 +26,13 @@ module Dato
26
26
  def file
27
27
  super.ch('DPR', 'Width').auto('compress', 'format')
28
28
  end
29
+
30
+ def to_hash
31
+ super.merge(
32
+ width: width,
33
+ height: height
34
+ )
35
+ end
29
36
  end
30
37
  end
31
38
  end
@@ -17,6 +17,13 @@ module Dato
17
17
  def values
18
18
  [latitude, longitude]
19
19
  end
20
+
21
+ def to_hash
22
+ {
23
+ latitude: latitude,
24
+ longitude: longitude
25
+ }
26
+ end
20
27
  end
21
28
  end
22
29
  end
@@ -2,9 +2,13 @@
2
2
  module Dato
3
3
  module Local
4
4
  module FieldType
5
- class Links
5
+ class Links < Array
6
6
  def self.parse(ids, repo)
7
- ids.map { |id| repo.find(id) }
7
+ new(ids.map { |id| repo.find(id) })
8
+ end
9
+
10
+ def to_hash
11
+ map(&:to_hash)
8
12
  end
9
13
  end
10
14
  end
@@ -18,6 +18,14 @@ module Dato
18
18
  def image
19
19
  @image && Image.parse(@image, nil)
20
20
  end
21
+
22
+ def to_hash
23
+ {
24
+ title: title,
25
+ description: description,
26
+ image: image && image.to_hash
27
+ }
28
+ end
21
29
  end
22
30
  end
23
31
  end
@@ -6,49 +6,64 @@ module Dato
6
6
  module Local
7
7
  module FieldType
8
8
  class Video
9
- def self.parse(value, _repo)
10
- new(value)
11
- end
12
-
13
- def initialize(attributes)
14
- @attributes = attributes
15
- end
16
-
17
- def url
18
- @attributes[:url]
19
- end
20
-
21
- def thumbnail_url
22
- @attributes[:thumbnail_url]
23
- end
24
-
25
- def title
26
- @attributes[:title]
27
- end
9
+ attr_reader :url
10
+ attr_reader :thumbnail_url
11
+ attr_reader :title
12
+ attr_reader :width
13
+ attr_reader :height
14
+ attr_reader :provider
15
+ attr_reader :provider_url
16
+ attr_reader :provider_uid
28
17
 
29
- def width
30
- @attributes[:width]
31
- end
32
-
33
- def height
34
- @attributes[:height]
35
- end
36
-
37
- def provider
38
- @attributes[:provider]
39
- end
40
-
41
- def provider_url
42
- @attributes[:provider_url]
18
+ def self.parse(value, _repo)
19
+ new(
20
+ value[:url],
21
+ value[:thumbnail_url],
22
+ value[:title],
23
+ value[:width],
24
+ value[:height],
25
+ value[:provider],
26
+ value[:provider_url],
27
+ value[:provider_uid]
28
+ )
43
29
  end
44
30
 
45
- def provider_uid
46
- @attributes[:provider_uid]
31
+ def initialize(
32
+ url,
33
+ thumbnail_url,
34
+ title,
35
+ width,
36
+ height,
37
+ provider,
38
+ provider_url,
39
+ provider_uid
40
+ )
41
+ @url = url
42
+ @thumbnail_url = thumbnail_url
43
+ @title = title
44
+ @width = width
45
+ @height = height
46
+ @provider = provider
47
+ @provider_url = provider_url
48
+ @provider_uid = provider_uid
47
49
  end
48
50
 
49
51
  def iframe_embed(width = nil, height = nil)
50
52
  VideoEmbed.embed(url, { width: width, height: height }.compact)
51
53
  end
54
+
55
+ def to_hash
56
+ {
57
+ url: url,
58
+ thumbnail_url: thumbnail_url,
59
+ title: title,
60
+ width: width,
61
+ height: height,
62
+ provider: provider,
63
+ provider_url: provider_url,
64
+ provider_uid: provider_uid
65
+ }
66
+ end
52
67
  end
53
68
  end
54
69
  end
@@ -73,20 +73,25 @@ module Dato
73
73
  end
74
74
  alias inspect to_s
75
75
 
76
- def title_attribute
77
- title_field = fields.find do |field|
78
- field.field_type == 'string' &&
79
- field.appeareance[:type] == 'title'
80
- end
81
- title_field && title_field.api_key
82
- end
83
-
84
- def respond_to_missing?(method, include_private = false)
85
- field = fields.find { |f| f.api_key.to_sym == method }
86
- if field
87
- true
88
- else
89
- super
76
+ def to_hash
77
+ base = {
78
+ id: id,
79
+ item_type: item_type.api_key,
80
+ slug: slug(prefix_with_id: false),
81
+ slug_with_prefix: slug,
82
+ updated_at: updated_at
83
+ }
84
+
85
+ base[:position] = position if item_type.sortable
86
+
87
+ @attributes ||= fields.each_with_object(base) do |field, result|
88
+ value = send(field.api_key)
89
+
90
+ result[field.api_key.to_sym] = if value.respond_to?(:to_hash)
91
+ value.to_hash
92
+ else
93
+ value
94
+ end
90
95
  end
91
96
  end
92
97
 
@@ -126,6 +131,23 @@ module Dato
126
131
  end
127
132
  raise NoMethodError, message.join("\n")
128
133
  end
134
+
135
+ def respond_to_missing?(method, include_private = false)
136
+ field = fields.find { |f| f.api_key.to_sym == method }
137
+ if field
138
+ true
139
+ else
140
+ super
141
+ end
142
+ end
143
+
144
+ def title_attribute
145
+ title_field = fields.find do |field|
146
+ field.field_type == 'string' &&
147
+ field.appeareance[:type] == 'title'
148
+ end
149
+ title_field && title_field.api_key
150
+ end
129
151
  end
130
152
  end
131
153
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
  require 'active_support/core_ext/string'
3
3
  require 'dato/local/item'
4
+ require 'dato/local/site'
4
5
 
5
6
  module Dato
6
7
  module Local
@@ -28,6 +29,28 @@ module Dato
28
29
  end
29
30
  end
30
31
 
32
+ def site
33
+ Site.new(entities_repo.find_entities_of_type('site').first)
34
+ end
35
+
36
+ def available_locales
37
+ site.locales.map(&:to_sym)
38
+ end
39
+
40
+ def item_types
41
+ entities_repo.find_entities_of_type('item_type')
42
+ end
43
+
44
+ def items_of_type(item_type)
45
+ method, singleton = item_type_methods[item_type]
46
+
47
+ if singleton
48
+ [@collections_by_type[method]]
49
+ else
50
+ @collections_by_type[method]
51
+ end
52
+ end
53
+
31
54
  private
32
55
 
33
56
  def build_cache!
@@ -38,13 +61,13 @@ module Dato
38
61
  def build_item_type_methods!
39
62
  @item_type_methods = {}
40
63
 
41
- singleton_keys = singleton_item_type_entities.map(&:api_key)
42
- collection_keys = collection_item_type_entities.map(&:api_key)
43
- .map(&:pluralize)
64
+ singleton_keys = singleton_item_types.map(&:api_key)
65
+ collection_keys = collection_item_types.map(&:api_key)
66
+ .map(&:pluralize)
44
67
 
45
68
  clashing_keys = singleton_keys & collection_keys
46
69
 
47
- item_type_entities.each do |item_type|
70
+ item_types.each do |item_type|
48
71
  singleton = item_type.singleton
49
72
  pluralized_api_key = item_type.api_key.pluralize
50
73
  method = singleton ? item_type.api_key : pluralized_api_key
@@ -59,14 +82,14 @@ module Dato
59
82
  end
60
83
 
61
84
  def build_collections_by_type!
62
- item_type_entities.each do |item_type|
85
+ item_types.each do |item_type|
63
86
  method, singleton = item_type_methods[item_type]
64
87
 
65
88
  @collections_by_type[method] = if singleton
66
- nil
67
- else
68
- ItemCollection.new
69
- end
89
+ nil
90
+ else
91
+ ItemCollection.new
92
+ end
70
93
  end
71
94
 
72
95
  item_entities.each do |item_entity|
@@ -83,20 +106,16 @@ module Dato
83
106
  end
84
107
  end
85
108
 
86
- def item_type_entities
87
- entities_repo.find_entities_of_type('item_type')
88
- end
89
-
90
109
  def item_entities
91
110
  entities_repo.find_entities_of_type('item')
92
111
  end
93
112
 
94
- def singleton_item_type_entities
95
- item_type_entities.select(&:singleton)
113
+ def singleton_item_types
114
+ item_types.select(&:singleton)
96
115
  end
97
116
 
98
- def collection_item_type_entities
99
- item_type_entities - singleton_item_type_entities
117
+ def collection_item_types
118
+ item_types - singleton_item_types
100
119
  end
101
120
 
102
121
  def method_missing(method, *arguments, &block)
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+ require 'dato/local/entities_repo'
3
+ require 'dato/local/items_repo'
4
+
5
+ module Dato
6
+ module Local
7
+ class Loader
8
+ attr_reader :client
9
+ attr_reader :entities_repo
10
+ attr_reader :items_repo
11
+
12
+ def initialize(client)
13
+ @client = client
14
+ @entities_repo = EntitiesRepo.new
15
+ @items_repo = ItemsRepo.new(@entities_repo)
16
+ end
17
+
18
+ def load
19
+ @entities_repo = EntitiesRepo.new(site, all_items)
20
+ @items_repo = ItemsRepo.new(@entities_repo)
21
+ end
22
+
23
+ private
24
+
25
+ def site
26
+ include = [
27
+ 'item_types',
28
+ 'item_types.fields'
29
+ ]
30
+ client.request(:get, '/site', include: include)
31
+ end
32
+
33
+ def all_items
34
+ items_per_page = 500
35
+ base_response = client.request(:get, '/items', 'page[limit]' => 1)
36
+
37
+ pages = (base_response[:meta][:total_count] / items_per_page.to_f).ceil
38
+ base_response[:data] = []
39
+
40
+ pages.times do |page|
41
+ base_response[:data] += client.request(
42
+ :get,
43
+ '/items',
44
+ 'page[offset]' => items_per_page * page,
45
+ 'page[limit]' => items_per_page
46
+ )[:data]
47
+ end
48
+
49
+ base_response
50
+ end
51
+ end
52
+ end
53
+ end
@@ -1,56 +1,60 @@
1
1
  # frozen_string_literal: true
2
- require 'dato/local/entities_repo'
3
- require 'dato/local/items_repo'
2
+ require 'forwardable'
3
+ require 'active_support/inflector/transliterate'
4
+ require 'active_support/hash_with_indifferent_access'
4
5
 
5
6
  module Dato
6
7
  module Local
7
8
  class Site
8
- attr_reader :client
9
- attr_reader :entities_repo
10
- attr_reader :items_repo
11
-
12
- def initialize(client)
13
- @client = client
14
- @entities_repo = EntitiesRepo.new
15
- @items_repo = ItemsRepo.new(@entities_repo)
9
+ extend Forwardable
10
+
11
+ attr_reader :entity
12
+ def_delegators :entity, :id, :name, :locales, :theme_hue, :domain,
13
+ :internal_domain, :no_index
14
+
15
+ def initialize(entity)
16
+ @entity = entity
16
17
  end
17
18
 
18
- def load
19
- @entities_repo = EntitiesRepo.new(site, all_items)
20
- @items_repo = ItemsRepo.new(@entities_repo)
19
+ def global_seo
20
+ read_attribute(:global_seo, FieldType::GlobalSeo, locales.size > 1)
21
21
  end
22
22
 
23
- def entity
24
- @entities_repo.find_entities_of_type('site').first
23
+ def favicon
24
+ read_attribute(:favicon, FieldType::Image, false)
25
25
  end
26
26
 
27
- private
27
+ def to_s
28
+ "#<Site id=#{id} site_name=#{site_name}>"
29
+ end
30
+ alias inspect to_s
28
31
 
29
- def site
30
- include = [
31
- 'item_types',
32
- 'item_types.fields'
32
+ def to_hash
33
+ attributes = [
34
+ :id, :name, :locales, :theme_hue, :domain, :internal_domain,
35
+ :no_index, :global_seo, :favicon
33
36
  ]
34
- client.request(:get, '/site', include: include)
35
- end
36
37
 
37
- def all_items
38
- items_per_page = 500
39
- base_response = client.request(:get, '/items', 'page[limit]' => 1)
38
+ attributes.each_with_object({}) do |attribute, result|
39
+ value = send(attribute)
40
+ result[attribute] = if value.respond_to?(:to_hash)
41
+ value.to_hash
42
+ else
43
+ value
44
+ end
45
+ end
46
+ end
40
47
 
41
- pages = (base_response[:meta][:total_count] / items_per_page.to_f).ceil
42
- base_response[:data] = []
48
+ private
43
49
 
44
- pages.times do |page|
45
- base_response[:data] += client.request(
46
- :get,
47
- '/items',
48
- 'page[offset]' => items_per_page * page,
49
- 'page[limit]' => items_per_page
50
- )[:data]
51
- end
50
+ def read_attribute(method, type_klass, localized)
51
+ value = if localized
52
+ (entity.send(method) || {})[I18n.locale]
53
+ else
54
+ entity.send(method)
55
+ end
52
56
 
53
- base_response
57
+ value && type_klass.parse(value, @items_repo)
54
58
  end
55
59
  end
56
60
  end
data/lib/dato/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Dato
3
- VERSION = '0.1.20'
3
+ VERSION = '0.1.21'
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.1.20
4
+ version: 0.1.21
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-09-07 00:00:00.000000000 Z
11
+ date: 2016-09-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -136,6 +136,20 @@ dependencies:
136
136
  - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: diff_dirs
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: faraday
141
155
  requirement: !ruby/object:Gem::Requirement
@@ -330,6 +344,7 @@ files:
330
344
  - lib/dato/local/field_type/date_time.rb
331
345
  - lib/dato/local/field_type/file.rb
332
346
  - lib/dato/local/field_type/float.rb
347
+ - lib/dato/local/field_type/global_seo.rb
333
348
  - lib/dato/local/field_type/image.rb
334
349
  - lib/dato/local/field_type/integer.rb
335
350
  - lib/dato/local/field_type/lat_lon.rb
@@ -342,6 +357,7 @@ files:
342
357
  - lib/dato/local/item.rb
343
358
  - lib/dato/local/items_repo.rb
344
359
  - lib/dato/local/json_api_entity.rb
360
+ - lib/dato/local/loader.rb
345
361
  - lib/dato/local/site.rb
346
362
  - lib/dato/site/client.rb
347
363
  - lib/dato/site/repo/base.rb