contentful-management 0.8.0 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +12 -29
- data/.rubocop_todo.yml +24 -0
- data/.travis.yml +1 -1
- data/.yardopts +4 -0
- data/CHANGELOG.md +12 -0
- data/Gemfile +1 -0
- data/Guardfile +39 -34
- data/README.md +42 -1
- data/Rakefile +2 -0
- data/contentful-management.gemspec +2 -1
- data/lib/contentful/management/api_key.rb +65 -0
- data/lib/contentful/management/array.rb +3 -2
- data/lib/contentful/management/asset.rb +124 -58
- data/lib/contentful/management/client.rb +60 -19
- data/lib/contentful/management/content_type.rb +104 -49
- data/lib/contentful/management/content_type_entry_methods_factory.rb +21 -0
- data/lib/contentful/management/dynamic_entry.rb +22 -18
- data/lib/contentful/management/entry.rb +138 -80
- data/lib/contentful/management/error.rb +23 -23
- data/lib/contentful/management/field.rb +16 -13
- data/lib/contentful/management/http_client.rb +29 -0
- data/lib/contentful/management/link.rb +3 -3
- data/lib/contentful/management/locale.rb +55 -26
- data/lib/contentful/management/location.rb +1 -1
- data/lib/contentful/management/request.rb +11 -12
- data/lib/contentful/management/resource.rb +27 -12
- data/lib/contentful/management/resource/array_like.rb +1 -1
- data/lib/contentful/management/resource/asset_fields.rb +1 -0
- data/lib/contentful/management/resource/entry_fields.rb +2 -0
- data/lib/contentful/management/resource/field_aware.rb +16 -5
- data/lib/contentful/management/resource/fields.rb +16 -8
- data/lib/contentful/management/resource/refresher.rb +1 -0
- data/lib/contentful/management/resource/system_properties.rb +13 -6
- data/lib/contentful/management/resource_builder.rb +43 -40
- data/lib/contentful/management/space.rb +67 -28
- data/lib/contentful/management/space_api_key_methods_factory.rb +15 -0
- data/lib/contentful/management/space_asset_methods_factory.rb +4 -0
- data/lib/contentful/management/space_association_all_published_method_factory.rb +11 -0
- data/lib/contentful/management/space_association_methods_factory.rb +4 -2
- data/lib/contentful/management/space_content_type_methods_factory.rb +4 -0
- data/lib/contentful/management/space_entry_methods_factory.rb +4 -0
- data/lib/contentful/management/space_locale_methods_factory.rb +2 -0
- data/lib/contentful/management/space_webhook_methods_factory.rb +2 -0
- data/lib/contentful/management/validation.rb +3 -2
- data/lib/contentful/management/version.rb +4 -1
- data/lib/contentful/management/webhook.rb +42 -21
- data/spec/fixtures/vcr_cassettes/api_key/all_for_space.yml +194 -0
- data/spec/fixtures/vcr_cassettes/api_key/create_for_space.yml +113 -0
- data/spec/fixtures/vcr_cassettes/api_key/find.yml +113 -0
- data/spec/fixtures/vcr_cassettes/api_key/find_for_space_not_found.yml +71 -0
- data/spec/fixtures/vcr_cassettes/asset/all_public.yml +112 -0
- data/spec/fixtures/vcr_cassettes/content_type/all_public.yml +106 -0
- data/spec/fixtures/vcr_cassettes/entry/all_public.yml +102 -0
- data/spec/fixtures/vcr_cassettes/locale/destroy.yml +330 -0
- data/spec/fixtures/vcr_cassettes/locale/update_both.yml +306 -0
- data/spec/fixtures/vcr_cassettes/locale/update_code.yml +306 -0
- data/spec/fixtures/vcr_cassettes/locale/update_name.yml +306 -0
- data/spec/fixtures/vcr_cassettes/space/api_key/all.yml +410 -0
- data/spec/fixtures/vcr_cassettes/space/api_key/create.yml +329 -0
- data/spec/fixtures/vcr_cassettes/space/api_key/find.yml +329 -0
- data/spec/fixtures/vcr_cassettes/space/asset/all_public.yml +328 -0
- data/spec/fixtures/vcr_cassettes/space/content_type/all_public.yml +322 -0
- data/spec/fixtures/vcr_cassettes/space/entry/all_public.yml +318 -0
- data/spec/lib/contentful/management/api_key_spec.rb +55 -0
- data/spec/lib/contentful/management/asset_spec.rb +10 -0
- data/spec/lib/contentful/management/content_type_spec.rb +10 -0
- data/spec/lib/contentful/management/entry_spec.rb +10 -0
- data/spec/lib/contentful/management/locale_spec.rb +58 -0
- data/spec/lib/contentful/management/space_spec.rb +53 -0
- metadata +58 -9
@@ -0,0 +1,15 @@
|
|
1
|
+
require_relative 'space_association_methods_factory'
|
2
|
+
|
3
|
+
module Contentful
|
4
|
+
module Management
|
5
|
+
# Wrapper for ApiKey API for usage from within Space
|
6
|
+
# @private
|
7
|
+
class SpaceApiKeyMethodsFactory
|
8
|
+
include Contentful::Management::SpaceAssociationMethodsFactory
|
9
|
+
|
10
|
+
def new
|
11
|
+
fail 'Not supported'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -1,9 +1,13 @@
|
|
1
1
|
require_relative 'space_association_methods_factory'
|
2
|
+
require_relative 'space_association_all_published_method_factory'
|
2
3
|
|
3
4
|
module Contentful
|
4
5
|
module Management
|
6
|
+
# Wrapper for Asset API for usage from within Space
|
7
|
+
# @private
|
5
8
|
class SpaceAssetMethodsFactory
|
6
9
|
include Contentful::Management::SpaceAssociationMethodsFactory
|
10
|
+
include Contentful::Management::SpaceAssociationAllPublishedMethodsFactory
|
7
11
|
end
|
8
12
|
end
|
9
13
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Contentful
|
2
|
+
module Management
|
3
|
+
# Wrapper for /public API for usage from within Space Wrapper Classes
|
4
|
+
# @private
|
5
|
+
module SpaceAssociationAllPublishedMethodsFactory
|
6
|
+
def all_published(params = {})
|
7
|
+
associated_class.all_published(space.id, params)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
module Contentful
|
2
2
|
module Management
|
3
|
+
# Wrapper for Space Association Methods
|
4
|
+
# @private
|
3
5
|
module SpaceAssociationMethodsFactory
|
4
6
|
attr_reader :space
|
5
7
|
|
@@ -27,8 +29,8 @@ module Contentful
|
|
27
29
|
|
28
30
|
def associated_class
|
29
31
|
class_name = /\A(.+)Space(.+)MethodsFactory\z/.match(self.class.name).captures.join
|
30
|
-
class_name.split('::').reduce(Object) do |mod,
|
31
|
-
mod.const_get(
|
32
|
+
class_name.split('::').reduce(Object) do |mod, actual_class_name|
|
33
|
+
mod.const_get(actual_class_name)
|
32
34
|
end
|
33
35
|
end
|
34
36
|
end
|
@@ -1,9 +1,13 @@
|
|
1
1
|
require_relative 'space_association_methods_factory'
|
2
|
+
require_relative 'space_association_all_published_method_factory'
|
2
3
|
|
3
4
|
module Contentful
|
4
5
|
module Management
|
6
|
+
# Wrapper for ContentType API for usage from within Space
|
7
|
+
# @private
|
5
8
|
class SpaceContentTypeMethodsFactory
|
6
9
|
include Contentful::Management::SpaceAssociationMethodsFactory
|
10
|
+
include Contentful::Management::SpaceAssociationAllPublishedMethodsFactory
|
7
11
|
end
|
8
12
|
end
|
9
13
|
end
|
@@ -1,9 +1,13 @@
|
|
1
1
|
require_relative 'space_association_methods_factory'
|
2
|
+
require_relative 'space_association_all_published_method_factory'
|
2
3
|
|
3
4
|
module Contentful
|
4
5
|
module Management
|
6
|
+
# Wrapper for ContentType API for usage from within Space
|
7
|
+
# @private
|
5
8
|
class SpaceEntryMethodsFactory
|
6
9
|
include Contentful::Management::SpaceAssociationMethodsFactory
|
10
|
+
include Contentful::Management::SpaceAssociationAllPublishedMethodsFactory
|
7
11
|
|
8
12
|
def create(_attributes)
|
9
13
|
fail 'Not supported'
|
@@ -15,6 +15,7 @@ module Contentful
|
|
15
15
|
property :linkMimetypeGroup, :string
|
16
16
|
property :linkField, :boolean
|
17
17
|
|
18
|
+
# @private
|
18
19
|
def properties_to_hash
|
19
20
|
properties.each_with_object({}) do |(key, value), results|
|
20
21
|
results[key] = value if Field.value_exists?(value)
|
@@ -22,13 +23,13 @@ module Contentful
|
|
22
23
|
end
|
23
24
|
|
24
25
|
# Returns type of validation
|
26
|
+
# @return [Symbol]
|
25
27
|
def type
|
26
28
|
properties.keys.reject { |key| key == :validations }.each do |type|
|
27
|
-
value =
|
29
|
+
value = send(Support.snakify(type))
|
28
30
|
return type if !value.nil? && value
|
29
31
|
end
|
30
32
|
end
|
31
|
-
|
32
33
|
end
|
33
34
|
end
|
34
35
|
end
|
@@ -3,7 +3,7 @@ require_relative 'resource'
|
|
3
3
|
module Contentful
|
4
4
|
module Management
|
5
5
|
# Resource class for Webhook.
|
6
|
-
# https://www.contentful.com/developers/documentation/content-management-api/http/#resources-webhooks
|
6
|
+
# @see _ https://www.contentful.com/developers/documentation/content-management-api/http/#resources-webhooks
|
7
7
|
class Webhook
|
8
8
|
include Contentful::Management::Resource
|
9
9
|
include Contentful::Management::Resource::SystemProperties
|
@@ -13,12 +13,17 @@ module Contentful
|
|
13
13
|
property :httpBasicUsername, :string
|
14
14
|
|
15
15
|
# Gets a collection of webhooks.
|
16
|
-
#
|
17
|
-
#
|
16
|
+
#
|
17
|
+
# @param [String] space_id
|
18
|
+
# @param [Hash] parameters
|
19
|
+
# @option parameters [String] 'sys.id'
|
20
|
+
# @option parameters [String] :url
|
21
|
+
#
|
22
|
+
# @return [Contentful::Management::Array<Contentful::Management::Webhook>]
|
18
23
|
def self.all(space_id, parameters = {})
|
19
24
|
request = Request.new(
|
20
|
-
|
21
|
-
|
25
|
+
"/#{space_id}/webhook_definitions",
|
26
|
+
parameters
|
22
27
|
)
|
23
28
|
response = request.get
|
24
29
|
result = ResourceBuilder.new(response, {}, {})
|
@@ -26,37 +31,51 @@ module Contentful
|
|
26
31
|
end
|
27
32
|
|
28
33
|
# Gets a specific webhook.
|
29
|
-
#
|
30
|
-
#
|
34
|
+
#
|
35
|
+
# @param [String] space_id
|
36
|
+
# @param [String] webhook_id
|
37
|
+
#
|
38
|
+
# @return [Contentful::Management::Webhook]
|
31
39
|
def self.find(space_id, webhook_id)
|
32
|
-
request = Request.new("/#{
|
40
|
+
request = Request.new("/#{space_id}/webhook_definitions/#{webhook_id}")
|
33
41
|
response = request.get
|
34
42
|
result = ResourceBuilder.new(response, {}, {})
|
35
43
|
result.run
|
36
44
|
end
|
37
45
|
|
38
46
|
# Creates a webhook.
|
39
|
-
#
|
40
|
-
#
|
47
|
+
#
|
48
|
+
# @param [String] space_id
|
49
|
+
# @param [Hash] attributes
|
50
|
+
# @option attributes [String] :url
|
51
|
+
# @option attributes [String] :httpBasicUsername
|
52
|
+
# @option attributes [String] :httpBasicPassword
|
53
|
+
#
|
54
|
+
# @return [Contentful::Management::Webhook]
|
41
55
|
def self.create(space_id, attributes)
|
42
56
|
id = attributes[:id]
|
43
57
|
request = Request.new(
|
44
|
-
|
45
|
-
|
58
|
+
"/#{space_id}/webhook_definitions/#{id}",
|
59
|
+
endpoint_parameters(attributes)
|
46
60
|
)
|
47
61
|
response = id.nil? ? request.post : request.put
|
48
62
|
ResourceBuilder.new(response, {}, {}).run
|
49
63
|
end
|
50
64
|
|
51
65
|
# Updates a webhook.
|
52
|
-
#
|
53
|
-
#
|
66
|
+
#
|
67
|
+
# @param [Hash] attributes
|
68
|
+
# @option attributes [String] :url
|
69
|
+
# @option attributes [String] :httpBasicUsername
|
70
|
+
# @option attributes [String] :httpBasicPassword
|
71
|
+
#
|
72
|
+
# @return [Contentful::Management::Webhook]
|
54
73
|
def update(attributes)
|
55
74
|
request = Request.new(
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
75
|
+
"/#{space.id}/webhook_definitions/#{id}",
|
76
|
+
self.class.endpoint_parameters(attributes),
|
77
|
+
nil,
|
78
|
+
version: sys[:version]
|
60
79
|
)
|
61
80
|
response = request.put
|
62
81
|
result = ResourceBuilder.new(response, {}, {})
|
@@ -64,18 +83,20 @@ module Contentful
|
|
64
83
|
end
|
65
84
|
|
66
85
|
# Destroys an webhook.
|
67
|
-
#
|
86
|
+
#
|
87
|
+
# @return [true, Contentful::Management::Error] success
|
68
88
|
def destroy
|
69
|
-
request = Request.new("/#{
|
89
|
+
request = Request.new("/#{space.id}/webhook_definitions/#{id}")
|
70
90
|
response = request.delete
|
71
91
|
if response.status == :no_content
|
72
|
-
|
92
|
+
true
|
73
93
|
else
|
74
94
|
result = ResourceBuilder.new(response, {}, {})
|
75
95
|
result.run
|
76
96
|
end
|
77
97
|
end
|
78
98
|
|
99
|
+
# @private
|
79
100
|
def self.endpoint_parameters(attributes)
|
80
101
|
attributes.select { |key, _value| [:httpBasicUsername, :httpBasicPassword, :url].include? key }
|
81
102
|
end
|
@@ -0,0 +1,194 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://api.contentful.com/spaces/bjwq7b86vgmm/api_keys
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- RubyContentfulManagementGem/0.8.0
|
12
|
+
Authorization:
|
13
|
+
- Bearer <ACCESS_TOKEN>
|
14
|
+
Content-Type:
|
15
|
+
- application/vnd.contentful.management.v1+json
|
16
|
+
Content-Length:
|
17
|
+
- '0'
|
18
|
+
Connection:
|
19
|
+
- close
|
20
|
+
Host:
|
21
|
+
- api.contentful.com
|
22
|
+
response:
|
23
|
+
status:
|
24
|
+
code: 200
|
25
|
+
message: OK
|
26
|
+
headers:
|
27
|
+
Accept-Ranges:
|
28
|
+
- bytes
|
29
|
+
Access-Control-Allow-Headers:
|
30
|
+
- Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation
|
31
|
+
Access-Control-Allow-Methods:
|
32
|
+
- DELETE,GET,HEAD,POST,PUT,OPTIONS
|
33
|
+
Access-Control-Allow-Origin:
|
34
|
+
- "*"
|
35
|
+
Access-Control-Expose-Headers:
|
36
|
+
- Etag
|
37
|
+
Access-Control-Max-Age:
|
38
|
+
- '1728000'
|
39
|
+
Cache-Control:
|
40
|
+
- max-age=0
|
41
|
+
Content-Type:
|
42
|
+
- application/vnd.contentful.management.v1+json
|
43
|
+
Date:
|
44
|
+
- Tue, 26 Jan 2016 13:11:06 GMT
|
45
|
+
Etag:
|
46
|
+
- '"bf2ed3f9a14d5d32893e02c307f6214d"'
|
47
|
+
Server:
|
48
|
+
- nginx
|
49
|
+
Status:
|
50
|
+
- 200 OK
|
51
|
+
Strict-Transport-Security:
|
52
|
+
- max-age=15768000
|
53
|
+
X-Content-Type-Options:
|
54
|
+
- nosniff
|
55
|
+
X-Contentful-Request-Id:
|
56
|
+
- 9e1-668687247
|
57
|
+
Content-Length:
|
58
|
+
- '2871'
|
59
|
+
Connection:
|
60
|
+
- Close
|
61
|
+
body:
|
62
|
+
encoding: UTF-8
|
63
|
+
string: |+
|
64
|
+
{
|
65
|
+
"sys":{
|
66
|
+
"type":"Array"
|
67
|
+
},
|
68
|
+
"items":[
|
69
|
+
{
|
70
|
+
"sys":{
|
71
|
+
"type":"ApiKey",
|
72
|
+
"id":"6vbW35TjBTc8FyRTAuXZZe",
|
73
|
+
"version":0,
|
74
|
+
"space":{
|
75
|
+
"sys":{
|
76
|
+
"type":"Link",
|
77
|
+
"linkType":"Space",
|
78
|
+
"id":"bjwq7b86vgmm"
|
79
|
+
}
|
80
|
+
},
|
81
|
+
"createdBy":{
|
82
|
+
"sys":{
|
83
|
+
"type":"Link",
|
84
|
+
"linkType":"User",
|
85
|
+
"id":"4SejVrWT96dvL9IV4Nb7sQ"
|
86
|
+
}
|
87
|
+
},
|
88
|
+
"createdAt":"2016-01-26T02:31:31Z",
|
89
|
+
"updatedBy":{
|
90
|
+
"sys":{
|
91
|
+
"type":"Link",
|
92
|
+
"linkType":"User",
|
93
|
+
"id":"4SejVrWT96dvL9IV4Nb7sQ"
|
94
|
+
}
|
95
|
+
},
|
96
|
+
"updatedAt":"2016-01-26T02:31:31Z"
|
97
|
+
},
|
98
|
+
"name":"testKey",
|
99
|
+
"description":null,
|
100
|
+
"accessToken":"833ea085204398499ea424c8ad832f1ae1cac4d64e2cc56db774aff87ef20b33",
|
101
|
+
"policies":[
|
102
|
+
{
|
103
|
+
"effect":"allow",
|
104
|
+
"actions":"all"
|
105
|
+
}
|
106
|
+
]
|
107
|
+
},
|
108
|
+
{
|
109
|
+
"sys":{
|
110
|
+
"type":"ApiKey",
|
111
|
+
"id":"1hGMMHcRIRDQuZFQvANxny",
|
112
|
+
"version":0,
|
113
|
+
"space":{
|
114
|
+
"sys":{
|
115
|
+
"type":"Link",
|
116
|
+
"linkType":"Space",
|
117
|
+
"id":"bjwq7b86vgmm"
|
118
|
+
}
|
119
|
+
},
|
120
|
+
"createdBy":{
|
121
|
+
"sys":{
|
122
|
+
"type":"Link",
|
123
|
+
"linkType":"User",
|
124
|
+
"id":"4SejVrWT96dvL9IV4Nb7sQ"
|
125
|
+
}
|
126
|
+
},
|
127
|
+
"createdAt":"2016-01-26T12:49:30Z",
|
128
|
+
"updatedBy":{
|
129
|
+
"sys":{
|
130
|
+
"type":"Link",
|
131
|
+
"linkType":"User",
|
132
|
+
"id":"4SejVrWT96dvL9IV4Nb7sQ"
|
133
|
+
}
|
134
|
+
},
|
135
|
+
"updatedAt":"2016-01-26T12:49:30Z"
|
136
|
+
},
|
137
|
+
"name":"otherKey",
|
138
|
+
"description":null,
|
139
|
+
"accessToken":"163ce7aaa3d87d9cbc25fd846d2bd7d70c3a707a5e9ebd7adfcb3bc773a51fd3",
|
140
|
+
"policies":[
|
141
|
+
{
|
142
|
+
"effect":"allow",
|
143
|
+
"actions":"all"
|
144
|
+
}
|
145
|
+
]
|
146
|
+
},
|
147
|
+
{
|
148
|
+
"sys":{
|
149
|
+
"type":"ApiKey",
|
150
|
+
"id":"1nlVhF1rbb6iLWCdm72QVi",
|
151
|
+
"version":0,
|
152
|
+
"space":{
|
153
|
+
"sys":{
|
154
|
+
"type":"Link",
|
155
|
+
"linkType":"Space",
|
156
|
+
"id":"bjwq7b86vgmm"
|
157
|
+
}
|
158
|
+
},
|
159
|
+
"createdBy":{
|
160
|
+
"sys":{
|
161
|
+
"type":"Link",
|
162
|
+
"linkType":"User",
|
163
|
+
"id":"4SejVrWT96dvL9IV4Nb7sQ"
|
164
|
+
}
|
165
|
+
},
|
166
|
+
"createdAt":"2016-01-26T13:11:03Z",
|
167
|
+
"updatedBy":{
|
168
|
+
"sys":{
|
169
|
+
"type":"Link",
|
170
|
+
"linkType":"User",
|
171
|
+
"id":"4SejVrWT96dvL9IV4Nb7sQ"
|
172
|
+
}
|
173
|
+
},
|
174
|
+
"updatedAt":"2016-01-26T13:11:03Z"
|
175
|
+
},
|
176
|
+
"name":"testLocalCreate",
|
177
|
+
"description":"bg",
|
178
|
+
"accessToken":"b8d6f1bfac699f3eeceb9ee61711d9e1011e7fcbaf6836961e706c3cd49d7751",
|
179
|
+
"policies":[
|
180
|
+
{
|
181
|
+
"effect":"allow",
|
182
|
+
"actions":"all"
|
183
|
+
}
|
184
|
+
]
|
185
|
+
}
|
186
|
+
],
|
187
|
+
"total":3,
|
188
|
+
"limit":25,
|
189
|
+
"skip":0
|
190
|
+
}
|
191
|
+
|
192
|
+
http_version:
|
193
|
+
recorded_at: Tue, 26 Jan 2016 13:11:06 GMT
|
194
|
+
recorded_with: VCR 2.9.3
|