contentful 0.3.4 → 0.3.5
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 +7 -0
- data/.travis.yml +1 -1
- data/CHANGELOG.md +43 -24
- data/README.md +22 -0
- data/RELEASE.md +8 -0
- data/Rakefile +4 -6
- data/contentful.gemspec +7 -9
- data/examples/custom_classes.rb +1 -2
- data/examples/dynamic_entries.rb +2 -4
- data/examples/example_queries.rb +2 -3
- data/examples/raise_errors.rb +3 -5
- data/examples/raw_mode.rb +2 -3
- data/examples/resource_mapping.rb +3 -4
- data/lib/contentful/array.rb +0 -1
- data/lib/contentful/asset.rb +1 -1
- data/lib/contentful/client.rb +47 -38
- data/lib/contentful/deleted_entry.rb +1 -1
- data/lib/contentful/request.rb +1 -2
- data/lib/contentful/resource.rb +1 -1
- data/lib/contentful/resource/array_like.rb +2 -3
- data/lib/contentful/resource/asset_fields.rb +1 -1
- data/lib/contentful/resource/fields.rb +2 -3
- data/lib/contentful/resource/system_properties.rb +1 -1
- data/lib/contentful/resource_builder.rb +14 -23
- data/lib/contentful/response.rb +40 -35
- data/lib/contentful/sync.rb +1 -3
- data/lib/contentful/sync_page.rb +2 -3
- data/lib/contentful/version.rb +1 -1
- data/spec/array_spec.rb +20 -20
- data/spec/asset_spec.rb +14 -14
- data/spec/auto_includes_spec.rb +4 -4
- data/spec/client_class_spec.rb +22 -24
- data/spec/client_configuration_spec.rb +48 -49
- data/spec/coercions_spec.rb +4 -4
- data/spec/content_type_spec.rb +12 -12
- data/spec/deleted_asset_spec.rb +10 -11
- data/spec/deleted_entry_spec.rb +9 -10
- data/spec/dynamic_entry_spec.rb +11 -11
- data/spec/entry_spec.rb +14 -14
- data/spec/error_class_spec.rb +15 -18
- data/spec/error_requests_spec.rb +6 -7
- data/spec/field_spec.rb +9 -9
- data/spec/file_spec.rb +7 -7
- data/spec/link_spec.rb +14 -14
- data/spec/locale_spec.rb +6 -6
- data/spec/location_spec.rb +10 -10
- data/spec/request_spec.rb +13 -13
- data/spec/resource_building_spec.rb +7 -8
- data/spec/resource_spec.rb +14 -14
- data/spec/response_spec.rb +25 -24
- data/spec/space_spec.rb +10 -10
- data/spec/spec_helper.rb +1 -2
- data/spec/support/json_responses.rb +2 -2
- data/spec/support/vcr.rb +3 -3
- data/spec/sync_page_spec.rb +26 -27
- data/spec/sync_spec.rb +22 -24
- metadata +41 -66
data/spec/dynamic_entry_spec.rb
CHANGED
@@ -1,34 +1,34 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Contentful::DynamicEntry do
|
4
|
-
let(:content_type){ vcr('content_type'){ create_client.content_type 'cat' } }
|
4
|
+
let(:content_type) { vcr('content_type') { create_client.content_type 'cat' } }
|
5
5
|
|
6
6
|
it 'create as a class' do
|
7
|
-
expect(
|
7
|
+
expect(Contentful::DynamicEntry.create(content_type)).to be_instance_of Class
|
8
8
|
end
|
9
9
|
|
10
10
|
it 'also works with raw json object input as argument' do
|
11
|
-
expect(
|
11
|
+
expect(Contentful::DynamicEntry.create(json_fixture('content_type'))).to be_instance_of Class
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'should create Contentful::DynamicEntry instances' do
|
15
|
-
expect(
|
15
|
+
expect(Contentful::DynamicEntry.create(content_type).new(json_fixture('nyancat'))).to \
|
16
16
|
be_a Contentful::DynamicEntry
|
17
17
|
end
|
18
18
|
|
19
19
|
describe 'Example Entry Class' do
|
20
|
-
before
|
20
|
+
before do
|
21
21
|
NyanCatEntry = Contentful::DynamicEntry.create(content_type)
|
22
|
-
|
22
|
+
end
|
23
23
|
|
24
24
|
it 'defines getters for entry fields' do
|
25
|
-
nyancat = NyanCatEntry.new json_fixture(
|
26
|
-
expect(
|
25
|
+
nyancat = NyanCatEntry.new json_fixture('nyancat')
|
26
|
+
expect(nyancat.color).to eq 'rainbow'
|
27
27
|
end
|
28
28
|
|
29
29
|
it 'automatically coerces types' do
|
30
|
-
nyancat = NyanCatEntry.new json_fixture(
|
31
|
-
expect(
|
30
|
+
nyancat = NyanCatEntry.new json_fixture('nyancat')
|
31
|
+
expect(nyancat.birthday).to be_a DateTime
|
32
32
|
end
|
33
33
|
end
|
34
|
-
end
|
34
|
+
end
|
data/spec/entry_spec.rb
CHANGED
@@ -1,52 +1,52 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Contentful::ContentType do
|
4
|
-
let(:entry){ vcr('entry'){ create_client.entry 'nyancat' } }
|
4
|
+
let(:entry) { vcr('entry') { create_client.entry 'nyancat' } }
|
5
5
|
|
6
6
|
describe 'SystemProperties' do
|
7
7
|
it 'has a #sys getter returning a hash with symbol keys' do
|
8
|
-
expect(
|
9
|
-
expect(
|
8
|
+
expect(entry.sys).to be_a Hash
|
9
|
+
expect(entry.sys.keys.sample).to be_a Symbol
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'has #id' do
|
13
|
-
expect(
|
13
|
+
expect(entry.id).to eq 'nyancat'
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'has #type' do
|
17
|
-
expect(
|
17
|
+
expect(entry.type).to eq 'Entry'
|
18
18
|
end
|
19
19
|
|
20
20
|
it 'has #space' do
|
21
|
-
expect(
|
21
|
+
expect(entry.space).to be_a Contentful::Link
|
22
22
|
end
|
23
23
|
|
24
24
|
it 'has #content_type' do
|
25
|
-
expect(
|
25
|
+
expect(entry.content_type).to be_a Contentful::Link
|
26
26
|
end
|
27
27
|
|
28
28
|
it 'has #created_at' do
|
29
|
-
expect(
|
29
|
+
expect(entry.created_at).to be_a DateTime
|
30
30
|
end
|
31
31
|
|
32
32
|
it 'has #updated_at' do
|
33
|
-
expect(
|
33
|
+
expect(entry.updated_at).to be_a DateTime
|
34
34
|
end
|
35
35
|
|
36
36
|
it 'has #revision' do
|
37
|
-
expect(
|
37
|
+
expect(entry.revision).to eq 5
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
41
|
describe 'Fields' do
|
42
42
|
it 'has a #fields getter returning a hash with symbol keys' do
|
43
|
-
expect(
|
44
|
-
expect(
|
43
|
+
expect(entry.sys).to be_a Hash
|
44
|
+
expect(entry.sys.keys.sample).to be_a Symbol
|
45
45
|
end
|
46
46
|
|
47
47
|
it "contains the entry's fields" do
|
48
|
-
expect(
|
49
|
-
expect(
|
48
|
+
expect(entry.fields[:color]).to eq 'rainbow'
|
49
|
+
expect(entry.fields[:bestFriend]).to be_a Contentful::Link
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
data/spec/error_class_spec.rb
CHANGED
@@ -1,59 +1,56 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Contentful::Error do
|
4
|
-
let(:r){ Contentful::Response.new raw_fixture(
|
5
|
-
|
4
|
+
let(:r) { Contentful::Response.new raw_fixture('not_found',404) }
|
6
5
|
|
7
6
|
describe '#response' do
|
8
7
|
it 'returns the response the error has been initialized with' do
|
9
|
-
expect(
|
8
|
+
expect(Contentful::Error.new(r).response).to be r
|
10
9
|
end
|
11
10
|
end
|
12
11
|
|
13
12
|
describe '#message' do
|
14
13
|
it 'returns the message found in the response json' do
|
15
|
-
expect(
|
16
|
-
expect(
|
17
|
-
eq json_fixture(
|
14
|
+
expect(Contentful::Error.new(r).message).not_to be_nil
|
15
|
+
expect(Contentful::Error.new(r).message).to \
|
16
|
+
eq json_fixture('not_found')['message']
|
18
17
|
end
|
19
18
|
end
|
20
19
|
|
21
|
-
|
22
20
|
describe Contentful::UnparsableJson do
|
23
21
|
describe '#message' do
|
24
22
|
it 'returns the json parser\'s message' do
|
25
|
-
uj = Contentful::Response.new raw_fixture(
|
26
|
-
expect(
|
27
|
-
include
|
23
|
+
uj = Contentful::Response.new raw_fixture('unparsable')
|
24
|
+
expect(Contentful::UnparsableJson.new(uj).message).to \
|
25
|
+
include 'unexpected token'
|
28
26
|
end
|
29
27
|
end
|
30
28
|
end
|
31
29
|
|
32
|
-
|
33
30
|
describe '.[]' do
|
34
31
|
it 'returns NotFound error class for 404' do
|
35
|
-
expect(
|
32
|
+
expect(Contentful::Error[404]).to eq Contentful::NotFound
|
36
33
|
end
|
37
34
|
|
38
35
|
it 'returns BadRequest error class for 400' do
|
39
|
-
expect(
|
36
|
+
expect(Contentful::Error[400]).to eq Contentful::BadRequest
|
40
37
|
end
|
41
38
|
|
42
39
|
it 'returns AccessDenied error class for 403' do
|
43
|
-
expect(
|
40
|
+
expect(Contentful::Error[403]).to eq Contentful::AccessDenied
|
44
41
|
end
|
45
42
|
|
46
43
|
it 'returns Unauthorized error class for 401' do
|
47
|
-
expect(
|
44
|
+
expect(Contentful::Error[401]).to eq Contentful::Unauthorized
|
48
45
|
end
|
49
46
|
|
50
47
|
it 'returns ServerError error class for 500' do
|
51
|
-
expect(
|
48
|
+
expect(Contentful::Error[500]).to eq Contentful::ServerError
|
52
49
|
end
|
53
50
|
|
54
51
|
it 'returns generic error class for any other value' do
|
55
|
-
expect(
|
56
|
-
expect(
|
52
|
+
expect(Contentful::Error[nil]).to eq Contentful::Error
|
53
|
+
expect(Contentful::Error[200]).to eq Contentful::Error
|
57
54
|
end
|
58
55
|
end
|
59
56
|
|
data/spec/error_requests_spec.rb
CHANGED
@@ -1,17 +1,16 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
|
4
3
|
describe 'Error Requests' do
|
5
4
|
it 'will return 404 (Unauthorized) if resource not found' do
|
6
|
-
expect_vcr(
|
5
|
+
expect_vcr('not found')do
|
7
6
|
create_client.entry 'not found'
|
8
|
-
|
7
|
+
end.to raise_error(Contentful::NotFound)
|
9
8
|
end
|
10
9
|
|
11
10
|
it 'will return 400 (BadRequest) if invalid parameters have been passed' do
|
12
|
-
expect_vcr(
|
11
|
+
expect_vcr('bad request')do
|
13
12
|
create_client.entries(some: 'parameter')
|
14
|
-
|
13
|
+
end.to raise_error(Contentful::BadRequest)
|
15
14
|
end
|
16
15
|
|
17
16
|
it 'will return 403 (AccessDenied) if ...' do
|
@@ -19,9 +18,9 @@ describe 'Error Requests' do
|
|
19
18
|
end
|
20
19
|
|
21
20
|
it 'will return 401 (Unauthorized) if wrong credentials given' do
|
22
|
-
client = Contentful::Client.new(space:
|
21
|
+
client = Contentful::Client.new(space: 'wrong', access_token: 'credentials')
|
23
22
|
|
24
|
-
expect_vcr(
|
23
|
+
expect_vcr('unauthorized'){
|
25
24
|
client.entry 'nyancat'
|
26
25
|
}.to raise_error(Contentful::Unauthorized)
|
27
26
|
end
|
data/spec/field_spec.rb
CHANGED
@@ -1,36 +1,36 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Contentful::Field do
|
4
|
-
let(:field){ vcr('field'){ create_client.content_type('cat').fields.first } }
|
4
|
+
let(:field) { vcr('field') { create_client.content_type('cat').fields.first } }
|
5
5
|
|
6
6
|
describe 'Properties' do
|
7
7
|
it 'has a #properties getter returning a hash with symbol keys' do
|
8
|
-
expect(
|
9
|
-
expect(
|
8
|
+
expect(field.properties).to be_a Hash
|
9
|
+
expect(field.properties.keys.sample).to be_a Symbol
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'has #id' do
|
13
|
-
expect(
|
13
|
+
expect(field.id).to eq 'name'
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'has #name' do
|
17
|
-
expect(
|
17
|
+
expect(field.name).to eq 'Name'
|
18
18
|
end
|
19
19
|
|
20
20
|
it 'has #type' do
|
21
|
-
expect(
|
21
|
+
expect(field.type).to eq 'Text'
|
22
22
|
end
|
23
23
|
|
24
24
|
it 'could have #items' do
|
25
|
-
expect(
|
25
|
+
expect(field).to respond_to :items
|
26
26
|
end
|
27
27
|
|
28
28
|
it 'has #required' do
|
29
|
-
expect(
|
29
|
+
expect(field.required).to be_true
|
30
30
|
end
|
31
31
|
|
32
32
|
it 'has #localized' do
|
33
|
-
expect(
|
33
|
+
expect(field.required).to be_true
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
data/spec/file_spec.rb
CHANGED
@@ -1,28 +1,28 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Contentful::File do
|
4
|
-
let(:file){ vcr('asset'){ create_client.asset('nyancat').file } }
|
4
|
+
let(:file) { vcr('asset') { create_client.asset('nyancat').file } }
|
5
5
|
|
6
6
|
describe 'Properties' do
|
7
7
|
it 'has a #properties getter returning a hash with symbol keys' do
|
8
|
-
expect(
|
9
|
-
expect(
|
8
|
+
expect(file.properties).to be_a Hash
|
9
|
+
expect(file.properties.keys.sample).to be_a Symbol
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'has #file_name' do
|
13
|
-
expect(
|
13
|
+
expect(file.file_name).to eq 'Nyan_cat_250px_frame.png'
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'has #content_type' do
|
17
|
-
expect(
|
17
|
+
expect(file.content_type).to eq 'image/png'
|
18
18
|
end
|
19
19
|
|
20
20
|
it 'has #url' do
|
21
|
-
expect(
|
21
|
+
expect(file.url).to eq '//images.contentful.com/cfexampleapi/4gp6taAwW4CmSgumq2ekUm/9da0cd1936871b8d72343e895a00d611/Nyan_cat_250px_frame.png'
|
22
22
|
end
|
23
23
|
|
24
24
|
it 'has #details' do
|
25
|
-
expect(
|
25
|
+
expect(file.details).to be_instance_of Hash
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
data/spec/link_spec.rb
CHANGED
@@ -1,40 +1,40 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Contentful::Link do
|
4
|
-
let(:entry){ vcr('entry'){ create_client.entry('nyancat') } }
|
5
|
-
let(:link){ entry.space }
|
6
|
-
let(:content_type_link){ entry.content_type }
|
4
|
+
let(:entry) { vcr('entry') { create_client.entry('nyancat') } }
|
5
|
+
let(:link) { entry.space }
|
6
|
+
let(:content_type_link) { entry.content_type }
|
7
7
|
|
8
8
|
describe 'SystemProperties' do
|
9
9
|
it 'has a #sys getter returning a hash with symbol keys' do
|
10
|
-
expect(
|
11
|
-
expect(
|
10
|
+
expect(link.sys).to be_a Hash
|
11
|
+
expect(link.sys.keys.sample).to be_a Symbol
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'has #id' do
|
15
|
-
expect(
|
15
|
+
expect(link.id).to eq 'cfexampleapi'
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'has #type' do
|
19
|
-
expect(
|
19
|
+
expect(link.type).to eq 'Link'
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'has #link_type' do
|
23
|
-
expect(
|
23
|
+
expect(link.link_type).to eq 'Space'
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
27
|
describe '#resolve' do
|
28
28
|
it 'queries the api for the resource' do
|
29
|
-
vcr('space')
|
30
|
-
expect(
|
31
|
-
|
29
|
+
vcr('space')do
|
30
|
+
expect(link.resolve).to be_a Contentful::Space
|
31
|
+
end
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'queries the api for the resource (different link object)' do
|
35
|
-
vcr('content_type')
|
36
|
-
expect(
|
37
|
-
|
35
|
+
vcr('content_type')do
|
36
|
+
expect(content_type_link.resolve).to be_a Contentful::ContentType
|
37
|
+
end
|
38
38
|
end
|
39
39
|
end
|
40
40
|
end
|
data/spec/locale_spec.rb
CHANGED
@@ -1,24 +1,24 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Contentful::Locale do
|
4
|
-
let(:locale){ vcr('locale'){ create_client.space.locales.first } }
|
4
|
+
let(:locale) { vcr('locale') { create_client.space.locales.first } }
|
5
5
|
|
6
6
|
describe 'Properties' do
|
7
7
|
it 'has a #properties getter returning a hash with symbol keys' do
|
8
|
-
expect(
|
9
|
-
expect(
|
8
|
+
expect(locale.properties).to be_a Hash
|
9
|
+
expect(locale.properties.keys.sample).to be_a Symbol
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'has #code' do
|
13
|
-
expect(
|
13
|
+
expect(locale.code).to eq 'en-US'
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'has #name' do
|
17
|
-
expect(
|
17
|
+
expect(locale.name).to eq 'English'
|
18
18
|
end
|
19
19
|
|
20
20
|
it 'has #default' do
|
21
|
-
expect(
|
21
|
+
expect(locale.default).to eq true
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
data/spec/location_spec.rb
CHANGED
@@ -1,30 +1,30 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Contentful::Location do
|
4
|
-
let(:location)
|
5
|
-
vcr('location')
|
4
|
+
let(:location)do
|
5
|
+
vcr('location')do
|
6
6
|
Contentful::Client.new(
|
7
7
|
space: 'lzjz8hygvfgu',
|
8
8
|
access_token: '0c6ef483524b5e46b3bafda1bf355f38f5f40b4830f7599f790a410860c7c271',
|
9
9
|
dynamic_entries: :auto,
|
10
10
|
).entry('3f6fq5ylFCi4kIYAQKsAYG').location
|
11
|
-
|
12
|
-
|
11
|
+
end
|
12
|
+
end
|
13
13
|
|
14
14
|
describe 'Properties' do
|
15
15
|
it 'has a #properties getter returning a hash with symbol keys' do
|
16
|
-
expect(
|
17
|
-
expect(
|
16
|
+
expect(location.properties).to be_a Hash
|
17
|
+
expect(location.properties.keys.sample).to be_a Symbol
|
18
18
|
end
|
19
19
|
|
20
20
|
it 'has #lat' do
|
21
|
-
expect(
|
22
|
-
expect(
|
21
|
+
expect(location.lat).to be_a Float
|
22
|
+
expect(location.lat.to_i).to eq 36
|
23
23
|
end
|
24
24
|
|
25
25
|
it 'has #lon' do
|
26
|
-
expect(
|
27
|
-
expect(
|
26
|
+
expect(location.lon).to be_a Float
|
27
|
+
expect(location.lon.to_i).to eq -94
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
data/spec/request_spec.rb
CHANGED
@@ -7,49 +7,49 @@ describe Contentful::Request do
|
|
7
7
|
stub(client).get
|
8
8
|
request = Contentful::Request.new(client, '/content_types', nil, 'nyancat')
|
9
9
|
request.get
|
10
|
-
expect(
|
10
|
+
expect(client).to have_received.get(request)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
14
|
describe '#query' do
|
15
15
|
it 'converts arrays given in query to comma strings' do
|
16
16
|
client = create_client
|
17
|
-
request = Contentful::Request.new(client, '/entries',
|
18
|
-
expect(
|
17
|
+
request = Contentful::Request.new(client, '/entries', 'fields.likes[in]' => %w(jake finn))
|
18
|
+
expect(request.query[:'fields.likes[in]']).to eq 'jake,finn'
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
22
|
context '[single resource]' do
|
23
|
-
let(:request)
|
23
|
+
let(:request)do
|
24
24
|
Contentful::Request.new(create_client, '/content_types', nil, 'nyancat')
|
25
|
-
|
25
|
+
end
|
26
26
|
|
27
27
|
describe '#url' do
|
28
28
|
it 'contais endpoint' do
|
29
|
-
expect(
|
29
|
+
expect(request.url).to include 'content_types'
|
30
30
|
end
|
31
31
|
|
32
32
|
it 'contains id' do
|
33
|
-
expect(
|
33
|
+
expect(request.url).to include 'nyancat'
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
38
|
context '[multi resource]' do
|
39
|
-
let(:request)
|
40
|
-
Contentful::Request.new(create_client, '/content_types',
|
41
|
-
|
39
|
+
let(:request)do
|
40
|
+
Contentful::Request.new(create_client, '/content_types', 'something' => 'requested')
|
41
|
+
end
|
42
42
|
|
43
43
|
describe '#query' do
|
44
44
|
it 'contains query' do
|
45
|
-
expect(
|
46
|
-
expect(
|
45
|
+
expect(request.query).not_to be_empty
|
46
|
+
expect(request.query[:something]).to eq 'requested'
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
50
|
describe '#url' do
|
51
51
|
it 'contais endpoint' do
|
52
|
-
expect(
|
52
|
+
expect(request.url).to include 'content_types'
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|