dato 0.7.18 → 0.8.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.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +42 -5
  3. data/.ruby-version +1 -1
  4. data/.travis.yml +2 -2
  5. data/Gemfile +1 -1
  6. data/Rakefile +2 -2
  7. data/TODO.md +28 -0
  8. data/bin/console +3 -3
  9. data/bin/rspec +6 -6
  10. data/dato.gemspec +1 -1
  11. data/exe/dato +3 -3
  12. data/lib/dato/account/client.rb +2 -2
  13. data/lib/dato/api_client.rb +37 -43
  14. data/lib/dato/api_error.rb +10 -13
  15. data/lib/dato/cli.rb +18 -18
  16. data/lib/dato/dump/dsl/add_to_data_file.rb +1 -1
  17. data/lib/dato/dump/dsl/create_data_file.rb +1 -1
  18. data/lib/dato/dump/dsl/create_post.rb +1 -1
  19. data/lib/dato/dump/dsl/directory.rb +4 -4
  20. data/lib/dato/dump/dsl/root.rb +7 -7
  21. data/lib/dato/dump/format/json.rb +1 -1
  22. data/lib/dato/dump/format/toml.rb +5 -6
  23. data/lib/dato/dump/format/yaml.rb +2 -3
  24. data/lib/dato/dump/format.rb +3 -3
  25. data/lib/dato/dump/operation/add_to_data_file.rb +4 -4
  26. data/lib/dato/dump/operation/create_data_file.rb +3 -3
  27. data/lib/dato/dump/operation/create_post.rb +5 -6
  28. data/lib/dato/dump/operation/directory.rb +1 -1
  29. data/lib/dato/dump/runner.rb +5 -5
  30. data/lib/dato/dump/ssg_detector.rb +18 -20
  31. data/lib/dato/json_api_deserializer.rb +15 -16
  32. data/lib/dato/json_api_serializer.rb +39 -28
  33. data/lib/dato/json_schema_relationships.rb +19 -23
  34. data/lib/dato/json_schema_type.rb +47 -0
  35. data/lib/dato/local/entities_repo.rb +3 -3
  36. data/lib/dato/local/field_type/color.rb +11 -7
  37. data/lib/dato/local/field_type/file.rb +18 -24
  38. data/lib/dato/local/field_type/gallery.rb +1 -1
  39. data/lib/dato/local/field_type/global_seo.rb +4 -7
  40. data/lib/dato/local/field_type/lat_lon.rb +1 -1
  41. data/lib/dato/local/field_type/seo.rb +1 -1
  42. data/lib/dato/local/field_type/structured_text.rb +63 -0
  43. data/lib/dato/local/field_type/theme.rb +2 -2
  44. data/lib/dato/local/field_type/upload_id.rb +5 -5
  45. data/lib/dato/local/field_type/video.rb +9 -15
  46. data/lib/dato/local/item.rb +11 -12
  47. data/lib/dato/local/items_repo.rb +11 -18
  48. data/lib/dato/local/json_api_entity.rb +4 -3
  49. data/lib/dato/local/loader.rb +30 -31
  50. data/lib/dato/local/site.rb +3 -4
  51. data/lib/dato/paginator.rb +4 -4
  52. data/lib/dato/repo.rb +23 -30
  53. data/lib/dato/site/client.rb +5 -5
  54. data/lib/dato/upload/create_upload_path.rb +7 -10
  55. data/lib/dato/upload/file.rb +3 -3
  56. data/lib/dato/upload/image.rb +1 -1
  57. data/lib/dato/utils/build_modular_block.rb +4 -4
  58. data/lib/dato/utils/favicon_tags_builder.rb +10 -10
  59. data/lib/dato/utils/locale_value.rb +1 -1
  60. data/lib/dato/utils/meta_tags/article_modified_time.rb +3 -3
  61. data/lib/dato/utils/meta_tags/article_publisher.rb +2 -2
  62. data/lib/dato/utils/meta_tags/base.rb +5 -6
  63. data/lib/dato/utils/meta_tags/description.rb +4 -4
  64. data/lib/dato/utils/meta_tags/image.rb +4 -5
  65. data/lib/dato/utils/meta_tags/og_locale.rb +2 -2
  66. data/lib/dato/utils/meta_tags/og_site_name.rb +2 -2
  67. data/lib/dato/utils/meta_tags/og_type.rb +3 -3
  68. data/lib/dato/utils/meta_tags/robots.rb +2 -2
  69. data/lib/dato/utils/meta_tags/title.rb +6 -6
  70. data/lib/dato/utils/meta_tags/twitter_card.rb +2 -2
  71. data/lib/dato/utils/meta_tags/twitter_site.rb +2 -2
  72. data/lib/dato/utils/seo_tags_builder.rb +12 -12
  73. data/lib/dato/version.rb +1 -1
  74. data/lib/dato.rb +11 -9
  75. metadata +10 -8
