dato 0.7.6 → 0.7.13

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 118ea91dc3caa834412e342a2350b594c94880bbbafba6f37d2b6041b5570acc
4
- data.tar.gz: 64e1a53c6292a41ad4e361e4b01bdff416d09e3acebbd133afc123c2f80fe74b
3
+ metadata.gz: 8911d925c9122207b1b12804415839e1a60c6f42212523f8a9d8590a0ac3b609
4
+ data.tar.gz: fcb4dfbed9102fd7c037c635bb0a436ea8c5671964e51e7dcf1c9b7345f25471
5
5
  SHA512:
6
- metadata.gz: a93f7dccda38b47237a585a7274754b2a3c370918c476e5556bc42ec13a2326a53e594f25b48fdc240a456f707d71dedfe9d9587a978ff38a177c398d5627ffa
7
- data.tar.gz: b74c22160ba51d703705213b12c60d795eb499855fc6179a8b2c576ff8e32d1cd7bb94747a7e3a6a5bd957ff527e34964ca01eb47dbfdc078f16519272dfb6a4
6
+ metadata.gz: 127d2b647b57bbf530f3def61fefd302f763ec0ead035dc0f7a3d53cb6d6646948a994a75c5b6f22533e815e35a1a27a1d1f6cb0b85f2eedb86e8985971bbc87
7
+ data.tar.gz: 9709363be3b119354890d3d1de8a16bd8a020faf3e58692022e50de1ba25dcd4af6c49f1962e03cd8e8b82f35334140efa61cd7ff9f3f9835b39c5901b3e904b
@@ -1,3 +1,50 @@
1
+ # 0.7.13
2
+
3
+ Add option to pass a project's environment:
4
+
5
+ ```ruby
6
+ require "dato"
7
+ client = Dato::Site::Client.new("YOUR-API-KEY", environment: 'sandbox-foobar')
8
+ ```
9
+
10
+ # 0.7.12
11
+
12
+ Introduces `Dato::Utils::BuildModularBlock` class to help creating modular blocks.
13
+
14
+ An example usage can be:
15
+
16
+ ```ruby
17
+ description = [
18
+ Dato::Utils::BuildModularBlock.build(
19
+ item_type: "1235",
20
+ name: "Best dog in the world",
21
+ year: "2020",
22
+ picture: picture
23
+ )
24
+ ]
25
+
26
+ record = client.items.create(
27
+ item_type: "1234", # model ID
28
+ name: "Gigio",
29
+ description: description
30
+ )
31
+ ```
32
+
33
+ Find more info [on the documentation](https://www.datocms.com/docs/content-management-api/resources/item/create).
34
+
35
+ # 0.7.11 (not released)
36
+
37
+ * Updated specs cassettes after `appeareance -> appearance` typo fix
38
+ * Some style changes
39
+
40
+ # 0.7.10
41
+
42
+ * Fixed SEO title retrieval. Now it fallbacks to default SEO title is item title is blank
43
+
44
+ # 0.7.9
45
+
46
+ * Added new attributes to uploads
47
+
1
48
  # 0.7.0
2
49
 
3
50
  * Real-time events are now much more granular and the gem avoids downloading all the content every time a change occurs
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2019 Cantiere Creativo SRL
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -8,6 +8,7 @@ require 'dato/local/site'
8
8
  require 'dato/cli'
9
9
  require 'dato/utils/seo_tags_builder'
10
10
  require 'dato/utils/favicon_tags_builder'
11
+ require 'dato/utils/build_modular_block'
11
12
 
12
13
  module Dato
13
14
  end
@@ -20,7 +20,7 @@ module Dato
20
20
  base.extend ClassMethods
21
21
 
22
22
  base.class_eval do
23
- attr_reader :token, :base_url, :schema, :extra_headers
23
+ attr_reader :token, :environment, :base_url, :schema, :extra_headers
24
24
  end
25
25
  end
26
26
 
@@ -29,27 +29,28 @@ module Dato
29
29
  define_method(:initialize) do |token, options = {}|
30
30
  @token = token
31
31
  @base_url = options[:base_url] || "https://#{subdomain}.datocms.com"
32
+ @environment = options[:environment]
32
33
  @extra_headers = options[:extra_headers] || {}
33
34
  end
34
35
 
36
+ # FOR DEV
37
+ # "http://#{subdomain}.lvh.me:3001/docs/#{subdomain}-hyperschema.json"
35
38
  response = Faraday.get(
36
- # FOR DEV
37
- # "http://#{subdomain}.lvh.me:3001/docs/#{subdomain}-hyperschema.json"
38
39
  "https://#{subdomain}.datocms.com/docs/#{subdomain}-hyperschema.json"
39
40
  )
40
41
 
41
42
  schema = JsonSchema.parse!(JSON.parse(response.body))
42
43
  schema.expand_references!
43
44
 
44
- schema.definitions.each do |type, schema|
45
- is_collection = schema.links.select { |x| x.rel === 'instances' }.any?
45
+ schema.definitions.each do |type, obj|
46
+ is_collection = obj.links.select { |x| x.rel == 'instances' }.any?
46
47
  namespace = is_collection ? type.pluralize : type
47
48
 
48
49
  define_method(namespace) do
49
50
  instance_variable_set(
50
51
  "@#{namespace}",
51
52
  instance_variable_get("@#{namespace}") ||
52
- Dato::Repo.new(self, type, schema)
53
+ Dato::Repo.new(self, type, obj)
53
54
  )
54
55
  end
55
56
  end
@@ -76,16 +77,10 @@ module Dato
76
77
  method, absolute_path, body, params = args
77
78
 
78
79
  response = connection.send(method, absolute_path, body) do |c|
79
- if params
80
- c.params = params
81
- end
80
+ c.params = params if params
82
81
  end
83
82
 
84
- if response.body.is_a?(Hash)
85
- response.body.with_indifferent_access
86
- else
87
- nil
88
- end
83
+ response.body.with_indifferent_access if response.body.is_a?(Hash)
89
84
  rescue Faraday::SSLError => e
90
85
  raise e if ENV['SSL_CERT_FILE'] == Cacert.pem
91
86
 
@@ -101,14 +96,14 @@ module Dato
101
96
  sleep(to_wait + 1)
102
97
  request(*args)
103
98
  elsif e.response[:status] == 422 && batch_data_validation?(e.response)
104
- puts "Validating items, waiting 1 second and retrying..."
99
+ puts 'Validating items, waiting 1 second and retrying...'
105
100
  sleep(1)
106
101
  request(*args)
107
102
  else
108
103
  error = ApiError.new(e.response)
109
- puts "===="
104
+ puts '===='
110
105
  puts error.message
111
- puts "===="
106
+ puts '===='
112
107
  raise error
113
108
  end
114
109
  end
@@ -123,12 +118,12 @@ module Dato
123
118
  end
124
119
 
125
120
  return false unless body
126
- return false unless body["data"]
121
+ return false unless body['data']
127
122
 
128
- body["data"].any? do |e|
129
- e["attributes"]["code"] == "BATCH_DATA_VALIDATION_IN_PROGRESS"
123
+ body['data'].any? do |e|
124
+ e['attributes']['code'] == 'BATCH_DATA_VALIDATION_IN_PROGRESS'
130
125
  end
131
- rescue
126
+ rescue StandardError
132
127
  false
133
128
  end
134
129
 
@@ -141,9 +136,13 @@ module Dato
141
136
  'X-Api-Version' => '3'
142
137
  }
