middleman-dato 0.0.1.rc4 → 0.0.1.rc5

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,16 +1,20 @@
1
1
  # If you do not have OpenSSL installed, update
2
2
  # the following line to use "http://" instead
3
- source 'https://rubygems.org'
3
+ source "https://rubygems.org"
4
4
 
5
5
  # Specify your gem's dependencies in middleman-dato.gemspec
6
6
  gemspec
7
7
 
8
+ gem "rubocop"
9
+ gem "rubocop-rspec"
10
+
8
11
  group :development do
9
- gem 'rake'
10
- gem 'rdoc'
11
- gem 'yard'
12
+ gem "rake"
13
+ gem "rdoc"
14
+ gem "yard"
12
15
  end
13
16
 
14
17
  group :test do
15
- gem 'rspec'
18
+ gem "rspec"
19
+ gem "simplecov", require: false
16
20
  end
data/Rakefile CHANGED
@@ -1,14 +1,12 @@
1
- require 'bundler'
1
+ require "bundler"
2
2
  Bundler::GemHelper.install_tasks
3
3
 
4
- require 'cucumber/rake/task'
4
+ require "rspec/core/rake_task"
5
+ RSpec::Core::RakeTask.new(:spec)
5
6
 
6
- Cucumber::Rake::Task.new(:cucumber, 'Run features that should pass') do |t|
7
- t.cucumber_opts = "--color --tags ~@wip --strict --format #{ENV['CUCUMBER_FORMAT'] || 'Fivemat'}"
7
+ require "rubocop/rake_task"
8
+ RuboCop::RakeTask.new do |task|
9
+ task.requires << "rubocop-rspec"
8
10
  end
9
11
 
10
- require 'rake/clean'
11
-
12
- task test: ['cucumber']
13
-
14
- task default: :test
12
+ task default: :spec
data/lib/dato/client.rb CHANGED
@@ -5,7 +5,9 @@ require "json"
5
5
  module Dato
6
6
  class Client
7
7
  def initialize(host, domain, token)
8
- @host, @domain, @token = host, domain, token
8
+ @host = host
9
+ @domain = domain
10
+ @token = token
9
11
  end
10
12
 
11
13
  def space
@@ -28,10 +30,10 @@ module Dato
28
30
  options = {
29
31
  url: @host,
30
32
  headers: {
31
- "Content-Type" => "application/json",
32
- "Accept" => "application/json",
33
+ "Content-Type" => "application/json",
34
+ "Accept" => "application/json",
33
35
  "X-Space-Domain" => @domain,
34
- "Authorization" => "Api-Key #{@token}"
36
+ "Authorization" => "Api-Key #{@token}"
35
37
  }
36
38
  }
37
39
  @connection ||= Faraday.new(options) do |c|
data/lib/dato/field.rb ADDED
@@ -0,0 +1,43 @@
1
+ require "active_support/core_ext/hash/indifferent_access"
2
+ require "dato/repo"
3
+ require "dato/fields/file"
4
+ require "dato/fields/seo"
5
+ require "time"
6
+
7
+ module Dato
8
+ class Field
9
+ class << self
10
+ def value(attribute, field)
11
+ attribute = translated_attribute(attribute, field)
12
+ converted_attribute(attribute, field) if attribute
13
+ end
14
+
15
+ private
16
+
17
+ def translated_attribute(attribute, field)
18
+ field[:localized] ? attribute[I18n.locale.to_sym] : attribute
19
+ end
20
+
21
+ def converted_attribute(attribute, field)
22
+ if factory = field_mappings[field[:field_type].to_sym]
23
+ factory.call(attribute)
24
+ else
25
+ attribute
26
+ end
27
+ end
28
+
29
+ def field_mappings
30
+ {
31
+ image: Dato::Fields::File.method(:new),
32
+ file: Dato::Fields::File.method(:new),
33
+ date: Date.method(:parse),
34
+ seo: Dato::Fields::Seo.method(:new),
35
+ belongs_to_one: Dato::Repo.instance.method(:find),
36
+ embeds_one: Dato::Repo.instance.method(:find),
37
+ belongs_to_many: Dato::Repo.instance.method(:find_all),
38
+ embeds_many: Dato::Repo.instance.method(:find_all)
39
+ }
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,21 @@
1
+ module Dato
2
+ module Fields
3
+ class BelongsTo
4
+ attr_reader :attributes
5
+
6
+ def initialize(data)
7
+ @record_id = data
8
+ field = field.with_indifferent_access
9
+ @content_type = field[:record_content_type][:content_type]
10
+ end
11
+
12
+ def value
13
+ Dato::Repo.instance.records_per_content_type
14
+ end
15
+
16
+ def ==(other)
17
+ attributes == other.attributes
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,22 @@
1
+ require "imgix"
2
+
3
+ module Dato
4
+ module Fields
5
+ class File
6
+ attr_reader :attributes
7
+
8
+ def initialize(data)
9
+ @attributes = data.with_indifferent_access
10
+ end
11
+
12
+ def file
13
+ @file ||= Imgix::Client.new(host: "dato-images.imgix.net").
14
+ path(attributes[:path])
15
+ end
16
+
17
+ def ==(other)
18
+ attributes == other.attributes
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,37 @@
1
+ require "imgix"
2
+
3
+ module Dato
4
+ module Fields
5
+ class Seo
6
+ attr_reader :attributes
7
+
8
+ def initialize(data)
9
+ @attributes = data.with_indifferent_access
10
+ end
11
+
12
+ def image
13
+ @attributes[:image] && File.new(@attributes[:image])
14
+ end
15
+
16
+ def respond_to?(method, include_private = false)
17
+ if @attributes.has_key?(method)
18
+ true
19
+ else
20
+ super
21
+ end
22
+ end
23
+
24
+ def method_missing(method, *arguments, &block)
25
+ if @attributes.has_key?(method) && arguments.size == 0
26
+ @attributes[method.to_sym]
27
+ else
28
+ super
29
+ end
30
+ end
31
+
32
+ def ==(other)
33
+ attributes == other.attributes
34
+ end
35
+ end
36
+ end
37
+ end
@@ -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
@@ -1,12 +1,12 @@
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
6
6
  class ArticlePublisher < OgMetaTag
