contentful-management 2.4.0 → 2.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 386e22c5309df503436b066804e279c4aa8912c6dc84ef02be9c90ce7d617cc5
4
- data.tar.gz: e8d54a6fbf5e5a229abf9391743e3d06264d15088e6033d4522bef5b1ab14622
3
+ metadata.gz: 683b48fdab7cafe30ccbc6ba4359db731ce08a97f59b83cae82397a3982f03bf
4
+ data.tar.gz: bf94afa87c07baa3daca8e6b70dad36000fadffcd41334e625ddadfe4f25197f
5
5
  SHA512:
6
- metadata.gz: 3f3f99d5e04748431abf899b58d4a6e729e3814a3af740676a98cbe0b721fc9c27df0f9c192443014613d7ee36f98172550919bbe5f51a8e5c6d053ecb2c5c43
7
- data.tar.gz: 2582509fd98611a065920e9333b6b755dd05aa1389a213caedb3617a66a898f9d94ac45805a16aa6a39064d2186ad0d2912624f9c1d6289bdecc559b81b80646
6
+ metadata.gz: bbebbb891e59e74e85919ea4e8e992ace7c467b652a098d8668cf5b587744789ac8fc4de1dff1026a1a010ad0d85aa33c99bfbfb01fd0a437e2c8e287841fb56
7
+ data.tar.gz: 6e0af2ee33543eab79af415edaa8939a6ab747d858d8717d16a621aaf45a898e50dca21cb0fdf2282c2b691b599d3935a4d87f2781c5c57da85baaed05157025
@@ -2,6 +2,16 @@
2
2
 
3
3
  ## Master
4
4
 
5
+ ## 2.5.0
6
+
7
+ As `RichText` moves from `alpha` to `beta`, we're treating this as a feature release.
8
+
9
+ ### Added
10
+ * Added `#save` method to resources, generalizing how to create/update them.
11
+
12
+ ### Changed
13
+ * Renamed `StructuredText` to `RichText`.
14
+
5
15
  ## 2.4.0
6
16
  ### Added
7
17
  * Added support for StructuredText field type.
@@ -64,19 +64,6 @@ module Contentful
64
64
  self
65
65
  end
66
66
 
67
- # If an asset is a new object gets created in the Contentful, otherwise the existing asset gets updated.
68
- # @see _ https://github.com/contentful/contentful-management.rb for details.
69
- #
70
- # @return [Contentful::Management::Asset]
71
- def save
72
- if id
73
- update(title: title, description: description, file: file)
74
- else
75
- new_instance = self.class.create(client, sys[:space].id, fields: instance_variable_get(:@fields))
76
- refresh_data(new_instance)
77
- end
78
- end
79
-
80
67
  # Returns currently supported locale or default locale.
81
68
  # @return [String] current_locale
82
69
  def locale
@@ -26,7 +26,7 @@ module Contentful
26
26
  ARRAY = 'Array'.freeze,
27
27
  OBJECT = 'Object'.freeze,
28
28
  LOCATION = 'Location'.freeze,
29
- STRUCTURED_TEXT = 'StructuredText'.freeze
29
+ STRUCTURED_TEXT = 'RichText'.freeze
30
30
  ].freeze
31
31
 
32
32
  include Contentful::Management::Resource
@@ -74,19 +74,6 @@ module Contentful
74
74
  end
75
75
  end
76
76
 
77
- # If a content type is a new object gets created in the Contentful, otherwise the existing entry gets updated.
78
- # @see _ README for details.
79
- #
80
- # @return [Contentful::Management::ContentType]
81
- def save
82
- if id
83
- update(@properties)
84
- else
85
- new_instance = self.class.create(client, space.id, environment_id, @properties)
86
- refresh_data(new_instance)
87
- end
88
- end
89
-
90
77
  # This method merges existing fields with new one, when adding, creating or updating new fields.
91
78
  # @private
92
79
  def merged_fields(new_field)
