contentful 0.1.2 → 0.1.3
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/CHANGELOG.md +5 -0
- data/lib/contentful/resource_builder.rb +45 -32
- data/lib/contentful/version.rb +1 -1
- data/spec/fixtures/json_responses/self_link.json +82 -0
- data/spec/resource_building_spec.rb +9 -0
- metadata +42 -66
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 055e3549fae94399369cbf11af030345ecca06a2
|
4
|
+
data.tar.gz: afcffb79eb459aa3b7fb55092c5be10594d98c63
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 74469eca51e340966a57bf3e7d2bd4880c3c0f988e5eba58eaef49fcecc52d7a3a3ab4ea092a6211beb353642686052c92636a7502e0ef714c15793ca4d4666d
|
7
|
+
data.tar.gz: 8ccc5ef2d39f5b9e3fdab75b8fe47d9b39d2e8c734b84a6638707143f5e5782abf34e9830d7f96d817531644b0ef4bf2d70f7ed536db0f835d8e4757c5fbb6e9
|
data/CHANGELOG.md
CHANGED
@@ -21,13 +21,14 @@ module Contentful
|
|
21
21
|
'Link' => Link,
|
22
22
|
}
|
23
23
|
|
24
|
-
attr_reader :client, :response, :resource_mapping
|
24
|
+
attr_reader :client, :response, :resource_mapping, :resource
|
25
25
|
|
26
26
|
|
27
27
|
def initialize(client, response, resource_mapping = {})
|
28
28
|
@response = response
|
29
29
|
@client = client
|
30
30
|
@included_resources = {}
|
31
|
+
@known_resources = Hash.new{ |h,k| h[k] = {} }
|
31
32
|
@resource_mapping = default_resource_mapping.merge(resource_mapping)
|
32
33
|
end
|
33
34
|
|
@@ -54,24 +55,25 @@ module Contentful
|
|
54
55
|
# - raise error if response not valid
|
55
56
|
# - look for included objects and parse them to resources
|
56
57
|
# - parse main object to resource
|
57
|
-
# - replace links in included resources with
|
58
|
-
# - replace links in main resource with
|
58
|
+
# - replace links in included resources with known resources
|
59
|
+
# - replace links in main resource with known resources
|
59
60
|
# - return main resource
|
60
61
|
def create_all_resources!
|
61
62
|
create_included_resources! response.object['includes']
|
62
|
-
|
63
|
+
@resource = create_resource(response.object)
|
63
64
|
|
64
65
|
unless @included_resources.empty?
|
65
|
-
|
66
|
-
|
66
|
+
replace_links_in_included_resources_with_known_resources
|
67
|
+
replace_links_with_known_resources @resource
|
67
68
|
end
|
68
69
|
|
69
|
-
|
70
|
+
@resource
|
70
71
|
end
|
71
72
|
|
72
73
|
# Creates a single resource from the
|
73
74
|
def create_resource(object)
|
74
75
|
res = detect_resource_class(object).new(object, response.request, client)
|
76
|
+
add_to_known_resources res
|
75
77
|
replace_children res, object
|
76
78
|
replace_child_array res.items if res.array?
|
77
79
|
|
@@ -143,6 +145,10 @@ module Contentful
|
|
143
145
|
end
|
144
146
|
end
|
145
147
|
|
148
|
+
def add_to_known_resources(res)
|
149
|
+
@known_resources[res.type][res.id] = res if res.sys && res.id && res.type != 'Link'
|
150
|
+
end
|
151
|
+
|
146
152
|
def replace_children(res, object)
|
147
153
|
object.each do |name, potential_objects|
|
148
154
|
detect_child_objects(potential_objects).each do |child_name, child_object|
|
@@ -172,48 +178,55 @@ module Contentful
|
|
172
178
|
end
|
173
179
|
end
|
174
180
|
|
175
|
-
def
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
replace_link_or_check_recursively sub_property_value, sub_property_container, sub_property_index
|
183
|
-
end
|
184
|
-
else
|
185
|
-
replace_link_or_check_recursively property_value, property_container, property_name
|
186
|
-
end
|
187
|
-
end
|
188
|
-
end
|
181
|
+
def replace_links_with_known_resources(res, seen_resource_ids = [])
|
182
|
+
seen_resource_ids << res.id
|
183
|
+
|
184
|
+
[:properties, :sys, :fields].map do |property_container_name|
|
185
|
+
res.public_send(property_container_name)
|
186
|
+
end.compact.each do |property_container|
|
187
|
+
replace_links_in_properties(property_container, seen_resource_ids)
|
189
188
|
end
|
189
|
+
|
190
190
|
if res.array?
|
191
|
-
|
192
|
-
|
193
|
-
|
191
|
+
replace_links_in_array res.items, seen_resource_ids
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
def replace_links_in_properties(property_container, seen_resource_ids)
|
196
|
+
property_container.each do |property_name, property_value|
|
197
|
+
if property_value.is_a? ::Array
|
198
|
+
replace_links_in_array property_value, seen_resource_ids
|
199
|
+
else
|
200
|
+
replace_link_or_check_recursively property_value, property_container, property_name, seen_resource_ids
|
194
201
|
end
|
195
202
|
end
|
196
203
|
end
|
197
204
|
|
198
|
-
def
|
205
|
+
def replace_links_in_array(property_container, seen_resource_ids)
|
206
|
+
property_container.each.with_index do |child_property, property_index|
|
207
|
+
replace_link_or_check_recursively child_property, property_container, property_index, seen_resource_ids
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
def replace_link_or_check_recursively(property_value, property_container, property_name, seen_resource_ids)
|
199
212
|
if property_value.is_a? Link
|
200
213
|
maybe_replace_link(property_value, property_container, property_name)
|
201
|
-
elsif property_value.is_a?(Resource) && property_value.sys
|
202
|
-
|
214
|
+
elsif property_value.is_a?(Resource) && property_value.sys && !seen_resource_ids.include?(property_value.id)
|
215
|
+
replace_links_with_known_resources(property_value, seen_resource_ids)
|
203
216
|
end
|
204
217
|
end
|
205
218
|
|
206
219
|
def maybe_replace_link(link, parent, key)
|
207
|
-
if @
|
208
|
-
@
|
209
|
-
parent[key] = @
|
220
|
+
if @known_resources[link.link_type] &&
|
221
|
+
@known_resources[link.link_type].key?(link.id)
|
222
|
+
parent[key] = @known_resources[link.link_type][link.id]
|
210
223
|
end
|
211
224
|
end
|
212
225
|
|
213
|
-
def
|
226
|
+
def replace_links_in_included_resources_with_known_resources
|
214
227
|
@included_resources.each do |_, for_type|
|
215
228
|
for_type.each do |_, res|
|
216
|
-
|
229
|
+
replace_links_with_known_resources(res)
|
217
230
|
end
|
218
231
|
end
|
219
232
|
end
|
data/lib/contentful/version.rb
CHANGED
@@ -0,0 +1,82 @@
|
|
1
|
+
{
|
2
|
+
"sys": {
|
3
|
+
"type": "Array"
|
4
|
+
},
|
5
|
+
"total": 1,
|
6
|
+
"skip": 0,
|
7
|
+
"limit": 100,
|
8
|
+
"items": [
|
9
|
+
{
|
10
|
+
"sys": {
|
11
|
+
"space": {
|
12
|
+
"sys": {
|
13
|
+
"type": "Link",
|
14
|
+
"linkType": "Space",
|
15
|
+
"id": "6yahkaf5ehkk"
|
16
|
+
}
|
17
|
+
},
|
18
|
+
"type": "Entry",
|
19
|
+
"contentType": {
|
20
|
+
"sys": {
|
21
|
+
"type": "Link",
|
22
|
+
"linkType": "ContentType",
|
23
|
+
"id": "tSFLnCNqvuyoMA6SKkQ2W"
|
24
|
+
}
|
25
|
+
},
|
26
|
+
"id": "6HM4G3D4iciuoIk6CW2OK6",
|
27
|
+
"revision": 2,
|
28
|
+
"createdAt": "2014-04-16T17:52:42.289Z",
|
29
|
+
"updatedAt": "2014-04-16T17:53:28.780Z",
|
30
|
+
"locale": "en-US"
|
31
|
+
},
|
32
|
+
"fields": {
|
33
|
+
"foo": "777777777",
|
34
|
+
"e": {
|
35
|
+
"sys": {
|
36
|
+
"type": "Link",
|
37
|
+
"linkType": "Entry",
|
38
|
+
"id": "55t1gz1JUIQ2s4mcMwQ8cA"
|
39
|
+
}
|
40
|
+
}
|
41
|
+
}
|
42
|
+
}
|
43
|
+
],
|
44
|
+
"includes": {
|
45
|
+
"Entry": [
|
46
|
+
{
|
47
|
+
"sys": {
|
48
|
+
"space": {
|
49
|
+
"sys": {
|
50
|
+
"type": "Link",
|
51
|
+
"linkType": "Space",
|
52
|
+
"id": "6yahkaf5ehkk"
|
53
|
+
}
|
54
|
+
},
|
55
|
+
"type": "Entry",
|
56
|
+
"contentType": {
|
57
|
+
"sys": {
|
58
|
+
"type": "Link",
|
59
|
+
"linkType": "ContentType",
|
60
|
+
"id": "tSFLnCNqvuyoMA6SKkQ2W"
|
61
|
+
}
|
62
|
+
},
|
63
|
+
"id": "55t1gz1JUIQ2s4mcMwQ8cA",
|
64
|
+
"revision": 1,
|
65
|
+
"createdAt": "2014-04-16T17:53:15.753Z",
|
66
|
+
"updatedAt": "2014-04-16T17:53:15.753Z",
|
67
|
+
"locale": "en-US"
|
68
|
+
},
|
69
|
+
"fields": {
|
70
|
+
"foo": "88888888888",
|
71
|
+
"e": {
|
72
|
+
"sys": {
|
73
|
+
"type": "Link",
|
74
|
+
"linkType": "Entry",
|
75
|
+
"id": "6HM4G3D4iciuoIk6CW2OK6"
|
76
|
+
}
|
77
|
+
}
|
78
|
+
}
|
79
|
+
}
|
80
|
+
]
|
81
|
+
}
|
82
|
+
}
|
@@ -17,4 +17,13 @@ describe 'Resource Building Examples' do
|
|
17
17
|
expect( resource.fields[:links] ).to be_a Array
|
18
18
|
expect( resource.fields[:links].first ).to be_a Contentful::Entry
|
19
19
|
end
|
20
|
+
|
21
|
+
it 'can also reference itself' do
|
22
|
+
response = Contentful::Response.new raw_fixture('self_link')
|
23
|
+
resource = Contentful::ResourceBuilder.new(create_client, response).run.first
|
24
|
+
|
25
|
+
other_resource = resource.fields[:e]
|
26
|
+
expect( other_resource ).to be_a Contentful::Entry
|
27
|
+
expect( other_resource.fields[:e] ).to be resource
|
28
|
+
end
|
20
29
|
end
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: contentful
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.3
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Contentful GmbH (Jan Lelis)
|
@@ -14,157 +13,139 @@ dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: http
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- - ~>
|
17
|
+
- - "~>"
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
|
-
- - <
|
20
|
+
- - "<"
|
23
21
|
- !ruby/object:Gem::Version
|
24
22
|
version: '0.6'
|
25
23
|
type: :runtime
|
26
24
|
prerelease: false
|
27
25
|
version_requirements: !ruby/object:Gem::Requirement
|
28
|
-
none: false
|
29
26
|
requirements:
|
30
|
-
- - ~>
|
27
|
+
- - "~>"
|
31
28
|
- !ruby/object:Gem::Version
|
32
29
|
version: '0'
|
33
|
-
- - <
|
30
|
+
- - "<"
|
34
31
|
- !ruby/object:Gem::Version
|
35
32
|
version: '0.6'
|
36
33
|
- !ruby/object:Gem::Dependency
|
37
34
|
name: multi_json
|
38
35
|
requirement: !ruby/object:Gem::Requirement
|
39
|
-
none: false
|
40
36
|
requirements:
|
41
|
-
- - ~>
|
37
|
+
- - "~>"
|
42
38
|
- !ruby/object:Gem::Version
|
43
39
|
version: '1'
|
44
40
|
type: :runtime
|
45
41
|
prerelease: false
|
46
42
|
version_requirements: !ruby/object:Gem::Requirement
|
47
|
-
none: false
|
48
43
|
requirements:
|
49
|
-
- - ~>
|
44
|
+
- - "~>"
|
50
45
|
- !ruby/object:Gem::Version
|
51
46
|
version: '1'
|
52
47
|
- !ruby/object:Gem::Dependency
|
53
48
|
name: bundler
|
54
49
|
requirement: !ruby/object:Gem::Requirement
|
55
|
-
none: false
|
56
50
|
requirements:
|
57
|
-
- - ~>
|
51
|
+
- - "~>"
|
58
52
|
- !ruby/object:Gem::Version
|
59
53
|
version: '1.5'
|
60
54
|
type: :development
|
61
55
|
prerelease: false
|
62
56
|
version_requirements: !ruby/object:Gem::Requirement
|
63
|
-
none: false
|
64
57
|
requirements:
|
65
|
-
- - ~>
|
58
|
+
- - "~>"
|
66
59
|
- !ruby/object:Gem::Version
|
67
60
|
version: '1.5'
|
68
61
|
- !ruby/object:Gem::Dependency
|
69
62
|
name: rake
|
70
63
|
requirement: !ruby/object:Gem::Requirement
|
71
|
-
none: false
|
72
64
|
requirements:
|
73
|
-
- - ~>
|
65
|
+
- - "~>"
|
74
66
|
- !ruby/object:Gem::Version
|
75
67
|
version: '10'
|
76
68
|
type: :development
|
77
69
|
prerelease: false
|
78
70
|
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
none: false
|
80
71
|
requirements:
|
81
|
-
- - ~>
|
72
|
+
- - "~>"
|
82
73
|
- !ruby/object:Gem::Version
|
83
74
|
version: '10'
|
84
75
|
- !ruby/object:Gem::Dependency
|
85
76
|
name: rubygems-tasks
|
86
77
|
requirement: !ruby/object:Gem::Requirement
|
87
|
-
none: false
|
88
78
|
requirements:
|
89
|
-
- - ~>
|
79
|
+
- - "~>"
|
90
80
|
- !ruby/object:Gem::Version
|
91
81
|
version: '0.2'
|
92
82
|
type: :development
|
93
83
|
prerelease: false
|
94
84
|
version_requirements: !ruby/object:Gem::Requirement
|
95
|
-
none: false
|
96
85
|
requirements:
|
97
|
-
- - ~>
|
86
|
+
- - "~>"
|
98
87
|
- !ruby/object:Gem::Version
|
99
88
|
version: '0.2'
|
100
89
|
- !ruby/object:Gem::Dependency
|
101
90
|
name: rspec
|
102
91
|
requirement: !ruby/object:Gem::Requirement
|
103
|
-
none: false
|
104
92
|
requirements:
|
105
|
-
- - ~>
|
93
|
+
- - "~>"
|
106
94
|
- !ruby/object:Gem::Version
|
107
95
|
version: '2'
|
108
96
|
type: :development
|
109
97
|
prerelease: false
|
110
98
|
version_requirements: !ruby/object:Gem::Requirement
|
111
|
-
none: false
|
112
99
|
requirements:
|
113
|
-
- - ~>
|
100
|
+
- - "~>"
|
114
101
|
- !ruby/object:Gem::Version
|
115
102
|
version: '2'
|
116
103
|
- !ruby/object:Gem::Dependency
|
117
104
|
name: rr
|
118
105
|
requirement: !ruby/object:Gem::Requirement
|
119
|
-
none: false
|
120
106
|
requirements:
|
121
|
-
- -
|
107
|
+
- - ">="
|
122
108
|
- !ruby/object:Gem::Version
|
123
109
|
version: '0'
|
124
110
|
type: :development
|
125
111
|
prerelease: false
|
126
112
|
version_requirements: !ruby/object:Gem::Requirement
|
127
|
-
none: false
|
128
113
|
requirements:
|
129
|
-
- -
|
114
|
+
- - ">="
|
130
115
|
- !ruby/object:Gem::Version
|
131
116
|
version: '0'
|
132
117
|
- !ruby/object:Gem::Dependency
|
133
118
|
name: vcr
|
134
119
|
requirement: !ruby/object:Gem::Requirement
|
135
|
-
none: false
|
136
120
|
requirements:
|
137
|
-
- -
|
121
|
+
- - ">="
|
138
122
|
- !ruby/object:Gem::Version
|
139
123
|
version: '0'
|
140
124
|
type: :development
|
141
125
|
prerelease: false
|
142
126
|
version_requirements: !ruby/object:Gem::Requirement
|
143
|
-
none: false
|
144
127
|
requirements:
|
145
|
-
- -
|
128
|
+
- - ">="
|
146
129
|
- !ruby/object:Gem::Version
|
147
130
|
version: '0'
|
148
131
|
- !ruby/object:Gem::Dependency
|
149
132
|
name: webmock
|
150
133
|
requirement: !ruby/object:Gem::Requirement
|
151
|
-
none: false
|
152
134
|
requirements:
|
153
|
-
- - ~>
|
135
|
+
- - "~>"
|
154
136
|
- !ruby/object:Gem::Version
|
155
137
|
version: '1'
|
156
|
-
- -
|
138
|
+
- - ">="
|
157
139
|
- !ruby/object:Gem::Version
|
158
140
|
version: 1.17.3
|
159
141
|
type: :development
|
160
142
|
prerelease: false
|
161
143
|
version_requirements: !ruby/object:Gem::Requirement
|
162
|
-
none: false
|
163
144
|
requirements:
|
164
|
-
- - ~>
|
145
|
+
- - "~>"
|
165
146
|
- !ruby/object:Gem::Version
|
166
147
|
version: '1'
|
167
|
-
- -
|
148
|
+
- - ">="
|
168
149
|
- !ruby/object:Gem::Version
|
169
150
|
version: 1.17.3
|
170
151
|
description: Ruby client for the https://www.contentful.com Content Delivery API
|
@@ -173,21 +154,25 @@ executables: []
|
|
173
154
|
extensions: []
|
174
155
|
extra_rdoc_files: []
|
175
156
|
files:
|
176
|
-
- .gitignore
|
177
|
-
- .rspec
|
178
|
-
- .travis.yml
|
179
|
-
- coverage/.last_run.json
|
180
|
-
- coverage/.resultset.json
|
157
|
+
- ".gitignore"
|
158
|
+
- ".rspec"
|
159
|
+
- ".travis.yml"
|
181
160
|
- CHANGELOG.md
|
161
|
+
- Gemfile
|
162
|
+
- Gemfile.lock
|
163
|
+
- LICENSE.txt
|
164
|
+
- README.md
|
165
|
+
- Rakefile
|
182
166
|
- contentful.gemspec
|
167
|
+
- coverage/.last_run.json
|
168
|
+
- coverage/.resultset.json
|
183
169
|
- examples/custom_classes.rb
|
184
170
|
- examples/dynamic_entries.rb
|
185
171
|
- examples/example_queries.rb
|
186
172
|
- examples/raise_errors.rb
|
187
173
|
- examples/raw_mode.rb
|
188
174
|
- examples/resource_mapping.rb
|
189
|
-
-
|
190
|
-
- Gemfile.lock
|
175
|
+
- lib/contentful.rb
|
191
176
|
- lib/contentful/array.rb
|
192
177
|
- lib/contentful/asset.rb
|
193
178
|
- lib/contentful/client.rb
|
@@ -201,19 +186,15 @@ files:
|
|
201
186
|
- lib/contentful/locale.rb
|
202
187
|
- lib/contentful/location.rb
|
203
188
|
- lib/contentful/request.rb
|
189
|
+
- lib/contentful/resource.rb
|
204
190
|
- lib/contentful/resource/asset_fields.rb
|
205
191
|
- lib/contentful/resource/fields.rb
|
206
192
|
- lib/contentful/resource/system_properties.rb
|
207
|
-
- lib/contentful/resource.rb
|
208
193
|
- lib/contentful/resource_builder.rb
|
209
194
|
- lib/contentful/response.rb
|
210
195
|
- lib/contentful/space.rb
|
211
196
|
- lib/contentful/support.rb
|
212
197
|
- lib/contentful/version.rb
|
213
|
-
- lib/contentful.rb
|
214
|
-
- LICENSE.txt
|
215
|
-
- Rakefile
|
216
|
-
- README.md
|
217
198
|
- spec/array_spec.rb
|
218
199
|
- spec/asset_spec.rb
|
219
200
|
- spec/auto_includes_spec.rb
|
@@ -232,6 +213,7 @@ files:
|
|
232
213
|
- spec/fixtures/json_responses/link_array.json
|
233
214
|
- spec/fixtures/json_responses/not_found.json
|
234
215
|
- spec/fixtures/json_responses/nyancat.json
|
216
|
+
- spec/fixtures/json_responses/self_link.json
|
235
217
|
- spec/fixtures/json_responses/unparsable.json
|
236
218
|
- spec/fixtures/vcr_cassettes/array.yml
|
237
219
|
- spec/fixtures/vcr_cassettes/array_page_1.yml
|
@@ -265,33 +247,26 @@ files:
|
|
265
247
|
homepage: https://github.com/contentful/contentful.rb
|
266
248
|
licenses:
|
267
249
|
- MIT
|
250
|
+
metadata: {}
|
268
251
|
post_install_message:
|
269
252
|
rdoc_options: []
|
270
253
|
require_paths:
|
271
254
|
- lib
|
272
255
|
required_ruby_version: !ruby/object:Gem::Requirement
|
273
|
-
none: false
|
274
256
|
requirements:
|
275
|
-
- -
|
257
|
+
- - ">="
|
276
258
|
- !ruby/object:Gem::Version
|
277
259
|
version: '0'
|
278
|
-
segments:
|
279
|
-
- 0
|
280
|
-
hash: -4173593734953116730
|
281
260
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
282
|
-
none: false
|
283
261
|
requirements:
|
284
|
-
- -
|
262
|
+
- - ">="
|
285
263
|
- !ruby/object:Gem::Version
|
286
264
|
version: '0'
|
287
|
-
segments:
|
288
|
-
- 0
|
289
|
-
hash: -4173593734953116730
|
290
265
|
requirements: []
|
291
266
|
rubyforge_project:
|
292
|
-
rubygems_version:
|
267
|
+
rubygems_version: 2.2.0
|
293
268
|
signing_key:
|
294
|
-
specification_version:
|
269
|
+
specification_version: 4
|
295
270
|
summary: contentful
|
296
271
|
test_files:
|
297
272
|
- spec/array_spec.rb
|
@@ -312,6 +287,7 @@ test_files:
|
|
312
287
|
- spec/fixtures/json_responses/link_array.json
|
313
288
|
- spec/fixtures/json_responses/not_found.json
|
314
289
|
- spec/fixtures/json_responses/nyancat.json
|
290
|
+
- spec/fixtures/json_responses/self_link.json
|
315
291
|
- spec/fixtures/json_responses/unparsable.json
|
316
292
|
- spec/fixtures/vcr_cassettes/array.yml
|
317
293
|
- spec/fixtures/vcr_cassettes/array_page_1.yml
|