dato 0.7.8 → 0.7.15

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: c290af75b0de6f8cd9b187448294b82d731b17d31d4443b1f40b5349fdb9c618
4
- data.tar.gz: c127cf9869c434dce38bb77ba81895bf5ef351bee5a9b0edc9ef2d0fec510753
3
+ metadata.gz: 7779edc00921c84e0f98aee2008bb8fd3f89d893c02107d965db12d1f5bc7882
4
+ data.tar.gz: 25ba5f84f8a6236c40d2846ef976987501f4977d481c9c445e298b666bc6b1ec
5
5
  SHA512:
6
- metadata.gz: d5552912880af2435a664eed763cb18e858b8653dae00f85f5915b0c7245225454538fe8da7e08e14d6e2fd7e460ed67e4770d1053df78c146060009aee0dfa5
7
- data.tar.gz: 830e413829504a1ae8fc076fc3cb7a9a6b5e60dd9652df2121dca94eaa5a4e3cf68f498796411e09bda3be862ab0515a750c3a97c723a49a0a75422cce6c0c88
6
+ metadata.gz: 955b67a6fadad2fb96e1342ec2e8907f5084085e0f18737655ebac56a4a8661e5d670ff9e662b3afc21381636139480f86ae48d47f268b571a21fcfa470de8c2
7
+ data.tar.gz: 479fe2e231a44cdf9518961c98bfddbd67ac06d4cd511e37a7369d668e5f0fa4eeca195d8af09bd981277a5c195f01d5f368f6b134562ebdd8f43df0c47a8c91
@@ -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/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,15 @@ 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
103
+ # puts body.inspect
104
+ # puts '===='
105
+ # puts error.message
106
+ # puts '===='
108
107
  error = ApiError.new(e.response)
109
- puts "===="
110
- puts error.message
111
- puts "===="
112
108
  raise error
113
109
  end
114
110
  end
@@ -123,12 +119,12 @@ module Dato
123
119
  end
124
120
 
125
121
  return false unless body
126
- return false unless body["data"]
122
+ return false unless body['data']
127
123
 
128
- body["data"].any? do |e|
129
- e["attributes"]["code"] == "BATCH_DATA_VALIDATION_IN_PROGRESS"
124
+ body['data'].any? do |e|
125
+ e['attributes']['code'] == 'BATCH_DATA_VALIDATION_IN_PROGRESS'
130
126
  end
131
- rescue
127
+ rescue StandardError
132
128
  false
133
129
  end
134
130
 
@@ -141,9 +137,13 @@ module Dato
141
137
  'X-Api-Version' => '3'
142
138
  }
143
139
 
140
+ if environment
141
+ default_headers.merge!('X-Environment' => environment)
142
+ end
143
+
144
144
  options = {
145
145
  url: base_url,
146
- headers: default_headers.merge(extra_headers),
146
+ headers: default_headers.merge(extra_headers)
147
147
  }
148
148
 
149
149
  @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
@@ -23,8 +23,10 @@ module Dato
23
23
  data[:type] = type
24
24
  data[:attributes] = serialized_attributes(resource)
25
25
 
26
- if relationships.any?
27
- data[:relationships] = serialized_relationships(resource)
26
+ serialized_relationships = serialized_relationships(resource)
27
+
28
+ if serialized_relationships
29
+ data[:relationships] = serialized_relationships
28
30
  end
29
31
 
30
32
  { data: data }
@@ -82,7 +84,7 @@ module Dato
82
84
  end
83
85
  end
84
86
 
85
- result
87
+ result.empty? ? nil : result
86
88
  end
87
89
 
88
90
  def attributes(resource)
@@ -110,7 +112,11 @@ module Dato
110
112
  end
111
113
 
112
114
  def required_relationships
113
- (link_relationships.required || []).map(&:to_sym)
115
+ if link.schema.properties['data'].required.include?("relationships")
116
+ (link_relationships.required || []).map(&:to_sym)
117
+ else
118
+ []
119
+ end
114
120
  end
115
121
 
116
122
  def link_attributes
@@ -18,6 +18,7 @@ module Dato
18
18
  v[:alt],
19
19
  v[:title],
20
20
  v[:custom_data],
21
+ v[:focal_point],
21
22
  repo.site.entity.imgix_host
22
23
  )
23
24
  end
@@ -29,12 +30,14 @@ module Dato
29
30
  alt,
30
31
  title,