@@ -45,6 +45,7 @@ module Contentful
45
45
  DynamicEntry.create(content_type, content_type.client)
46
46
  )
47
47
  dynamic_entry = dynamic_entry_class.new
48
+ dynamic_entry.space = content_type.space
48
49
  dynamic_entry.content_type = content_type
49
50
  dynamic_entry
50
51
  end
@@ -66,19 +66,11 @@ module Contentful
66
66
  content_type_id: content_type.id,
67
67
  editor_id: id
68
68
  },
69
- { 'controls' => attributes.fetch(:controls) },
69
+ { 'controls' => attributes[:controls] || controls },
70
70
  version: sys[:version]
71
71
  )
72
72
  end
73
73
 
74
- # Saves the current editor interface.
75
- # @see _ README for details.
76
- #
77
- # @return [Contentful::Management::EditorInterface]
78
- def save
79
- update(controls: controls) if id
80
- end
81
-
82
74
  # Destroys an EditorInterface.
83
75
  #
84
76
  # Not Supported
@@ -61,8 +61,8 @@ module Contentful
61
61
  end
62
62
 
63
63
  # @private
64
- def self.create_headers(_client, attributes)
65
- content_type = attributes[:content_type]
64
+ def self.create_headers(_client, attributes, instance = nil)
65
+ content_type = instance.nil? ? attributes[:content_type] : (instance.content_type || instance.sys[:contentType])
66
66
  content_type_id = content_type.respond_to?(:id) ? content_type.id : content_type[:id]
67
67
 
68
68
  { content_type_id: content_type_id }
@@ -130,25 +130,6 @@ module Contentful
130
130
  self.locale = attributes[:locale] || client.default_locale
131
131
  end
132
132
 
133
- # If an entry is a new object gets created in the Contentful, otherwise the existing entry gets updated.
134
- # @see _ README for details.
135
- #
136
- # @return [Contentful::Management::Entry]
137
- def save
138
- if id
139
- update({})
140
- else
141
- new_instance = Contentful::Management::Entry.create(
142
- client,
143
- content_type.space.id,
144
- environment_id,
145
- content_type: content_type,
146
- fields: instance_variable_get(:@fields)
147
- )
148
- refresh_data(new_instance)
149
- end
150
- end
151
-
152
133
  # Returns the currently supported local.
153
134
  #
154
135
  # @return [String] current_locale
@@ -62,18 +62,24 @@ module Contentful
62
62
  #
63
63
  # @return [Contentful::Management::Resource]
64
64
  def update(attributes)
65
+ headers = self.class.create_headers(client, attributes, self)
66
+ headers = headers.merge(update_headers)
67
+
65
68
  ResourceRequester.new(client, self.class).update(
66
69
  self,
67
- {
68
- space_id: space.id,
69
- environment_id: environment_id,
70
- resource_id: id
71
- },
70
+ update_url_attributes,
72
71
  query_attributes(attributes),
73
- version: sys[:version]
72
+ headers
74
73
  )
75
74
  end
76
75
 
76
+ # Creates or updates a resource.
77
+ #
78
+ # @return [Contentful::Management::Resource]
79
+ def save
80
+ update({})
81
+ end
82
+
77
83
  # Destroys a resource.
78
84
  #
79
85
  # @return [true, Contentful::Management::Error] success
@@ -130,6 +136,18 @@ module Contentful
130
136
 
131
137
  protected
132
138
 
139
+ def update_headers
140
+ { version: sys[:version] }
141
+ end
142
+
143
+ def update_url_attributes
144
+ {
145
+ space_id: space.id,
146
+ environment_id: environment_id,
147
+ resource_id: id
148
+ }
149
+ end
150
+
133
151
  def query_attributes(attributes)
134
152
  attributes
135
153
  end
@@ -249,7 +267,7 @@ module Contentful
249
267
  end
250
268
 
251
269
  # @private
