jekyll-contentful-data-import 1.4.3 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -0
- data/.rubocop_todo.yml +38 -0
- data/CHANGELOG.md +11 -0
- data/Guardfile +9 -4
- data/README.md +23 -21
- data/jekyll-contentful.gemspec +4 -1
- data/lib/jekyll-contentful-data-import.rb +1 -1
- data/lib/jekyll-contentful-data-import/data_exporter.rb +27 -7
- data/lib/jekyll-contentful-data-import/importer.rb +18 -7
- data/lib/jekyll-contentful-data-import/mappers/base.rb +36 -8
- data/lib/jekyll-contentful-data-import/serializer.rb +3 -0
- data/lib/jekyll-contentful-data-import/version.rb +1 -1
- data/lib/jekyll/commands/contentful.rb +21 -11
- data/spec/jekyll-contentful/mappers/base_spec.rb +55 -8
- data/spec/jekyll-contentful/serializer_spec.rb +64 -5
- data/spec/spec_helper.rb +6 -1
- metadata +54 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b070683edf1ce2aaac689f088b6913804b8cc6be
|
4
|
+
data.tar.gz: 957112e98c2d0318336e8b709a1900c9a9fc752c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c2ddbe6c4e3a7bfb1d85de3f720100e4d3603b1b573647f9f5419da341cbea327df443e112f894f25568a9496374b314a40943ef57b03518d7c97ed4f17ea0e7
|
7
|
+
data.tar.gz: f01b63f3eef1da47fb685eb713ce44d03ed30d2a7ee5cb969f0a17d9d19a97aaf17aa42732bafdae54ddcfc31d68633c432213e976508c6b4e442cef608115d8
|
data/.rubocop.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
inherit_from: .rubocop_todo.yml
|
data/.rubocop_todo.yml
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# This configuration was generated by
|
2
|
+
# `rubocop --auto-gen-config`
|
3
|
+
# on 2017-04-11 11:57:26 -0300 using RuboCop version 0.47.1.
|
4
|
+
# The point is for the user to remove these configuration records
|
5
|
+
# one by one as the offenses are removed from the code base.
|
6
|
+
# Note that changes in the inspected code, or installation of new
|
7
|
+
# versions of RuboCop, may require this file to be generated again.
|
8
|
+
|
9
|
+
# Offense count: 2
|
10
|
+
Metrics/AbcSize:
|
11
|
+
Max: 20
|
12
|
+
|
13
|
+
# Offense count: 1
|
14
|
+
# Configuration parameters: CountComments.
|
15
|
+
Metrics/ClassLength:
|
16
|
+
Max: 120
|
17
|
+
|
18
|
+
# Offense count: 1
|
19
|
+
Metrics/CyclomaticComplexity:
|
20
|
+
Max: 8
|
21
|
+
|
22
|
+
# Offense count: 3
|
23
|
+
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
|
24
|
+
# URISchemes: http, https
|
25
|
+
Metrics/LineLength:
|
26
|
+
Max: 100
|
27
|
+
|
28
|
+
# Offense count: 3
|
29
|
+
# Configuration parameters: CountComments.
|
30
|
+
Metrics/MethodLength:
|
31
|
+
Max: 25
|
32
|
+
|
33
|
+
# Offense count: 1
|
34
|
+
# Configuration parameters: ExpectMatchingDefinition, Regex, IgnoreExecutableScripts, AllowedAcronyms.
|
35
|
+
# AllowedAcronyms: CLI, DSL, ACL, API, ASCII, CPU, CSS, DNS, EOF, GUID, HTML, HTTP, HTTPS, ID, IP, JSON, LHS, QPS, RAM, RHS, RPC, SLA, SMTP, SQL, SSH, TCP, TLS, TTL, UDP, UI, UID, UUID, URI, URL, UTF8, VM, XML, XMPP, XSRF, XSS
|
36
|
+
Style/FileName:
|
37
|
+
Exclude:
|
38
|
+
- 'lib/jekyll-contentful-data-import.rb'
|
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,18 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
3
|
## Unreleased
|
4
|
+
|
5
|
+
## v1.5.0
|
6
|
+
|
7
|
+
### Changed
|
8
|
+
* Updated CDA SDK to 2.0
|
9
|
+
|
4
10
|
### Added
|
11
|
+
* Added more metadata to `sys` attributes in entries
|
12
|
+
* Added `sys` attributes for serialized assets
|
13
|
+
|
14
|
+
### Fixed
|
15
|
+
* Updated code to match style guide
|
5
16
|
|
6
17
|
### v1.4.3
|
7
18
|
* Added use of `map_field` without localizing for custom mappers that map `sys` properties when `locale='*'` is being sent.
|
data/Guardfile
CHANGED
@@ -1,5 +1,10 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
group :green_red_refactor, halt_on_fail: true do
|
2
|
+
guard :rspec, cmd: 'rspec --format documentation --color' do
|
3
|
+
watch(%r{^spec/.+_spec\.rb$})
|
4
|
+
watch(%r{^lib/.+\.rb$}) { "spec" }
|
5
|
+
watch('spec/spec_helper.rb') { "spec" }
|
6
|
+
end
|
7
|
+
|
8
|
+
guard :rubocop, cmd: "rubocop", cli: 'lib' do
|
9
|
+
end
|
5
10
|
end
|
data/README.md
CHANGED
@@ -67,7 +67,7 @@ all_entries_page_size | Integer, the amount of maximum entries per CDA Request w
|
|
67
67
|
content_types | Hash describing the mapping applied to entries of the imported content types
|
68
68
|
client_options | Hash describing Contentful::Client configuration. See [contentful.rb](https://github.com/contentful/contentful.rb) for more info.
|
69
69
|
base_path | String with path to your Jekyll Application, defaults to current directory. Path is relative to your current location.
|
70
|
-
destination | String with path within _data under which to store the output yaml file. Defaults to contentful/spaces
|
70
|
+
destination | String with path within `_data` under which to store the output yaml file. Defaults to contentful/spaces
|
71
71
|
|
72
72
|
You can add multiple spaces to your configuration
|
73
73
|
|
@@ -123,33 +123,35 @@ Then proceed to run: `bundle exec rake contentful`
|
|
123
123
|
In most cases you may want to avoid including your credentials in publicly available sites,
|
124
124
|
therefore you can do the following:
|
125
125
|
|
126
|
-
1. `bundle update`—make sure your gem version supports ENV_ variables
|
126
|
+
1. `bundle update`—make sure your gem version supports `ENV_` variables
|
127
127
|
|
128
|
-
2. Set up your _config like so:
|
128
|
+
2. Set up your `_config` like so:
|
129
129
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
130
|
+
```yaml
|
131
|
+
contentful:
|
132
|
+
spaces:
|
133
|
+
- example:
|
134
|
+
space: ENV_CONTENTFUL_SPACE_ID
|
135
|
+
access_token: ENV_CONTENTFUL_ACCESS_TOKEN
|
136
|
+
```
|
137
|
+
|
138
|
+
(Your Space ID will be looked upon on `ENV['CONTENTFUL_SPACE_ID']` and your Access Token on `ENV['CONTENTFUL_ACCESS_TOKEN']`.)
|
139
139
|
|
140
140
|
3. Either add the following variables to your shell's configuration file (.bashrc or .bash_profile, for example):
|
141
141
|
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
142
|
+
```bash
|
143
|
+
export CONTENTFUL_ACCESS_TOKEN=abc123
|
144
|
+
export CONTENTFUL_SPACE_ID=abc123
|
145
|
+
```
|
146
|
+
|
147
|
+
(And run `source ~/.bashrc` or open new terminal to enable changes.)
|
148
|
+
|
149
|
+
Or specify them on the command line:
|
147
150
|
|
148
|
-
|
151
|
+
```bash
|
152
|
+
CONTENTFUL_ACCESS_TOKEN=abc123 CONTENTFUL_SPACE_ID=abc123 jekyll contentful
|
153
|
+
```
|
149
154
|
|
150
|
-
```bash
|
151
|
-
CONTENTFUL_ACCESS_TOKEN=abc123 CONTENTFUL_SPACE_ID=abc123 jekyll contentful
|
152
|
-
```
|
153
155
|
4. Party.
|
154
156
|
|
155
157
|
This way, it is safe to share your code without having to worry
|
data/jekyll-contentful.gemspec
CHANGED
@@ -22,15 +22,18 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.add_dependency("jekyll", ">= 2.5.0", "< 4")
|
23
23
|
|
24
24
|
# Additional dependencies
|
25
|
-
s.add_dependency("contentful", '~>
|
25
|
+
s.add_dependency("contentful", '>= 2.0.1', '~> 2.0')
|
26
26
|
|
27
27
|
s.add_development_dependency 'rubygems-tasks', '~> 0.2'
|
28
28
|
s.add_development_dependency "guard"
|
29
29
|
s.add_development_dependency "guard-rspec"
|
30
|
+
s.add_development_dependency 'guard-rubocop'
|
30
31
|
s.add_development_dependency "bundler", "~> 1.6"
|
31
32
|
s.add_development_dependency "rake"
|
32
33
|
s.add_development_dependency "rspec", "~> 3.0"
|
33
34
|
s.add_development_dependency "vcr"
|
34
35
|
s.add_development_dependency "webmock"
|
35
36
|
s.add_development_dependency "pry"
|
37
|
+
s.add_development_dependency "simplecov"
|
38
|
+
s.add_development_dependency "rubocop"
|
36
39
|
end
|
@@ -2,10 +2,13 @@ require 'jekyll-contentful-data-import/serializer'
|
|
2
2
|
|
3
3
|
module Jekyll
|
4
4
|
module Contentful
|
5
|
+
# Data Exporter Class
|
6
|
+
#
|
7
|
+
# Serializes Contentful data into YAML files
|
5
8
|
class DataExporter
|
6
|
-
DATA_FOLDER = '_data'
|
7
|
-
CONTENTFUL_FOLDER = 'contentful'
|
8
|
-
SPACES_FOLDER = 'spaces'
|
9
|
+
DATA_FOLDER = '_data'.freeze
|
10
|
+
CONTENTFUL_FOLDER = 'contentful'.freeze
|
11
|
+
SPACES_FOLDER = 'spaces'.freeze
|
9
12
|
|
10
13
|
attr_reader :name, :entries, :config
|
11
14
|
|
@@ -19,20 +22,37 @@ module Jekyll
|
|
19
22
|
setup_directory
|
20
23
|
|
21
24
|
File.open(destination_file, 'w') do |file|
|
22
|
-
file.write(
|
25
|
+
file.write(
|
26
|
+
::Jekyll::Contentful::Serializer.new(
|
27
|
+
entries,
|
28
|
+
config
|
29
|
+
).to_yaml
|
30
|
+
)
|
23
31
|
end
|
24
32
|
end
|
25
33
|
|
26
34
|
def base_directory
|
27
35
|
directory = File.expand_path(Dir.pwd)
|
28
|
-
|
36
|
+
if config.key?('base_path')
|
37
|
+
directory = File.join(
|
38
|
+
directory,
|
39
|
+
config['base_path']
|
40
|
+
)
|
41
|
+
end
|
29
42
|
|
30
43
|
directory
|
31
44
|
end
|
32
45
|
|
33
46
|
def destination_directory
|
34
|
-
destination_dir = File.join(
|
35
|
-
|
47
|
+
destination_dir = File.join(
|
48
|
+
base_directory, DATA_FOLDER,
|
49
|
+
CONTENTFUL_FOLDER, SPACES_FOLDER
|
50
|
+
)
|
51
|
+
if config.key?('destination')
|
52
|
+
destination_dir = File.join(
|
53
|
+
base_directory, DATA_FOLDER, config['destination']
|
54
|
+
)
|
55
|
+
end
|
36
56
|
|
37
57
|
destination_dir
|
38
58
|
end
|
@@ -3,6 +3,9 @@ require 'jekyll-contentful-data-import/data_exporter'
|
|
3
3
|
|
4
4
|
module Jekyll
|
5
5
|
module Contentful
|
6
|
+
# Importer class
|
7
|
+
#
|
8
|
+
# Entry fetching logic
|
6
9
|
class Importer
|
7
10
|
attr_reader :config
|
8
11
|
|
@@ -18,14 +21,18 @@ module Jekyll
|
|
18
21
|
client_options(options.fetch('client_options', {}))
|
19
22
|
)
|
20
23
|
|
21
|
-
|
22
|
-
name,
|
23
|
-
get_entries(space_client, options),
|
24
|
-
options
|
25
|
-
).run
|
24
|
+
export_data(name, space_client, options)
|
26
25
|
end
|
27
26
|
end
|
28
27
|
|
28
|
+
def export_data(name, space_client, options)
|
29
|
+
Jekyll::Contentful::DataExporter.new(
|
30
|
+
name,
|
31
|
+
get_entries(space_client, options),
|
32
|
+
options
|
33
|
+
).run
|
34
|
+
end
|
35
|
+
|
29
36
|
def value_for(options, key)
|
30
37
|
potential_value = options[key]
|
31
38
|
return ENV[potential_value.gsub('ENV_', '')] if potential_value.start_with?('ENV_')
|
@@ -33,7 +40,7 @@ module Jekyll
|
|
33
40
|
end
|
34
41
|
|
35
42
|
def spaces
|
36
|
-
config['spaces'].map
|
43
|
+
config['spaces'].map(&:first)
|
37
44
|
end
|
38
45
|
|
39
46
|
def get_entries(space_client, options)
|
@@ -70,7 +77,11 @@ module Jekyll
|
|
70
77
|
private
|
71
78
|
|
72
79
|
def client_options(options)
|
73
|
-
options = options.each_with_object({})
|
80
|
+
options = options.each_with_object({}) do |(k, v), memo|
|
81
|
+
memo[k.to_sym] = v
|
82
|
+
memo
|
83
|
+
end
|
84
|
+
|
74
85
|
options.delete(:dynamic_entries)
|
75
86
|
options.delete(:raise_errors)
|
76
87
|
options
|
@@ -2,7 +2,11 @@ require 'contentful'
|
|
2
2
|
|
3
3
|
module Jekyll
|
4
4
|
module Contentful
|
5
|
+
# Mappers module
|
5
6
|
module Mappers
|
7
|
+
# Base Mapper Class
|
8
|
+
#
|
9
|
+
# Logic for mapping entries into simplified serialized representations
|
6
10
|
class Base
|
7
11
|
def self.mapper_for(entry, config)
|
8
12
|
ct = entry.content_type
|
@@ -23,20 +27,30 @@ module Jekyll
|
|
23
27
|
@config = config
|
24
28
|
end
|
25
29
|
|
30
|
+
def map_entry_metadata
|
31
|
+
content_type = entry.sys.fetch(:content_type, nil)
|
32
|
+
{
|
33
|
+
'id' => entry.sys.fetch(:id, nil),
|
34
|
+
'created_at' => entry.sys.fetch(:created_at, nil),
|
35
|
+
'updated_at' => entry.sys.fetch(:updated_at, nil),
|
36
|
+
'content_type_id' => content_type.nil? ? nil : content_type.id
|
37
|
+
}
|
38
|
+
end
|
39
|
+
|
26
40
|
def map
|
27
|
-
result = {'sys' =>
|
41
|
+
result = { 'sys' => map_entry_metadata }
|
28
42
|
|
29
|
-
fields =
|
43
|
+
fields = multiple_locales? ? entry.fields_with_locales : entry.fields
|
30
44
|
|
31
45
|
fields.each do |k, v|
|
32
|
-
name, value = map_field(k, v,
|
46
|
+
name, value = map_field(k, v, multiple_locales?)
|
33
47
|
result[name] = value
|
34
48
|
end
|
35
49
|
|
36
50
|
result
|
37
51
|
end
|
38
52
|
|
39
|
-
def
|
53
|
+
def multiple_locales?
|
40
54
|
config.fetch('cda_query', {}).fetch('locale', nil) == '*'
|
41
55
|
end
|
42
56
|
|
@@ -52,7 +66,7 @@ module Jekyll
|
|
52
66
|
value_mapping = map_value(field_value)
|
53
67
|
end
|
54
68
|
|
55
|
-
|
69
|
+
[field_name.to_s, value_mapping]
|
56
70
|
end
|
57
71
|
|
58
72
|
def map_value(value, locale = nil)
|
@@ -63,7 +77,7 @@ module Jekyll
|
|
63
77
|
map_location(value)
|
64
78
|
when ::Contentful::Link
|
65
79
|
map_link(value)
|
66
|
-
when ::Contentful::
|
80
|
+
when ::Contentful::Entry
|
67
81
|
map_entry(value)
|
68
82
|
when ::Array
|
69
83
|
map_array(value, locale)
|
@@ -80,12 +94,21 @@ module Jekyll
|
|
80
94
|
end
|
81
95
|
end
|
82
96
|
|
97
|
+
def map_asset_metadata(asset)
|
98
|
+
{
|
99
|
+
'id' => asset.id,
|
100
|
+
'created_at' => asset.sys.fetch(:created_at, nil),
|
101
|
+
'updated_at' => asset.sys.fetch(:updated_at, nil)
|
102
|
+
}
|
103
|
+
end
|
104
|
+
|
83
105
|
def map_asset(asset, locale = nil)
|
84
106
|
if locale
|
85
107
|
file = asset.fields(locale)[:file]
|
86
108
|
file_url = file.nil? ? '' : file.url
|
87
109
|
|
88
110
|
return {
|
111
|
+
'sys' => map_asset_metadata(asset),
|
89
112
|
'title' => asset.fields(locale)[:title],
|
90
113
|
'description' => asset.fields(locale)[:description],
|
91
114
|
'url' => file_url
|
@@ -96,6 +119,7 @@ module Jekyll
|
|
96
119
|
file_url = file.nil? ? '' : file.url
|
97
120
|
|
98
121
|
{
|
122
|
+
'sys' => map_asset_metadata(asset),
|
99
123
|
'title' => asset.title,
|
100
124
|
'description' => asset.description,
|
101
125
|
'url' => file_url
|
@@ -115,11 +139,15 @@ module Jekyll
|
|
115
139
|
end
|
116
140
|
|
117
141
|
def map_link(link)
|
118
|
-
{
|
142
|
+
{
|
143
|
+
'sys' => {
|
144
|
+
'id' => link.id
|
145
|
+
}
|
146
|
+
}
|
119
147
|
end
|
120
148
|
|
121
149
|
def map_array(array, locale)
|
122
|
-
array.map {|element| map_value(element, locale)}
|
150
|
+
array.map { |element| map_value(element, locale) }
|
123
151
|
end
|
124
152
|
end
|
125
153
|
end
|
@@ -1,41 +1,51 @@
|
|
1
1
|
require 'jekyll-contentful-data-import/importer'
|
2
2
|
|
3
3
|
module Jekyll
|
4
|
+
# Module for Jekyll Commands
|
4
5
|
module Commands
|
6
|
+
# jekyll contentful Command
|
5
7
|
class Contentful < Command
|
6
8
|
def self.init_with_program(prog)
|
7
9
|
prog.command(:contentful) do |c|
|
8
10
|
c.syntax 'contentful [OPTIONS]'
|
9
11
|
c.description 'Imports data from Contentful'
|
10
12
|
|
11
|
-
options.each {|opt| c.option(*opt) }
|
13
|
+
options.each { |opt| c.option(*opt) }
|
12
14
|
|
13
|
-
c
|
14
|
-
|
15
|
-
|
16
|
-
end
|
15
|
+
add_build_options(c)
|
16
|
+
|
17
|
+
command_action(c)
|
17
18
|
end
|
18
19
|
end
|
19
20
|
|
20
21
|
def self.options
|
21
22
|
[
|
22
|
-
[
|
23
|
+
[
|
24
|
+
'rebuild', '-r', '--rebuild',
|
25
|
+
'Rebuild Jekyll Site after fetching data'
|
26
|
+
]
|
23
27
|
]
|
24
28
|
end
|
25
29
|
|
30
|
+
def self.command_action(command)
|
31
|
+
command.action do |args, options|
|
32
|
+
jekyll_options = configuration_from_options(options)
|
33
|
+
contentful_config = jekyll_options['contentful']
|
34
|
+
process args, options, contentful_config
|
35
|
+
end
|
36
|
+
end
|
26
37
|
|
27
|
-
def self.process(
|
38
|
+
def self.process(_args = [], options = {}, contentful_config = {})
|
28
39
|
Jekyll.logger.info 'Starting Contentful import'
|
29
40
|
|
30
41
|
Jekyll::Contentful::Importer.new(contentful_config).run
|
31
42
|
|
32
43
|
Jekyll.logger.info 'Contentful import finished'
|
33
44
|
|
34
|
-
|
35
|
-
Jekyll.logger.info 'Starting Jekyll Rebuild'
|
45
|
+
return unless options['rebuild']
|
36
46
|
|
37
|
-
|
38
|
-
|
47
|
+
Jekyll.logger.info 'Starting Jekyll Rebuild'
|
48
|
+
Jekyll::Commands::Build.process(options)
|
39
49
|
end
|
40
50
|
end
|
41
51
|
end
|
@@ -34,10 +34,11 @@ describe Jekyll::Contentful::Mappers::Base do
|
|
34
34
|
|
35
35
|
class AssetDouble < Contentful::Asset
|
36
36
|
attr_reader :title, :description, :file
|
37
|
-
def initialize(title, description, url, fields = nil)
|
37
|
+
def initialize(title, description, url, sys = {}, fields = nil)
|
38
38
|
@title = title
|
39
39
|
@description = description
|
40
40
|
@file = FileDouble.new(url)
|
41
|
+
@sys = sys
|
41
42
|
@fields = {
|
42
43
|
'en-US' => {
|
43
44
|
title: title,
|
@@ -49,6 +50,10 @@ describe Jekyll::Contentful::Mappers::Base do
|
|
49
50
|
@fields ||= fields
|
50
51
|
end
|
51
52
|
|
53
|
+
def id
|
54
|
+
@sys[:id]
|
55
|
+
end
|
56
|
+
|
52
57
|
def fields(locale = nil)
|
53
58
|
return { title: title, description: description, file: file } if locale.nil?
|
54
59
|
@fields[locale]
|
@@ -75,13 +80,20 @@ describe Jekyll::Contentful::Mappers::Base do
|
|
75
80
|
end
|
76
81
|
|
77
82
|
it 'maps a simple entry' do
|
78
|
-
expected = {
|
83
|
+
expected = {
|
84
|
+
'sys' => {
|
85
|
+
'id' => 'foo',
|
86
|
+
'created_at' => nil,
|
87
|
+
'updated_at' => nil,
|
88
|
+
'content_type_id' => 'content_type'
|
89
|
+
}
|
90
|
+
}
|
79
91
|
expect(subject.map).to eq expected
|
80
92
|
end
|
81
93
|
|
82
94
|
it 'maps a complete entry' do
|
83
95
|
entry = EntryDouble.new('foo', ContentTypeDouble.new, {
|
84
|
-
'asset' => AssetDouble.new('some_title', 'foo', 'some_url'),
|
96
|
+
'asset' => AssetDouble.new('some_title', 'foo', 'some_url', {id: 'asset'}),
|
85
97
|
'location' => LocationDouble.new(12.32, 43.34),
|
86
98
|
'link' => LinkDouble.new('bar'),
|
87
99
|
'entry' => EntryDouble.new('baz'),
|
@@ -95,8 +107,18 @@ describe Jekyll::Contentful::Mappers::Base do
|
|
95
107
|
subject.instance_variable_set(:@entry, entry)
|
96
108
|
|
97
109
|
expected = {
|
98
|
-
'sys' => {
|
110
|
+
'sys' => {
|
111
|
+
'id' => 'foo',
|
112
|
+
'created_at' => nil,
|
113
|
+
'updated_at' => nil,
|
114
|
+
'content_type_id' => 'content_type'
|
115
|
+
},
|
99
116
|
'asset' => {
|
117
|
+
'sys' => {
|
118
|
+
'id' => 'asset',
|
119
|
+
'created_at' => nil,
|
120
|
+
'updated_at' => nil,
|
121
|
+
},
|
100
122
|
'title' => 'some_title',
|
101
123
|
'description' => 'foo',
|
102
124
|
'url' => 'some_url'
|
@@ -109,7 +131,12 @@ describe Jekyll::Contentful::Mappers::Base do
|
|
109
131
|
'sys' => { 'id' => 'bar' }
|
110
132
|
},
|
111
133
|
'entry' => {
|
112
|
-
'sys' => {
|
134
|
+
'sys' => {
|
135
|
+
'id' => 'baz',
|
136
|
+
'created_at' => nil,
|
137
|
+
'updated_at' => nil,
|
138
|
+
'content_type_id' => 'content_type'
|
139
|
+
},
|
113
140
|
},
|
114
141
|
'array' => [
|
115
142
|
{ 'sys' => { 'id' => 'foobar' } },
|
@@ -135,7 +162,12 @@ describe Jekyll::Contentful::Mappers::Base do
|
|
135
162
|
mapper = described_class.new(entry, config)
|
136
163
|
|
137
164
|
expected = {
|
138
|
-
'sys' => {
|
165
|
+
'sys' => {
|
166
|
+
'id' => 'foo',
|
167
|
+
'created_at' => nil,
|
168
|
+
'updated_at' => nil,
|
169
|
+
'content_type_id' => 'content_type'
|
170
|
+
},
|
139
171
|
'foo' => {
|
140
172
|
'en-US' => 'bar',
|
141
173
|
'de-DE' => 'baz'
|
@@ -154,7 +186,7 @@ describe Jekyll::Contentful::Mappers::Base do
|
|
154
186
|
'asset' => AssetDouble.new('some_title', 'foo', 'some_url')
|
155
187
|
},
|
156
188
|
'de-DE' => {
|
157
|
-
'asset' => AssetDouble.new('some_title', 'foo', 'some_url', {
|
189
|
+
'asset' => AssetDouble.new('some_title', 'foo', 'some_url', {id: 'foo'}, {
|
158
190
|
'de-DE' => {
|
159
191
|
title: 'other_title',
|
160
192
|
description: 'other description',
|
@@ -167,14 +199,29 @@ describe Jekyll::Contentful::Mappers::Base do
|
|
167
199
|
mapper = described_class.new(entry, config)
|
168
200
|
|
169
201
|
expected = {
|
170
|
-
'sys' => {
|
202
|
+
'sys' => {
|
203
|
+
'id' => 'foo',
|
204
|
+
'created_at' => nil,
|
205
|
+
'updated_at' => nil,
|
206
|
+
'content_type_id' => 'content_type'
|
207
|
+
},
|
171
208
|
'asset' => {
|
172
209
|
"en-US" => {
|
210
|
+
"sys" => {
|
211
|
+
"id" => nil,
|
212
|
+
"created_at" => nil,
|
213
|
+
"updated_at" => nil
|
214
|
+
},
|
173
215
|
"title" => "some_title",
|
174
216
|
"description" => "foo",
|
175
217
|
"url" => 'some_url'
|
176
218
|
},
|
177
219
|
"de-DE" => {
|
220
|
+
"sys" => {
|
221
|
+
"id" => "foo",
|
222
|
+
"created_at" => nil,
|
223
|
+
"updated_at" => nil
|
224
|
+
},
|
178
225
|
"title" => "other_title",
|
179
226
|
"description" => "other description",
|
180
227
|
"url" => 'other_url'
|
@@ -23,14 +23,37 @@ describe Jekyll::Contentful::Serializer do
|
|
23
23
|
end
|
24
24
|
|
25
25
|
it 'serializes a single entry without fields' do
|
26
|
-
expected = {
|
26
|
+
expected = {
|
27
|
+
'content_type' => [
|
28
|
+
{
|
29
|
+
'sys' => {
|
30
|
+
'id' => 'foo',
|
31
|
+
'created_at' => nil,
|
32
|
+
'updated_at' => nil,
|
33
|
+
'content_type_id' => 'content_type'
|
34
|
+
}
|
35
|
+
}
|
36
|
+
]
|
37
|
+
}
|
27
38
|
expect(subject.serialize).to eq(expected)
|
28
39
|
end
|
29
40
|
|
30
41
|
it 'serializes a single entry with fields' do
|
31
42
|
subject.instance_variable_set(:@entries, [EntryDouble.new('foo', ContentTypeDouble.new, {'foobar' => 'bar'})])
|
32
43
|
|
33
|
-
expected = {
|
44
|
+
expected = {
|
45
|
+
'content_type' => [
|
46
|
+
{
|
47
|
+
'sys' => {
|
48
|
+
'id' => 'foo',
|
49
|
+
'created_at' => nil,
|
50
|
+
'updated_at' => nil,
|
51
|
+
'content_type_id' => 'content_type'
|
52
|
+
},
|
53
|
+
'foobar' => 'bar'
|
54
|
+
}
|
55
|
+
]
|
56
|
+
}
|
34
57
|
expect(subject.serialize).to eq(expected)
|
35
58
|
end
|
36
59
|
|
@@ -43,7 +66,27 @@ describe Jekyll::Contentful::Serializer do
|
|
43
66
|
})
|
44
67
|
])
|
45
68
|
|
46
|
-
expected = {
|
69
|
+
expected = {
|
70
|
+
'content_type' => [
|
71
|
+
{
|
72
|
+
'sys' => {
|
73
|
+
'id' => 'foo',
|
74
|
+
'created_at' => nil,
|
75
|
+
'updated_at' => nil,
|
76
|
+
'content_type_id' => 'content_type'
|
77
|
+
},
|
78
|
+
'foobar' => {
|
79
|
+
'sys' => {
|
80
|
+
'id' => 'foobar',
|
81
|
+
'created_at' => nil,
|
82
|
+
'updated_at' => nil,
|
83
|
+
'content_type_id' => 'content_type'
|
84
|
+
},
|
85
|
+
'baz' => 1
|
86
|
+
}
|
87
|
+
}
|
88
|
+
]
|
89
|
+
}
|
47
90
|
expect(subject.serialize).to eq(expected)
|
48
91
|
end
|
49
92
|
|
@@ -55,8 +98,24 @@ describe Jekyll::Contentful::Serializer do
|
|
55
98
|
|
56
99
|
expected = {
|
57
100
|
'content_type' => [
|
58
|
-
{
|
59
|
-
|
101
|
+
{
|
102
|
+
'sys' => {
|
103
|
+
'id' => 'foo',
|
104
|
+
'created_at' => nil,
|
105
|
+
'updated_at' => nil,
|
106
|
+
'content_type_id' => 'content_type'
|
107
|
+
},
|
108
|
+
'foobar' => 'bar'
|
109
|
+
},
|
110
|
+
{
|
111
|
+
'sys' => {
|
112
|
+
'id' => 'bar',
|
113
|
+
'created_at' => nil,
|
114
|
+
'updated_at' => nil,
|
115
|
+
'content_type_id' => 'content_type'
|
116
|
+
},
|
117
|
+
'foobar' => 'baz'
|
118
|
+
}
|
60
119
|
]
|
61
120
|
}
|
62
121
|
expect(subject.serialize).to match(expected)
|
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'simplecov'
|
2
|
+
SimpleCov.start
|
3
|
+
|
1
4
|
$LOAD_PATH.unshift File.expand_path('lib', __FILE__)
|
2
5
|
|
3
6
|
require 'vcr'
|
@@ -37,13 +40,15 @@ class ContentTypeDouble
|
|
37
40
|
end
|
38
41
|
end
|
39
42
|
|
40
|
-
class EntryDouble < Contentful::
|
43
|
+
class EntryDouble < Contentful::Entry
|
41
44
|
attr_reader :id, :content_type
|
42
45
|
|
43
46
|
def initialize(id = '', content_type = ContentTypeDouble.new, fields = {}, locales = false)
|
44
47
|
@id = id
|
45
48
|
@content_type = content_type
|
46
49
|
|
50
|
+
@sys = { id: id, content_type: content_type, locale: 'en-US' }
|
51
|
+
|
47
52
|
if locales
|
48
53
|
@fields = fields
|
49
54
|
else
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-contentful-data-import
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Contentful GmbH
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-04-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
@@ -34,16 +34,22 @@ dependencies:
|
|
34
34
|
name: contentful
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 2.0.1
|
37
40
|
- - "~>"
|
38
41
|
- !ruby/object:Gem::Version
|
39
|
-
version: '
|
42
|
+
version: '2.0'
|
40
43
|
type: :runtime
|
41
44
|
prerelease: false
|
42
45
|
version_requirements: !ruby/object:Gem::Requirement
|
43
46
|
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 2.0.1
|
44
50
|
- - "~>"
|
45
51
|
- !ruby/object:Gem::Version
|
46
|
-
version: '
|
52
|
+
version: '2.0'
|
47
53
|
- !ruby/object:Gem::Dependency
|
48
54
|
name: rubygems-tasks
|
49
55
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,6 +92,20 @@ dependencies:
|
|
86
92
|
- - ">="
|
87
93
|
- !ruby/object:Gem::Version
|
88
94
|
version: '0'
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: guard-rubocop
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - ">="
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '0'
|
89
109
|
- !ruby/object:Gem::Dependency
|
90
110
|
name: bundler
|
91
111
|
requirement: !ruby/object:Gem::Requirement
|
@@ -170,6 +190,34 @@ dependencies:
|
|
170
190
|
- - ">="
|
171
191
|
- !ruby/object:Gem::Version
|
172
192
|
version: '0'
|
193
|
+
- !ruby/object:Gem::Dependency
|
194
|
+
name: simplecov
|
195
|
+
requirement: !ruby/object:Gem::Requirement
|
196
|
+
requirements:
|
197
|
+
- - ">="
|
198
|
+
- !ruby/object:Gem::Version
|
199
|
+
version: '0'
|
200
|
+
type: :development
|
201
|
+
prerelease: false
|
202
|
+
version_requirements: !ruby/object:Gem::Requirement
|
203
|
+
requirements:
|
204
|
+
- - ">="
|
205
|
+
- !ruby/object:Gem::Version
|
206
|
+
version: '0'
|
207
|
+
- !ruby/object:Gem::Dependency
|
208
|
+
name: rubocop
|
209
|
+
requirement: !ruby/object:Gem::Requirement
|
210
|
+
requirements:
|
211
|
+
- - ">="
|
212
|
+
- !ruby/object:Gem::Version
|
213
|
+
version: '0'
|
214
|
+
type: :development
|
215
|
+
prerelease: false
|
216
|
+
version_requirements: !ruby/object:Gem::Requirement
|
217
|
+
requirements:
|
218
|
+
- - ">="
|
219
|
+
- !ruby/object:Gem::Version
|
220
|
+
version: '0'
|
173
221
|
description: Load blog posts and other managed content into Jekyll
|
174
222
|
email:
|
175
223
|
- david.litvak@contentful.com
|
@@ -178,6 +226,8 @@ extensions: []
|
|
178
226
|
extra_rdoc_files: []
|
179
227
|
files:
|
180
228
|
- ".gitignore"
|
229
|
+
- ".rubocop.yml"
|
230
|
+
- ".rubocop_todo.yml"
|
181
231
|
- ".travis.yml"
|
182
232
|
- ".yardopts"
|
183
233
|
- CHANGELOG.md
|