contentful-management 0.2.0 → 0.2.1
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/CHANGELOG.md +11 -6
- data/RELEASE.md +8 -0
- data/examples/blog.rb +2 -2
- data/examples/content_types.rb +2 -2
- data/examples/create_space.rb +0 -1
- data/lib/contentful/management/asset.rb +7 -8
- data/lib/contentful/management/client.rb +7 -7
- data/lib/contentful/management/content_type.rb +13 -13
- data/lib/contentful/management/content_type_entry_methods_factory.rb +1 -3
- data/lib/contentful/management/dynamic_entry.rb +8 -8
- data/lib/contentful/management/entry.rb +15 -29
- data/lib/contentful/management/field.rb +1 -1
- data/lib/contentful/management/locale.rb +2 -2
- data/lib/contentful/management/request.rb +3 -3
- data/lib/contentful/management/resource.rb +5 -5
- data/lib/contentful/management/resource/array_like.rb +2 -2
- data/lib/contentful/management/resource/asset_fields.rb +3 -3
- data/lib/contentful/management/resource/fields.rb +0 -1
- data/lib/contentful/management/resource/system_properties.rb +9 -9
- data/lib/contentful/management/resource_builder.rb +8 -8
- data/lib/contentful/management/response.rb +1 -1
- data/lib/contentful/management/space_asset_methods_factory.rb +1 -3
- data/lib/contentful/management/space_association_methods_factory.rb +2 -4
- data/lib/contentful/management/space_content_type_methods_factory.rb +1 -3
- data/lib/contentful/management/space_entry_methods_factory.rb +2 -4
- data/lib/contentful/management/space_locale_methods_factory.rb +1 -3
- data/lib/contentful/management/space_webhook_methods_factory.rb +2 -4
- data/lib/contentful/management/version.rb +1 -1
- data/spec/fixtures/vcr_cassettes/entry/create.yml +412 -85
- data/spec/fixtures/vcr_cassettes/entry/create_with_symbols.yml +2 -3
- data/spec/lib/contentful/management/content_type_spec.rb +2 -2
- data/spec/lib/contentful/management/entry_spec.rb +94 -6
- metadata +5 -6
- data/spec/fixtures/vcr_cassettes/entry/create_test.yml +0 -150
data/CHANGELOG.md
CHANGED
@@ -1,9 +1,14 @@
|
|
1
|
-
|
1
|
+
# Change Log
|
2
|
+
|
3
|
+
## 0.2.1
|
4
|
+
* Fix: Use array for symbols in entry fields
|
5
|
+
|
6
|
+
## 0.2.0
|
2
7
|
* Fix: create entry with multiple locales, skip attributes for not localized fields in content types
|
3
8
|
* Fix: reload Assets
|
4
9
|
* add optional gzip envoding
|
5
10
|
|
6
|
-
|
11
|
+
## 0.1.0
|
7
12
|
* Support for webhooks
|
8
13
|
* add image url to asset
|
9
14
|
* Cleaning code
|
@@ -12,7 +17,7 @@
|
|
12
17
|
* Fix: rename asset.process_files to asset.process
|
13
18
|
|
14
19
|
|
15
|
-
|
20
|
+
## 0.0.3
|
16
21
|
* Fix: next_page feature
|
17
22
|
* Fix: create entry with specific locale
|
18
23
|
* Fix: service unavailable error (503)
|
@@ -20,10 +25,10 @@
|
|
20
25
|
* Code cleanup
|
21
26
|
* More documentation
|
22
27
|
|
23
|
-
|
28
|
+
## 0.0.2
|
24
29
|
* Fix: Convert an Entry to a DynamicEntry after being created.
|
25
30
|
|
26
|
-
|
31
|
+
## 0.0.1
|
27
32
|
* Fix: Headers not properly cleared between requests
|
28
33
|
* Fix: Create entries with custom identifier
|
29
34
|
* Code cleanup
|
@@ -31,5 +36,5 @@
|
|
31
36
|
* Adding filter by content_type id
|
32
37
|
|
33
38
|
|
34
|
-
|
39
|
+
## 0.0.1-pre
|
35
40
|
* alpha pre-release
|
data/RELEASE.md
ADDED
data/examples/blog.rb
CHANGED
@@ -49,7 +49,7 @@ category_type.activate
|
|
49
49
|
|
50
50
|
sleep 10 # prevent race conditions
|
51
51
|
|
52
|
-
puts
|
52
|
+
puts 'creating categories'
|
53
53
|
entries = []
|
54
54
|
entries << category_type.entries.create(category_name: 'Misc', category_description: 'Misc stuff')
|
55
55
|
entries << category_type.entries.create(category_name: 'Serious', category_description: 'Serious stuff')
|
@@ -78,7 +78,7 @@ asset.save
|
|
78
78
|
|
79
79
|
entries.map(&:publish)
|
80
80
|
|
81
|
-
puts
|
81
|
+
puts 'Press any key to destroy space'
|
82
82
|
gets
|
83
83
|
|
84
84
|
blog_space.destroy
|
data/examples/content_types.rb
CHANGED
@@ -17,7 +17,7 @@ p space.content_types.all
|
|
17
17
|
field = Contentful::Management::Field.new
|
18
18
|
field.id = 'such_content'
|
19
19
|
field.name = 'Such Content'
|
20
|
-
field.type = 'Text' #content types maybe as symbol?
|
20
|
+
field.type = 'Text' # content types maybe as symbol?
|
21
21
|
|
22
22
|
type2 = space.content_types.new
|
23
23
|
type2.name = 'ContentType 2'
|
@@ -27,7 +27,7 @@ type2.save
|
|
27
27
|
field2 = Contentful::Management::Field.new
|
28
28
|
field2.id = 'wow_content'
|
29
29
|
field2.name = 'Wow Content'
|
30
|
-
field2.type = 'Location' #content types maybe as symbol?
|
30
|
+
field2.type = 'Location' # content types maybe as symbol?
|
31
31
|
|
32
32
|
type2.update(name: 'whoat', fields: [field, field2])
|
33
33
|
|
data/examples/create_space.rb
CHANGED
@@ -8,7 +8,6 @@ module Contentful
|
|
8
8
|
# Resource class for Asset.
|
9
9
|
# https://www.contentful.com/developers/documentation/content-management-api/#resources-assets
|
10
10
|
class Asset
|
11
|
-
|
12
11
|
include Contentful::Management::Resource
|
13
12
|
extend Contentful::Management::Resource::AssetFields
|
14
13
|
include Contentful::Management::Resource::Fields
|
@@ -47,7 +46,7 @@ module Contentful
|
|
47
46
|
asset.description = attributes[:description] if attributes[:description]
|
48
47
|
asset.file = attributes[:file] if attributes[:file]
|
49
48
|
|
50
|
-
request = Request.new("/#{ space_id }/assets/#{ attributes[:id] || ''}",
|
49
|
+
request = Request.new("/#{ space_id }/assets/#{ attributes[:id] || ''}", fields: asset.fields_for_query)
|
51
50
|
response = attributes[:id].nil? ? request.post : request.put
|
52
51
|
result = ResourceBuilder.new(response, {}, {}).run
|
53
52
|
result.locale = locale if locale
|
@@ -81,7 +80,7 @@ module Contentful
|
|
81
80
|
# See README for details.
|
82
81
|
def save
|
83
82
|
if id.nil?
|
84
|
-
new_instance = self.class.create(sys[:space].id,
|
83
|
+
new_instance = self.class.create(sys[:space].id, fields: instance_variable_get(:@fields))
|
85
84
|
refresh_data(new_instance)
|
86
85
|
else
|
87
86
|
update(title: title, description: description, file: file)
|
@@ -172,11 +171,11 @@ module Contentful
|
|
172
171
|
# See https://www.contentful.com/developers/documentation/content-delivery-api/#image-asset-resizing
|
173
172
|
def image_url(options = {})
|
174
173
|
query = {
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
}.reject { |
|
174
|
+
w: options[:w] || options[:width],
|
175
|
+
h: options[:h] || options[:height],
|
176
|
+
fm: options[:fm] || options[:format],
|
177
|
+
q: options[:q] || options[:quality]
|
178
|
+
}.reject { |_k, v| v.nil? }
|
180
179
|
|
181
180
|
if query.empty?
|
182
181
|
file.url
|
@@ -19,11 +19,11 @@ module Contentful
|
|
19
19
|
attr_accessor :organization_id, :version, :zero_length, :content_type_id, :dynamic_entry_cache
|
20
20
|
|
21
21
|
DEFAULT_CONFIGURATION = {
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
22
|
+
api_url: 'api.contentful.com',
|
23
|
+
api_version: '1',
|
24
|
+
secure: true,
|
25
|
+
default_locale: 'en-US',
|
26
|
+
gzip_encoded: false
|
27
27
|
}
|
28
28
|
|
29
29
|
def initialize(access_token = nil, configuration = {})
|
@@ -49,8 +49,8 @@ module Contentful
|
|
49
49
|
@dynamic_entry_cache = Hash[
|
50
50
|
content_types.map do |ct|
|
51
51
|
[
|
52
|
-
|
53
|
-
|
52
|
+
ct.id.to_sym,
|
53
|
+
DynamicEntry.create(ct)
|
54
54
|
]
|
55
55
|
end
|
56
56
|
]
|
@@ -9,16 +9,16 @@ module Contentful
|
|
9
9
|
# https://www.contentful.com/developers/documentation/content-management-api/#resources-content-types
|
10
10
|
class ContentType
|
11
11
|
FIELD_TYPES = [
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
12
|
+
SYMBOL = 'Symbol',
|
13
|
+
TEXT = 'Text',
|
14
|
+
INTEGER = 'Integer',
|
15
|
+
FLOAT = 'Number',
|
16
|
+
DATE = 'Date',
|
17
|
+
BOOLEAN = 'Boolean',
|
18
|
+
LINK = 'Link',
|
19
|
+
ARRAY = 'Array',
|
20
|
+
OBJECT = 'Object',
|
21
|
+
LOCATION = 'Location'
|
22
22
|
]
|
23
23
|
|
24
24
|
include Contentful::Management::Resource
|
@@ -96,9 +96,9 @@ module Contentful
|
|
96
96
|
# Returns a Contentful::Management::ContentType.
|
97
97
|
def self.create(space_id, attributes)
|
98
98
|
fields = fields_to_nested_properties_hash(attributes[:fields] || [])
|
99
|
-
request = Request.new("/#{ space_id }/content_types/#{ attributes[:id] || ''}",
|
100
|
-
|
101
|
-
|
99
|
+
request = Request.new("/#{ space_id }/content_types/#{ attributes[:id] || ''}", name: attributes.fetch(:name),
|
100
|
+
description: attributes[:description],
|
101
|
+
fields: fields)
|
102
102
|
response = attributes[:id].nil? ? request.post : request.put
|
103
103
|
result = ResourceBuilder.new(response, {}, {}).run
|
104
104
|
client.register_dynamic_entry(result.id, DynamicEntry.create(result)) if result.is_a?(self.class)
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module Contentful
|
2
2
|
module Management
|
3
3
|
class ContentTypeEntryMethodsFactory
|
4
|
-
|
5
4
|
attr_reader :content_type
|
6
5
|
|
7
6
|
def initialize(content_type)
|
@@ -22,7 +21,6 @@ module Contentful
|
|
22
21
|
dynamic_entry.content_type = content_type
|
23
22
|
dynamic_entry
|
24
23
|
end
|
25
|
-
|
26
24
|
end
|
27
25
|
end
|
28
|
-
end
|
26
|
+
end
|
@@ -7,14 +7,14 @@ module Contentful
|
|
7
7
|
module Management
|
8
8
|
class DynamicEntry < Contentful::Management::Entry
|
9
9
|
KNOWN_TYPES = {
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
10
|
+
'String' => :string,
|
11
|
+
'Text' => :string,
|
12
|
+
'Symbol' => :string,
|
13
|
+
'Integer' => :integer,
|
14
|
+
'Float' => :float,
|
15
|
+
'Boolean' => :boolean,
|
16
|
+
'Date' => :date,
|
17
|
+
'Location' => Location
|
18
18
|
}
|
19
19
|
|
20
20
|
def self.create(content_type)
|
@@ -65,7 +65,7 @@ module Contentful
|
|
65
65
|
def update(attributes)
|
66
66
|
fields_for_update = Contentful::Management::Support.deep_hash_merge(fields_for_query, fields_from_attributes(attributes))
|
67
67
|
|
68
|
-
request = Request.new("/#{ space.id }/entries/#{
|
68
|
+
request = Request.new("/#{ space.id }/entries/#{ id }", {fields: fields_for_update}, id = nil, version: sys[:version])
|
69
69
|
response = request.put
|
70
70
|
result = ResourceBuilder.new(response, {}, {}).run
|
71
71
|
refresh_data(result)
|
@@ -75,7 +75,7 @@ module Contentful
|
|
75
75
|
# See README for details.
|
76
76
|
def save
|
77
77
|
if id.nil?
|
78
|
-
new_instance = Contentful::Management::Entry.create(content_type,
|
78
|
+
new_instance = Contentful::Management::Entry.create(content_type, fields: instance_variable_get(:@fields))
|
79
79
|
refresh_data(new_instance)
|
80
80
|
else
|
81
81
|
update({})
|
@@ -151,11 +151,10 @@ module Contentful
|
|
151
151
|
# Parser for assets attributes from query.
|
152
152
|
# Returns a hash of existing fields.
|
153
153
|
def fields_for_query
|
154
|
-
raw_fields =
|
154
|
+
raw_fields = instance_variable_get(:@fields)
|
155
155
|
fields_names = raw_fields.first[1].keys
|
156
156
|
fields_names.each_with_object({}) do |field_name, results|
|
157
157
|
results[field_name] = raw_fields.each_with_object({}) do |(locale, fields), field_results|
|
158
|
-
# field_results[locale] = fields[field_name]
|
159
158
|
field_results[locale] = parse_update_attribute(fields[field_name]) unless fields[field_name].nil?
|
160
159
|
end
|
161
160
|
end
|
@@ -176,13 +175,12 @@ module Contentful
|
|
176
175
|
when ContentType::ARRAY then
|
177
176
|
parse_fields_array(attribute)
|
178
177
|
when ContentType::LOCATION then
|
179
|
-
{lat: attribute.properties[:lat], lon: attribute.properties[:lon]}
|
178
|
+
{lat: attribute.properties[:lat], lon: attribute.properties[:lon]} if attribute
|
180
179
|
else
|
181
180
|
attribute
|
182
181
|
end
|
183
182
|
end
|
184
183
|
|
185
|
-
# TODO refactor
|
186
184
|
def parse_update_attribute(attribute)
|
187
185
|
if attribute.is_a? Asset
|
188
186
|
{sys: {type: 'Link', linkType: 'Asset', id: attribute.id}}
|
@@ -191,41 +189,29 @@ module Contentful
|
|
191
189
|
elsif attribute.is_a? Location
|
192
190
|
{lat: attribute.properties[:lat], lon: attribute.properties[:lon]}
|
193
191
|
elsif attribute.is_a? ::Array
|
194
|
-
|
192
|
+
self.class.parse_fields_array(attribute)
|
195
193
|
else
|
196
194
|
attribute
|
197
195
|
end
|
198
196
|
end
|
199
197
|
|
200
|
-
def
|
198
|
+
def self.parse_fields_array(attributes)
|
201
199
|
type = attributes.first.class.to_s
|
202
200
|
if type == 'String'
|
203
201
|
attributes
|
204
202
|
else
|
205
|
-
attributes
|
206
|
-
arr << case type
|
207
|
-
when /Entry/ then
|
208
|
-
{sys: {type: 'Link', linkType: 'Entry', id: attr.id}}
|
209
|
-
when /Asset/ then
|
210
|
-
{sys: {type: 'Link', linkType: 'Asset', id: attr.id}}
|
211
|
-
end
|
212
|
-
end
|
203
|
+
parse_objects_array(attributes, type)
|
213
204
|
end
|
214
205
|
end
|
215
206
|
|
216
|
-
def self.
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
{sys: {type: 'Link', linkType: 'Asset', id: attr.id}}
|
225
|
-
end
|
226
|
-
end
|
227
|
-
else
|
228
|
-
[attributes]
|
207
|
+
def self.parse_objects_array(attributes, type)
|
208
|
+
attributes.each_with_object([]) do |attr, arr|
|
209
|
+
arr << case type
|
210
|
+
when /Entry/ then
|
211
|
+
{sys: {type: 'Link', linkType: 'Entry', id: attr.id}}
|
212
|
+
when /Asset/ then
|
213
|
+
{sys: {type: 'Link', linkType: 'Asset', id: attr.id}}
|
214
|
+
end
|
229
215
|
end
|
230
216
|
end
|
231
217
|
|
@@ -17,7 +17,7 @@ module Contentful
|
|
17
17
|
|
18
18
|
def deep_merge!(field)
|
19
19
|
properties.merge!(field.properties.select { |name, _type| name != :items })
|
20
|
-
items.properties.merge!(field.items.properties) if
|
20
|
+
items.properties.merge!(field.items.properties) if items.respond_to?(:properties) && field.items.respond_to?(:properties)
|
21
21
|
end
|
22
22
|
|
23
23
|
def properties_to_hash
|
@@ -18,7 +18,7 @@ module Contentful
|
|
18
18
|
# Gets a collection of locales.
|
19
19
|
# Takes an id of a space.
|
20
20
|
# Returns a Contentful::Management::Array of Contentful::Management::Locale.
|
21
|
-
def self.all(space_id = nil,
|
21
|
+
def self.all(space_id = nil, _parameters = {})
|
22
22
|
request = Request.new("/#{ space_id }/locales")
|
23
23
|
response = request.get
|
24
24
|
result = ResourceBuilder.new(response, {'Locale' => Locale}, {})
|
@@ -44,7 +44,7 @@ module Contentful
|
|
44
44
|
# :publish
|
45
45
|
# Returns a Contentful::Management::Locale.
|
46
46
|
def self.create(space_id, attributes)
|
47
|
-
request = Request.new("/#{ space_id }/locales",
|
47
|
+
request = Request.new("/#{ space_id }/locales", 'name' => attributes.fetch(:name), 'code' => attributes.fetch(:code))
|
48
48
|
response = request.post
|
49
49
|
result = ResourceBuilder.new(response, {'Locale' => Locale}, {})
|
50
50
|
result.run
|
@@ -15,11 +15,11 @@ module Contentful
|
|
15
15
|
# by the client by default
|
16
16
|
module Resource
|
17
17
|
COERCIONS = {
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
18
|
+
string: ->(value) { value.to_s },
|
19
|
+
integer: ->(value) { value.to_i },
|
20
|
+
float: ->(value) { value.to_f },
|
21
|
+
boolean: ->(value) { !!value },
|
22
|
+
date: ->(value) { !value.nil? ? DateTime.parse(value) : nil }
|
23
23
|
}
|
24
24
|
|
25
25
|
attr_reader :properties, :request, :client, :default_locale
|
@@ -17,7 +17,7 @@ module Contentful
|
|
17
17
|
items.each(&block)
|
18
18
|
end
|
19
19
|
|
20
|
-
|
20
|
+
alias_method :each, :each_item
|
21
21
|
|
22
22
|
# Delegates to items#empty?
|
23
23
|
def empty?
|
@@ -29,7 +29,7 @@ module Contentful
|
|
29
29
|
items.size
|
30
30
|
end
|
31
31
|
|
32
|
-
|
32
|
+
alias_method :length, :size
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|