252
- def create_headers(_client, _attributes)
270
+ def create_headers(_client, _attributes, _instance = nil)
253
271
  {}
254
272
  end
255
273
 
@@ -35,7 +35,7 @@ module Contentful
35
35
  end
36
36
 
37
37
  def update(object, endpoint_options = {}, attributes = {}, headers = {})
38
- object.refresh_data(put(endpoint_options, attributes, headers))
38
+ object.refresh_data(put(endpoint_options, attributes, headers, object))
39
39
  end
40
40
 
41
41
  def destroy(endpoint_options = {})
@@ -69,7 +69,8 @@ module Contentful
69
69
  ResourceBuilder.new(request.get, client).run
70
70
  end
71
71
 
72
- def put(endpoint_options = {}, attributes = {}, headers = {})
72
+ def put(endpoint_options = {}, attributes = {}, headers = {}, object = nil)
73
+ is_update = !object.nil? && object.id
73
74
  request = Request.new(
74
75
  client,
75
76
  resource_class.build_endpoint(endpoint_options),
@@ -77,7 +78,7 @@ module Contentful
77
78
  nil,
78
79
  headers
79
80
  )
80
- ResourceBuilder.new(request.put, client).run
81
+ ResourceBuilder.new(is_update ? request.put : request.post, client).run
81
82
  end
82
83
 
83
84
  def delete(endpoint_options = {}, attributes = {}, headers = {})
@@ -22,13 +22,13 @@ module Contentful
22
22
  def self.create_attributes(_client, attributes)
23
23
  extension = attributes['extension'] || attributes[:extension]
24
24
 
25
- fail 'Invalid UI Extension attributes' unless valid_extension(extension)
25
+ fail 'Invalid UI Extension attributes' unless valid_extension?(extension)
26
26
 
27
27
  { 'extension' => extension }
28
28
  end
29
29
 
30
30
  # @private
31
- def self.valid_extension(extension)
31
+ def self.valid_extension?(extension)
32
32
  return false unless extension.key?('name')
33
33
  return false unless extension.key?('fieldTypes') && extension['fieldTypes'].is_a?(::Array)
34
34
  return false unless extension.key?('src') || extension.key?('srcdoc')
@@ -41,13 +41,8 @@ module Contentful
41
41
  #
42
42
  # @return [Contentful::Management::UIExtension]
43
43
  def save
44
- self.class.valid_extension(extension)
45
- if id
46
- update(extension: extension)
47
- else
48
- new_instance = self.class.create(client, sys[:space].id, environment_id, extension: extension)
49
- refresh_data(new_instance)
50
- end
44
+ fail 'Invalid UI extension attributes' unless self.class.valid_extension?(extension)
45
+ update(extension: extension)
51
46
  end
52
47
 
53
48
  # Returns extension name
@@ -3,6 +3,6 @@ module Contentful
3
3
  # Management Namespace
4
4
  module Management
5
5
  # Gem Version
6
- VERSION = '2.4.0'.freeze
6
+ VERSION = '2.5.0'.freeze
7
7
  end
8
8
  end
@@ -5,9 +5,9 @@ http_interactions:
5
5
  uri: https://api.contentful.com/spaces/ctgv7kwgsghk/environments/master/content_types
6
6
  body:
7
7
  encoding: UTF-8
8
- string: '{"name":"StructuredText","description":"Content type with StructuredText
9
- field","fields":[{"id":"my_StructuredText_field","name":"My StructuredText
10
- Field","type":"StructuredText"}]}'
8
+ string: '{"name":"RichText","description":"Content type with RichText
9
+ field","fields":[{"id":"my_RichText_field","name":"My RichText
10
+ Field","type":"RichText"}]}'
11
11
  headers:
12
12
  X-Contentful-User-Agent:
13
13
  - sdk contentful-management.rb/2.3.0; platform ruby/2.5.1; os macOS/16;
@@ -119,13 +119,13 @@ http_interactions:
119
119
  "version": 1