7
7
  def buildable?
8
8
  record && !record.singleton? &&
9
- global_seo_field(:facebook_page_url).present?
9
+ global_seo_field(:facebook_page_url).present?
10
10
  end
11
11
 
12
12
  def name
@@ -1,5 +1,5 @@
1
- require 'forwardable'
2
- require 'dato/seo'
1
+ require "forwardable"
2
+ require "dato/fields/seo"
3
3
 
4
4
  module Dato
5
5
  module MetaTags
@@ -45,8 +45,8 @@ module Dato
45
45
  def first_record_field_of_type(type)
46
46
  return nil unless record
47
47
 
48
- field = record.fields.find do |name, field|
49
- field[:field_type] == type.to_s
48
+ field = record.fields.detect do |_name, f|
49
+ f[:field_type] == type.to_s
50
50
  end
51
51
 
52
52
  if field
@@ -58,7 +58,7 @@ module Dato
58
58
  def fallback_seo
59
59
  @fallback_seo ||= begin
60
60
  if global_seo
61
- Seo.new(global_seo[:fallback_seo])
61
+ Fields::Seo.new(global_seo[:fallback_seo])
62
62
  end
63
63
  end
64
64
  end
@@ -1,15 +1,26 @@
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 Description < Base
6
-
7
6
  def build
8
7
  if description.present?
9
8
  [
10
- builder.tag(:meta, name: "description", content: description),
11
- builder.tag(:meta, property: "og:description", content: description),
12
- builder.tag(:meta, name: "twitter:description", content: description)
9
+ builder.tag(
10
+ :meta,
11
+ name: "description",
12
+ content: description
13
+ ),
14
+ builder.tag(
15
+ :meta,
16
+ property: "og:description",
17
+ content: description
18
+ ),
19
+ builder.tag(
20
+ :meta,
21
+ name: "twitter:description",
22
+ content: description
23
+ )
13
24
  ]
14
25
  end
15
26
  end
@@ -20,5 +31,3 @@ module Dato
20
31
  end
21
32
  end
22
33
  end
23
-
24
-
@@ -1,9 +1,8 @@
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 Image < Base
6
-
7
6
  def build
8
7
  if image.present?
9
8
  [
@@ -17,9 +16,9 @@ module Dato
17
16
  image = seo_field_with_fallback(
18
17
  :image,
19
18
  first_record_field_of_type(:image)
20
- ) do |image|
21
- image.attributes[:width] >= 200 &&
22
- image.attributes[:height] >= 200
19
+ ) do |i|
20
+ i.attributes[:width] >= 200 &&
21
+ i.attributes[:height] >= 200
23
22
  end
24
23
 
25
24
  if image
@@ -29,5 +28,3 @@ module Dato
29
28
  end
30
29
  end
31
30
  end
32
-
33
-
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -11,6 +11,3 @@ module Dato
11
11
  end
12
12
  end
13
13
  end
14
-
15
-
16
-
@@ -1,9 +1,8 @@
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 Title < Base
6
-
7
6
  def build
8
7
  if title.present?
9
8
  [
@@ -33,5 +32,3 @@ module Dato
33
32
  end
34
33
  end
35
34
  end
36
-
37
-
@@ -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
@@ -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
@@ -23,4 +23,3 @@ module Dato
23
23
  end
24
24
  end
25
25
  end
26
-
@@ -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
@@ -1,9 +1,8 @@
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 Url < Base
6
-
7
6
  def build
8
7
  if url.present?
9
8
  [
@@ -20,5 +19,3 @@ module Dato
20
19
  end
21
20
  end
22
21
  end
23
-
24
-
@@ -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