middleman-dato 0.0.1.rc12 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitlab-ci.yml +7 -0
- data/.rspec +2 -0
- data/.rubocop.yml +9 -1070
- data/Gemfile +8 -8
- data/Rakefile +14 -5
- data/foo.rb +12 -0
- data/lib/dato/client.rb +14 -9
- data/lib/dato/entities_repo.rb +43 -0
- data/lib/dato/field_type/boolean.rb +9 -0
- data/lib/dato/field_type/date.rb +9 -0
- data/lib/dato/field_type/date_time.rb +9 -0
- data/lib/dato/field_type/file.rb +30 -0
- data/lib/dato/field_type/float.rb +9 -0
- data/lib/dato/field_type/image.rb +23 -0
- data/lib/dato/field_type/integer.rb +9 -0
- data/lib/dato/field_type/lat_lon.rb +16 -0
- data/lib/dato/field_type/link.rb +9 -0
- data/lib/dato/field_type/links.rb +9 -0
- data/lib/dato/field_type/seo.rb +21 -0
- data/lib/dato/field_type/string.rb +9 -0
- data/lib/dato/field_type/text.rb +9 -0
- data/lib/dato/field_type/video.rb +48 -0
- data/lib/dato/json_api_entity.rb +75 -0
- data/lib/dato/meta_tags/article_modified_time.rb +3 -3
- data/lib/dato/meta_tags/article_publisher.rb +3 -3
- data/lib/dato/meta_tags/base.rb +12 -19
- data/lib/dato/meta_tags/description.rb +4 -4
- data/lib/dato/meta_tags/image.rb +5 -8
- data/lib/dato/meta_tags/og_locale.rb +2 -2
- data/lib/dato/meta_tags/og_meta_tag.rb +2 -4
- data/lib/dato/meta_tags/og_site_name.rb +2 -2
- data/lib/dato/meta_tags/og_type.rb +5 -5
- data/lib/dato/meta_tags/robots.rb +2 -4
- data/lib/dato/meta_tags/title.rb +5 -4
- data/lib/dato/meta_tags/twitter_card.rb +3 -3
- data/lib/dato/meta_tags/twitter_meta_tag.rb +2 -4
- data/lib/dato/meta_tags/twitter_site.rb +2 -2
- data/lib/dato/meta_tags/url.rb +4 -4
- data/lib/dato/meta_tags_builder.rb +13 -13
- data/lib/dato/middleman_extension.rb +15 -23
- data/lib/dato/record.rb +77 -46
- data/lib/dato/records_repo.rb +106 -0
- data/lib/dato/space.rb +36 -0
- data/lib/middleman-dato.rb +5 -2
- data/middleman-dato.gemspec +14 -13
- data/spec/dato/entities_repo_spec.rb +41 -0
- data/spec/dato/field_type/file_spec.rb +20 -0
- data/spec/dato/field_type/image_spec.rb +24 -0
- data/spec/dato/field_type/lat_lon_spec.rb +18 -0
- data/spec/dato/field_type/seo_spec.rb +31 -0
- data/spec/dato/field_type/video_spec.rb +32 -0
- data/spec/dato/json_api_entity_spec.rb +123 -0
- data/spec/dato/meta_tags/article_modified_time_spec.rb +16 -14
- data/spec/dato/meta_tags/image_spec.rb +39 -0
- data/spec/dato/meta_tags/og_locale_spec.rb +14 -12
- data/spec/dato/record_spec.rb +137 -78
- data/spec/dato/records_repo_spec.rb +125 -0
- data/spec/spec_helper.rb +14 -12
- metadata +58 -13
- data/lib/dato/field.rb +0 -43
- data/lib/dato/fields/belongs_to.rb +0 -21
- data/lib/dato/fields/file.rb +0 -22
- data/lib/dato/fields/seo.rb +0 -37
- data/lib/dato/repo.rb +0 -111
- data/lib/middleman_extension.rb +0 -1
- data/spec/dato/field_spec.rb +0 -110
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'dato/meta_tags/og_meta_tag'
|
2
|
+
require 'time'
|
3
3
|
|
4
4
|
module Dato
|
5
5
|
module MetaTags
|
@@ -9,7 +9,7 @@ module Dato
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def name
|
12
|
-
|
12
|
+
'article:modified_time'
|
13
13
|
end
|
14
14
|
|
15
15
|
def value
|
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'dato/meta_tags/og_meta_tag'
|
2
|
+
require 'time'
|
3
3
|
|
4
4
|
module Dato
|
5
5
|
module MetaTags
|
@@ -10,7 +10,7 @@ module Dato
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def name
|
13
|
-
|
13
|
+
'article:publisher'
|
14
14
|
end
|
15
15
|
|
16
16
|
def value
|
data/lib/dato/meta_tags/base.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'forwardable'
|
2
|
+
require 'dato/field_type/seo'
|
3
3
|
|
4
4
|
module Dato
|
5
5
|
module MetaTags
|
@@ -29,45 +29,38 @@ module Dato
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def title_suffix
|
32
|
-
global_seo_field(:title_suffix) ||
|
32
|
+
global_seo_field(:title_suffix) || ''
|
33
33
|
end
|
34
34
|
|
35
35
|
def no_index?
|
36
|
-
space && space
|
36
|
+
space && space.no_index
|
37
37
|
end
|
38
38
|
|
39
39
|
def global_seo_field(attribute)
|
40
|
-
if global_seo
|
41
|
-
global_seo[attribute]
|
42
|
-
end
|
40
|
+
global_seo[attribute] if global_seo
|
43
41
|
end
|
44
42
|
|
45
43
|
def first_record_field_of_type(type)
|
46
44
|
return nil unless record
|
47
45
|
|
48
|
-
field = record.fields.detect do |
|
49
|
-
f
|
46
|
+
field = record.fields.detect do |f|
|
47
|
+
f.field_type == type.to_s
|
50
48
|
end
|
51
49
|
|
52
|
-
if field
|
53
|
-
field_name = field.first
|
54
|
-
record.send(field_name)
|
55
|
-
end
|
50
|
+
record.send(field.api_key) if field
|
56
51
|
end
|
57
52
|
|
58
53
|
def fallback_seo
|
59
54
|
@fallback_seo ||= begin
|
60
|
-
if global_seo
|
61
|
-
Fields::Seo.new(global_seo[:fallback_seo])
|
62
|
-
end
|
55
|
+
FieldType::Seo.parse(global_seo[:fallback_seo], nil) if global_seo
|
63
56
|
end
|
64
57
|
end
|
65
58
|
|
66
59
|
def global_seo
|
67
60
|
@global_seo ||= begin
|
68
|
-
if space && space
|
69
|
-
global_seo = space
|
70
|
-
if space
|
61
|
+
if space && space.global_seo
|
62
|
+
global_seo = space.global_seo
|
63
|
+
if space.locales.size > 1
|
71
64
|
global_seo[I18n.locale]
|
72
65
|
else
|
73
66
|
global_seo
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'dato/meta_tags/base'
|
2
2
|
|
3
3
|
module Dato
|
4
4
|
module MetaTags
|
@@ -8,17 +8,17 @@ module Dato
|
|
8
8
|
[
|
9
9
|
builder.tag(
|
10
10
|
:meta,
|
11
|
-
name:
|
11
|
+
name: 'description',
|
12
12
|
content: description
|
13
13
|
),
|
14
14
|
builder.tag(
|
15
15
|
:meta,
|
16
|
-
property:
|
16
|
+
property: 'og:description',
|
17
17
|
content: description
|
18
18
|
),
|
19
19
|
builder.tag(
|
20
20
|
:meta,
|
21
|
-
name:
|
21
|
+
name: 'twitter:description',
|
22
22
|
content: description
|
23
23
|
)
|
24
24
|
]
|
data/lib/dato/meta_tags/image.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'dato/meta_tags/base'
|
2
2
|
|
3
3
|
module Dato
|
4
4
|
module MetaTags
|
@@ -6,8 +6,8 @@ module Dato
|
|
6
6
|
def build
|
7
7
|
if image.present?
|
8
8
|
[
|
9
|
-
builder.tag(:meta, property:
|
10
|
-
builder.tag(:meta, name:
|
9
|
+
builder.tag(:meta, property: 'og:image', content: image),
|
10
|
+
builder.tag(:meta, name: 'twitter:image', content: image)
|
11
11
|
]
|
12
12
|
end
|
13
13
|
end
|
@@ -17,13 +17,10 @@ module Dato
|
|
17
17
|
:image,
|
18
18
|
first_record_field_of_type(:image)
|
19
19
|
) do |i|
|
20
|
-
i.
|
21
|
-
i.attributes[:height] >= 200
|
20
|
+
i.width >= 200 && i.height >= 200
|
22
21
|
end
|
23
22
|
|
24
|
-
if image
|
25
|
-
image.file.format("jpg").to_url
|
26
|
-
end
|
23
|
+
image.file.format('jpg').to_url if image
|
27
24
|
end
|
28
25
|
end
|
29
26
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'dato/meta_tags/base'
|
2
2
|
|
3
3
|
module Dato
|
4
4
|
module MetaTags
|
@@ -8,9 +8,7 @@ module Dato
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def build
|
11
|
-
if buildable?
|
12
|
-
builder.tag(:meta, property: name, content: value)
|
13
|
-
end
|
11
|
+
builder.tag(:meta, property: name, content: value) if buildable?
|
14
12
|
end
|
15
13
|
|
16
14
|
def name
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'dato/meta_tags/og_meta_tag'
|
2
2
|
|
3
3
|
module Dato
|
4
4
|
module MetaTags
|
@@ -8,16 +8,16 @@ module Dato
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def name
|
11
|
-
|
11
|
+
'og:type'
|
12
12
|
end
|
13
13
|
|
14
14
|
def value
|
15
15
|
if !record
|
16
|
-
|
16
|
+
'website'
|
17
17
|
elsif record.singleton?
|
18
|
-
|
18
|
+
'website'
|
19
19
|
else
|
20
|
-
|
20
|
+
'article'
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -1,12 +1,10 @@
|
|
1
|
-
require
|
1
|
+
require 'dato/meta_tags/base'
|
2
2
|
|
3
3
|
module Dato
|
4
4
|
module MetaTags
|
5
5
|
class Robots < Base
|
6
6
|
def build
|
7
|
-
if no_index?
|
8
|
-
builder.tag(:meta, name: "robots", content: "noindex")
|
9
|
-
end
|
7
|
+
builder.tag(:meta, name: 'robots', content: 'noindex') if no_index?
|
10
8
|
end
|
11
9
|
end
|
12
10
|
end
|
data/lib/dato/meta_tags/title.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'dato/meta_tags/base'
|
2
2
|
|
3
3
|
module Dato
|
4
4
|
module MetaTags
|
@@ -7,8 +7,8 @@ module Dato
|
|
7
7
|
if title.present?
|
8
8
|
[
|
9
9
|
builder.content_tag(:title, title_with_suffix),
|
10
|
-
builder.tag(:meta, property:
|
11
|
-
builder.tag(:meta, name:
|
10
|
+
builder.tag(:meta, property: 'og:title', content: title),
|
11
|
+
builder.tag(:meta, name: 'twitter:title', content: title)
|
12
12
|
]
|
13
13
|
end
|
14
14
|
end
|
@@ -16,7 +16,8 @@ module Dato
|
|
16
16
|
def title
|
17
17
|
@title ||= seo_field_with_fallback(
|
18
18
|
:title,
|
19
|
-
|
19
|
+
record && record.title_attribute &&
|
20
|
+
record.send(record.title_attribute)
|
20
21
|
)
|
21
22
|
end
|
22
23
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'dato/meta_tags/twitter_meta_tag'
|
2
2
|
|
3
3
|
module Dato
|
4
4
|
module MetaTags
|
@@ -8,11 +8,11 @@ module Dato
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def name
|
11
|
-
|
11
|
+
'twitter:card'
|
12
12
|
end
|
13
13
|
|
14
14
|
def value
|
15
|
-
|
15
|
+
'summary'
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'dato/meta_tags/base'
|
2
2
|
|
3
3
|
module Dato
|
4
4
|
module MetaTags
|
@@ -8,9 +8,7 @@ module Dato
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def build
|
11
|
-
if buildable?
|
12
|
-
builder.tag(:meta, name: name, content: value)
|
13
|
-
end
|
11
|
+
builder.tag(:meta, name: name, content: value) if buildable?
|
14
12
|
end
|
15
13
|
|
16
14
|
def name
|
data/lib/dato/meta_tags/url.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'dato/meta_tags/base'
|
2
2
|
|
3
3
|
module Dato
|
4
4
|
module MetaTags
|
@@ -6,9 +6,9 @@ module Dato
|
|
6
6
|
def build
|
7
7
|
if url.present?
|
8
8
|
[
|
9
|
-
builder.tag(:link, rel:
|
10
|
-
builder.tag(:meta, property:
|
11
|
-
builder.tag(:meta, name:
|
9
|
+
builder.tag(:link, rel: 'canonical', href: url),
|
10
|
+
builder.tag(:meta, property: 'og:url', content: url),
|
11
|
+
builder.tag(:meta, name: 'twitter:url', content: url)
|
12
12
|
]
|
13
13
|
end
|
14
14
|
end
|
@@ -1,15 +1,15 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
1
|
+
require 'dato/meta_tags/title'
|
2
|
+
require 'dato/meta_tags/description'
|
3
|
+
require 'dato/meta_tags/image'
|
4
|
+
require 'dato/meta_tags/url'
|
5
|
+
require 'dato/meta_tags/robots'
|
6
|
+
require 'dato/meta_tags/og_locale'
|
7
|
+
require 'dato/meta_tags/og_type'
|
8
|
+
require 'dato/meta_tags/og_site_name'
|
9
|
+
require 'dato/meta_tags/article_modified_time'
|
10
|
+
require 'dato/meta_tags/article_publisher'
|
11
|
+
require 'dato/meta_tags/twitter_card'
|
12
|
+
require 'dato/meta_tags/twitter_site'
|
13
13
|
|
14
14
|
module Dato
|
15
15
|
class MetaTagsBuilder
|
@@ -26,7 +26,7 @@ module Dato
|
|
26
26
|
MetaTags::ArticlePublisher,
|
27
27
|
MetaTags::TwitterCard,
|
28
28
|
MetaTags::TwitterSite
|
29
|
-
]
|
29
|
+
].freeze
|
30
30
|
|
31
31
|
def initialize(*args)
|
32
32
|
@args = args
|
@@ -1,29 +1,24 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require "ostruct"
|
1
|
+
require 'middleman-core'
|
2
|
+
require 'dato/space'
|
3
|
+
require 'dato/meta_tags_builder'
|
5
4
|
|
6
5
|
module Dato
|
7
6
|
class MiddlemanExtension < ::Middleman::Extension
|
8
|
-
|
9
|
-
option :token, nil, "Space API token"
|
10
|
-
option :api_host, "http://dato-api.herokuapp.com", "Space API token"
|
11
|
-
option :base_url, nil, "Website base URL"
|
7
|
+
attr_reader :space
|
12
8
|
|
13
|
-
|
9
|
+
option :domain, nil, 'Space domain'
|
10
|
+
option :token, nil, 'Space API token'
|
11
|
+
option :api_host, 'http://api.datocms.com', 'Space API token'
|
12
|
+
option :base_url, nil, 'Website base URL'
|
14
13
|
|
15
14
|
def initialize(app, options_hash = {}, &block)
|
16
15
|
super
|
17
16
|
|
18
|
-
|
19
|
-
|
17
|
+
@space = space = Dato::Space.new(options)
|
18
|
+
@space.refresh!
|
20
19
|
|
21
20
|
app.before do
|
22
|
-
if !build? && !ENV.fetch(
|
23
|
-
print "Syncing Dato space... "
|
24
|
-
Repo.instance.sync!
|
25
|
-
puts "done."
|
26
|
-
end
|
21
|
+
space.refresh! if !build? && !ENV.fetch('DISABLE_DATO_REFRESH', false)
|
27
22
|
true
|
28
23
|
end
|
29
24
|
|
@@ -32,26 +27,23 @@ module Dato
|
|
32
27
|
|
33
28
|
module InstanceMethods
|
34
29
|
def dato
|
35
|
-
|
30
|
+
extensions[:dato].space.records_repo
|
36
31
|
end
|
37
32
|
end
|
38
33
|
|
39
34
|
helpers do
|
40
35
|
def dato
|
41
|
-
|
36
|
+
extensions[:dato].space.records_repo
|
42
37
|
end
|
43
38
|
|
44
39
|
def dato_meta_tags(record)
|
45
40
|
builder = MetaTagsBuilder.new(
|
46
41
|
self,
|
47
|
-
|
48
|
-
|
42
|
+
extensions[:dato].options[:base_url],
|
43
|
+
extensions[:dato].space.entity,
|
49
44
|
record
|
50
45
|
)
|
51
46
|
builder.meta_tags
|
52
|
-
rescue Exception => e
|
53
|
-
puts e.message
|
54
|
-
puts e.backtrace.join("\n")
|
55
47
|
end
|
56
48
|
end
|
57
49
|
end
|