contentful_bootstrap 2.0.2 → 3.0.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/.travis.yml +3 -0
- data/CHANGELOG.md +6 -0
- data/Gemfile +1 -1
- data/examples/templates/catalogue.json +87 -62
- data/lib/contentful/bootstrap/commands/create_space.rb +1 -1
- data/lib/contentful/bootstrap/generator.rb +9 -9
- data/lib/contentful/bootstrap/templates/base.rb +42 -24
- data/lib/contentful/bootstrap/templates/blog.rb +2 -0
- data/lib/contentful/bootstrap/templates/json_template.rb +24 -11
- data/lib/contentful/bootstrap/templates/links/base.rb +5 -0
- data/lib/contentful/bootstrap/token.rb +3 -3
- data/lib/contentful/bootstrap/version.rb +5 -1
- data/spec/contentful/bootstrap/commands/create_space_spec.rb +56 -4
- data/spec/contentful/bootstrap/commands/generate_token_spec.rb +14 -0
- data/spec/contentful/bootstrap/templates/json_template_spec.rb +39 -1
- data/spec/contentful/bootstrap/templates/links/asset_spec.rb +14 -0
- data/spec/contentful/bootstrap/templates/links/base_spec.rb +15 -1
- data/spec/contentful/bootstrap/templates/links/entry_spec.rb +14 -0
- data/spec/fixtures/json_fixtures/high.json +6 -0
- data/spec/fixtures/json_fixtures/invalid.json +5 -0
- data/spec/fixtures/json_fixtures/issue_22.json +20 -15
- data/spec/fixtures/json_fixtures/links.json +18 -0
- data/spec/fixtures/json_fixtures/low.json +6 -0
- data/spec/fixtures/json_fixtures/no_ids.json +25 -0
- data/spec/fixtures/json_fixtures/ok_version.json +6 -0
- data/spec/fixtures/json_fixtures/simple.json +8 -3
- data/spec/fixtures/json_fixtures/wl1z0pal05vy.json +209 -172
- data/spec/fixtures/vcr_fixtures/create_space.yml +202 -0
- data/spec/fixtures/vcr_fixtures/create_space_with_blog_template.yml +4337 -0
- data/spec/fixtures/vcr_fixtures/create_space_with_catalogue_template.yml +9987 -0
- data/spec/fixtures/vcr_fixtures/create_space_with_gallery_template.yml +5609 -0
- data/spec/fixtures/vcr_fixtures/generate_json.yml +177 -177
- data/spec/fixtures/vcr_fixtures/generate_token.yml +394 -0
- data/spec/fixtures/vcr_fixtures/issue_22.yml +914 -307
- data/spec/fixtures/vcr_fixtures/no_ids.yml +1314 -0
- metadata +27 -3
@@ -59,11 +59,13 @@ module Contentful
|
|
59
59
|
],
|
60
60
|
'post' => [
|
61
61
|
{
|
62
|
+
'id' => 'inferno',
|
62
63
|
'title' => 'Inferno',
|
63
64
|
'content' => 'Inferno is the last book in Dan Brown\'s collection...',
|
64
65
|
'author' => Links::Entry.new('dan_brown')
|
65
66
|
},
|
66
67
|
{
|
68
|
+
'id' => 'alturas',
|
67
69
|
'title' => 'Alturas de Macchu Picchu',
|
68
70
|
'content' => 'Alturas de Macchu Picchu is one of Pablo Neruda\'s most famous poetry books...',
|
69
71
|
'author' => Links::Entry.new('pablo_neruda')
|
@@ -12,10 +12,12 @@ module Contentful
|
|
12
12
|
@assets = nil
|
13
13
|
@entries = nil
|
14
14
|
json
|
15
|
+
|
16
|
+
check_version
|
15
17
|
end
|
16
18
|
|
17
19
|
def content_types
|
18
|
-
json.fetch('
|
20
|
+
json.fetch('contentTypes', [])
|
19
21
|
end
|
20
22
|
|
21
23
|
def assets
|
@@ -28,6 +30,14 @@ module Contentful
|
|
28
30
|
|
29
31
|
private
|
30
32
|
|
33
|
+
def check_version
|
34
|
+
json_version = json.fetch('version', 0)
|
35
|
+
gem_major_version = Contentful::Bootstrap.major_version
|
36
|
+
unless gem_major_version == json_version
|
37
|
+
fail "JSON Templates Version Mismatch. Current Version: #{gem_major_version}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
31
41
|
def json
|
32
42
|
@json ||= ::JSON.parse(::File.read(@file))
|
33
43
|
end
|
@@ -49,29 +59,32 @@ module Contentful
|
|
49
59
|
unprocessed_entries.each do |content_type_id, entry_list|
|
50
60
|
entries_for_content_type = []
|
51
61
|
entry_list.each do |entry|
|
62
|
+
processed_entry = {}
|
52
63
|
array_fields = []
|
53
64
|
link_fields = []
|
54
65
|
|
55
|
-
entry.
|
66
|
+
processed_entry['id'] = entry['sys']['id'] if entry.key?('sys') && entry['sys'].key?('id')
|
67
|
+
|
68
|
+
entry.fetch('fields', {}).each do |field, value|
|
56
69
|
link_fields << field if value.is_a? ::Hash
|
57
70
|
array_fields << field if value.is_a? ::Array
|
71
|
+
|
72
|
+
unless link_fields.include?(field) || array_fields.include?(field)
|
73
|
+
processed_entry[field] = value
|
74
|
+
end
|
58
75
|
end
|
59
76
|
|
60
77
|
link_fields.each do |lf|
|
61
|
-
|
78
|
+
processed_entry[lf] = create_link(entry['fields'][lf])
|
62
79
|
end
|
63
80
|
|
64
81
|
array_fields.each do |af|
|
65
|
-
entry[af].map
|
66
|
-
|
67
|
-
create_link(item)
|
68
|
-
else
|
69
|
-
item
|
70
|
-
end
|
82
|
+
processed_entry[af] = entry['fields'][af].map do |item|
|
83
|
+
item.is_a?(::Hash) ? create_link(item) : item
|
71
84
|
end
|
72
85
|
end
|
73
86
|
|
74
|
-
entries_for_content_type <<
|
87
|
+
entries_for_content_type << processed_entry
|
75
88
|
end
|
76
89
|
|
77
90
|
processed_entries[content_type_id] = entries_for_content_type
|
@@ -81,7 +94,7 @@ module Contentful
|
|
81
94
|
end
|
82
95
|
|
83
96
|
def create_link(link_properties)
|
84
|
-
link_type = link_properties['
|
97
|
+
link_type = link_properties['linkType'].capitalize
|
85
98
|
id = link_properties['id']
|
86
99
|
case link_type
|
87
100
|
when 'Entry'
|
@@ -16,9 +16,9 @@ module Contentful
|
|
16
16
|
@config_path = config_path
|
17
17
|
end
|
18
18
|
|
19
|
-
def ==(
|
20
|
-
return false unless
|
21
|
-
|
19
|
+
def ==(other)
|
20
|
+
return false unless other.is_a?(Contentful::Bootstrap::Token)
|
21
|
+
other.config_path == @config_path
|
22
22
|
end
|
23
23
|
|
24
24
|
def present?
|
@@ -18,7 +18,7 @@ describe Contentful::Bootstrap::Commands::CreateSpace do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
it 'does not create template when template_name is nil' do
|
21
|
-
create_space_command =
|
21
|
+
create_space_command = described_class.new(token, 'foo', nil, 'baz', false)
|
22
22
|
|
23
23
|
expect(create_space_command.template_name).to eq nil
|
24
24
|
|
@@ -31,7 +31,7 @@ describe Contentful::Bootstrap::Commands::CreateSpace do
|
|
31
31
|
end
|
32
32
|
|
33
33
|
it 'does not create json template when json_template is nil' do
|
34
|
-
create_space_command =
|
34
|
+
create_space_command = described_class.new(token, 'foo', 'bar', nil, false)
|
35
35
|
|
36
36
|
expect(create_space_command.json_template).to eq nil
|
37
37
|
|
@@ -59,14 +59,66 @@ describe Contentful::Bootstrap::Commands::CreateSpace do
|
|
59
59
|
it 'Importing asset array values does not work #22' do
|
60
60
|
json_path = File.expand_path(File.join('spec', 'fixtures', 'json_fixtures', 'issue_22.json'))
|
61
61
|
|
62
|
-
allow_any_instance_of(
|
62
|
+
allow_any_instance_of(described_class).to receive(:gets).and_return('y')
|
63
63
|
allow_any_instance_of(Contentful::Bootstrap::Commands::GenerateToken).to receive(:gets).and_return('n')
|
64
64
|
|
65
|
-
command =
|
65
|
+
command = described_class.new(token, 'issue_22', nil, json_path)
|
66
66
|
|
67
67
|
vcr('issue_22') {
|
68
68
|
command.run
|
69
69
|
}
|
70
70
|
end
|
71
71
|
end
|
72
|
+
|
73
|
+
describe 'integration' do
|
74
|
+
before do
|
75
|
+
allow_any_instance_of(described_class).to receive(:gets).and_return('y')
|
76
|
+
allow_any_instance_of(Contentful::Bootstrap::Commands::GenerateToken).to receive(:gets).and_return('n')
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'create space' do
|
80
|
+
command = described_class.new token, 'some_space'
|
81
|
+
|
82
|
+
vcr('create_space') {
|
83
|
+
command.run
|
84
|
+
}
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'create space with blog template' do
|
88
|
+
command = described_class.new token, 'blog_space', 'blog'
|
89
|
+
|
90
|
+
vcr('create_space_with_blog_template') {
|
91
|
+
command.run
|
92
|
+
}
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'create space with gallery template' do
|
96
|
+
command = described_class.new token, 'gallery_space', 'gallery'
|
97
|
+
|
98
|
+
vcr('create_space_with_gallery_template') {
|
99
|
+
command.run
|
100
|
+
}
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'create space with catalogue template' do
|
104
|
+
command = described_class.new token, 'catalogue_space', 'catalogue'
|
105
|
+
|
106
|
+
vcr('create_space_with_catalogue_template') {
|
107
|
+
command.run
|
108
|
+
}
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'create space with json template' do
|
112
|
+
skip 'covered by create_space_spec:issues/#22'
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'create space with json template with no ids' do
|
116
|
+
json_path = File.expand_path(File.join('spec', 'fixtures', 'json_fixtures', 'no_ids.json'))
|
117
|
+
command = described_class.new token, 'no_ids_space', nil, json_path
|
118
|
+
|
119
|
+
vcr('no_ids') {
|
120
|
+
command.run
|
121
|
+
}
|
122
|
+
end
|
123
|
+
end
|
72
124
|
end
|
@@ -79,4 +79,18 @@ describe Contentful::Bootstrap::Commands::GenerateToken do
|
|
79
79
|
expect(subject.token_name).to eq 'bar'
|
80
80
|
end
|
81
81
|
end
|
82
|
+
|
83
|
+
describe 'integration' do
|
84
|
+
before do
|
85
|
+
allow_any_instance_of(subject.class).to receive(:gets).and_return('n')
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'generates a token for a given space' do
|
89
|
+
command = subject.class.new token, 'zred3m25k5em', 'foo'
|
90
|
+
|
91
|
+
vcr('generate_token') {
|
92
|
+
command.run
|
93
|
+
}
|
94
|
+
end
|
95
|
+
end
|
82
96
|
end
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe Contentful::Bootstrap::Templates::JsonTemplate do
|
4
4
|
let(:space) { Contentful::Management::Space.new }
|
5
5
|
let(:path) { File.expand_path(File.join('spec', 'fixtures', 'json_fixtures', 'simple.json')) }
|
6
|
-
subject {
|
6
|
+
subject { described_class.new space, path }
|
7
7
|
|
8
8
|
describe 'instance methods' do
|
9
9
|
it '#content_types' do
|
@@ -49,4 +49,42 @@ describe Contentful::Bootstrap::Templates::JsonTemplate do
|
|
49
49
|
)
|
50
50
|
end
|
51
51
|
end
|
52
|
+
|
53
|
+
describe 'template version check' do
|
54
|
+
let(:invalid_version_path) { File.expand_path(File.join('spec', 'fixtures', 'json_fixtures', 'invalid.json')) }
|
55
|
+
let(:low_version_path) { File.expand_path(File.join('spec', 'fixtures', 'json_fixtures', 'low.json')) }
|
56
|
+
let(:high_version_path) { File.expand_path(File.join('spec', 'fixtures', 'json_fixtures', 'high.json')) }
|
57
|
+
let(:ok_version_path) { File.expand_path(File.join('spec', 'fixtures', 'json_fixtures', 'ok_version.json')) }
|
58
|
+
|
59
|
+
it 'rejects templates without version' do
|
60
|
+
expect { described_class.new space, invalid_version_path }.to raise_error "JSON Templates Version Mismatch. Current Version: 3"
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'rejects templates with previous versions' do
|
64
|
+
expect { described_class.new space, low_version_path }.to raise_error "JSON Templates Version Mismatch. Current Version: 3"
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'rejects templates with newer versions' do
|
68
|
+
expect { described_class.new space, high_version_path }.to raise_error "JSON Templates Version Mismatch. Current Version: 3"
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'accepts templates with correct version' do
|
72
|
+
expect { described_class.new space, ok_version_path }.not_to raise_error
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe 'issues' do
|
77
|
+
let(:link_entry_path) { File.expand_path(File.join('spec', 'fixtures', 'json_fixtures', 'links.json')) }
|
78
|
+
|
79
|
+
it 'links are not properly getting processed - #33' do
|
80
|
+
subject = described_class.new space, link_entry_path
|
81
|
+
|
82
|
+
expect(subject.entries["cat"].first).to eq(
|
83
|
+
{
|
84
|
+
"id" => "foo",
|
85
|
+
"link" => Contentful::Bootstrap::Templates::Links::Entry.new('foobar')
|
86
|
+
}
|
87
|
+
)
|
88
|
+
end
|
89
|
+
end
|
52
90
|
end
|
@@ -19,5 +19,19 @@ describe Contentful::Bootstrap::Templates::Links::Asset do
|
|
19
19
|
it '#management_class' do
|
20
20
|
expect(subject.management_class).to eq Contentful::Management::Asset
|
21
21
|
end
|
22
|
+
|
23
|
+
describe '#==' do
|
24
|
+
it 'false when different type' do
|
25
|
+
expect(subject == 2).to be_falsey
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'false when different id' do
|
29
|
+
expect(subject == described_class.new('bar')).to be_falsey
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'true when same id' do
|
33
|
+
expect(subject == described_class.new('foo')).to be_truthy
|
34
|
+
end
|
35
|
+
end
|
22
36
|
end
|
23
37
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Contentful::Bootstrap::Templates::Links::Base do
|
4
|
-
subject {
|
4
|
+
subject { described_class.new 'foo' }
|
5
5
|
|
6
6
|
describe 'instance methods' do
|
7
7
|
it '#link_type' do
|
@@ -20,6 +20,20 @@ describe Contentful::Bootstrap::Templates::Links::Base do
|
|
20
20
|
it '#management_class' do
|
21
21
|
expect { subject.management_class }.to raise_error "must implement"
|
22
22
|
end
|
23
|
+
|
24
|
+
describe '#==' do
|
25
|
+
it 'false when different type' do
|
26
|
+
expect(subject == 2).to be_falsey
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'false when different id' do
|
30
|
+
expect(subject == described_class.new('bar')).to be_falsey
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'true when same id' do
|
34
|
+
expect(subject == described_class.new('foo')).to be_truthy
|
35
|
+
end
|
36
|
+
end
|
23
37
|
end
|
24
38
|
end
|
25
39
|
|
@@ -19,5 +19,19 @@ describe Contentful::Bootstrap::Templates::Links::Entry do
|
|
19
19
|
it '#management_class' do
|
20
20
|
expect(subject.management_class).to eq Contentful::Management::Entry
|
21
21
|
end
|
22
|
+
|
23
|
+
describe '#==' do
|
24
|
+
it 'false when different type' do
|
25
|
+
expect(subject == 2).to be_falsey
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'false when different id' do
|
29
|
+
expect(subject == described_class.new('bar')).to be_falsey
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'true when same id' do
|
33
|
+
expect(subject == described_class.new('foo')).to be_truthy
|
34
|
+
end
|
35
|
+
end
|
22
36
|
end
|
23
37
|
end
|
@@ -1,9 +1,10 @@
|
|
1
1
|
{
|
2
|
-
"
|
2
|
+
"version": 3,
|
3
|
+
"contentTypes": [
|
3
4
|
{
|
4
5
|
"id": "1VX60jHERm6yuem8I2agWG",
|
5
6
|
"name": "yolo",
|
6
|
-
"
|
7
|
+
"displayField": "title",
|
7
8
|
"fields": [
|
8
9
|
{
|
9
10
|
"id": "title",
|
@@ -16,7 +17,7 @@
|
|
16
17
|
"type": "Array",
|
17
18
|
"items": {
|
18
19
|
"type": "Link",
|
19
|
-
"
|
20
|
+
"linkType": "Asset"
|
20
21
|
}
|
21
22
|
}
|
22
23
|
]
|
@@ -59,18 +60,22 @@
|
|
59
60
|
"entries": {
|
60
61
|
"1VX60jHERm6yuem8I2agWG": [
|
61
62
|
{
|
62
|
-
"
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
63
|
+
"sys": {
|
64
|
+
"id": "5nQB3z8RgW8CUG6uGyCsEw"
|
65
|
+
},
|
66
|
+
"fields": {
|
67
|
+
"title": "yolo",
|
68
|
+
"assets": [
|
69
|
+
{
|
70
|
+
"linkType": "Asset",
|
71
|
+
"id": "4eX9aQsDdeqweg6Si00KaW"
|
72
|
+
},
|
73
|
+
{
|
74
|
+
"linkType": "Asset",
|
75
|
+
"id": "4D5sv49qaAoMIkWgAW8g0I"
|
76
|
+
}
|
77
|
+
]
|
78
|
+
}
|
74
79
|
}
|
75
80
|
]
|
76
81
|
}
|