@@ -1,32 +1,31 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'pusher-client'
3
+ require "pusher-client"
4
4
 
5
- require 'dato/local/entities_repo'
6
- require 'dato/local/items_repo'
5
+ require "dato/local/entities_repo"
6
+ require "dato/local/items_repo"
7
7
 
8
8
  module Dato
9
9
  module Local
10
10
  class Loader
11
- attr_reader :client
12
- attr_reader :entities_repo
13
- attr_reader :items_repo
14
- attr_reader :preview_mode
11
+ attr_reader :client, :entities_repo, :items_repo, :preview_mode
15
12
 
16
- PUSHER_API_KEY = '75e6ef0fe5d39f481626'
13
+ PUSHER_API_KEY = "75e6ef0fe5d39f481626"
17
14
 
15
+ # rubocop:disable Style/OptionalBooleanParameter
18
16
  def initialize(client, preview_mode = false)
19
17
  @client = client
20
18
  @preview_mode = preview_mode
21
19
  @entities_repo = EntitiesRepo.new
22
20
  @items_repo = ItemsRepo.new(@entities_repo)
23
21
  end
22
+ # rubocop:enable Style/OptionalBooleanParameter
24
23
 
25
24
  def load
26
25
  threads = [
27
26
  Thread.new { Thread.current[:output] = site },
28
27
  Thread.new { Thread.current[:output] = all_items },
29
- Thread.new { Thread.current[:output] = all_uploads }
28
+ Thread.new { Thread.current[:output] = all_uploads },
30
29
  ]
31
30
 
32
31
  results = threads.map do |t|
@@ -39,7 +38,7 @@ module Dato
39
38
  end
40
39
 
41
40
  def watch(&block)
42
- site_id = client.get('/site')['data']['id']
41
+ site_id = client.get("/site")["data"]["id"]
43
42
 
44
43
  return if pusher && pusher.connected
45
44
 
@@ -69,11 +68,11 @@ module Dato
69
68
  private
70
69
 
71
70
  def bind_on_site_upsert(&block)
72
- bind_on("site:upsert", block) do |data|
71
+ bind_on("site:upsert", block) do |_data|
73
72
  threads = [
74
73
  Thread.new { Thread.current[:output] = site },
75
74
  Thread.new { Thread.current[:output] = all_items },
76
- Thread.new { Thread.current[:output] = all_uploads }
75
+ Thread.new { Thread.current[:output] = all_uploads },
77
76
  ]
78
77
 
79
78
  results = threads.map do |t|
@@ -86,16 +85,16 @@ module Dato
86
85
  end
87
86
 
88
87
  def bind_on_item_upsert(&block)
89
- event_type = preview_mode ? 'preview_mode' : 'published_mode'
88
+ event_type = preview_mode ? "preview_mode" : "published_mode"
90
89
 
91
90
  bind_on("item:#{event_type}:upsert", block) do |data|
