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.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.gitlab-ci.yml +7 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +9 -1070
  5. data/Gemfile +8 -8
  6. data/Rakefile +14 -5
  7. data/foo.rb +12 -0
  8. data/lib/dato/client.rb +14 -9
  9. data/lib/dato/entities_repo.rb +43 -0
  10. data/lib/dato/field_type/boolean.rb +9 -0
  11. data/lib/dato/field_type/date.rb +9 -0
  12. data/lib/dato/field_type/date_time.rb +9 -0
  13. data/lib/dato/field_type/file.rb +30 -0
  14. data/lib/dato/field_type/float.rb +9 -0
  15. data/lib/dato/field_type/image.rb +23 -0
  16. data/lib/dato/field_type/integer.rb +9 -0
  17. data/lib/dato/field_type/lat_lon.rb +16 -0
  18. data/lib/dato/field_type/link.rb +9 -0
  19. data/lib/dato/field_type/links.rb +9 -0
  20. data/lib/dato/field_type/seo.rb +21 -0
  21. data/lib/dato/field_type/string.rb +9 -0
  22. data/lib/dato/field_type/text.rb +9 -0
  23. data/lib/dato/field_type/video.rb +48 -0
  24. data/lib/dato/json_api_entity.rb +75 -0
  25. data/lib/dato/meta_tags/article_modified_time.rb +3 -3
  26. data/lib/dato/meta_tags/article_publisher.rb +3 -3
  27. data/lib/dato/meta_tags/base.rb +12 -19
  28. data/lib/dato/meta_tags/description.rb +4 -4
  29. data/lib/dato/meta_tags/image.rb +5 -8
  30. data/lib/dato/meta_tags/og_locale.rb +2 -2
  31. data/lib/dato/meta_tags/og_meta_tag.rb +2 -4
  32. data/lib/dato/meta_tags/og_site_name.rb +2 -2
  33. data/lib/dato/meta_tags/og_type.rb +5 -5
  34. data/lib/dato/meta_tags/robots.rb +2 -4
  35. data/lib/dato/meta_tags/title.rb +5 -4
  36. data/lib/dato/meta_tags/twitter_card.rb +3 -3
  37. data/lib/dato/meta_tags/twitter_meta_tag.rb +2 -4
  38. data/lib/dato/meta_tags/twitter_site.rb +2 -2
  39. data/lib/dato/meta_tags/url.rb +4 -4
  40. data/lib/dato/meta_tags_builder.rb +13 -13
  41. data/lib/dato/middleman_extension.rb +15 -23
  42. data/lib/dato/record.rb +77 -46
  43. data/lib/dato/records_repo.rb +106 -0
  44. data/lib/dato/space.rb +36 -0
  45. data/lib/middleman-dato.rb +5 -2
  46. data/middleman-dato.gemspec +14 -13
  47. data/spec/dato/entities_repo_spec.rb +41 -0
  48. data/spec/dato/field_type/file_spec.rb +20 -0
  49. data/spec/dato/field_type/image_spec.rb +24 -0
  50. data/spec/dato/field_type/lat_lon_spec.rb +18 -0
  51. data/spec/dato/field_type/seo_spec.rb +31 -0
  52. data/spec/dato/field_type/video_spec.rb +32 -0
  53. data/spec/dato/json_api_entity_spec.rb +123 -0
  54. data/spec/dato/meta_tags/article_modified_time_spec.rb +16 -14
  55. data/spec/dato/meta_tags/image_spec.rb +39 -0
  56. data/spec/dato/meta_tags/og_locale_spec.rb +14 -12
  57. data/spec/dato/record_spec.rb +137 -78
  58. data/spec/dato/records_repo_spec.rb +125 -0
  59. data/spec/spec_helper.rb +14 -12
  60. metadata +58 -13
  61. data/lib/dato/field.rb +0 -43
  62. data/lib/dato/fields/belongs_to.rb +0 -21
  63. data/lib/dato/fields/file.rb +0 -22
  64. data/lib/dato/fields/seo.rb +0 -37
  65. data/lib/dato/repo.rb +0 -111
  66. data/lib/middleman_extension.rb +0 -1
  67. data/spec/dato/field_spec.rb +0 -110
@@ -1,5 +1,5 @@
1
- require "dato/meta_tags/og_meta_tag"
2
- require "time"
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
- "article:modified_time"
12
+ 'article:modified_time'
13
13
  end
14
14
 
15
15
  def value
@@ -1,5 +1,5 @@
1
- require "dato/meta_tags/og_meta_tag"
2
- require "time"
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
- "article:publisher"
13
+ 'article:publisher'
14
14
  end
15
15
 
16
16
  def value
