contentful-management 1.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/Gemfile +1 -0
- data/README.md +245 -151
- data/lib/contentful/management/client.rb +20 -0
- data/lib/contentful/management/client_association_all_published_method_factory.rb +4 -0
- data/lib/contentful/management/client_content_type_methods_factory.rb +4 -0
- data/lib/contentful/management/client_editor_interface_methods_factory.rb +35 -0
- data/lib/contentful/management/client_role_methods_factory.rb +15 -0
- data/lib/contentful/management/client_webhook_methods_factory.rb +1 -1
- data/lib/contentful/management/content_type.rb +12 -0
- data/lib/contentful/management/content_type_editor_interface_methods_factory.rb +22 -0
- data/lib/contentful/management/editor_interface.rb +85 -0
- data/lib/contentful/management/field.rb +1 -0
- data/lib/contentful/management/resource/all_published.rb +1 -0
- data/lib/contentful/management/resource/refresher.rb +7 -3
- data/lib/contentful/management/resource_builder.rb +5 -1
- data/lib/contentful/management/role.rb +33 -0
- data/lib/contentful/management/space.rb +28 -0
- data/lib/contentful/management/space_association_all_published_method_factory.rb +1 -0
- data/lib/contentful/management/space_editor_interface_methods_factory.rb +21 -0
- data/lib/contentful/management/space_role_methods_factory.rb +15 -0
- data/lib/contentful/management/version.rb +1 -1
- data/lib/contentful/management/webhook.rb +4 -1
- data/spec/fixtures/vcr_cassettes/content_type/omitted_field.yml +640 -0
- data/spec/fixtures/vcr_cassettes/editor_interfaces/default_for_space.yml +252 -0
- data/spec/fixtures/vcr_cassettes/editor_interfaces/update.yml +348 -0
- data/spec/fixtures/vcr_cassettes/roles/all_for_space.yml +238 -0
- data/spec/fixtures/vcr_cassettes/roles/create_for_space.yml +143 -0
- data/spec/fixtures/vcr_cassettes/roles/destroy.yml +430 -0
- data/spec/fixtures/vcr_cassettes/roles/find.yml +155 -0
- data/spec/fixtures/vcr_cassettes/roles/find_for_space_not_found.yml +82 -0
- data/spec/fixtures/vcr_cassettes/roles/update.yml +459 -0
- data/spec/fixtures/vcr_cassettes/webhook/create_with_name_and_headers.yml +119 -0
- data/spec/fixtures/vcr_cassettes/webhook/topics.yml +117 -0
- data/spec/lib/contentful/management/asset_spec.rb +4 -0
- data/spec/lib/contentful/management/content_type_spec.rb +36 -0
- data/spec/lib/contentful/management/editor_interface_spec.rb +57 -0
- data/spec/lib/contentful/management/entry_spec.rb +5 -0
- data/spec/lib/contentful/management/role_spec.rb +125 -0
- data/spec/lib/contentful/management/webhook_spec.rb +37 -0
- metadata +35 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9e9540f9f6f76faa7bc81ffc078b274f6ad41c9f
|
4
|
+
data.tar.gz: 627329c7f26dcb8f7866def702f06d0c44721777
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d249c4f1a49c297c970a712c9e7a934b52928e839b2d7fa63e451c714ed7e002e26799eb8aa3550dd1cce1ab3d88537ebd6a30455c996bff32fd306fb6e0f13
|
7
|
+
data.tar.gz: e6e6a254e522a42befd514c7877db377c4f0c32abca8760fc8fb2f291afc155a815fca42057fb77e89a490269ce6251a5f95d1c6e51eb6832ae9ee1a2166f794
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,16 @@
|
|
2
2
|
|
3
3
|
## Master
|
4
4
|
|
5
|
+
## 1.1.0
|
6
|
+
### Added
|
7
|
+
* Add Roles and Permissions Support
|
8
|
+
* Add Headers, Topics and Webhook Name Support
|
9
|
+
* Add Editor Interfaces Support
|
10
|
+
* Add `:omitted` property to Content Type Fields
|
11
|
+
|
12
|
+
### Changed
|
13
|
+
* Added Deprecation warning for `assets.all_published` and `entries.all_published`. This methods will be completely removed soon.
|
14
|
+
|
5
15
|
## 1.0.1
|
6
16
|
### Changed
|
7
17
|
* Changed locale selection priority when requesting fields [#91](https://github.com/contentful/contentful-management.rb/issues/91)
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
# Contentful::Management
|
3
2
|
[![Gem Version](https://badge.fury.io/rb/contentful-management.svg)](http://badge.fury.io/rb/contentful-management) [![Build Status](https://travis-ci.org/contentful/contentful-management.rb.svg)](https://travis-ci.org/contentful/contentful-management.rb)
|
4
3
|
|
@@ -85,131 +84,6 @@ blog_space.name = 'New Blog Space'
|
|
85
84
|
blog_space.save
|
86
85
|
```
|
87
86
|
|
88
|
-
### Content Types
|
89
|
-
|
90
|
-
Retrieving all content types from a space:
|
91
|
-
|
92
|
-
```ruby
|
93
|
-
blog_post_content_types = blog_space.content_types.all
|
94
|
-
```
|
95
|
-
|
96
|
-
Retrieving all published content types from a space:
|
97
|
-
|
98
|
-
```ruby
|
99
|
-
blog_post_content_types = blog_space.content_types.all_published
|
100
|
-
```
|
101
|
-
|
102
|
-
Retrieving one content type by id from a space:
|
103
|
-
|
104
|
-
```ruby
|
105
|
-
blog_post_content_type = blog_space.content_types.find(id)
|
106
|
-
```
|
107
|
-
|
108
|
-
Creating a field for a content type:
|
109
|
-
|
110
|
-
```ruby
|
111
|
-
title_field = Contentful::Management::Field.new
|
112
|
-
title_field.id = 'blog_post_title'
|
113
|
-
title_field.name = 'Post Title'
|
114
|
-
title_field.type = 'Text'
|
115
|
-
blog_post_content_type.fields.add(field)
|
116
|
-
```
|
117
|
-
|
118
|
-
or
|
119
|
-
|
120
|
-
```ruby
|
121
|
-
blog_post_content_type.fields.create(id: 'title_field_id', name: 'Post Title', type: 'Text')
|
122
|
-
```
|
123
|
-
- if the field_id exists, the related field will be updated.
|
124
|
-
|
125
|
-
or the field of link type:
|
126
|
-
```ruby
|
127
|
-
blog_post_content_type.fields.create(id: 'my_entry_link_field', name: 'My Entry Link Field', type: 'Link', link_type: 'Entry')
|
128
|
-
```
|
129
|
-
|
130
|
-
or the field of an array type:
|
131
|
-
```ruby
|
132
|
-
items = Contentful::Management::Field.new
|
133
|
-
items.type = 'Link'
|
134
|
-
items.link_type = 'Entry'
|
135
|
-
blog_post_content_type.fields.create(id: 'my_array_field', name: 'My Array Field', type: 'Array', items: items)
|
136
|
-
```
|
137
|
-
|
138
|
-
Deleting a field from the content type:
|
139
|
-
|
140
|
-
```ruby
|
141
|
-
blog_post_content_type.fields.destroy(title_field_id)
|
142
|
-
```
|
143
|
-
|
144
|
-
Creating a content type:
|
145
|
-
|
146
|
-
```ruby
|
147
|
-
blog_space.content_types.create(name: 'Post', fields: [title_field, body_field])
|
148
|
-
```
|
149
|
-
|
150
|
-
or
|
151
|
-
|
152
|
-
```ruby
|
153
|
-
blog_post_content_type = blog_space.content_types.new
|
154
|
-
blog_post_content_type.name = 'Post'
|
155
|
-
blog_post_content_type.fields = [title_field, body_field]
|
156
|
-
blog_post_content_type.save
|
157
|
-
```
|
158
|
-
|
159
|
-
Destroying a content type:
|
160
|
-
|
161
|
-
```ruby
|
162
|
-
blog_post_content_type.destroy
|
163
|
-
```
|
164
|
-
|
165
|
-
Activating or deactivating a content type:
|
166
|
-
|
167
|
-
```ruby
|
168
|
-
blog_post_content_type.activate
|
169
|
-
blog_post_content_type.deactivate
|
170
|
-
```
|
171
|
-
|
172
|
-
Checking if a content type is active:
|
173
|
-
|
174
|
-
```ruby
|
175
|
-
blog_post_content_type.active?
|
176
|
-
```
|
177
|
-
|
178
|
-
Updating a content type:
|
179
|
-
|
180
|
-
```ruby
|
181
|
-
blog_post_content_type.update(name: 'Post', description: 'Post Description', fields: [title_field])
|
182
|
-
```
|
183
|
-
|
184
|
-
### Locales
|
185
|
-
|
186
|
-
Retrieving all locales from the space:
|
187
|
-
|
188
|
-
```ruby
|
189
|
-
blog_post_locales = blog_space.locales.all
|
190
|
-
```
|
191
|
-
|
192
|
-
Retrieving one locale by the locale-id from the space:
|
193
|
-
|
194
|
-
```ruby
|
195
|
-
blog_post_locale = blog_space.locales.find(locale_id)
|
196
|
-
```
|
197
|
-
|
198
|
-
Creating a locale
|
199
|
-
```ruby
|
200
|
-
blog_space.locales.create(name: 'German', code: 'de-DE')
|
201
|
-
```
|
202
|
-
|
203
|
-
Updating a locale
|
204
|
-
```ruby
|
205
|
-
blog_post_locale.update(name: 'German', code: 'de-DE')
|
206
|
-
```
|
207
|
-
|
208
|
-
Destroying a locale
|
209
|
-
```ruby
|
210
|
-
blog_post_locale.destroy
|
211
|
-
```
|
212
|
-
|
213
87
|
### Assets
|
214
88
|
|
215
89
|
Retrieving all assets from the space:
|
@@ -218,7 +92,7 @@ Retrieving all assets from the space:
|
|
218
92
|
blog_post_assets = blog_space.assets.all
|
219
93
|
```
|
220
94
|
|
221
|
-
Retrieving all published assets from the space:
|
95
|
+
Retrieving all published assets from the space: **DEPRECATED**
|
222
96
|
|
223
97
|
```ruby
|
224
98
|
blog_post_assets = blog_space.assets.all_published
|
@@ -330,7 +204,7 @@ Retrieving all entries from the space:
|
|
330
204
|
entries = blog_space.entries.all
|
331
205
|
```
|
332
206
|
|
333
|
-
Retrieving all published entries from the space:
|
207
|
+
Retrieving all published entries from the space: **DEPRECATED**
|
334
208
|
|
335
209
|
```ruby
|
336
210
|
entries = blog_space.entries.all_published
|
@@ -435,57 +309,103 @@ my_entry.published?
|
|
435
309
|
> * Enable [Content Type Cache](#content-type-cache) at Client Instantiation time
|
436
310
|
> * Query Entries through `space.entries.find` instead of `Entry.find(space_id, entry_id)`
|
437
311
|
|
438
|
-
###
|
312
|
+
### Content Types
|
439
313
|
|
440
|
-
Retrieving all
|
314
|
+
Retrieving all content types from a space:
|
441
315
|
|
442
316
|
```ruby
|
443
|
-
|
317
|
+
blog_post_content_types = blog_space.content_types.all
|
444
318
|
```
|
445
|
-
|
319
|
+
|
320
|
+
Retrieving all published content types from a space:
|
446
321
|
|
447
322
|
```ruby
|
448
|
-
|
323
|
+
blog_post_content_types = blog_space.content_types.all_published
|
449
324
|
```
|
450
325
|
|
451
|
-
|
326
|
+
Retrieving one content type by id from a space:
|
452
327
|
|
453
328
|
```ruby
|
454
|
-
blog_space.
|
329
|
+
blog_post_content_type = blog_space.content_types.find(id)
|
455
330
|
```
|
456
331
|
|
457
|
-
|
332
|
+
Creating a field for a content type:
|
458
333
|
|
459
334
|
```ruby
|
460
|
-
|
335
|
+
title_field = Contentful::Management::Field.new
|
336
|
+
title_field.id = 'blog_post_title'
|
337
|
+
title_field.name = 'Post Title'
|
338
|
+
title_field.type = 'Text'
|
339
|
+
blog_post_content_type.fields.add(field)
|
461
340
|
```
|
462
341
|
|
463
|
-
|
342
|
+
or
|
464
343
|
|
465
344
|
```ruby
|
466
|
-
|
345
|
+
blog_post_content_type.fields.create(id: 'title_field_id', name: 'Post Title', type: 'Text')
|
467
346
|
```
|
347
|
+
- if the field_id exists, the related field will be updated.
|
468
348
|
|
469
|
-
|
349
|
+
or the field of link type:
|
350
|
+
```ruby
|
351
|
+
blog_post_content_type.fields.create(id: 'my_entry_link_field', name: 'My Entry Link Field', type: 'Link', link_type: 'Entry')
|
352
|
+
```
|
470
353
|
|
471
|
-
|
354
|
+
or the field of an array type:
|
355
|
+
```ruby
|
356
|
+
items = Contentful::Management::Field.new
|
357
|
+
items.type = 'Link'
|
358
|
+
items.link_type = 'Entry'
|
359
|
+
blog_post_content_type.fields.create(id: 'my_array_field', name: 'My Array Field', type: 'Array', items: items)
|
360
|
+
```
|
361
|
+
|
362
|
+
Deleting a field from the content type:
|
472
363
|
|
473
364
|
```ruby
|
474
|
-
|
365
|
+
blog_post_content_type.fields.destroy(title_field_id)
|
475
366
|
```
|
476
367
|
|
477
|
-
|
368
|
+
Creating a content type:
|
478
369
|
|
479
370
|
```ruby
|
480
|
-
|
371
|
+
blog_space.content_types.create(name: 'Post', fields: [title_field, body_field])
|
481
372
|
```
|
482
373
|
|
483
|
-
|
374
|
+
or
|
375
|
+
|
484
376
|
```ruby
|
485
|
-
blog_space.
|
377
|
+
blog_post_content_type = blog_space.content_types.new
|
378
|
+
blog_post_content_type.name = 'Post'
|
379
|
+
blog_post_content_type.fields = [title_field, body_field]
|
380
|
+
blog_post_content_type.save
|
381
|
+
```
|
382
|
+
|
383
|
+
Destroying a content type:
|
384
|
+
|
385
|
+
```ruby
|
386
|
+
blog_post_content_type.destroy
|
486
387
|
```
|
487
388
|
|
488
|
-
|
389
|
+
Activating or deactivating a content type:
|
390
|
+
|
391
|
+
```ruby
|
392
|
+
blog_post_content_type.activate
|
393
|
+
blog_post_content_type.deactivate
|
394
|
+
```
|
395
|
+
|
396
|
+
Checking if a content type is active:
|
397
|
+
|
398
|
+
```ruby
|
399
|
+
blog_post_content_type.active?
|
400
|
+
```
|
401
|
+
|
402
|
+
Updating a content type:
|
403
|
+
|
404
|
+
```ruby
|
405
|
+
blog_post_content_type.update(name: 'Post', description: 'Post Description', fields: [title_field])
|
406
|
+
```
|
407
|
+
|
408
|
+
### Validations
|
489
409
|
|
490
410
|
#### in
|
491
411
|
|
@@ -567,6 +487,180 @@ validation_link_field.link_field = true
|
|
567
487
|
content_type.fields.create(id: 'entry', validations: [validation_link_field])
|
568
488
|
```
|
569
489
|
|
490
|
+
### Locales
|
491
|
+
|
492
|
+
Retrieving all locales from the space:
|
493
|
+
|
494
|
+
```ruby
|
495
|
+
blog_post_locales = blog_space.locales.all
|
496
|
+
```
|
497
|
+
|
498
|
+
Retrieving one locale by the locale-id from the space:
|
499
|
+
|
500
|
+
```ruby
|
501
|
+
blog_post_locale = blog_space.locales.find(locale_id)
|
502
|
+
```
|
503
|
+
|
504
|
+
Creating a locale
|
505
|
+
```ruby
|
506
|
+
blog_space.locales.create(name: 'German', code: 'de-DE')
|
507
|
+
```
|
508
|
+
|
509
|
+
Updating a locale
|
510
|
+
```ruby
|
511
|
+
blog_post_locale.update(name: 'German', code: 'de-DE')
|
512
|
+
```
|
513
|
+
|
514
|
+
Destroying a locale
|
515
|
+
```ruby
|
516
|
+
blog_post_locale.destroy
|
517
|
+
```
|
518
|
+
|
519
|
+
### Roles
|
520
|
+
|
521
|
+
Retrieving all roles from the space:
|
522
|
+
|
523
|
+
```ruby
|
524
|
+
blog_post_roles = blog_space.roles.all
|
525
|
+
```
|
526
|
+
|
527
|
+
Retrieving one role by the locale-id from the space:
|
528
|
+
|
529
|
+
```ruby
|
530
|
+
blog_post_role = blog_space.role.find(role_id)
|
531
|
+
```
|
532
|
+
|
533
|
+
Creating a role
|
534
|
+
```ruby
|
535
|
+
role_attributes = {
|
536
|
+
name: 'My Role',
|
537
|
+
description: 'foobar role',
|
538
|
+
permissions: {
|
539
|
+
'ContentDelivery': 'all',
|
540
|
+
'ContentModel': ['read'],
|
541
|
+
'Settings': []
|
542
|
+
},
|
543
|
+
policies: [
|
544
|
+
{
|
545
|
+
effect: 'allow',
|
546
|
+
actions: 'all',
|
547
|
+
constraint: {
|
548
|
+
and: [
|
549
|
+
{
|
550
|
+
equals: [
|
551
|
+
{ doc: 'sys.type' },
|
552
|
+
'Entry'
|
553
|
+
]
|
554
|
+
},
|
555
|
+
{
|
556
|
+
equals: [
|
557
|
+
{ doc: 'sys.type' },
|
558
|
+
'Asset'
|
559
|
+
]
|
560
|
+
}
|
561
|
+
]
|
562
|
+
}
|
563
|
+
}
|
564
|
+
]
|
565
|
+
}
|
566
|
+
blog_space.roles.create(role_attributes)
|
567
|
+
```
|
568
|
+
|
569
|
+
Updating a role
|
570
|
+
```ruby
|
571
|
+
blog_post_role.update(name: 'Some Other Role') # Can change any attribute here
|
572
|
+
```
|
573
|
+
|
574
|
+
Destroying a role
|
575
|
+
```ruby
|
576
|
+
blog_post_role.destroy
|
577
|
+
```
|
578
|
+
|
579
|
+
### Webhooks
|
580
|
+
|
581
|
+
Retrieving all webhooks from the space:
|
582
|
+
|
583
|
+
```ruby
|
584
|
+
webhooks = blog_space.webhooks.all
|
585
|
+
```
|
586
|
+
Retrieving one webhook by the webhook-id from the space:
|
587
|
+
|
588
|
+
```ruby
|
589
|
+
blog_post_webhook = blog_space.webhooks.find(webhook_id)
|
590
|
+
```
|
591
|
+
|
592
|
+
Creating a webhook
|
593
|
+
|
594
|
+
```ruby
|
595
|
+
blog_space.webhooks.create(
|
596
|
+
name: 'My Webhook',
|
597
|
+
url: 'https://www.example.com',
|
598
|
+
httpBasicUsername: 'username',
|
599
|
+
httpBasicPassword: 'password'
|
600
|
+
)
|
601
|
+
```
|
602
|
+
|
603
|
+
Updating a webhook
|
604
|
+
|
605
|
+
```ruby
|
606
|
+
blog_post_webhook.update(url: 'https://www.newlink.com')
|
607
|
+
```
|
608
|
+
|
609
|
+
Destroying webhook:
|
610
|
+
|
611
|
+
```ruby
|
612
|
+
blog_post_webhook.destroy
|
613
|
+
```
|
614
|
+
|
615
|
+
Creating a Webhook with Custom Headers and Custom Topics:
|
616
|
+
|
617
|
+
```ruby
|
618
|
+
blog_space.webhooks.create(
|
619
|
+
name: 'Entry Save Only',
|
620
|
+
url: 'https://www.example.com',
|
621
|
+
topics: [ 'Entry.save' ],
|
622
|
+
headers: [
|
623
|
+
{
|
624
|
+
key: 'X-My-Custom-Header',
|
625
|
+
value: 'Some Value'
|
626
|
+
}
|
627
|
+
]
|
628
|
+
)
|
629
|
+
```
|
630
|
+
|
631
|
+
### Api Keys
|
632
|
+
|
633
|
+
Retrieving all api keys from the space:
|
634
|
+
|
635
|
+
```ruby
|
636
|
+
blog_post_api_keys = blog_space.api_keys.all
|
637
|
+
```
|
638
|
+
|
639
|
+
Retrieving one api key by the api-key-id from the space:
|
640
|
+
|
641
|
+
```ruby
|
642
|
+
blog_post_api_key = blog_space.api_keys.find(api_key_id)
|
643
|
+
```
|
644
|
+
|
645
|
+
Creating an api key
|
646
|
+
```ruby
|
647
|
+
blog_space.api_keys.create(name: 'foobar key', description: 'key for foobar mobile app')
|
648
|
+
```
|
649
|
+
|
650
|
+
### Editor Interface
|
651
|
+
|
652
|
+
Retrieving editor interface for a content type:
|
653
|
+
|
654
|
+
```ruby
|
655
|
+
blog_post_editor_interface = blog_post_content_type.editor_interface.default
|
656
|
+
```
|
657
|
+
|
658
|
+
You can call the EditorInterface API from any level within the Content Model Hierarchy, take into account that you'll need to
|
659
|
+
pass the ids of the levels below it.
|
660
|
+
|
661
|
+
> Hierarchy is as follows:
|
662
|
+
> `No Object -> Space -> ContentType -> EditorInterface`
|
663
|
+
|
570
664
|
### Pagination
|
571
665
|
|
572
666
|
```ruby
|
@@ -575,7 +669,7 @@ blog_space.assets.all(limit: 5).next_page
|
|
575
669
|
blog_space.entries.all(limit: 5).next_page
|
576
670
|
```
|
577
671
|
|
578
|
-
|
672
|
+
### Logging
|
579
673
|
|
580
674
|
Logging is disabled by default, it can be enabled by setting a logger instance and a logging severity.
|
581
675
|
|
@@ -594,7 +688,7 @@ Logger.new('logfile.log')
|
|
594
688
|
|
595
689
|
The default severity is set to INFO and logs only the request attributes (headers, parameters and url). Setting it to DEBUG will also log the raw JSON response.
|
596
690
|
|
597
|
-
|
691
|
+
### Raise Errors
|
598
692
|
|
599
693
|
If `:raise_errors` is set to true, an Exception will be raised in case of an error. The default is false, in this case a ```Contentful::Management::Error``` object will be returned.
|
600
694
|
|
@@ -602,7 +696,7 @@ If `:raise_errors` is set to true, an Exception will be raised in case of an err
|
|
602
696
|
client = Contentful::Management::Client.new('access_token', raise_errors: true)
|
603
697
|
```
|
604
698
|
|
605
|
-
|
699
|
+
### Content Type Cache
|
606
700
|
|
607
701
|
This allows for fetching Content Types for your Space at Client instantiation time, which prevents extra requests per Entry.
|
608
702
|
To enable this, in your Client instantiation do:
|
@@ -613,7 +707,7 @@ client = Contentful::Management::Client.new(token, dynamic_entries: ['my_space_i
|
|
613
707
|
|
614
708
|
You can enable the Cache for as many Spaces as you want.
|
615
709
|
|
616
|
-
|
710
|
+
### Proxy Support
|
617
711
|
|
618
712
|
This allows for using the CMA SDK through a proxy, for this, your proxy must support HTTPS and your server must have a valid signed certificate.
|
619
713
|
|