31
32
  custom_data,
33
+ focal_point,
32
34
  imgix_host
33
35
  )
34
36
  @upload = upload
35
37
  @alt = alt
36
38
  @title = title
37
39
  @custom_data = custom_data
40
+ @focal_point = focal_point
38
41
  @imgix_host = imgix_host
39
42
  end
40
43
 
@@ -74,31 +77,184 @@ module Dato
74
77
  @upload.copyright
75
78
  end
76
79
 
80
+ def filename
81
+ @upload.filename
82
+ end
83
+
84
+ def basename
85
+ @upload.basename
86
+ end
87
+
77
88
  def alt
78
- default_metadata = @upload.default_field_metadata.deep_stringify_keys.fetch(I18n.locale.to_s, {})
79
- @alt || default_metadata["alt"]
89
+ default_metadata = @upload.default_field_metadata.deep_stringify_keys
90
+ .fetch(I18n.locale.to_s, {})
91
+ @alt || default_metadata['alt']
80
92
  end
81
93
 
82
94
  def title
83
- default_metadata = @upload.default_field_metadata.deep_stringify_keys.fetch(I18n.locale.to_s, {})
84
- @title || default_metadata["title"]
95
+ default_metadata = @upload.default_field_metadata.deep_stringify_keys
96
+ .fetch(I18n.locale.to_s, {})
97
+ @title || default_metadata['title']
85
98
  end
86
99
 
87
100
  def custom_data
88
- default_metadata = @upload.default_field_metadata.deep_stringify_keys.fetch(I18n.locale.to_s, {})
89
- @custom_data.merge(default_metadata.fetch("custom_data", {}))
101
+ default_metadata = @upload.default_field_metadata.deep_stringify_keys
102
+ .fetch(I18n.locale.to_s, {})
103
+ @custom_data.merge(default_metadata.fetch('custom_data', {}))
104
+ end
105
+
106
+ def focal_point
107
+ default_metadata = @upload.default_field_metadata.deep_stringify_keys
108
+ .fetch(I18n.locale.to_s, {})
109
+ @focal_point || default_metadata['focal_point']
110
+ end
111
+
112
+ def tags
113
+ @upload.tags
114
+ end
115
+
116
+ def smart_tags
117
+ @upload.smart_tags
118
+ end
119
+
120
+ def is_image
121
+ @upload.is_image
122
+ end
123
+
124
+ def exif_info
125
+ @upload.exif_info
126
+ end
127
+
128
+ def mime_type
129
+ @upload.mime_type
130
+ end
131
+
132
+ def colors
133
+ @upload.colors.map { |color| Color.parse(color, nil) }
134
+ end
135
+
136
+ def blurhash
137
+ @upload.blurhash
138
+ end
139
+
140
+ class VideoAttributes
141
+ def initialize(upload)
142
+ @upload = upload
143
+ end
144
+
145
+ def mux_playback_id
146
+ @upload.mux_playback_id
147
+ end
148
+
149
+ def frame_rate
150
+ @upload.frame_rate
151
+ end
152
+
153
+ def duration
154
+ @upload.duration
155
+ end
156
+
157
+ def streaming_url
158
+ "https://stream.mux.com/#{@upload.mux_playback_id}.m3u8"
159
+ end
160
+
161
+ def thumbnail_url(format = :jpg)
162
+ if format == :gif
163
+ "https://image.mux.com/#{@upload.mux_playback_id}/animated.gif"
164
+ else
165
+ "https://image.mux.com/#{@upload.mux_playback_id}/thumbnail.#{format}"
166
+ end
167
+ end
168
+
169
+ def mp4_url(options = nil)
170
+ @upload.mux_mp4_highest_res or
171
+ return nil
172
+
173
+ if options && options[:exact_res]
174
+ if options[:exact_res] == :low
175
+ raw_mp4_url("low")
176
+ elsif options[:exact_res] == :medium
177
+ if %w[medium high].include?(@upload.mux_mp4_highest_res)
178
+ raw_mp4_url("medium")
179
+ end
180
+ elsif @upload.mux_mp4_highest_res == :high
181
+ raw_mp4_url("high")
182
+ end
183
+ elsif options && options[:res] == :low
184
+ raw_mp4_url("low")
185
+ elsif options && options[:res] == :medium
186
+ if %w[low medium].include?(@upload.mux_mp4_highest_res)
187
+ raw_mp4_url(@upload.mux_mp4_highest_res)
188
+ else
189
+ raw_mp4_url("medium")
190
+ end
191
+ else
192
+ raw_mp4_url(@upload.mux_mp4_highest_res)
193
+ end
194
+ end
195
+
196
+ def to_hash
197
+ {
198
+ mux_playback_id: mux_playback_id,
199
+ frame_rate: frame_rate,
200
+ duration: duration,
201
+ streaming_url: streaming_url,
202
+ thumbnail_url: thumbnail_url,
203
+ mp4_url: mp4_url,
204
+ }
205
+ end
206
+
207
+ private
208
+
209
+ def raw_mp4_url(res)
210
+ "https://stream.mux.com/#{@upload.mux_playback_id}/#{res}.mp4"
211
+ end
212
+ end
213
+
214
+ def video
215
+ if @upload.mux_playback_id
216
+ VideoAttributes.new(@upload)
217
+ end
90
218
  end