92
91
  payload = client.items.all(
93
92
  {
94
- 'filter[ids]' => data[:ids].join(','),
95
- version: item_version
93
+ "filter[ids]" => data[:ids].join(","),
94
+ version: item_version,
96
95
  },
97
96
  deserialize_response: false,
98
- all_pages: true
97
+ all_pages: true,
99
98
  )
100
99
 
101
100
  @entities_repo.upsert_entities(payload)
@@ -103,10 +102,10 @@ module Dato
103
102
  end
104
103
 
105
104
  def bind_on_item_destroy(&block)
106
- event_type = preview_mode ? 'preview_mode' : 'published_mode'
105
+ event_type = preview_mode ? "preview_mode" : "published_mode"
107
106
 
108
107
  bind_on("item:#{event_type}:destroy", block) do |data|
109
- @entities_repo.destroy_entities('item', data[:ids])
108
+ @entities_repo.destroy_entities("item", data[:ids])
110
109
  end
111
110
  end
112
111
 
@@ -114,10 +113,10 @@ module Dato
114
113
  bind_on("upload:upsert", block) do |data|
115
114
  payload = client.uploads.all(
116
115
  {
117
- 'filter[ids]' => data[:ids].join(',')
116
+ "filter[ids]" => data[:ids].join(","),
118
117
  },
119
118
  deserialize_response: false,
120
- all_pages: true
119
+ all_pages: true,
121
120
  )
122
121
 
123
122
  @entities_repo.upsert_entities(payload)
@@ -125,21 +124,21 @@ module Dato
125
124
  end
126
125
 
127
126
  def bind_on_upload_destroy(&block)
128
- bind_on('upload:destroy', block) do |data|
129
- @entities_repo.destroy_entities('upload', data[:ids])
127
+ bind_on("upload:destroy", block) do |data|
128
+ @entities_repo.destroy_entities("upload", data[:ids])
130
129
  end
131
130
  end
132
131
 
133
132
  def bind_on_item_type_upsert(&block)
134
- bind_on('item_type:upsert', block) do |data|
133
+ bind_on("item_type:upsert", block) do |data|
135
134
  data[:ids].each do |id|
136
135
  payload = client.item_types.find(id, {}, deserialize_response: false)
137
136
  @entities_repo.upsert_entities(payload)
138
137
 
139
138
  payload = client.items.all(
140
- { 'filter[type]' => id },
139
+ { "filter[type]" => id },
141
140
  deserialize_response: false,
142
- all_pages: true
141
+ all_pages: true,
143
142
  )
144
143
 
145
144
  @entities_repo.upsert_entities(payload)
@@ -148,7 +147,7 @@ module Dato
148
147
  end
149
148
 
150
149
  def bind_on_item_type_destroy(&block)
151
- bind_on('item_type:destroy', block) do |data|
150
+ bind_on("item_type:destroy", block) do |data|
152
151
  data[:ids].each do |id|
153
152
  @entities_repo.destroy_item_type(id)
154
153
  end
@@ -174,19 +173,19 @@ module Dato
174
173
  @pusher ||= PusherClient::Socket.new(
175
174
  PUSHER_API_KEY,
176
175
  secure: true,
177
- auth_method: method(:pusher_auth_method)
176
+ auth_method: method(:pusher_auth_method),
178
177
  )
179
178
  end
180
179
 
181
180
  def site
182
- client.get('/site', include: ['item_types', 'item_types.fields'])
181
+ client.get("/site", include: ["item_types", "item_types.fields"])
183
182
  end
184
183
 
185
184
  def all_items
186
185
  client.items.all(
187
186
  { version: item_version },
188
187
  deserialize_response: false,
189
- all_pages: true
188
+ all_pages: true,
190
189
  )
191
190
  end
192
191
 
@@ -198,9 +197,9 @@ module Dato
198
197
 
199
198
  def item_version
200
199
  if preview_mode
201
- 'latest'
200
+ "latest"
202
201
  else
203
- 'published'
202
+ "published"
204
203
  end
205
204
  end
206
205
 