@@ -1,5 +1,5 @@
1
- require "forwardable"
2
- require "dato/fields/seo"
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[:attributes][:no_index]
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 |_name, f|
49
- f[:field_type] == type.to_s
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[:attributes][:global_seo]
69
- global_seo = space[:attributes][:global_seo]
70
- if space[:attributes][:locales].size > 1
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 "dato/meta_tags/base"
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: "description",
11
+ name: 'description',
12
12
  content: description
13
13
  ),
14
14
  builder.tag(
15
15
  :meta,
16
- property: "og:description",
16
+ property: 'og:description',
17
17
  content: description
18
18
  ),
19
19
  builder.tag(
20
20
  :meta,
21
- name: "twitter:description",
21
+ name: 'twitter:description',
22
22
  content: description
23
23
  )
24
24
  ]
@@ -1,4 +1,4 @@
1
- require "dato/meta_tags/base"
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: "og:image", content: image),
10
- builder.tag(:meta, name: "twitter:image", content: image)
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.attributes[:width] >= 200 &&
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 "dato/meta_tags/og_meta_tag"
1
+ require 'dato/meta_tags/og_meta_tag'
2
2
 
3
3
  module Dato
4
4
  module MetaTags
@@ -8,7 +8,7 @@ module Dato
8
8
  end
9
9
 
10
10
  def name
11
- "og:locale"
11
+ 'og:locale'
12
12
  end
13
13
 
14
14
  def value
@@ -1,4 +1,4 @@
1
- require "dato/meta_tags/base"
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 "dato/meta_tags/og_meta_tag"
1
+ require 'dato/meta_tags/og_meta_tag'
2
2
 
3
3
  module Dato
4
4
  module MetaTags
@@ -8,7 +8,7 @@ module Dato
8
8
  end
9
9
 
10
10
  def name
11
- "og:site_name"
11
+ 'og:site_name'
12
12
  end
13
13
 
14
14
  def value
@@ -1,4 +1,4 @@
1
- require "dato/meta_tags/og_meta_tag"
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
- "og:type"
11
+ 'og:type'
12
12
  end
13
13
 
14
14
  def value
15
15
  if !record
16
- "website"
16
+ 'website'
17
17
  elsif record.singleton?
18
- "website"
18
+ 'website'
19
19
  else
20
- "article"
20
+ 'article'
21
21
  end
22
22
  end
23
23
  end
@@ -1,12 +1,10 @@
1
- require "dato/meta_tags/base"
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
@@ -1,4 +1,4 @@
1
- require "dato/meta_tags/base"
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: "og:title", content: title),
11
- builder.tag(:meta, name: "twitter:title", content: title)
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
- first_record_field_of_type(:title)
19
+ record && record.title_attribute &&
20
+ record.send(record.title_attribute)
20
21
  )
21
22
  end
22
23
 
@@ -1,4 +1,4 @@
1
- require "dato/meta_tags/twitter_meta_tag"
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
- "twitter:card"
11
+ 'twitter:card'
12
12
  end
13
13
 
14
14
  def value
15
- "summary"
15
+ 'summary'
16
16
  end
17
17
  end
18
18
  end
@@ -1,4 +1,4 @@
1
- require "dato/meta_tags/base"
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
@@ -1,4 +1,4 @@
1
- require "dato/meta_tags/twitter_meta_tag"
1
+ require 'dato/meta_tags/twitter_meta_tag'
2
2
 
3
3
  module Dato
4
4
  module MetaTags
@@ -8,7 +8,7 @@ module Dato
8
8
  end
9
9
 
10
10
  def name
11
- "twitter:site"
11
+ 'twitter:site'
12
12
  end
13
13
 
14
14
  def value
@@ -1,4 +1,4 @@
1
- require "dato/meta_tags/base"
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: "canonical", href: url),
10
- builder.tag(:meta, property: "og:url", content: url),
11
- builder.tag(:meta, name: "twitter:url", content: url)
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 "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"
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 "middleman-core"
2
- require "dato/repo"
3
- require "dato/meta_tags_builder"
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
- option :domain, nil, "Space domain"
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
- attr_reader :records
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
- Repo.instance.connection_options = options
19
- Repo.instance.sync!
17
+ @space = space = Dato::Space.new(options)
18
+ @space.refresh!
20
19
 
21
20
  app.before do
22
- if !build? && !ENV.fetch("DISABLE_DATO_REFRESH", false)
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
- OpenStruct.new(Repo.instance.records_per_content_type)
30
+ extensions[:dato].space.records_repo
36
31
  end
37
32
  end
38
33
 
39
34
  helpers do
40
35
  def dato
41
- OpenStruct.new(Repo.instance.records_per_content_type)
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
- Repo.instance.connection_options[:base_url],
48
- Repo.instance.space,
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