jekyll-contentful-data-import 1.4.3 → 1.5.0
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.
- 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
|