@@ -1,9 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'forwardable'
4
- require 'active_support/inflector/transliterate'
5
- require 'active_support/hash_with_indifferent_access'
6
- require 'dato/utils/locale_value'
3
+ require "forwardable"
4
+ require "dato/utils/locale_value"
7
5
 
8
6
  module Dato
9
7
  module Local
@@ -11,6 +9,7 @@ module Dato
11
9
  extend Forwardable
12
10
 
13
11
  attr_reader :entity
12
+
14
13
  def_delegators :entity, :id, :name, :locales, :domain,
15
14
  :internal_domain, :no_index, :frontend_url
16
15
 
@@ -12,7 +12,7 @@ module Dato
12
12
  items_per_page = 100
13
13
 
14
14
  base_response = @client.get(
15
- @base_endpoint, @filters.dup.merge('page[limit]' => items_per_page)
15
+ @base_endpoint, @filters.dup.merge("page[limit]" => items_per_page)
16
16
  )
17
17
 
18
18
  extra_pages = (
@@ -23,9 +23,9 @@ module Dato
23
23
  base_response[:data] += @client.get(
24
24
  @base_endpoint,
25
25
  @filters.dup.merge(
26
- 'page[offset]' => items_per_page * (page + 1),
27
- 'page[limit]' => items_per_page
28
- )
26
+ "page[offset]" => items_per_page * (page + 1),
27
+ "page[limit]" => items_per_page,
28
+ ),
29
29
  )[:data]
30
30
  end
31
31
 
data/lib/dato/repo.rb CHANGED
@@ -1,18 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dato/json_api_serializer'
4
- require 'dato/json_api_deserializer'
5
- require 'dato/paginator'
3
+ require "dato/json_api_serializer"
4
+ require "dato/json_api_deserializer"
5
+ require "dato/paginator"
6
6
 
7
7
  module Dato
8
8
  class Repo
9
9
  attr_reader :client, :type, :schema
10
10
 
11
- IDENTITY_REGEXP = /\{\(.*?definitions%2F(.*?)%2Fdefinitions%2Fidentity\)}/
11
+ IDENTITY_REGEXP = /\{\(.*?definitions%2F(.*?)%2Fdefinitions%2Fidentity\)}/.freeze
12
12
 
13
13
  METHOD_NAMES = {
14
- 'instances' => :all,
15
- 'self' => :find
14
+ "instances" => :all,
15
+ "self" => :find,
16
16
  }.freeze
17
17
 
18
18
  def initialize(client, type, schema)
@@ -32,23 +32,23 @@ module Dato
32
32
  private
33
33
 
34
34
  def method_missing(method, *args, &block)
35
- link = schema.links.find do |link|
36
- METHOD_NAMES.fetch(link.rel, link.rel).to_sym == method.to_sym
35
+ link = schema.links.find do |ilink|
36
+ METHOD_NAMES.fetch(ilink.rel, ilink.rel).to_sym == method.to_sym
37
37
  end
38
38
 
39
- return super if !link
39
+ return super unless link
40
40
 
41
41
  min_arguments_count = [
42
42
  link.href.scan(IDENTITY_REGEXP).size,
43
- link.schema && link.method != :get ? 1 : 0
43
+ link.schema && link.method != :get ? 1 : 0,
44
44
  ].reduce(0, :+)
45
45
 
46
- (args.size >= min_arguments_count) or
47
- raise ArgumentError, "wrong number of arguments (given #{args.size}, expected #{min_arguments_count})"
46
+ (args.size >= min_arguments_count) ||
47
+ raise(ArgumentError, "wrong number of arguments (given #{args.size}, expected #{min_arguments_count})")
48
48
 
49
49
  placeholders = []
50
50
 
51
- url = link['href'].gsub(IDENTITY_REGEXP) do |_stuff|
51
+ url = link["href"].gsub(IDENTITY_REGEXP) do |_stuff|
52
52
  placeholder = args.shift.to_s
53
53
  placeholders << placeholder
54
54
  placeholder
@@ -61,19 +61,16 @@ module Dato
61
61
  body = link.schema ? args.shift : {}
