contentful 0.1.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.
- data/.README.md.swp +0 -0
- data/.gitignore +2 -0
- data/.rspec +1 -0
- data/.travis.yml +10 -0
- data/ChangeLog.md +3 -0
- data/Gemfile +3 -0
- data/LICENSE.txt +21 -0
- data/README.md +193 -0
- data/Rakefile +30 -0
- data/contentful.gemspec +31 -0
- data/do_request.sh +5 -0
- data/doc/Contentful.html +131 -0
- data/doc/Contentful/AccessDenied.html +158 -0
- data/doc/Contentful/Array.html +346 -0
- data/doc/Contentful/Asset.html +315 -0
- data/doc/Contentful/BadRequest.html +158 -0
- data/doc/Contentful/Client.html +1407 -0
- data/doc/Contentful/ContentType.html +183 -0
- data/doc/Contentful/DynamicEntry.html +333 -0
- data/doc/Contentful/Entry.html +198 -0
- data/doc/Contentful/Error.html +413 -0
- data/doc/Contentful/Field.html +161 -0
- data/doc/Contentful/File.html +160 -0
- data/doc/Contentful/Link.html +275 -0
- data/doc/Contentful/Locale.html +161 -0
- data/doc/Contentful/NotFound.html +158 -0
- data/doc/Contentful/Request.html +669 -0
- data/doc/Contentful/Resource.html +606 -0
- data/doc/Contentful/Resource/AssetFields.html +413 -0
- data/doc/Contentful/Resource/AssetFields/ClassMethods.html +174 -0
- data/doc/Contentful/Resource/ClassMethods.html +271 -0
- data/doc/Contentful/Resource/Fields.html +398 -0
- data/doc/Contentful/Resource/Fields/ClassMethods.html +187 -0
- data/doc/Contentful/Resource/SystemProperties.html +444 -0
- data/doc/Contentful/Resource/SystemProperties/ClassMethods.html +174 -0
- data/doc/Contentful/ResourceBuilder.html +1400 -0
- data/doc/Contentful/Response.html +546 -0
- data/doc/Contentful/ServerError.html +158 -0
- data/doc/Contentful/Space.html +183 -0
- data/doc/Contentful/Support.html +198 -0
- data/doc/Contentful/Unauthorized.html +158 -0
- data/doc/Contentful/UnparsableJson.html +158 -0
- data/doc/Contentful/UnparsableResource.html +158 -0
- data/doc/_index.html +410 -0
- data/doc/class_list.html +54 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +57 -0
- data/doc/css/style.css +338 -0
- data/doc/file.README.html +214 -0
- data/doc/file_list.html +56 -0
- data/doc/frames.html +26 -0
- data/doc/index.html +214 -0
- data/doc/js/app.js +219 -0
- data/doc/js/full_list.js +178 -0
- data/doc/js/jquery.js +4 -0
- data/doc/method_list.html +533 -0
- data/doc/top-level-namespace.html +112 -0
- data/examples/custom_classes.rb +43 -0
- data/examples/dynamic_entries.rb +126 -0
- data/examples/example_queries.rb +27 -0
- data/examples/raise_errors.rb +22 -0
- data/examples/raw_mode.rb +15 -0
- data/examples/resource_mapping.rb +33 -0
- data/lib/contentful.rb +3 -0
- data/lib/contentful/array.rb +47 -0
- data/lib/contentful/asset.rb +34 -0
- data/lib/contentful/client.rb +193 -0
- data/lib/contentful/content_type.rb +16 -0
- data/lib/contentful/dynamic_entry.rb +54 -0
- data/lib/contentful/entry.rb +12 -0
- data/lib/contentful/error.rb +52 -0
- data/lib/contentful/field.rb +16 -0
- data/lib/contentful/file.rb +13 -0
- data/lib/contentful/link.rb +20 -0
- data/lib/contentful/locale.rb +12 -0
- data/lib/contentful/location.rb +12 -0
- data/lib/contentful/request.rb +37 -0
- data/lib/contentful/resource.rb +146 -0
- data/lib/contentful/resource/asset_fields.rb +50 -0
- data/lib/contentful/resource/fields.rb +39 -0
- data/lib/contentful/resource/system_properties.rb +48 -0
- data/lib/contentful/resource_builder.rb +197 -0
- data/lib/contentful/response.rb +64 -0
- data/lib/contentful/space.rb +14 -0
- data/lib/contentful/support.rb +18 -0
- data/lib/contentful/version.rb +3 -0
- data/spec/array_spec.rb +69 -0
- data/spec/asset_spec.rb +62 -0
- data/spec/auto_includes_spec.rb +12 -0
- data/spec/client_class_spec.rb +59 -0
- data/spec/client_configuration_spec.rb +197 -0
- data/spec/coercions_spec.rb +10 -0
- data/spec/content_type_spec.rb +44 -0
- data/spec/dynamic_entry_spec.rb +34 -0
- data/spec/entry_spec.rb +53 -0
- data/spec/error_class_spec.rb +60 -0
- data/spec/error_requests_spec.rb +32 -0
- data/spec/field_spec.rb +36 -0
- data/spec/file_spec.rb +28 -0
- data/spec/fixtures/json_responses/content_type.json +83 -0
- data/spec/fixtures/json_responses/not_found.json +13 -0
- data/spec/fixtures/json_responses/nyancat.json +48 -0
- data/spec/fixtures/json_responses/unparsable.json +13 -0
- data/spec/fixtures/vcr_cassettes/array.yml +288 -0
- data/spec/fixtures/vcr_cassettes/array_page_1.yml +106 -0
- data/spec/fixtures/vcr_cassettes/array_page_2.yml +73 -0
- data/spec/fixtures/vcr_cassettes/asset.yml +96 -0
- data/spec/fixtures/vcr_cassettes/bad_request.yml +76 -0
- data/spec/fixtures/vcr_cassettes/content_type.yml +147 -0
- data/spec/fixtures/vcr_cassettes/entries.yml +561 -0
- data/spec/fixtures/vcr_cassettes/entry.yml +112 -0
- data/spec/fixtures/vcr_cassettes/entry_cache.yml +288 -0
- data/spec/fixtures/vcr_cassettes/field.yml +147 -0
- data/spec/fixtures/vcr_cassettes/locale.yml +81 -0
- data/spec/fixtures/vcr_cassettes/location.yml +305 -0
- data/spec/fixtures/vcr_cassettes/not_found.yml +71 -0
- data/spec/fixtures/vcr_cassettes/nyancat.yml +112 -0
- data/spec/fixtures/vcr_cassettes/nyancat_include.yml +112 -0
- data/spec/fixtures/vcr_cassettes/reloaded_entry.yml +112 -0
- data/spec/fixtures/vcr_cassettes/space.yml +81 -0
- data/spec/fixtures/vcr_cassettes/unauthorized.yml +64 -0
- data/spec/link_spec.rb +40 -0
- data/spec/locale_spec.rb +20 -0
- data/spec/location_spec.rb +30 -0
- data/spec/request_spec.rb +48 -0
- data/spec/resource_spec.rb +52 -0
- data/spec/response_spec.rb +50 -0
- data/spec/space_spec.rb +36 -0
- data/spec/spec_helper.rb +6 -0
- data/spec/support/client.rb +6 -0
- data/spec/support/json_responses.rb +11 -0
- data/spec/support/vcr.rb +16 -0
- metadata +374 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
4
|
+
<head>
|
|
5
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
6
|
+
<title>
|
|
7
|
+
Top Level Namespace
|
|
8
|
+
|
|
9
|
+
— Documentation by YARD 0.8.7.3
|
|
10
|
+
|
|
11
|
+
</title>
|
|
12
|
+
|
|
13
|
+
<link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
|
|
14
|
+
|
|
15
|
+
<link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
|
|
16
|
+
|
|
17
|
+
<script type="text/javascript" charset="utf-8">
|
|
18
|
+
hasFrames = window.top.frames.main ? true : false;
|
|
19
|
+
relpath = '';
|
|
20
|
+
framesUrl = "frames.html#!" + escape(window.location.href);
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
<script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
|
|
25
|
+
|
|
26
|
+
<script type="text/javascript" charset="utf-8" src="js/app.js"></script>
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
</head>
|
|
30
|
+
<body>
|
|
31
|
+
<div id="header">
|
|
32
|
+
<div id="menu">
|
|
33
|
+
|
|
34
|
+
<a href="_index.html">Index</a> »
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
<span class="title">Top Level Namespace</span>
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
<div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
|
|
41
|
+
</div>
|
|
42
|
+
|
|
43
|
+
<div id="search">
|
|
44
|
+
|
|
45
|
+
<a class="full_list_link" id="class_list_link"
|
|
46
|
+
href="class_list.html">
|
|
47
|
+
Class List
|
|
48
|
+
</a>
|
|
49
|
+
|
|
50
|
+
<a class="full_list_link" id="method_list_link"
|
|
51
|
+
href="method_list.html">
|
|
52
|
+
Method List
|
|
53
|
+
</a>
|
|
54
|
+
|
|
55
|
+
<a class="full_list_link" id="file_list_link"
|
|
56
|
+
href="file_list.html">
|
|
57
|
+
File List
|
|
58
|
+
</a>
|
|
59
|
+
|
|
60
|
+
</div>
|
|
61
|
+
<div class="clear"></div>
|
|
62
|
+
</div>
|
|
63
|
+
|
|
64
|
+
<iframe id="search_frame"></iframe>
|
|
65
|
+
|
|
66
|
+
<div id="content"><h1>Top Level Namespace
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
</h1>
|
|
71
|
+
|
|
72
|
+
<dl class="box">
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
</dl>
|
|
82
|
+
<div class="clear"></div>
|
|
83
|
+
|
|
84
|
+
<h2>Defined Under Namespace</h2>
|
|
85
|
+
<p class="children">
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
<strong class="modules">Modules:</strong> <span class='object_link'><a href="Contentful.html" title="Contentful (module)">Contentful</a></span>
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
</p>
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
</div>
|
|
104
|
+
|
|
105
|
+
<div id="footer">
|
|
106
|
+
Generated on Tue Mar 11 09:25:52 2014 by
|
|
107
|
+
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
108
|
+
0.8.7.3 (ruby-1.9.3).
|
|
109
|
+
</div>
|
|
110
|
+
|
|
111
|
+
</body>
|
|
112
|
+
</html>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Contentful resource classes are just plain Ruby classes that include the
|
|
2
|
+
# Contentful::Resource module.
|
|
3
|
+
#
|
|
4
|
+
# You can then define properties of the class. This will create a getter method
|
|
5
|
+
# with this name You can optionally pass a type identifier (Symbol or Class).
|
|
6
|
+
#
|
|
7
|
+
# Classes will be instantiated for the properties,
|
|
8
|
+
# Symbols will be looked up in Contentful::Resource::COERCIONS
|
|
9
|
+
|
|
10
|
+
require 'contentful'
|
|
11
|
+
|
|
12
|
+
class MyResource
|
|
13
|
+
include Contentful::Resource
|
|
14
|
+
|
|
15
|
+
property :some
|
|
16
|
+
property :age, :integer
|
|
17
|
+
property :country, Contentful::Locale
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
res = MyResource.new(
|
|
21
|
+
'some' => 'value',
|
|
22
|
+
'age' => '25',
|
|
23
|
+
'country' => {'code' => 'de', 'name' => 'Deutschland'},
|
|
24
|
+
'unknown_property' => 'ignored'
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
p res.some # => "value"
|
|
28
|
+
p res.age # => 25
|
|
29
|
+
p res.country # #<Contentful::Locale: ...
|
|
30
|
+
p res.unknown_property # NoMethodError
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
# Another possibility to create customized resources is to just inherit from an
|
|
34
|
+
# existing one:
|
|
35
|
+
|
|
36
|
+
class MyBetterArray < Contentful::Array
|
|
37
|
+
# e.g. define more methods that you need
|
|
38
|
+
def last
|
|
39
|
+
items.last
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Read further in examples/resource_mapping.rb
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
require 'contentful'
|
|
2
|
+
|
|
3
|
+
# A DynamicEntry is a resource classes, specifically for one ContentType
|
|
4
|
+
# This is the manual way of creating a dynamic class. This should not be
|
|
5
|
+
# neceassary in :auto mode
|
|
6
|
+
|
|
7
|
+
client = Contentful::Client.new(
|
|
8
|
+
space: 'cfexampleapi',
|
|
9
|
+
access_token: "b4c0n73n7fu1",
|
|
10
|
+
dynamic_entries: :manual,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
cat = client.content_type('cat')
|
|
14
|
+
CatEntry = Contentful::DynamicEntry.create(cat)
|
|
15
|
+
client.register_dynamic_entry 'cat', CatEntry
|
|
16
|
+
|
|
17
|
+
# The CatEntry behaves just like a normal entry, but it has knowlegde about the entry fields.
|
|
18
|
+
# It will create getter methods and convert field contents to the proper type:
|
|
19
|
+
|
|
20
|
+
nyancat = client.entry('nyancat')
|
|
21
|
+
p nyancat.is_a? CatEntry # => true
|
|
22
|
+
p nyancat.fields[:name] # => "Nyan Cat" # This would also be possible with a non-dynamic entry
|
|
23
|
+
p nyancat.name # => "Nyan Cat"
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
# You don't need to initialize a ContentType resource to create a DynamicEntry
|
|
27
|
+
# You could also pass the content type's JSON representation:
|
|
28
|
+
|
|
29
|
+
SuperCatEntry = Contentful::DynamicEntry.create <<JSON
|
|
30
|
+
{
|
|
31
|
+
"fields": [
|
|
32
|
+
{
|
|
33
|
+
"id": "name",
|
|
34
|
+
"name": "Name",
|
|
35
|
+
"type": "Text",
|
|
36
|
+
"required": true,
|
|
37
|
+
"localized": true
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"id": "likes",
|
|
41
|
+
"name": "Likes",
|
|
42
|
+
"type": "Array",
|
|
43
|
+
"required": false,
|
|
44
|
+
"localized": false,
|
|
45
|
+
"items": {
|
|
46
|
+
"type": "Symbol"
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"id": "color",
|
|
51
|
+
"name": "Color",
|
|
52
|
+
"type": "Symbol",
|
|
53
|
+
"required": false,
|
|
54
|
+
"localized": false
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"id": "bestFriend",
|
|
58
|
+
"name": "Best Friend",
|
|
59
|
+
"type": "Link",
|
|
60
|
+
"required": false,
|
|
61
|
+
"localized": false,
|
|
62
|
+
"linkType": "Entry"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"id": "birthday",
|
|
66
|
+
"name": "Birthday",
|
|
67
|
+
"type": "Date",
|
|
68
|
+
"required": false,
|
|
69
|
+
"localized": false
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"id": "lifes",
|
|
73
|
+
"name": "Lifes left",
|
|
74
|
+
"type": "Integer",
|
|
75
|
+
"required": false,
|
|
76
|
+
"localized": false,
|
|
77
|
+
"disabled": true
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"id": "lives",
|
|
81
|
+
"name": "Lives left",
|
|
82
|
+
"type": "Integer",
|
|
83
|
+
"required": false,
|
|
84
|
+
"localized": false
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"id": "image",
|
|
88
|
+
"name": "Image",
|
|
89
|
+
"required": false,
|
|
90
|
+
"localized": false,
|
|
91
|
+
"type": "Link",
|
|
92
|
+
"linkType": "Asset"
|
|
93
|
+
}
|
|
94
|
+
],
|
|
95
|
+
"name": "Cat",
|
|
96
|
+
"displayField": "name",
|
|
97
|
+
"description": "Meow.",
|
|
98
|
+
"sys": {
|
|
99
|
+
"space": {
|
|
100
|
+
"sys": {
|
|
101
|
+
"type": "Link",
|
|
102
|
+
"linkType": "Space",
|
|
103
|
+
"id": "cfexampleapi"
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
"type": "ContentType",
|
|
107
|
+
"id": "cat",
|
|
108
|
+
"revision": 2,
|
|
109
|
+
"createdAt": "2013-06-27T22:46:12.852Z",
|
|
110
|
+
"updatedAt": "2013-09-02T13:14:47.863Z"
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
JSON
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
# AUTO MODE - All entries will be converted to dynamic entries
|
|
117
|
+
|
|
118
|
+
client = Contentful::Client.new(
|
|
119
|
+
space: 'cfexampleapi',
|
|
120
|
+
access_token: "b4c0n73n7fu1",
|
|
121
|
+
dynamic_entries: :auto,
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
p happycat = client.entry('happycat') # #<Contentful::DynamicEntry[cat]:10078260 @fields={:name=>"Happy Cat" ...
|
|
125
|
+
p happycat.is_a? Contentful::DynamicEntry # true
|
|
126
|
+
p happycat.color # gray
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'contentful'
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
client = Contentful::Client.new(
|
|
5
|
+
space: 'cfexampleapi',
|
|
6
|
+
access_token: "b4c0n73n7fu1",
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
p client.space
|
|
10
|
+
|
|
11
|
+
p client.content_types
|
|
12
|
+
|
|
13
|
+
p client.entry 'nyancat', locale: 'tlh'
|
|
14
|
+
|
|
15
|
+
p client.entries(
|
|
16
|
+
'content_type' => 'cat',
|
|
17
|
+
'fields.likes' => 'lasagna',
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
p client.entries(
|
|
21
|
+
query: 'bacon',
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
p client.content_types(
|
|
25
|
+
order: '-sys.updatedAt',
|
|
26
|
+
limit: 3,
|
|
27
|
+
)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require 'contentful'
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
client = Contentful::Client.new(
|
|
5
|
+
space: 'cfexampleapi',
|
|
6
|
+
access_token: "b4c0n73n7fu1",
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
begin
|
|
10
|
+
p client.entry 'not found'
|
|
11
|
+
rescue => error
|
|
12
|
+
p error
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
client2 = Contentful::Client.new(
|
|
17
|
+
space: 'cfexampleapi',
|
|
18
|
+
access_token: "b4c0n73n7fu1",
|
|
19
|
+
raise_errors: false,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
p client2.entry 'not found'
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'contentful'
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
client = Contentful::Client.new(
|
|
5
|
+
space: 'cfexampleapi',
|
|
6
|
+
access_token: "b4c0n73n7fu1",
|
|
7
|
+
raw_mode: true,
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
entry = client.entry 'nyancat'
|
|
11
|
+
p entry.is_a? Contentful::Resource # false
|
|
12
|
+
p entry.is_a? Contentful::Response # true
|
|
13
|
+
p entry.status
|
|
14
|
+
p entry
|
|
15
|
+
puts entry.raw
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Using the :resource_mapping configuration, you can register your own classes to be used
|
|
2
|
+
# for the results from contentful.
|
|
3
|
+
#
|
|
4
|
+
# The key of the array defines the resource type (object["sys"]["type"]) and the value is:
|
|
5
|
+
# - the Class to use
|
|
6
|
+
# - a Proc, that returns the Class to use
|
|
7
|
+
# - a Symbol for a method of the ResourceBuilder object
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
require 'contentful'
|
|
11
|
+
|
|
12
|
+
class MyBetterArray < Contentful::Array
|
|
13
|
+
# e.g. define more methods that you need
|
|
14
|
+
def last
|
|
15
|
+
items.last
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
client = Contentful::Client.new(
|
|
20
|
+
space: 'cfexampleapi',
|
|
21
|
+
access_token: "b4c0n73n7fu1",
|
|
22
|
+
resource_mapping: {
|
|
23
|
+
'Array' => MyBetterArray,
|
|
24
|
+
'Asset' => ->(json_object){
|
|
25
|
+
# might return different class if some criteria is matched
|
|
26
|
+
Contentful::Asset
|
|
27
|
+
},
|
|
28
|
+
}
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
assets = client.assets
|
|
32
|
+
p assets.class # => MyBetterArray
|
|
33
|
+
p assets.last # => #<Contentful::Asset ...
|
data/lib/contentful.rb
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require_relative 'resource'
|
|
2
|
+
|
|
3
|
+
module Contentful
|
|
4
|
+
# Resource Class for Arrays (e.g. search results)
|
|
5
|
+
# https://www.contentful.com/developers/documentation/content-delivery-api/#arrays
|
|
6
|
+
# It also provides an #each method and includes Ruby's Enumerable module (gives you methods like #min, #first, etc)
|
|
7
|
+
class Array
|
|
8
|
+
DEFAULT_LIMIT = 100
|
|
9
|
+
|
|
10
|
+
include Contentful::Resource
|
|
11
|
+
include Contentful::Resource::SystemProperties
|
|
12
|
+
include Enumerable
|
|
13
|
+
|
|
14
|
+
property :total, :integer
|
|
15
|
+
property :limit, :integer
|
|
16
|
+
property :skip, :integer
|
|
17
|
+
property :items
|
|
18
|
+
|
|
19
|
+
# Only returns true for Contentful::Array
|
|
20
|
+
def array?
|
|
21
|
+
true
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Simplifies pagination
|
|
25
|
+
def next_page
|
|
26
|
+
if request
|
|
27
|
+
new_skip = (skip || 0) + (limit || DEFAULT_LIMIT)
|
|
28
|
+
new_request = request.copy
|
|
29
|
+
new_request.query[:skip] = new_skip
|
|
30
|
+
new_request.get
|
|
31
|
+
else
|
|
32
|
+
false
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Delegates to items#each
|
|
37
|
+
def each(&block)
|
|
38
|
+
items.each(&block)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Delegates to items#empty?
|
|
42
|
+
def empty?
|
|
43
|
+
items.empty?
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require_relative 'resource'
|
|
2
|
+
require_relative 'resource/asset_fields'
|
|
3
|
+
|
|
4
|
+
module Contentful
|
|
5
|
+
# Resource class for Asset.
|
|
6
|
+
# https://www.contentful.com/developers/documentation/content-delivery-api/#assets
|
|
7
|
+
class Asset
|
|
8
|
+
include Contentful::Resource
|
|
9
|
+
include Contentful::Resource::SystemProperties
|
|
10
|
+
include Contentful::Resource::AssetFields
|
|
11
|
+
|
|
12
|
+
# Returns the image url of an asset
|
|
13
|
+
# Allows you to pass in the following options for image resizing:
|
|
14
|
+
# :width
|
|
15
|
+
# :height
|
|
16
|
+
# :format
|
|
17
|
+
# :quality
|
|
18
|
+
# See https://www.contentful.com/developers/documentation/content-delivery-api/#image-asset-resizing
|
|
19
|
+
def image_url(options = {})
|
|
20
|
+
query = {
|
|
21
|
+
w: options[:w] || options[:width],
|
|
22
|
+
h: options[:h] || options[:height],
|
|
23
|
+
fm: options[:fm] || options[:format],
|
|
24
|
+
q: options[:q] || options[:quality],
|
|
25
|
+
}.reject{ |k,v| v.nil? }
|
|
26
|
+
|
|
27
|
+
if query.empty?
|
|
28
|
+
file.url
|
|
29
|
+
else
|
|
30
|
+
"#{file.url}?#{ URI.encode_www_form(query) }"
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|