dato 0.7.9 → 0.7.16

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
  SHA256:
3
- metadata.gz: 2faaeda3b7c9f1317aeaa5291274cd1e66f7ec352f45f4513ca3e44747d6d816
4
- data.tar.gz: 4a8afc49f92605e0c1bcbdd5473d07bbc83f34d7f71e20cf44414489eaa48504
3
+ metadata.gz: 5497d73f33b5f38e2f931d32bba7fa6362d5069d0b8fa5cf3b85326f339ab0ba
4
+ data.tar.gz: b085c940d24c1f3a2bea211ad0fef22cf0455bbb958c85c0932fa4659c9a362c
5
5
  SHA512:
6
- metadata.gz: e64850f3e6bb5d754e1d365d03538d42e37b6798ac177bd6e6eb1297e5431a43f4261c1ad29c05f9d0ecb29d8e7c5200c1d9f4fecb1b4440e3fa37f9b7c7bfc7
7
- data.tar.gz: cd164fe876d2bd58d23c742ae8b96bffa66e58f896d43f641ac0fe5c2ba736b4d5476aac7b17091c78154ec96a617d210d841039fcd92a34c562a356c4dda053
6
+ metadata.gz: ce46783a3fe8719de2400ea08b94bde2b7c64856c889129cd22580c97e727931c8025f97740dd8c5124997d973178aff3b284f103967bee91ff4a857151afc6f
7
+ data.tar.gz: dce4329c9bf0a556a0044b7e17c21e4e091a51da35466734fd03987dd59206a5f00d57b7496f0c46451cba4ebaf446628664bac89d0454f824488108825d23e4
@@ -1,30 +1,77 @@
1
+ # 0.7.16
2
+
3
+ Fixes bug when launching `dato dump --watch` together with the `environment` option.
4
+
5
+ # 0.7.13
6
+
7
+ Add option to pass a project's environment:
8
+
9
+ ```ruby
10
+ require "dato"
11
+ client = Dato::Site::Client.new("YOUR-API-KEY", environment: 'sandbox-foobar')
12
+ ```
13
+
14
+ # 0.7.12
15
+
16
+ Introduces `Dato::Utils::BuildModularBlock` class to help creating modular blocks.
17
+
18
+ An example usage can be:
19
+
20
+ ```ruby
21
+ description = [
22
+ Dato::Utils::BuildModularBlock.build(
23
+ item_type: "1235",
24
+ name: "Best dog in the world",
25
+ year: "2020",
26
+ picture: picture
27
+ )
28
+ ]
29
+
30
+ record = client.items.create(
31
+ item_type: "1234", # model ID
32
+ name: "Gigio",
33
+ description: description
34
+ )
35
+ ```
36
+
37
+ Find more info [on the documentation](https://www.datocms.com/docs/content-management-api/resources/item/create).
38
+
39
+ # 0.7.11 (not released)
40
+
41
+ - Updated specs cassettes after `appeareance -> appearance` typo fix
42
+ - Some style changes
43
+
44
+ # 0.7.10
45
+
46
+ - Fixed SEO title retrieval. Now it fallbacks to default SEO title is item title is blank
47
+
1
48
  # 0.7.9
2
49
 
3
- * Added new attributes to uploads
50
+ - Added new attributes to uploads
4
51
 
5
52
  # 0.7.0
6
53
 
7
- * Real-time events are now much more granular and the gem avoids downloading all the content every time a change occurs
54
+ - Real-time events are now much more granular and the gem avoids downloading all the content every time a change occurs
8
55
 
9
56
  # 0.6.18
10
57
 
11
- * Fixed regression where you could no longer access items' item type
58
+ - Fixed regression where you could no longer access items' item type
12
59
 
13
60
  # 0.6.15
14
61
 
15
- * Handle `429 Too Many Requests` responses from API
62
+ - Handle `429 Too Many Requests` responses from API
16
63
 
17
64
  # 0.6.12
18
65
 
19
- * Allow empty responses from server
66
+ - Allow empty responses from server
20
67
 
21
68
  # 0.6.10
22
69
 
23
- * Introduced `.meta` on `Dato::Local::Item` to fetch all meta information about the records
70
+ - Introduced `.meta` on `Dato::Local::Item` to fetch all meta information about the records
24
71
 
25
72
  # 0.6.5
26
73
 
27
- * The `.seo_meta_tags` method now generates fallback titles based on the model field title
74
+ - The `.seo_meta_tags` method now generates fallback titles based on the model field title
28
75
 
29
76
  # v0.6.2
30
77
 
@@ -32,7 +79,7 @@ Moved `json_schema` as runtime dependency
32
79
 
33
80
  # v0.6.1
34
81
 
35
- The big change is that the methods the client makes available are generated at runtime based on the [JSON Schema of our CMA](https://www.datocms.com/content-management-api/). This means any new API endpoint — or changes to existing ones — will instantly be reflected to the client, without the need to upgrade to the latest client version.
82
+ The big change is that the methods the client makes available are generated at runtime based on the [JSON Schema of our CMA](https://www.datocms.com/content-management-api/). This means any new API endpoint — or changes to existing ones — will instantly be reflected to the client, without the need to upgrade to the latest client version.
36
83
 
37
84
  We also added a new `deserialize_response` option to every call, that you can use if you want to retrieve the exact payload the DatoCMS returns:
38
85
 
data/Rakefile CHANGED
@@ -3,5 +3,8 @@
3
3
  require 'bundler/gem_tasks'
4
4
  require 'rspec/core/rake_task'
5
5
 
6
- RSpec::Core::RakeTask.new(:spec)
6
+ RSpec::Core::RakeTask.new(:spec) do |t|
7
+ t.rspec_opts = "-b"
8
+ end
9
+
7
10
  task default: :spec
@@ -30,6 +30,7 @@ Gem::Specification.new do |spec|
30
30
  spec.add_development_dependency 'rubocop'
31
31
  spec.add_development_dependency 'coveralls'
32
32
  spec.add_development_dependency 'pry'
33
+ spec.add_development_dependency 'pry-byebug'
33
34
  spec.add_development_dependency 'front_matter_parser'
34
35
 
35
36
  spec.add_runtime_dependency 'faraday', ['>= 0.9.0']
@@ -37,7 +38,7 @@ Gem::Specification.new do |spec|
37
38
  spec.add_runtime_dependency 'activesupport', ['>= 4.2.7']
38
39
  spec.add_runtime_dependency 'addressable'
39
40
  spec.add_runtime_dependency 'thor'
40
- spec.add_runtime_dependency 'imgix', ['>= 0.3.1']
41
+ spec.add_runtime_dependency 'imgix', ['~> 4']
41
42
  spec.add_runtime_dependency 'toml'
42
43
  spec.add_runtime_dependency 'cacert'
43
44
  spec.add_runtime_dependency 'dotenv'
@@ -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
@@ -210,7 +210,7 @@ module Dato
210
210
 
211
211
  def file
212
212
  Imgix::Client.new(
213
- host: @imgix_host,
213
+ domain: @imgix_host,
214
214
  secure: true,
215
215
  include_library_param: false
216
216
  ).path(path)
@@ -220,6 +220,17 @@ module Dato
220
220
  file.to_url(opts)
221
221
  end
222
222
 
223
+ def lqip_data_url(opts = {})
224
+ @imgix_host != "www.datocms-assets.com" and
225
+ raise "#lqip_data_url can only be used with www.datocms-assets.com domain"
226
+
227
+ response = Faraday.get(file.to_url(opts.merge(lqip: "blurhash")))
228
+
229
+ if response.status == 200
230
+ "data:image/jpeg;base64,#{Base64.strict_encode64(response.body)}"
231
+ end
232
+ end
233
+
223
234
  def to_hash(*_args)
224
235
  {
225
236
  id: id,
@@ -43,7 +43,7 @@ module Dato
43
43
 
44
44
  def file
45
45
  Imgix::Client.new(
46
- host: @imgix_host,
46
+ domain: @imgix_host,
47
47
  secure: true,
48
48
  include_library_param: false
49
49
  ).path(path)
@@ -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-#{client.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|
@@ -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.9'
4
+ VERSION = '0.7.16'
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.9
4
+ version: 0.7.16
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-12-03 00:00:00.000000000 Z
11
+ date: 2020-09-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -150,6 +150,20 @@ dependencies:
150
150
  - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: pry-byebug
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
153
167
  - !ruby/object:Gem::Dependency
154
168
  name: front_matter_parser
155
169
  requirement: !ruby/object:Gem::Requirement
@@ -238,16 +252,16 @@ dependencies:
238
252
  name: imgix
239
253
  requirement: !ruby/object:Gem::Requirement
240
254
  requirements:
241
- - - ">="
255
+ - - "~>"
242
256
  - !ruby/object:Gem::Version
243
- version: 0.3.1
257
+ version: '4'
244
258
  type: :runtime
245
259
  prerelease: false
246
260
  version_requirements: !ruby/object:Gem::Requirement
247
261
  requirements:
248
- - - ">="
262
+ - - "~>"
249
263
  - !ruby/object:Gem::Version
250
- version: 0.3.1
264
+ version: '4'
251
265
  - !ruby/object:Gem::Dependency
252
266
  name: toml
253
267
  requirement: !ruby/object:Gem::Requirement
@@ -429,6 +443,7 @@ files:
429
443
  - lib/dato/upload/create_upload_path.rb
430
444
  - lib/dato/upload/file.rb
431
445
  - lib/dato/upload/image.rb
446
+ - lib/dato/utils/build_modular_block.rb
432
447
  - lib/dato/utils/favicon_tags_builder.rb
433
448
  - lib/dato/utils/locale_value.rb
434
449
  - lib/dato/utils/meta_tags/article_modified_time.rb
@@ -464,8 +479,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
464
479
  - !ruby/object:Gem::Version
465
480
  version: '0'
466
481
  requirements: []
467
- rubyforge_project:
468
- rubygems_version: 2.7.6
482
+ rubygems_version: 3.0.3
469
483
  signing_key:
470
484
  specification_version: 4
471
485
  summary: Ruby client for DatoCMS API