62
62
  query_string = args.shift || {}
63
63
 
64
- elsif link.method == :delete
65
- query_string = args.shift || {}
66
-
67
- elsif link.method == :get
64
+ elsif %i[get delete].include?(link.method)
68
65
  query_string = args.shift || {}
69
66
  end
70
67
 
71
68
  options = args.any? ? args.shift.symbolize_keys : {}
72
69
 
73
70
  if link.schema && %i[post put].include?(link.method) && options.fetch(:serialize_response, true)
74
- body = JsonApiSerializer.new(type, link).serialize(
71
+ body = JsonApiSerializer.new(link: link).serialize(
75
72
  body,
76
- link.method == :post ? nil : placeholders.last
73
+ link.method == :post ? nil : placeholders.last,
77
74
  )
78
75
  end
79
76
 
@@ -92,21 +89,19 @@ module Dato
92
89
  if response && response[:data] && response[:data].is_a?(Hash) && response[:data][:type] == "job"
93
90
  job_result = nil
94
91
 
95
- while !job_result do
92
+ until job_result
96
93
  begin
97
94
  sleep(1)
98
95
  job_result = client.job_result.find(response[:data][:id])
99
- rescue ApiError => error
100
- if error.response[:status] != 404
101
- raise error
102
- end
96
+ rescue ApiError => e
97
+ raise e if e.response[:status] != 404
103
98
  end
104
99
  end
105
100
 
106
101
  if job_result[:status] < 200 || job_result[:status] >= 300
107
102
  error = ApiError.new(
108
103
  status: job_result[:status],
109
- body: JSON.dump(job_result[:payload])
104
+ body: JSON.dump(job_result[:payload]),
110
105
  )
111
106
 
112
107
  puts "===="
@@ -121,12 +116,10 @@ module Dato
121
116
  else
122
117
  job_result.payload
123
118
  end
119
+ elsif options.fetch(:deserialize_response, true)
120
+ JsonApiDeserializer.new(link.target_schema).deserialize(response)
124
121
  else
125
- if options.fetch(:deserialize_response, true)
126
- JsonApiDeserializer.new(link.target_schema).deserialize(response)
127
- else
128
- response
129
- end
122
+ response
130
123
  end
131
124
  end
132
125
  end
@@ -1,15 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dato/api_client'
4
- require 'dato/upload/file'
5
- require 'dato/upload/create_upload_path'
3
+ require "dato/api_client"
4
+ require "dato/upload/file"
5
+ require "dato/upload/create_upload_path"
6
6
 
7
7
  module Dato
8
8
  module Site
9
9
  class Client
10
10
  include ApiClient
11
11
 
12
- json_schema 'site-api'
12
+ json_schema "site-api"
13
13
 
14
14
  def create_upload_path(path_or_url)
15
15
  file = Upload::CreateUploadPath.new(self, path_or_url)
@@ -30,7 +30,7 @@ module Dato
30
30
  request(
31
31
  :post,
32
32
  "/pusher/authenticate",
33
- { socket_id: socket_id, channel_name: channel}
33
+ { socket_id: socket_id, channel_name: channel },
34
34
  )
35
35
  end
36
36
  end
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'mime/types'
4
- require 'tempfile'
5
- require 'addressable'
6
- require 'net/http'
3
+ require "mime/types"
4
+ require "tempfile"
5
+ require "addressable"
6
+ require "net/http"
7
7
 
8
8
  module Dato
9
9
  module Upload
@@ -19,7 +19,7 @@ module Dato
19
19
  @file ||= if http_source?
20
20
  uri = Addressable::URI.parse(source)
21
21
  ext = ::File.extname(uri.path).downcase
22
- tempfile = Tempfile.new(['file', ext])
22
+ tempfile = Tempfile.new(["file", ext])
23
23
  tempfile.binmode
24
24
  tempfile.write(download_file(source))
25
25
  tempfile.rewind
@@ -31,7 +31,7 @@ module Dato
31
31
 
32
32
  def http_source?
33
33
  uri = Addressable::URI.parse(source)
34
- uri.scheme == 'http' || uri.scheme == 'https'
34
+ uri.scheme == "http" || uri.scheme == "https"
35
35
  rescue Addressable::URI::InvalidURIError
36
36
  false
37
37
  end
@@ -51,9 +51,7 @@ module Dato
51
51
  mime_type = MIME::Types.of(filename).first
52
52
 
53
53
  request = Net::HTTP::Put.new(uri)
54
- if mime_type
55
- request.add_field("Content-Type", mime_type.to_s)
56
- end
54
+ request.add_field("Content-Type", mime_type.to_s) if mime_type
57
55
  request.body = file.read
58
56
 
59
57
  http = Net::HTTP.new(uri.host, uri.port)
@@ -78,4 +76,3 @@ module Dato
78
76
  end
79
77
  end
80
78
  end
81
-
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dato/upload/create_upload_path'
3
+ require "dato/upload/create_upload_path"
4
4
 
5
5
  module Dato
6
6
  module Upload
@@ -18,14 +18,14 @@ module Dato
18
18
  upload_path = CreateUploadPath.new(client, source).upload_path
19
19
 
20
20
  upload = client.uploads.create(
21
- upload_attributes.merge(path: upload_path)
21
+ upload_attributes.merge(path: upload_path),
22
22
  )
23
23
 
24
24
  {
25
25
  alt: nil,
26
26
  title: nil,
27
27
  custom_data: {},
28
- }.merge(field_attributes).merge(upload_id: upload['id'])
28
+ }.merge(field_attributes).merge(upload_id: upload["id"])
29
29
  end