143
138
 
139
+ if environment
140
+ default_headers.merge!('X-Environment' => environment)
141
+ end
142
+
144
143
  options = {
145
144
  url: base_url,
146
- headers: default_headers.merge(extra_headers),
145
+ headers: default_headers.merge(extra_headers)
147
146
  }
148
147
 
149
148
  @connection ||= Faraday.new(options) do |c|
@@ -11,8 +11,10 @@ module Dato
11
11
  desc 'dump', 'dumps DatoCMS content into local files'
12
12
  option :config, default: 'dato.config.rb'
13
13
  option :token, default: ENV['DATO_API_TOKEN'], required: true
14
+ option :environment, type: :string, required: false
14
15
  option :preview, default: false, type: :boolean
15
16
  option :watch, default: false, type: :boolean
17
+
16
18
  def dump
17
19
  config_file = File.expand_path(options[:config])
18
20
  watch_mode = options[:watch]
@@ -20,6 +22,7 @@ module Dato
20
22
 
21
23
  client = Dato::Site::Client.new(
22
24
  options[:token],
25
+ environment: options[:environment],
23
26
  extra_headers: {
24
27
  'X-Reason' => 'dump',
25
28
  'X-SSG' => Dump::SsgDetector.new(Dir.pwd).detect
@@ -38,6 +38,10 @@ module Dato
38
38
  @imgix_host = imgix_host
39
39
  end
40
40
 
41
+ def id
42
+ @upload.id
43
+ end
44
+
41
45
  def path
42
46
  @upload.path
43
47
  end
@@ -70,19 +74,138 @@ module Dato
70
74
  @upload.copyright
71
75
  end
72
76
 
77
+ def filename
78
+ @upload.filename
79
+ end
80
+
81
+ def basename
82
+ @upload.basename
83
+ end
84
+
73
85
  def alt
74
- default_metadata = @upload.default_field_metadata.deep_stringify_keys.fetch(I18n.locale.to_s, {})
75
- @alt || default_metadata["alt"]
86
+ default_metadata = @upload.default_field_metadata.deep_stringify_keys
87
+ .fetch(I18n.locale.to_s, {})
88
+ @alt || default_metadata['alt']
76
89
  end
77
90
 
78
91
  def title
79
- default_metadata = @upload.default_field_metadata.deep_stringify_keys.fetch(I18n.locale.to_s, {})
80
- @title || default_metadata["title"]
92
+ default_metadata = @upload.default_field_metadata.deep_stringify_keys
93
+ .fetch(I18n.locale.to_s, {})
94
+ @title || default_metadata['title']
81
95
  end
82
96
 
83
97
  def custom_data
84
- default_metadata = @upload.default_field_metadata.deep_stringify_keys.fetch(I18n.locale.to_s, {})
85
- @custom_data.merge(default_metadata.fetch("custom_data", {}))
98
+ default_metadata = @upload.default_field_metadata.deep_stringify_keys
99
+ .fetch(I18n.locale.to_s, {})
100
+ @custom_data.merge(default_metadata.fetch('custom_data', {}))
101
+ end
102
+
103
+ def tags
104
+ @upload.tags
105
+ end
106
+
107
+ def smart_tags
108
+ @upload.smart_tags
109
+ end
110
+
111
+ def is_image
112
+ @upload.is_image
113
+ end
114
+
115
+ def exif_info
116
+ @upload.exif_info
117
+ end
118
+
119
+ def mime_type
120
+ @upload.mime_type
121
+ end
122
+
123
+ def colors
124
+ @upload.colors.map { |color| Color.parse(color, nil) }
125
+ end
126
+
127
+ def blurhash
128
+ @upload.blurhash
129
+ end
130
+
131
+ class VideoAttributes
132
+ def initialize(upload)
133
+ @upload = upload
134
+ end
135
+
136
+ def mux_playback_id
137
+ @upload.mux_playback_id
138
+ end
139
+
140
+ def frame_rate
141
+ @upload.frame_rate
142
+ end
143
+
144
+ def duration
145
+ @upload.duration
146
+ end
147
+
148
+ def streaming_url
149
+ "https://stream.mux.com/#{@upload.mux_playback_id}.m3u8"
150
+ end
151
+
152
+ def thumbnail_url(format = :jpg)
153
+ if format == :gif
154
+ "https://image.mux.com/#{@upload.mux_playback_id}/animated.gif"
155
+ else
156
+ "https://image.mux.com/#{@upload.mux_playback_id}/thumbnail.#{format}"
157
+ end
158
+ end
159
+
160
+ def mp4_url(options = nil)
161
+ @upload.mux_mp4_highest_res or
162
+ return nil
163
+
164
+ if options && options[:exact_res]
165
+ if options[:exact_res] == :low
166
+ raw_mp4_url("low")
167
+ elsif options[:exact_res] == :medium
168
+ if %w[medium high].include?(@upload.mux_mp4_highest_res)
169
+ raw_mp4_url("medium")
170
+ end
171
+ elsif @upload.mux_mp4_highest_res == :high
172
+ raw_mp4_url("high")
173
+ end
174
+ elsif options && options[:res] == :low
175
+ raw_mp4_url("low")
176
+ elsif options && options[:res] == :medium
177
+ if %w[low medium].include?(@upload.mux_mp4_highest_res)
178
+ raw_mp4_url(@upload.mux_mp4_highest_res)
179
+ else
180
+ raw_mp4_url("medium")
181
+ end
182
+ else
183
+ raw_mp4_url(@upload.mux_mp4_highest_res)
184
+ end
185
+ end
186
+
187
+ def to_hash
188
+ {
189
+ mux_playback_id: mux_playback_id,
190
+ frame_rate: frame_rate,
191
+ duration: duration,
192
+ streaming_url: streaming_url,
193
+ thumbnail_url: thumbnail_url,
194
+ mp4_url: mp4_url,
195
+ }
196
+ end
197
+
198
+ private
199
+
200
+ def raw_mp4_url(res)
201
+ "https://stream.mux.com/#{@upload.mux_playback_id}/#{res}.mp4"
202
+ end
203
+ end
204
+
205
+ def video
206
+ if @upload.mux_playback_id
207
+ VideoAttributes.new(@upload)
208
+ end
86
209
  end
87
210
 
88
211
  def file
@@ -99,6 +222,7 @@ module Dato
99
222
 
100
223
  def to_hash(*_args)
101
224
  {
225
+ id: id,
102
226
  format: format,
103
227
  size: size,
104
228
  width: width,
@@ -106,7 +230,18 @@ module Dato
106
230
  alt: alt,
107
231
  title: title,
108
232
  custom_data: custom_data,
109
- url: url
233
+ url: url,
234
+ copyright: copyright,
235
+ tags: tags,
236
+ smart_tags: smart_tags,
237
+ filename: filename,
238
+ basename: basename,
239
+ is_image: is_image,
240
+ exif_info: exif_info,
241
+ mime_type: mime_type,
242
+ colors: colors.map(&:to_hash),
243
+ blurhash: blurhash,
244
+ video: video && video.to_hash
110
245
  }
111
246
  end
112
247
  end
@@ -43,7 +43,13 @@ module Dato
43
43
 
44
44
  return if pusher && pusher.connected
45
45
 
46
- pusher.subscribe("private-site-#{site_id}")
46
+ channel_name = if client.environment
47
+ "private-site-#{site_id}-environment-#{environment}"
48
+ else
49
+ "private-site-#{site_id}"
50
+ end
51
+
52
+ pusher.subscribe(channel_name)
47
53
 
48
54
  bind_on_site_upsert(&block)
49
55
  bind_on_item_destroy(&block)
@@ -66,7 +72,8 @@ module Dato
66
72
  bind_on("site:upsert", block) do |data|
67
73
  threads = [
68
74
  Thread.new { Thread.current[:output] = site },
69
- Thread.new { Thread.current[:output] = all_items }
75
+ Thread.new { Thread.current[:output] = all_items },
76
+ Thread.new { Thread.current[:output] = all_uploads }
70
77
  ]
71
78
 
72
79
  results = threads.map do |t|
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'dato/api_client'
4
4
  require 'dato/upload/file'
5
- require 'dato/upload/image'
5
+ require 'dato/upload/create_upload_path'
6
6
 
7
7
  module Dato
8
8
  module Site
@@ -11,13 +11,18 @@ module Dato
11
11
 
12
12
  json_schema 'site-api'
13
13
 
14
- def upload_file(path_or_url)
15
- file = Upload::File.new(self, path_or_url)
14
+ def create_upload_path(path_or_url)
15
+ file = Upload::CreateUploadPath.new(self, path_or_url)
16
+ file.upload_path
17
+ end
18
+
19
+ def upload_file(path_or_url, upload_attributes = {}, field_attributes = {})
20
+ file = Upload::File.new(self, path_or_url, upload_attributes, field_attributes)
16
21
  file.upload
17
22
  end
18
23
 
19
- def upload_image(path_or_url)
20
- file = Upload::Image.new(self, path_or_url)
24
+ def upload_image(path_or_url, upload_attributes = {}, field_attributes = {})
25
+ file = Upload::File.new(self, path_or_url, upload_attributes, field_attributes)
21
26
  file.upload
22
27
  end
23
28
 
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'mime/types'
4
+ require 'tempfile'
5
+ require 'addressable'
6
+ require 'net/http'
7
+
8
+ module Dato
9
+ module Upload
10
+ class CreateUploadPath
11
+ attr_reader :client, :source
12
+
13
+ def initialize(client, source)
14
+ @client = client
15
+ @source = source
16
+ end
17
+
18
+ def file
19
+ @file ||= if http_source?
20
+ uri = Addressable::URI.parse(source)
21
+ ext = ::File.extname(uri.path).downcase
22
+ tempfile = Tempfile.new(['file', ext])
23
+ tempfile.binmode
24
+ tempfile.write(download_file(source))
25
+ tempfile.rewind
26
+ tempfile
27
+ else
28
+ ::File.new(::File.expand_path(source))
29
+ end
30
+ end
31
+
32
+ def http_source?
33
+ uri = Addressable::URI.parse(source)
34
+ uri.scheme == 'http' || uri.scheme == 'https'
35
+ rescue Addressable::URI::InvalidURIError
36
+ false
37
+ end
38
+
39
+ def filename
40
+ if http_source?
41
+ ::File.basename(source)
42
+ else
43
+ ::File.basename(file.path)
44
+ end
45
+ end
46
+
47
+ def upload_path
48
+ upload_request = client.upload_request.create(filename: filename)
49
+ uri = URI.parse(upload_request[:url])
50
+
51
+ mime_type = MIME::Types.of(filename).first
52
+
53
+ request = Net::HTTP::Put.new(uri)
54
+ if mime_type
55
+ request.add_field("Content-Type", mime_type.to_s)
56
+ end
57
+ request.body = file.read
58
+
59
+ http = Net::HTTP.new(uri.host, uri.port)
60
+ http.use_ssl = true
61
+
62
+ http.request(request)
63
+
64
+ upload_request[:id]
65
+ end
66
+
67
+ def download_file(url)
68
+ connection = Faraday.new do |c|
69
+ c.response :raise_error
70
+ c.use FaradayMiddleware::FollowRedirects
71
+ c.adapter :net_http
72
+ end
73
+ connection.get(url).body
74
+ rescue Faraday::Error => e
75
+ puts "Error during uploading #{url}"
76
+ raise e
77
+ end
78
+ end
79
+ end
80
+ end
81
+
@@ -1,88 +1,31 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'mime/types'
4
- require 'tempfile'
5
- require 'addressable'
6
- require 'net/http'
3
+ require 'dato/upload/create_upload_path'
7
4
 
8
5
  module Dato
9
6
  module Upload
10
7
  class File
11
- IMAGE_FORMATS = %w[png jpg jpeg gif].freeze
8
+ attr_reader :client, :source, :upload_attributes, :field_attributes
12
9
 
13
- attr_reader :client, :source
14
-
15
- def initialize(client, source)
10
+ def initialize(client, source, upload_attributes = {}, field_attributes = {})
16
11
  @client = client
17
12
  @source = source
18
- end
19
-
20
- def file
21
- @file ||= if http_source?
22
- uri = Addressable::URI.parse(source)
23
- ext = ::File.extname(uri.path).downcase
24
- tempfile = Tempfile.new(['file', ext])
25
- tempfile.binmode
26
- tempfile.write(download_file(source))
27
- tempfile.rewind
28
- tempfile
29
- else
30
- ::File.new(::File.expand_path(source))
31
- end
32
- end
33
-
34
- def http_source?
35
- uri = Addressable::URI.parse(source)
36
- uri.scheme == 'http' || uri.scheme == 'https'
37
- rescue Addressable::URI::InvalidURIError
38
- false
39
- end
40
-
41
- def filename
42
- if http_source?
43
- ::File.basename(source)
44
- else
45
- ::File.basename(file.path)
46
- end
13
+ @upload_attributes = upload_attributes
14
+ @field_attributes = field_attributes
47
15
  end
48
16
 
49
17
  def upload
50
- upload_request = client.upload_request.create(filename: filename)
51
- uri = URI.parse(upload_request[:url])
18
+ upload_path = CreateUploadPath.new(client, source).upload_path
52
19
 
53
- mime_type = MIME::Types.of(filename).first
54
-
55
- request = Net::HTTP::Put.new(uri)
56
- if mime_type
57
- request.add_field("Content-Type", mime_type.to_s)
58
- end
59
- request.body = file.read
60
-
61
- http = Net::HTTP.new(uri.host, uri.port)
62
- http.use_ssl = true
63
-
64
- http.request(request)
65
-
66
- upload = client.uploads.create(path: upload_request[:id])
20
+ upload = client.uploads.create(
21
+ upload_attributes.merge(path: upload_path)
22
+ )
67
23
 
68
24
  {
69
- upload_id: upload['id'],
70
25
  alt: nil,
71
26
  title: nil,
72
27
  custom_data: {},
73
- }
74
- end
75
-
76
- def download_file(url)
77
- connection = Faraday.new do |c|
78
- c.response :raise_error
79
- c.use FaradayMiddleware::FollowRedirects
80
- c.adapter :net_http
81
- end
82
- connection.get(url).body
83
- rescue Faraday::Error => e
84
- puts "Error during uploading #{url}"
85
- raise e
28
+ }.merge(field_attributes).merge(upload_id: upload['id'])
86
29
  end
87
30
  end
88
31
  end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'dato/json_api_serializer'
4
+
5
+ module Dato
6
+ module Utils
7
+ module BuildModularBlock
8
+ def self.build(unserialized_body)
9
+ json_api_serializer = JsonApiSerializer.new('item', nil)
10
+ attributes = json_api_serializer.serialized_attributes(unserialized_body)
11
+
12
+ payload = {
13
+ type: 'item',
14
+ attributes: attributes,
15
+ relationships: {
16
+ item_type: {
17
+ data: {
18
+ id: unserialized_body[:item_type],
19
+ type: 'item_type',
20
+ },
21
+ },
22
+ },
23
+ }
24
+
25
+ payload[:id] = unserialized_body[:id] if unserialized_body[:id]
26
+
27
+ payload
28
+ end
29
+ end
30
+ end
31
+ end
@@ -28,7 +28,7 @@ module Dato
28
28
  fallback_seo_value = fallback_seo &&
29
29
  fallback_seo.send(attribute)
30
30
 
31
- item_seo_value || alternative || fallback_seo_value
31
+ item_seo_value.presence || alternative.presence || fallback_seo_value
32
32
  end
33
33
 
34
34
  def tag(tag_name, attributes)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dato
4
- VERSION = '0.7.6'
4
+ VERSION = '0.7.13'
5
5
  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.7.6
4
+ version: 0.7.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefano Verna
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-10-09 00:00:00.000000000 Z
11
+ date: 2020-05-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -362,6 +362,7 @@ files:
362
362
  - CHANGELOG.md
363
363
  - CODE_OF_CONDUCT.md
364
364
  - Gemfile
365
+ - LICENSE
365
366
  - LICENSE.txt
366
367
  - README.md
367
368
  - Rakefile
@@ -425,8 +426,10 @@ files:
425
426
  - lib/dato/paginator.rb
426
427
  - lib/dato/repo.rb
427
428
  - lib/dato/site/client.rb
429
+ - lib/dato/upload/create_upload_path.rb
428
430
  - lib/dato/upload/file.rb
429
431
  - lib/dato/upload/image.rb
432
+ - lib/dato/utils/build_modular_block.rb
430
433
  - lib/dato/utils/favicon_tags_builder.rb
431
434
  - lib/dato/utils/locale_value.rb
432
435
  - lib/dato/utils/meta_tags/article_modified_time.rb