120
120
  },
121
121
  "displayField": null,
122
- "name": "StructuredText",
123
- "description": "Content type with StructuredText field",
122
+ "name": "RichText",
123
+ "description": "Content type with RichText field",
124
124
  "fields": [
125
125
  {
126
- "id": "my_StructuredText_field",
127
- "name": "My StructuredText Field",
128
- "type": "StructuredText",
126
+ "id": "my_RichText_field",
127
+ "name": "My RichText Field",
128
+ "type": "RichText",
129
129
  "localized": false,
130
130
  "required": false,
131
131
  "validations": [],
@@ -188,7 +188,7 @@ module Contentful
188
188
  end
189
189
  end
190
190
 
191
- Contentful::Management::ContentType::FIELD_TYPES.reject { |f| f == 'StructuredText' }.each do |field_type|
191
+ Contentful::Management::ContentType::FIELD_TYPES.reject { |f| f == 'RichText' }.each do |field_type|
192
192
  it "creates within a space with #{ field_type } field" do
193
193
  vcr("content_type/create_with_#{ field_type }_field") do
194
194
  field = Contentful::Management::Field.new
@@ -213,22 +213,22 @@ module Contentful
213
213
  end
214
214
  end
215
215
 
216
- it "creates within a space with StructuredText field" do
217
- vcr("content_type/create_with_StructuredText_field") do
216
+ it "creates within a space with RichText field" do
217
+ vcr("content_type/create_with_RichText_field") do
218
218
  subject = client.content_types('ctgv7kwgsghk', 'master')
219
219
 
220
220
  field = Contentful::Management::Field.new
221
- field.id = "my_StructuredText_field"
222
- field.name = "My StructuredText Field"
223
- field.type = 'StructuredText'
221
+ field.id = "my_RichText_field"
222
+ field.name = "My RichText Field"
223
+ field.type = 'RichText'
224
224
  content_type = subject.create(
225
- name: "StructuredText",
226
- description: "Content type with StructuredText field",
225
+ name: "RichText",
226
+ description: "Content type with RichText field",
227
227
  fields: [field]
228
228
  )
229
229
  expect(content_type).to be_kind_of Contentful::Management::ContentType
230
- expect(content_type.name).to eq "StructuredText"
231
- expect(content_type.description).to eq "Content type with StructuredText field"
230
+ expect(content_type.name).to eq "RichText"
231
+ expect(content_type.description).to eq "Content type with RichText field"
232
232
  expect(content_type.fields.size).to eq 1
233
233
  result_field = content_type.fields.first
234
234
  expect(result_field.id).to eq field.id
@@ -14,11 +14,11 @@ module Contentful
14
14
  subject { client.ui_extensions(space_id, 'master') }
15
15
 
16
16
  describe 'class methods' do
17
- describe '::valid_extension' do
17
+ describe '::valid_extension?' do
18
18
  it 'false when name is missing' do
19
19
  extension = {}
20
20
 
21
- expect(described_class.valid_extension(extension)).to be_falsey
21
+ expect(described_class.valid_extension?(extension)).to be_falsey
22
22
  end
23
23
 
24
24
  it 'false when fieldTypes is missing' do
@@ -26,7 +26,7 @@ module Contentful
26
26
  'name' => 'foobar'
27
27
  }
28
28
 
29
- expect(described_class.valid_extension(extension)).to be_falsey
29
+ expect(described_class.valid_extension?(extension)).to be_falsey
30
30
  end
31
31
 
32
32
  it 'false when fieldTypes is present but not an array' do
@@ -35,7 +35,7 @@ module Contentful
35
35
  'fieldTypes' => 'baz'
36
36
  }
37
37
 
38
- expect(described_class.valid_extension(extension)).to be_falsey
38
+ expect(described_class.valid_extension?(extension)).to be_falsey
39
39
  end
40
40
 
41
41
  it 'false when both src and srcdoc missing' do