30
30
  end
31
31
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dato/upload/file'
3
+ require "dato/upload/file"
4
4
 
5
5
  module Dato
6
6
  module Upload
@@ -1,22 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dato/json_api_serializer'
3
+ require "dato/json_api_serializer"
4
4
 
5
5
  module Dato
6
6
  module Utils
7
7
  module BuildModularBlock
8
8
  def self.build(unserialized_body)
9
- json_api_serializer = JsonApiSerializer.new('item', nil)
9
+ json_api_serializer = JsonApiSerializer.new(type: "item")
10
10
  attributes = json_api_serializer.serialized_attributes(unserialized_body)
11
11
 
12
12
  payload = {
13
- type: 'item',
13
+ type: "item",
14
14
  attributes: attributes,
15
15
  relationships: {
16
16
  item_type: {
17
17
  data: {
18
18
  id: unserialized_body[:item_type],
19
- type: 'item_type',
19
+ type: "item_type",
20
20
  },
21
21
  },
22
22
  },
@@ -20,7 +20,7 @@ module Dato
20
20
  build_apple_icon_tags,
21
21
  build_windows_tags,
22
22
  build_color_tags,
23
- build_app_name_tag
23
+ build_app_name_tag,
24
24
  ].flatten.compact
25
25
  end
26
26
 
@@ -29,9 +29,9 @@ module Dato
29
29
 
30
30
  APPLE_TOUCH_ICON_SIZES.map do |size|
31
31
  link_tag(
32
- 'apple-touch-icon',
32
+ "apple-touch-icon",
33
33
  url(size),
34
- sizes: "#{size}x#{size}"
34
+ sizes: "#{size}x#{size}",
35
35
  )
36
36
  end
37
37
  end
@@ -41,10 +41,10 @@ module Dato
41
41
 
42
42
  ICON_SIZES.map do |size|
43
43
  link_tag(
44
- 'icon',
44
+ "icon",
45
45
  url(size),
46
46
  sizes: "#{size}x#{size}",
47
- type: "image/#{site.favicon.format}"
47
+ type: "image/#{site.favicon.format}",
48
48
  )
49
49
  end
50
50
  end
@@ -58,15 +58,15 @@ module Dato
58
58
  end
59
59
 
60
60
  def build_app_name_tag
