contentful_bootstrap 1.6.0 → 2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +26 -0
- data/.rubocop_todo.yml +123 -0
- data/.travis.yml +6 -0
- data/CHANGELOG.md +25 -0
- data/Gemfile +1 -0
- data/Guardfile +5 -0
- data/README.md +40 -14
- data/Rakefile +7 -0
- data/bin/contentful_bootstrap +33 -22
- data/contentful_bootstrap.gemspec +7 -0
- data/lib/contentful/bootstrap.rb +7 -5
- data/lib/contentful/bootstrap/command_runner.rb +45 -0
- data/lib/contentful/bootstrap/commands.rb +3 -168
- data/lib/contentful/bootstrap/commands/base.rb +66 -0
- data/lib/contentful/bootstrap/commands/create_space.rb +111 -0
- data/lib/contentful/bootstrap/commands/generate_json.rb +41 -0
- data/lib/contentful/bootstrap/commands/generate_token.rb +52 -0
- data/lib/contentful/bootstrap/constants.rb +2 -2
- data/lib/contentful/bootstrap/generator.rb +94 -0
- data/lib/contentful/bootstrap/server.rb +25 -17
- data/lib/contentful/bootstrap/support.rb +3 -2
- data/lib/contentful/bootstrap/templates.rb +4 -4
- data/lib/contentful/bootstrap/templates/base.rb +51 -30
- data/lib/contentful/bootstrap/templates/blog.rb +33 -33
- data/lib/contentful/bootstrap/templates/catalogue.rb +103 -103
- data/lib/contentful/bootstrap/templates/gallery.rb +55 -56
- data/lib/contentful/bootstrap/templates/json_template.rb +22 -16
- data/lib/contentful/bootstrap/templates/links.rb +2 -2
- data/lib/contentful/bootstrap/templates/links/asset.rb +2 -2
- data/lib/contentful/bootstrap/templates/links/base.rb +3 -3
- data/lib/contentful/bootstrap/templates/links/entry.rb +2 -2
- data/lib/contentful/bootstrap/token.rb +32 -31
- data/lib/contentful/bootstrap/version.rb +1 -1
- data/spec/contentful/bootstrap/command_runner_spec.rb +111 -0
- data/spec/contentful/bootstrap/commands/base_spec.rb +102 -0
- data/spec/contentful/bootstrap/commands/create_space_spec.rb +72 -0
- data/spec/contentful/bootstrap/commands/generate_json_spec.rb +64 -0
- data/spec/contentful/bootstrap/commands/generate_token_spec.rb +82 -0
- data/spec/contentful/bootstrap/generator_spec.rb +15 -0
- data/spec/contentful/bootstrap/server_spec.rb +154 -0
- data/spec/contentful/bootstrap/support_spec.rb +27 -0
- data/spec/contentful/bootstrap/templates/base_spec.rb +34 -0
- data/spec/contentful/bootstrap/templates/blog_spec.rb +32 -0
- data/spec/contentful/bootstrap/templates/catalogue_spec.rb +40 -0
- data/spec/contentful/bootstrap/templates/gallery_spec.rb +40 -0
- data/spec/contentful/bootstrap/templates/json_template_spec.rb +52 -0
- data/spec/contentful/bootstrap/templates/links/asset_spec.rb +23 -0
- data/spec/contentful/bootstrap/templates/links/base_spec.rb +31 -0
- data/spec/contentful/bootstrap/templates/links/entry_spec.rb +23 -0
- data/spec/contentful/bootstrap/token_spec.rb +143 -0
- data/spec/fixtures/ini_fixtures/contentfulrc.ini +2 -0
- data/spec/fixtures/ini_fixtures/no_global.ini +2 -0
- data/spec/fixtures/ini_fixtures/no_token.ini +1 -0
- data/spec/fixtures/ini_fixtures/sections.ini +5 -0
- data/spec/fixtures/json_fixtures/issue_22.json +77 -0
- data/spec/fixtures/json_fixtures/simple.json +34 -0
- data/spec/fixtures/json_fixtures/wl1z0pal05vy.json +437 -0
- data/spec/fixtures/vcr_fixtures/generate_json.yml +384 -0
- data/spec/fixtures/vcr_fixtures/issue_22.yml +2488 -0
- data/spec/spec_helper.rb +51 -0
- metadata +167 -4
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Contentful::Bootstrap::Templates::Links::Asset do
|
4
|
+
subject { Contentful::Bootstrap::Templates::Links::Asset.new 'foo' }
|
5
|
+
|
6
|
+
describe 'instance methods' do
|
7
|
+
it '#link_type' do
|
8
|
+
expect(subject.link_type).to eq 'Asset'
|
9
|
+
end
|
10
|
+
|
11
|
+
it '#type' do
|
12
|
+
expect(subject.type).to eq 'Link'
|
13
|
+
end
|
14
|
+
|
15
|
+
it '#to_management_object' do
|
16
|
+
expect(subject.to_management_object).to be_a Contentful::Management::Asset
|
17
|
+
end
|
18
|
+
|
19
|
+
it '#management_class' do
|
20
|
+
expect(subject.management_class).to eq Contentful::Management::Asset
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Contentful::Bootstrap::Templates::Links::Base do
|
4
|
+
subject { Contentful::Bootstrap::Templates::Links::Base.new 'foo' }
|
5
|
+
|
6
|
+
describe 'instance methods' do
|
7
|
+
it '#link_type' do
|
8
|
+
expect(subject.link_type).to eq 'Base'
|
9
|
+
end
|
10
|
+
|
11
|
+
it '#type' do
|
12
|
+
expect(subject.type).to eq 'Link'
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'abstract methods' do
|
16
|
+
it '#to_management_object' do
|
17
|
+
expect { subject.to_management_object }.to raise_error "must implement"
|
18
|
+
end
|
19
|
+
|
20
|
+
it '#management_class' do
|
21
|
+
expect { subject.management_class }.to raise_error "must implement"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe 'properties' do
|
27
|
+
it ':id' do
|
28
|
+
expect(subject.id).to eq 'foo'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Contentful::Bootstrap::Templates::Links::Entry do
|
4
|
+
subject { Contentful::Bootstrap::Templates::Links::Entry.new 'foo' }
|
5
|
+
|
6
|
+
describe 'instance methods' do
|
7
|
+
it '#link_type' do
|
8
|
+
expect(subject.link_type).to eq 'Entry'
|
9
|
+
end
|
10
|
+
|
11
|
+
it '#type' do
|
12
|
+
expect(subject.type).to eq 'Link'
|
13
|
+
end
|
14
|
+
|
15
|
+
it '#to_management_object' do
|
16
|
+
expect(subject.to_management_object).to be_a Contentful::Management::Entry
|
17
|
+
end
|
18
|
+
|
19
|
+
it '#management_class' do
|
20
|
+
expect(subject.management_class).to eq Contentful::Management::Entry
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,143 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Contentful::Bootstrap::Token do
|
4
|
+
let(:path) { File.expand_path(File.join('spec', 'fixtures', 'ini_fixtures', 'contentfulrc.ini')) }
|
5
|
+
let(:no_token_path) { File.expand_path(File.join('spec', 'fixtures', 'ini_fixtures', 'no_token.ini')) }
|
6
|
+
let(:sections_path) { File.expand_path(File.join('spec', 'fixtures', 'ini_fixtures', 'sections.ini')) }
|
7
|
+
let(:no_global_path) { File.expand_path(File.join('spec', 'fixtures', 'ini_fixtures', 'no_global.ini')) }
|
8
|
+
subject { Contentful::Bootstrap::Token.new(path) }
|
9
|
+
|
10
|
+
describe 'attributes' do
|
11
|
+
it ':config_path' do
|
12
|
+
expect(subject.config_path).to eq path
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe 'initialize' do
|
17
|
+
it 'uses provided config_path' do
|
18
|
+
expect(subject.class.new('bar').config_path).to eq 'bar'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe 'instance methods' do
|
23
|
+
describe '#present?' do
|
24
|
+
it 'non existing file returns false' do
|
25
|
+
expect(subject.class.new('foobar').present?).to be_falsey
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'existing file without management token returns false' do
|
29
|
+
expect(subject.class.new(no_token_path).present?).to be_falsey
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'existing file with management token returns true' do
|
33
|
+
expect(subject.present?).to be_truthy
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '#filename' do
|
38
|
+
it 'returns default path if config_path is empty' do
|
39
|
+
expect(subject.class.new.filename).to eq ::File.join(ENV['HOME'], subject.class::DEFAULT_PATH)
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'returns config_path' do
|
43
|
+
expect(subject.filename).to eq path
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe '#config_section' do
|
48
|
+
it 'returns default section by default' do
|
49
|
+
expect(subject.config_section).to eq 'global'
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'returns default section if ENV["CONTENTFUL_ENV"] section does not exist' do
|
53
|
+
ENV['CONTENTFUL_ENV'] = 'blah'
|
54
|
+
expect(subject.class.new(sections_path).config_section).to eq 'global'
|
55
|
+
ENV['CONTENTFUL_ENV'] = ''
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'returns ENV["CONTENTFUL_ENV"] section if exists' do
|
59
|
+
ENV['CONTENTFUL_ENV'] = 'other_section'
|
60
|
+
expect(subject.class.new(sections_path).config_section).to eq 'other_section'
|
61
|
+
ENV['CONTENTFUL_ENV'] = ''
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe '#read' do
|
66
|
+
it 'fails if "global" section does not exist' do
|
67
|
+
expect { subject.class.new(no_global_path).read }.to raise_error 'Token not found'
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'fails if management token is not found' do
|
71
|
+
expect { subject.class.new(no_token_path).read }.to raise_error 'Token not found'
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'returns token if its found' do
|
75
|
+
expect(subject.read).to eq 'foobar'
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe 'write methods' do
|
80
|
+
before do
|
81
|
+
@file = subject.config_file
|
82
|
+
expect(@file).to receive(:save)
|
83
|
+
end
|
84
|
+
|
85
|
+
it '#write_access_token' do
|
86
|
+
|
87
|
+
expect(@file.has_section?('some_space')).to be_falsey
|
88
|
+
|
89
|
+
subject.write_access_token('some_space', 'asd')
|
90
|
+
|
91
|
+
expect(@file['some_space']['CONTENTFUL_DELIVERY_ACCESS_TOKEN']).to eq 'asd'
|
92
|
+
end
|
93
|
+
|
94
|
+
it '#write_space_id' do
|
95
|
+
expect(@file.has_section?('some_space')).to be_falsey
|
96
|
+
|
97
|
+
subject.write_space_id('some_space', 'asd')
|
98
|
+
|
99
|
+
expect(@file['some_space']['SPACE_ID']).to eq 'asd'
|
100
|
+
end
|
101
|
+
|
102
|
+
describe '#write' do
|
103
|
+
it 'writes management tokens when only value is sent' do
|
104
|
+
expect(@file['global']['CONTENTFUL_MANAGEMENT_ACCESS_TOKEN']).to eq 'foobar'
|
105
|
+
|
106
|
+
subject.write('baz')
|
107
|
+
|
108
|
+
expect(@file['global']['CONTENTFUL_MANAGEMENT_ACCESS_TOKEN']).to eq 'baz'
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'can write management tokens to any section' do
|
112
|
+
expect(@file.has_section?('blah')).to be_falsey
|
113
|
+
|
114
|
+
subject.write('baz', 'blah')
|
115
|
+
|
116
|
+
expect(@file['blah']['CONTENTFUL_MANAGEMENT_ACCESS_TOKEN']).to eq 'baz'
|
117
|
+
end
|
118
|
+
|
119
|
+
it 'can write any key to any section' do
|
120
|
+
expect(@file.has_section?('blah')).to be_falsey
|
121
|
+
|
122
|
+
subject.write('foo', 'bar', 'baz')
|
123
|
+
|
124
|
+
expect(@file['bar']['baz']).to eq 'foo'
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
describe '#==' do
|
130
|
+
it 'returns false when other is not a token' do
|
131
|
+
expect(subject == 1).to be_falsey
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'returns false when other token does not have same config_path' do
|
135
|
+
expect(subject == subject.class.new('foo')).to be_falsey
|
136
|
+
end
|
137
|
+
|
138
|
+
it 'returns true when other token has same config_path' do
|
139
|
+
expect(subject == subject.class.new(path)).to be_truthy
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
[global]
|
@@ -0,0 +1,77 @@
|
|
1
|
+
{
|
2
|
+
"content_types": [
|
3
|
+
{
|
4
|
+
"id": "1VX60jHERm6yuem8I2agWG",
|
5
|
+
"name": "yolo",
|
6
|
+
"display_field": "title",
|
7
|
+
"fields": [
|
8
|
+
{
|
9
|
+
"id": "title",
|
10
|
+
"name": "title",
|
11
|
+
"type": "Symbol"
|
12
|
+
},
|
13
|
+
{
|
14
|
+
"id": "assets",
|
15
|
+
"name": "assets",
|
16
|
+
"type": "Array",
|
17
|
+
"items": {
|
18
|
+
"type": "Link",
|
19
|
+
"link_type": "Asset"
|
20
|
+
}
|
21
|
+
}
|
22
|
+
]
|
23
|
+
}
|
24
|
+
],
|
25
|
+
"assets": [
|
26
|
+
{
|
27
|
+
"id": "2cMU9UUngYMqAEmw4Cm8Iw",
|
28
|
+
"title": "Screen Shot 2015-11-18 at 11.42.12",
|
29
|
+
"file": {
|
30
|
+
"filename": "Screen Shot 2015-11-18 at 11.42.12",
|
31
|
+
"url": "https://images.contentful.com/o2n5bdfcee61/2cMU9UUngYMqAEmw4Cm8Iw/466d36d31bb59d487115b7be995438e1/Screen_Shot_2015-11-18_at_11.42.12.png"
|
32
|
+
}
|
33
|
+
},
|
34
|
+
{
|
35
|
+
"id": "4D5sv49qaAoMIkWgAW8g0I",
|
36
|
+
"title": "Screen Shot 2015-11-16 at 21.37.19",
|
37
|
+
"file": {
|
38
|
+
"filename": "Screen Shot 2015-11-16 at 21.37.19",
|
39
|
+
"url": "https://images.contentful.com/o2n5bdfcee61/4D5sv49qaAoMIkWgAW8g0I/b61adc1bc26a74ac9b65e19365747cf9/Screen_Shot_2015-11-16_at_21.37.19.png"
|
40
|
+
}
|
41
|
+
},
|
42
|
+
{
|
43
|
+
"id": "4eX9aQsDdeqweg6Si00KaW",
|
44
|
+
"title": "Screen Shot 2015-11-17 at 17.57.00",
|
45
|
+
"file": {
|
46
|
+
"filename": "Screen Shot 2015-11-17 at 17.57.00",
|
47
|
+
"url": "https://images.contentful.com/o2n5bdfcee61/4eX9aQsDdeqweg6Si00KaW/16646165346d59974fbfd4e0223ea89e/Screen_Shot_2015-11-17_at_17.57.00.png"
|
48
|
+
}
|
49
|
+
},
|
50
|
+
{
|
51
|
+
"id": "7i1Ck3BG4o4KeIEUGosEeU",
|
52
|
+
"title": "Screen Shot 2015-11-17 at 18.04.02",
|
53
|
+
"file": {
|
54
|
+
"filename": "Screen Shot 2015-11-17 at 18.04.02",
|
55
|
+
"url": "https://images.contentful.com/o2n5bdfcee61/7i1Ck3BG4o4KeIEUGosEeU/4db1a207ec69f99f0d795c48a59cbcd1/Screen_Shot_2015-11-17_at_18.04.02.png"
|
56
|
+
}
|
57
|
+
}
|
58
|
+
],
|
59
|
+
"entries": {
|
60
|
+
"1VX60jHERm6yuem8I2agWG": [
|
61
|
+
{
|
62
|
+
"id": "5nQB3z8RgW8CUG6uGyCsEw",
|
63
|
+
"title": "yolo",
|
64
|
+
"assets": [
|
65
|
+
{
|
66
|
+
"link_type": "Asset",
|
67
|
+
"id": "4eX9aQsDdeqweg6Si00KaW"
|
68
|
+
},
|
69
|
+
{
|
70
|
+
"link_type": "Asset",
|
71
|
+
"id": "4D5sv49qaAoMIkWgAW8g0I"
|
72
|
+
}
|
73
|
+
]
|
74
|
+
}
|
75
|
+
]
|
76
|
+
}
|
77
|
+
}
|
@@ -0,0 +1,34 @@
|
|
1
|
+
{
|
2
|
+
"content_types": [
|
3
|
+
{
|
4
|
+
"id": "cat",
|
5
|
+
"name": "Cat",
|
6
|
+
"displayField": "name",
|
7
|
+
"fields": [
|
8
|
+
{
|
9
|
+
"id": "name",
|
10
|
+
"name": "Name",
|
11
|
+
"type": "Symbol"
|
12
|
+
}
|
13
|
+
]
|
14
|
+
}
|
15
|
+
],
|
16
|
+
"assets": [
|
17
|
+
{
|
18
|
+
"id": "cat_asset",
|
19
|
+
"title": "Cat",
|
20
|
+
"file": {
|
21
|
+
"filename": "cat",
|
22
|
+
"url": "https://somecat.com/my_cat.jpeg"
|
23
|
+
}
|
24
|
+
}
|
25
|
+
],
|
26
|
+
"entries": {
|
27
|
+
"cat": [
|
28
|
+
{
|
29
|
+
"id": "nyancat",
|
30
|
+
"name": "Nyan Cat"
|
31
|
+
}
|
32
|
+
]
|
33
|
+
}
|
34
|
+
}
|
@@ -0,0 +1,437 @@
|
|
1
|
+
{
|
2
|
+
"content_types": [
|
3
|
+
{
|
4
|
+
"id": "2PqfXUJwE8qSYKuM0U6w8M",
|
5
|
+
"name": "Product",
|
6
|
+
"display_field": "productName",
|
7
|
+
"fields": [
|
8
|
+
{
|
9
|
+
"id": "productName",
|
10
|
+
"name": "Product name",
|
11
|
+
"type": "Text"
|
12
|
+
},
|
13
|
+
{
|
14
|
+
"id": "slug",
|
15
|
+
"name": "Slug",
|
16
|
+
"type": "Symbol"
|
17
|
+
},
|
18
|
+
{
|
19
|
+
"id": "productDescription",
|
20
|
+
"name": "Description",
|
21
|
+
"type": "Text"
|
22
|
+
},
|
23
|
+
{
|
24
|
+
"id": "sizetypecolor",
|
25
|
+
"name": "Size/Type/Color",
|
26
|
+
"type": "Symbol"
|
27
|
+
},
|
28
|
+
{
|
29
|
+
"id": "image",
|
30
|
+
"name": "Image",
|
31
|
+
"type": "Array",
|
32
|
+
"items": {
|
33
|
+
"type": "Link",
|
34
|
+
"link_type": "Asset"
|
35
|
+
}
|
36
|
+
},
|
37
|
+
{
|
38
|
+
"id": "tags",
|
39
|
+
"name": "Tags",
|
40
|
+
"type": "Array",
|
41
|
+
"items": {
|
42
|
+
"type": "Symbol"
|
43
|
+
}
|
44
|
+
},
|
45
|
+
{
|
46
|
+
"id": "categories",
|
47
|
+
"name": "Categories",
|
48
|
+
"type": "Array",
|
49
|
+
"items": {
|
50
|
+
"type": "Link",
|
51
|
+
"link_type": "Entry"
|
52
|
+
}
|
53
|
+
},
|
54
|
+
{
|
55
|
+
"id": "price",
|
56
|
+
"name": "Price",
|
57
|
+
"type": "Number"
|
58
|
+
},
|
59
|
+
{
|
60
|
+
"id": "brand",
|
61
|
+
"name": "Brand",
|
62
|
+
"type": "Link",
|
63
|
+
"link_type": "Entry"
|
64
|
+
},
|
65
|
+
{
|
66
|
+
"id": "quantity",
|
67
|
+
"name": "Quantity",
|
68
|
+
"type": "Integer"
|
69
|
+
},
|
70
|
+
{
|
71
|
+
"id": "sku",
|
72
|
+
"name": "SKU",
|
73
|
+
"type": "Symbol"
|
74
|
+
},
|
75
|
+
{
|
76
|
+
"id": "website",
|
77
|
+
"name": "Available at",
|
78
|
+
"type": "Symbol"
|
79
|
+
}
|
80
|
+
]
|
81
|
+
},
|
82
|
+
{
|
83
|
+
"id": "6XwpTaSiiI2Ak2Ww0oi6qa",
|
84
|
+
"name": "Category",
|
85
|
+
"display_field": "title",
|
86
|
+
"fields": [
|
87
|
+
{
|
88
|
+
"id": "title",
|
89
|
+
"name": "Title",
|
90
|
+
"type": "Text"
|
91
|
+
},
|
92
|
+
{
|
93
|
+
"id": "icon",
|
94
|
+
"name": "Icon",
|
95
|
+
"type": "Link",
|
96
|
+
"link_type": "Asset"
|
97
|
+
},
|
98
|
+
{
|
99
|
+
"id": "categoryDescription",
|
100
|
+
"name": "Description",
|
101
|
+
"type": "Text"
|
102
|
+
}
|
103
|
+
]
|
104
|
+
},
|
105
|
+
{
|
106
|
+
"id": "sFzTZbSuM8coEwygeUYes",
|
107
|
+
"name": "Brand",
|
108
|
+
"display_field": "companyName",
|
109
|
+
"fields": [
|
110
|
+
{
|
111
|
+
"id": "companyName",
|
112
|
+
"name": "Company name",
|
113
|
+
"type": "Text"
|
114
|
+
},
|
115
|
+
{
|
116
|
+
"id": "logo",
|
117
|
+
"name": "Logo",
|
118
|
+
"type": "Link",
|
119
|
+
"link_type": "Asset"
|
120
|
+
},
|
121
|
+
{
|
122
|
+
"id": "companyDescription",
|
123
|
+
"name": "Description",
|
124
|
+
"type": "Text"
|
125
|
+
},
|
126
|
+
{
|
127
|
+
"id": "website",
|
128
|
+
"name": "Website",
|
129
|
+
"type": "Symbol"
|
130
|
+
},
|
131
|
+
{
|
132
|
+
"id": "twitter",
|
133
|
+
"name": "Twitter",
|
134
|
+
"type": "Symbol"
|
135
|
+
},
|
136
|
+
{
|
137
|
+
"id": "email",
|
138
|
+
"name": "Email",
|
139
|
+
"type": "Symbol"
|
140
|
+
},
|
141
|
+
{
|
142
|
+
"id": "phone",
|
143
|
+
"name": "Phone #",
|
144
|
+
"type": "Array",
|
145
|
+
"items": {
|
146
|
+
"type": "Symbol"
|
147
|
+
}
|
148
|
+
}
|
149
|
+
]
|
150
|
+
}
|
151
|
+
],
|
152
|
+
"assets": [
|
153
|
+
{
|
154
|
+
"id": "10TkaLheGeQG6qQGqWYqUI",
|
155
|
+
"title": "Whisk beaters",
|
156
|
+
"file": {
|
157
|
+
"filename": "ryugj83mqwa1asojwtwb",
|
158
|
+
"url": "https://images.contentful.com/wl1z0pal05vy/10TkaLheGeQG6qQGqWYqUI/393edd89fbc3f322bb6ab050ca81831a/ryugj83mqwa1asojwtwb.jpg"
|
159
|
+
}
|
160
|
+
},
|
161
|
+
{
|
162
|
+
"id": "1MgbdJNTsMWKI0W68oYqkU",
|
163
|
+
"title": "Chive logo",
|
164
|
+
"file": {
|
165
|
+
"filename": "9ef190c59f0d375c0dea58b58a4bc1f0",
|
166
|
+
"url": "https://images.contentful.com/wl1z0pal05vy/1MgbdJNTsMWKI0W68oYqkU/380777caf3b9146060b3928d70af99a0/9ef190c59f0d375c0dea58b58a4bc1f0.jpeg"
|
167
|
+
}
|
168
|
+
},
|
169
|
+
{
|
170
|
+
"id": "2Y8LhXLnYAYqKCGEWG4EKI",
|
171
|
+
"title": "Lemnos",
|
172
|
+
"file": {
|
173
|
+
"filename": "lemnos-logo",
|
174
|
+
"url": "https://images.contentful.com/wl1z0pal05vy/2Y8LhXLnYAYqKCGEWG4EKI/6b12623a0f68ce40b5338c4f34b98b39/lemnos-logo.jpg"
|
175
|
+
}
|
176
|
+
},
|
177
|
+
{
|
178
|
+
"id": "3wtvPBbBjiMKqKKga8I2Cu",
|
179
|
+
"title": "Normann Copenhagen",
|
180
|
+
"file": {
|
181
|
+
"filename": "zJYzDlGk",
|
182
|
+
"url": "https://images.contentful.com/wl1z0pal05vy/3wtvPBbBjiMKqKKga8I2Cu/a5fd08c6dba9eb4cb6f6041bd4c4c700/zJYzDlGk.jpeg"
|
183
|
+
}
|
184
|
+
},
|
185
|
+
{
|
186
|
+
"id": "4zj1ZOfHgQ8oqgaSKm4Qo2",
|
187
|
+
"title": "Playsam",
|
188
|
+
"file": {
|
189
|
+
"filename": "playsam",
|
190
|
+
"url": "https://images.contentful.com/wl1z0pal05vy/4zj1ZOfHgQ8oqgaSKm4Qo2/7b37248b127698ee0d9da1d1d49ccac4/playsam.jpg"
|
191
|
+
}
|
192
|
+
},
|
193
|
+
{
|
194
|
+
"id": "6m5AJ9vMPKc8OUoQeoCS4o",
|
195
|
+
"title": "Home and Kitchen",
|
196
|
+
"file": {
|
197
|
+
"filename": "1418244847_Streamline-18-256",
|
198
|
+
"url": "https://images.contentful.com/wl1z0pal05vy/6m5AJ9vMPKc8OUoQeoCS4o/64b4c38aa13cb6c721e7597b0116e851/1418244847_Streamline-18-256.png"
|
199
|
+
}
|
200
|
+
},
|
201
|
+
{
|
202
|
+
"id": "6s3iG2OVmoUcosmA8ocqsG",
|
203
|
+
"title": "House icon",
|
204
|
+
"file": {
|
205
|
+
"filename": "1418244847_Streamline-18-256 (1)",
|
206
|
+
"url": "https://images.contentful.com/wl1z0pal05vy/6s3iG2OVmoUcosmA8ocqsG/07f529c1ea9e5ec0d7c23a063126020d/1418244847_Streamline-18-256__1_.png"
|
207
|
+
}
|
208
|
+
},
|
209
|
+
{
|
210
|
+
"id": "6t4HKjytPi0mYgs240wkG",
|
211
|
+
"title": "Toys",
|
212
|
+
"file": {
|
213
|
+
"filename": "toys_512pxGREY",
|
214
|
+
"url": "https://images.contentful.com/wl1z0pal05vy/6t4HKjytPi0mYgs240wkG/ce975e9d2c67af83fd570c08b961ac5e/toys_512pxGREY.png"
|
215
|
+
}
|
216
|
+
},
|
217
|
+
{
|
218
|
+
"id": "KTRF62Q4gg60q6WCsWKw8",
|
219
|
+
"title": "SoSo Wall Clock",
|
220
|
+
"file": {
|
221
|
+
"filename": "soso.clock",
|
222
|
+
"url": "https://images.contentful.com/wl1z0pal05vy/KTRF62Q4gg60q6WCsWKw8/8ef0460460c427b0671214500d259504/soso.clock.jpg"
|
223
|
+
}
|
224
|
+
},
|
225
|
+
{
|
226
|
+
"id": "Xc0ny7GWsMEMCeASWO2um",
|
227
|
+
"title": "Hudson Wall Cup ",
|
228
|
+
"file": {
|
229
|
+
"filename": "jqvtazcyfwseah9fmysz",
|
230
|
+
"url": "https://images.contentful.com/wl1z0pal05vy/Xc0ny7GWsMEMCeASWO2um/e3fb971932a49ee6ad3fc292cf7c14b3/jqvtazcyfwseah9fmysz.jpg"
|
231
|
+
}
|
232
|
+
},
|
233
|
+
{
|
234
|
+
"id": "wtrHxeu3zEoEce2MokCSi",
|
235
|
+
"title": "Playsam Streamliner",
|
236
|
+
"file": {
|
237
|
+
"filename": "quwowooybuqbl6ntboz3",
|
238
|
+
"url": "https://images.contentful.com/wl1z0pal05vy/wtrHxeu3zEoEce2MokCSi/88765b99dba8d69101cc58fce66b63c7/quwowooybuqbl6ntboz3.jpg"
|
239
|
+
}
|
240
|
+
}
|
241
|
+
],
|
242
|
+
"entries": {
|
243
|
+
"sFzTZbSuM8coEwygeUYes": [
|
244
|
+
{
|
245
|
+
"id": "4LgMotpNF6W20YKmuemW0a",
|
246
|
+
"companyName": "Lemnos",
|
247
|
+
"website": "http://www.lemnos.jp/en/",
|
248
|
+
"email": "info@acgears.com",
|
249
|
+
"phone": [
|
250
|
+
"+1 212 260 2269"
|
251
|
+
],
|
252
|
+
"logo": {
|
253
|
+
"link_type": "Asset",
|
254
|
+
"id": "2Y8LhXLnYAYqKCGEWG4EKI"
|
255
|
+
},
|
256
|
+
"companyDescription": "TAKATA Lemnos Inc. was founded in 1947 as a brass casting manufacturing industry in Takaoka-city, Toyama Prefecture, Japan and we launched out into the full-scale business trade with Seiko Clock Co., Ltd. since 1966.\n\nWe entered into the development for the original planning from late 1980 and \"Lemnos Brand\" recognized as the global design clock by a masterpiece \"HOLA\" designed by Kazuo KAWASAKI which released in 1989.\n\nAfterwards, we made a lot of projects with well-known designers who took in active in Japan and overseas such as Riki WATANABE, Kazuo KAWASAKI, Shin AZUMI, Tomoko AZUMI, Kanae TSUKAMOTO etc. and we made announcement of their fine works abounding in artistry and prominent designs. In addition, we realized to make a special project by the collaboration with Andrea Branzi, a well-known architect in the world.\n\nLemnos brand products are now highly praised from the design shops and the interior shops all over the world.\n\nIn recent years, we also have been given high priority to develop interior accessories making full use of our traditional techniques by the founding manufacturer and we always focus our minds on the development for the new Lemnos products in the new market.\n\nOur Lemnos products are made carefully by our craftsmen finely honed skillful techniques in Japan. They surely bring out the attractiveness of the materials to the maximum and create fine products not being influenced on the fashion trend accordingly. TAKATA Lemnos Inc. definitely would like to be innovative and continuously propose the beauty lasts forever."
|
257
|
+
},
|
258
|
+
{
|
259
|
+
"id": "651CQ8rLoIYCeY6G0QG22q",
|
260
|
+
"companyName": "Normann Copenhagen",
|
261
|
+
"logo": {
|
262
|
+
"link_type": "Asset",
|
263
|
+
"id": "3wtvPBbBjiMKqKKga8I2Cu"
|
264
|
+
},
|
265
|
+
"companyDescription": "Normann Copenhagen is a way of living - a mindset. We love to challenge the conventional design rules. This is why you will find traditional materials put into untraditional use such as a Stone Hook made of Icelandic stones, a vase made out of silicon and last but not least a dog made out of plastic.",
|
266
|
+
"website": "http://www.normann-copenhagen.com/",
|
267
|
+
"twitter": "https://twitter.com/NormannCPH",
|
268
|
+
"email": "normann@normann-copenhagen.com",
|
269
|
+
"phone": [
|
270
|
+
"+45 35 55 44 59"
|
271
|
+
]
|
272
|
+
},
|
273
|
+
{
|
274
|
+
"id": "JrePkDVYomE8AwcuCUyMi",
|
275
|
+
"companyDescription": "Playsam is the leading Scandinavian design company for executive wooden toy gift. Scandinavian design playful creativity, integrity and sophistication are Playsam. Scandinavian design and wooden toy makes Playsam gift lovely to the world of design since 1984.",
|
276
|
+
"companyName": "Playsam",
|
277
|
+
"logo": {
|
278
|
+
"link_type": "Asset",
|
279
|
+
"id": "4zj1ZOfHgQ8oqgaSKm4Qo2"
|
280
|
+
},
|
281
|
+
"website": "http://playsam.com/"
|
282
|
+
}
|
283
|
+
],
|
284
|
+
"2PqfXUJwE8qSYKuM0U6w8M": [
|
285
|
+
{
|
286
|
+
"id": "4BqrajvA8E6qwgkieoqmqO",
|
287
|
+
"productName": "SoSo Wall Clock",
|
288
|
+
"productDescription": "The newly released SoSo Clock from Lemnos marries simple, clean design and bold, striking features. Its saturated marigold face is a lively pop of color to white or grey walls, but would also pair nicely with navy and maroon. Where most clocks feature numbers at the border of the clock, the SoSo brings them in tight to the middle, leaving a wide space between the numbers and the slight frame. The hour hand provides a nice interruption to the black and yellow of the clock - it is featured in a brilliant white. Despite its bold color and contrast, the SoSo maintains a clean, pure aesthetic that is suitable to a variety of contemporary interiors.",
|
289
|
+
"image": [
|
290
|
+
{
|
291
|
+
"link_type": "Asset",
|
292
|
+
"id": "KTRF62Q4gg60q6WCsWKw8"
|
293
|
+
}
|
294
|
+
],
|
295
|
+
"categories": [
|
296
|
+
{
|
297
|
+
"link_type": "Entry",
|
298
|
+
"id": "7LAnCobuuWYSqks6wAwY2a"
|
299
|
+
}
|
300
|
+
],
|
301
|
+
"price": 120,
|
302
|
+
"quantity": 3,
|
303
|
+
"sku": "B00MG4ULK2",
|
304
|
+
"tags": [
|
305
|
+
"home décor",
|
306
|
+
"clocks",
|
307
|
+
"interior design",
|
308
|
+
"yellow",
|
309
|
+
"gifts"
|
310
|
+
],
|
311
|
+
"sizetypecolor": "10\" x 2.2\"",
|
312
|
+
"brand": {
|
313
|
+
"link_type": "Entry",
|
314
|
+
"id": "4LgMotpNF6W20YKmuemW0a"
|
315
|
+
},
|
316
|
+
"website": "http://store.dwell.com/soso-wall-clock.html",
|
317
|
+
"slug": "soso-wall-clock"
|
318
|
+
},
|
319
|
+
{
|
320
|
+
"id": "6dbjWqNd9SqccegcqYq224",
|
321
|
+
"slug": "whisk-beater",
|
322
|
+
"productName": "Whisk Beater",
|
323
|
+
"productDescription": "A creative little whisk that comes in 8 different colors. Handy and easy to clean after use. A great gift idea.",
|
324
|
+
"sizetypecolor": "0.8 x 0.8 x 11.2 inches; 1.6 ounces",
|
325
|
+
"image": [
|
326
|
+
{
|
327
|
+
"link_type": "Asset",
|
328
|
+
"id": "10TkaLheGeQG6qQGqWYqUI"
|
329
|
+
}
|
330
|
+
],
|
331
|
+
"tags": [
|
332
|
+
"kitchen",
|
333
|
+
"accessories",
|
334
|
+
"whisk",
|
335
|
+
"scandinavia",
|
336
|
+
"design"
|
337
|
+
],
|
338
|
+
"categories": [
|
339
|
+
{
|
340
|
+
"link_type": "Entry",
|
341
|
+
"id": "7LAnCobuuWYSqks6wAwY2a"
|
342
|
+
}
|
343
|
+
],
|
344
|
+
"website": "http://www.amazon.com/dp/B0081F2CCK/",
|
345
|
+
"sku": "B0081F2CCK",
|
346
|
+
"quantity": 89,
|
347
|
+
"brand": {
|
348
|
+
"link_type": "Entry",
|
349
|
+
"id": "651CQ8rLoIYCeY6G0QG22q"
|
350
|
+
},
|
351
|
+
"price": 22
|
352
|
+
},
|
353
|
+
{
|
354
|
+
"id": "5KsDBWseXY6QegucYAoacS",
|
355
|
+
"slug": "playsam-streamliner-classic-car-espresso",
|
356
|
+
"productName": "Playsam Streamliner Classic Car, Espresso",
|
357
|
+
"productDescription": "A classic Playsam design, the Streamliner Classic Car has been selected as Swedish Design Classic by the Swedish National Museum for its inventive style and sleek surface. It's no wonder that this wooden car has also been a long-standing favorite for children both big and small!",
|
358
|
+
"sizetypecolor": "Length: 135 mm | color: espresso, green, or icar (white)",
|
359
|
+
"image": [
|
360
|
+
{
|
361
|
+
"link_type": "Asset",
|
362
|
+
"id": "wtrHxeu3zEoEce2MokCSi"
|
363
|
+
}
|
364
|
+
],
|
365
|
+
"tags": [
|
366
|
+
"wood",
|
367
|
+
"toy",
|
368
|
+
"car",
|
369
|
+
"sweden",
|
370
|
+
"design"
|
371
|
+
],
|
372
|
+
"categories": [
|
373
|
+
{
|
374
|
+
"link_type": "Entry",
|
375
|
+
"id": "24DPGBDeGEaYy8ms4Y8QMQ"
|
376
|
+
}
|
377
|
+
],
|
378
|
+
"website": "http://www.amazon.com/dp/B001R6JUZ2/",
|
379
|
+
"sku": "B001R6JUZ2",
|
380
|
+
"quantity": 56,
|
381
|
+
"price": 44,
|
382
|
+
"brand": {
|
383
|
+
"link_type": "Entry",
|
384
|
+
"id": "JrePkDVYomE8AwcuCUyMi"
|
385
|
+
}
|
386
|
+
},
|
387
|
+
{
|
388
|
+
"id": "3DVqIYj4dOwwcKu6sgqOgg",
|
389
|
+
"slug": "hudson-wall-cup",
|
390
|
+
"productName": "Hudson Wall Cup",
|
391
|
+
"productDescription": "Wall Hanging Glass Flower Vase and Terrarium",
|
392
|
+
"sizetypecolor": "3 x 3 x 5 inches; 5.3 ounces",
|
393
|
+
"image": [
|
394
|
+
{
|
395
|
+
"link_type": "Asset",
|
396
|
+
"id": "Xc0ny7GWsMEMCeASWO2um"
|
397
|
+
}
|
398
|
+
],
|
399
|
+
"tags": [
|
400
|
+
"vase",
|
401
|
+
"flowers",
|
402
|
+
"accessories"
|
403
|
+
],
|
404
|
+
"categories": [
|
405
|
+
{
|
406
|
+
"link_type": "Entry",
|
407
|
+
"id": "7LAnCobuuWYSqks6wAwY2a"
|
408
|
+
}
|
409
|
+
],
|
410
|
+
"price": 11,
|
411
|
+
"quantity": 101,
|
412
|
+
"sku": "B00E82D7I8",
|
413
|
+
"website": "http://www.amazon.com/dp/B00E82D7I8/"
|
414
|
+
}
|
415
|
+
],
|
416
|
+
"6XwpTaSiiI2Ak2Ww0oi6qa": [
|
417
|
+
{
|
418
|
+
"id": "7LAnCobuuWYSqks6wAwY2a",
|
419
|
+
"title": "Home & Kitchen",
|
420
|
+
"categoryDescription": "Shop for furniture, bedding, bath, vacuums, kitchen products, and more",
|
421
|
+
"icon": {
|
422
|
+
"link_type": "Asset",
|
423
|
+
"id": "6m5AJ9vMPKc8OUoQeoCS4o"
|
424
|
+
}
|
425
|
+
},
|
426
|
+
{
|
427
|
+
"id": "24DPGBDeGEaYy8ms4Y8QMQ",
|
428
|
+
"title": "Toys",
|
429
|
+
"categoryDescription": "Shop for toys, games, educational aids",
|
430
|
+
"icon": {
|
431
|
+
"link_type": "Asset",
|
432
|
+
"id": "6t4HKjytPi0mYgs240wkG"
|
433
|
+
}
|
434
|
+
}
|
435
|
+
]
|
436
|
+
}
|
437
|
+
}
|