91
219
 
92
220
  def file
93
221
  Imgix::Client.new(
94
- host: @imgix_host,
222
+ domain: @imgix_host,
95
223
  secure: true,
96
224
  include_library_param: false
97
225
  ).path(path)
98
226
  end
99
227
 
100
- def url(opts = {})
101
- file.to_url(opts)
228
+ def url(query = {})
229
+ query.deep_stringify_keys!
230
+
231
+ if focal_point &&
232
+ query["fit"] == "crop" &&
233
+ (query["h"] || query["height"]) &&
234
+ (query["w"] || query["width"]) &&
235
+ [nil, "focalpoint"].include?(query["crop"]) &&
236
+ query["fp-x"].nil? &&
237
+ query["fp-y"].nil?
238
+
239
+ query.merge!(
240
+ "crop" => "focalpoint",
241
+ "fp-x" => focal_point[:x],
242
+ "fp-y" => focal_point[:y],
243
+ )
244
+ end
245
+
246
+ file.to_url(query)
247
+ end
248
+
249
+ def lqip_data_url(opts = {})
250
+ @imgix_host != "www.datocms-assets.com" and
251
+ raise "#lqip_data_url can only be used with www.datocms-assets.com domain"
252
+
253
+ response = Faraday.get(file.to_url(opts.merge(lqip: "blurhash")))
254
+
255
+ if response.status == 200
256
+ "data:image/jpeg;base64,#{Base64.strict_encode64(response.body)}"
257
+ end
102
258
  end
103
259
 
104
260
  def to_hash(*_args)
@@ -111,7 +267,19 @@ module Dato
111
267
  alt: alt,
112
268
  title: title,
113
269
  custom_data: custom_data,
114
- url: url
270
+ focal_point: focal_point,
271
+ url: url,
272
+ copyright: copyright,
273
+ tags: tags,
274
+ smart_tags: smart_tags,
275
+ filename: filename,
276
+ basename: basename,
277
+ is_image: is_image,
278
+ exif_info: exif_info,
279
+ mime_type: mime_type,
280
+ colors: colors.map(&:to_hash),
281
+ blurhash: blurhash,
282
+ video: video && video.to_hash
115
283
  }
116
284
  end
117
285
  end
@@ -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-#{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|
@@ -72,7 +72,7 @@ module Dato
72
72
  end
73
73
  connection.get(url).body
74
74
  rescue Faraday::Error => e
75
- puts "Error during uploading #{url}"
75
+ puts "Error during upload of #{url}: #{e.message}"
76
76
  raise e
77
77
  end
78
78
  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.8'
4
+ VERSION = '0.7.15'
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.8
4
+ version: 0.7.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefano Verna
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-10-30 00:00:00.000000000 Z
11
+ date: 2020-09-29 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
@@ -449,7 +464,7 @@ homepage: https://github.com/datocms/ruby-datocms-client
449
464
  licenses:
450
465
  - MIT
451
466
  metadata: {}
452
- post_install_message:
467
+ post_install_message:
453
468
  rdoc_options: []
454
469
  require_paths:
455
470
  - lib
@@ -464,9 +479,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
464
479
  - !ruby/object:Gem::Version
465
480
  version: '0'
466
481
  requirements: []
467
- rubyforge_project:
482
+ rubyforge_project:
468
483
  rubygems_version: 2.7.6
469
- signing_key:
484
+ signing_key:
470
485
  specification_version: 4
471
486
  summary: Ruby client for DatoCMS API
472
487
  test_files: []