@@ -44,7 +44,7 @@ module Contentful
44
44
  'fieldTypes' => ['Symbol']
45
45
  }
46
46
 
47
- expect(described_class.valid_extension(extension)).to be_falsey
47
+ expect(described_class.valid_extension?(extension)).to be_falsey
48
48
  end
49
49
 
50
50
  it 'true when all of the above are passed' do
@@ -54,7 +54,7 @@ module Contentful
54
54
  'src' => 'foo'
55
55
  }
56
56
 
57
- expect(described_class.valid_extension(extension)).to be_truthy
57
+ expect(described_class.valid_extension?(extension)).to be_truthy
58
58
 
59
59
  extension = {
60
60
  'name' => 'foobar',
@@ -62,7 +62,7 @@ module Contentful
62
62
  'srcdoc' => 'foo'
63
63
  }
64
64
 
65
- expect(described_class.valid_extension(extension)).to be_truthy
65
+ expect(described_class.valid_extension?(extension)).to be_truthy
66
66
  end
67
67
 
68
68
  it 'false if sidebar is present but not boolean' do
@@ -73,7 +73,7 @@ module Contentful
73
73
  'sidebar' => true
74
74
  }
75
75
 
76
- expect(described_class.valid_extension(extension)).to be_truthy
76
+ expect(described_class.valid_extension?(extension)).to be_truthy
77
77
 
78
78
  extension = {
79
79
  'name' => 'foobar',
@@ -82,7 +82,7 @@ module Contentful
82
82
  'sidebar' => false
83
83
  }
84
84
 
85
- expect(described_class.valid_extension(extension)).to be_truthy
85
+ expect(described_class.valid_extension?(extension)).to be_truthy
86
86
 
87
87
  extension = {
88
88
  'name' => 'foobar',
@@ -91,7 +91,7 @@ module Contentful
91
91
  'sidebar' => 'foobar'
92
92
  }
93
93
 
94
- expect(described_class.valid_extension(extension)).to be_falsey
94
+ expect(described_class.valid_extension?(extension)).to be_falsey
95
95
  end
96
96
  end
97
97
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: contentful-management
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.0
4
+ version: 2.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Protas
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2018-09-18 00:00:00.000000000 Z
13
+ date: 2018-10-15 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: http
@@ -466,7 +466,7 @@ files:
466
466
  - spec/fixtures/vcr_cassettes/content_type/create_with_Location_field.yml
467
467
  - spec/fixtures/vcr_cassettes/content_type/create_with_Number_field.yml
468
468
  - spec/fixtures/vcr_cassettes/content_type/create_with_Object_field.yml
469
- - spec/fixtures/vcr_cassettes/content_type/create_with_StructuredText_field.yml
469
+ - spec/fixtures/vcr_cassettes/content_type/create_with_RichText_field.yml
470
470
  - spec/fixtures/vcr_cassettes/content_type/create_with_Symbol_field.yml
471
471
  - spec/fixtures/vcr_cassettes/content_type/create_with_Text_field.yml
472
472
  - spec/fixtures/vcr_cassettes/content_type/deactivate.yml
@@ -853,7 +853,7 @@ test_files:
853
853
  - spec/fixtures/vcr_cassettes/content_type/create_with_Location_field.yml
854
854
  - spec/fixtures/vcr_cassettes/content_type/create_with_Number_field.yml
855
855
  - spec/fixtures/vcr_cassettes/content_type/create_with_Object_field.yml
856
- - spec/fixtures/vcr_cassettes/content_type/create_with_StructuredText_field.yml
856
+ - spec/fixtures/vcr_cassettes/content_type/create_with_RichText_field.yml
857
857
  - spec/fixtures/vcr_cassettes/content_type/create_with_Symbol_field.yml
858
858
  - spec/fixtures/vcr_cassettes/content_type/create_with_Text_field.yml
859
859
  - spec/fixtures/vcr_cassettes/content_type/deactivate.yml