61
- meta_tag('application-name', site.name)
61
+ meta_tag("application-name", site.name)
62
62
  end
63
63
 
64
64
  def build_color_tags
65
65
  return unless theme_color
66
66
 
67
67
  [
68
- meta_tag('theme-color', theme_color),
69
- meta_tag('msapplication-TileColor', theme_color)
68
+ meta_tag("theme-color", theme_color),
69
+ meta_tag("msapplication-TileColor", theme_color),
70
70
  ]
71
71
  end
72
72
 
@@ -75,11 +75,11 @@ module Dato
75
75
  end
76
76
 
77
77
  def meta_tag(name, value)
78
- { tag_name: 'meta', attributes: { name: name, content: value } }
78
+ { tag_name: "meta", attributes: { name: name, content: value } }
79
79
  end
80
80
 
81
81
  def link_tag(rel, href, attrs = {})
82
- { tag_name: 'link', attributes: attrs.merge(rel: rel, href: href) }
82
+ { tag_name: "link", attributes: attrs.merge(rel: rel, href: href) }
83
83
  end
84
84
  end
85
85
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'i18n/backend/fallbacks'
3
+ require "i18n/backend/fallbacks"
4
4
 
5
5
  module Dato
6
6
  module Utils
@@ -1,14 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dato/utils/meta_tags/base'
4
- require 'time'
3
+ require "dato/utils/meta_tags/base"
4
+ require "time"
5
5
 
6
6
  module Dato
7
7
  module Utils
8
8
  module MetaTags
9
9
  class ArticleModifiedTime < Base
10
10
  def build
11
- og_tag('article:modified_time', item.updated_at.iso8601) if item
11
+ og_tag("article:modified_time", item.updated_at.iso8601) if item
12
12
  end
13
13
  end
14
14
  end
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dato/utils/meta_tags/base'
3
+ require "dato/utils/meta_tags/base"
4
4
 
5
5
  module Dato
6
6
  module Utils
7
7
  module MetaTags
8
8
  class ArticlePublisher < Base
9
9
  def build
10
- og_tag('article:publisher', facebook_page_url) if facebook_page_url
10
+ og_tag("article:publisher", facebook_page_url) if facebook_page_url
11
11
  end
12
12
 
13
13
  def facebook_page_url
@@ -1,8 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'forwardable'
4
- require 'dato/local/field_type/seo'
5
- require 'active_support/core_ext/object/blank'
3
+ require "forwardable"
4
+ require "dato/local/field_type/seo"
6
5
 
7
6
  module Dato
8
7
  module Utils
@@ -19,7 +18,7 @@ module Dato
19
18
  fallback_seo = site.global_seo && site.global_seo.fallback_seo
20
19
 
21
20
  seo_field = item &&
22
- item.fields.detect { |f| f.field_type == 'seo' }
21
+ item.fields.detect { |f| f.field_type == "seo" }
23
22
 
24
23
  item_seo_value = seo_field &&
25
24
  item[seo_field.api_key] &&
@@ -36,11 +35,11 @@ module Dato
36
35
  end
37
36
 
38
37
  def meta_tag(name, content)
39
- tag('meta', name: name, content: content)
38
+ tag("meta", name: name, content: content)
40
39
  end
41
40
 
42
41
  def og_tag(property, content)
43
- tag('meta', property: property, content: content)
42
+ tag("meta", property: property, content: content)
44
43
  end
45
44
 
46
45
  def card_tag(name, content)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dato/utils/meta_tags/base'
3
+ require "dato/utils/meta_tags/base"
4
4
 
5
5
  module Dato
6
6
  module Utils
@@ -10,9 +10,9 @@ module Dato
10
10
  return unless description.present?
11
11
 
12
12
  [
13
- meta_tag('description', description),
14
- og_tag('og:description', description),
15
- card_tag('twitter:description', description)
13
+ meta_tag("description", description),
14
+ og_tag("og:description", description),
15
+ card_tag("twitter:description", description),
16
16
  ]
17
17
  end
18
18