contentful 2.15.0 → 2.16.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: '09f8c373dc24453c4566564a0ac34244df2af9bb9eaf123daa91b514f6a0bf14'
4
- data.tar.gz: a99d41fd2698f8dec1536822198fc661a248bc6eacd04c2f7dde555a22dd647d
3
+ metadata.gz: 1e63bedb0c0b22d7e44ea7c6c34ad61f9ff8acb9facc21820184cddf2db79990
4
+ data.tar.gz: 56197434b185928e747670908fdefac768e4ce8dc6be79e3849fd0fc91a022f5
5
5
  SHA512:
6
- metadata.gz: bfe5899e858df982b9d1eeb475729503513d1b18e7315c3f93d35167c19512c301047f3bba4d0cabc37223bc1b06c64c34c70e7720a64ad4283e19616759cfcf
7
- data.tar.gz: f06391fb774add42ea406736f5115d1e0ebf1a08b3ed1c4454640f5b4b240c9a919132170448d0449058b3d11f3d8ab161338d3801385b7e408c30d3e702e1ba
6
+ metadata.gz: 5953cd706cfe07072824f19776a98342561e8259c7ac58f78d869ff533123b147ccdf156d919cbd557e009e21c52829b0309beaf7dc3f1e1f9df2cd28e180613
7
+ data.tar.gz: 1cdc591423e4586e84e44962a1860eb22288e053b0fc73d6105b46bf76c135621092f65d88ec976ec4fa370b72977a7b0584fa5c48cc61e2e27ec446a47a88a4
data/.travis.yml CHANGED
@@ -1,5 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
+ - 2.7.0
3
4
  - 2.6.1
4
5
  - 2.5.1
5
6
  - 2.4.1
data/CHANGELOG.md CHANGED
@@ -2,6 +2,32 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 2.16.0
6
+
7
+ ### Added
8
+ * Added `Contentful::ArrayLike#to_ary`. [#200](https://github.com/contentful/contentful.rb/issues/200)
9
+ * Added `_metadata[:tags]` to read metadata tags on `entry` and `asset`.
10
+
11
+ ## 2.15.4
12
+
13
+ ### Fixed
14
+ * Fixed an issue where the `log_level` of `Logger` was changed unintentionally [#222](https://github.com/contentful/contentful.rb/pull/222)
15
+ * Fixed an issue cause by a `Logger` not being correctly thrown away, causing an exception. [#220](https://github.com/contentful/contentful.rb/pull/220)
16
+ * Added `title` field to assets to prevent Error raising when the field is empty. [#218](https://github.com/contentful/contentful.rb/pull/218)
17
+ * Fixed an issue with `ArrayLike` not taking multiple arguments leading to Errors when using it with pagination libraries. [#215](https://github.com/contentful/contentful.rb/pull/215)
18
+
19
+ ## 2.15.3
20
+ ### Fixed
21
+ * Fixed a deprecation warning in Ruby 2.7.0 for `URI::escape` and replaced it with a backwards compatible mechanism. [#217](https://github.com/contentful/contentful.rb/issues/217)
22
+
23
+ ## 2.15.2
24
+ ### Fixed
25
+ * Fixed unresolvable single linked entries and assets returning a JSON Link rather than being `nil`, the same way they are filtered from Link arrays.
26
+
27
+ ## 2.15.1
28
+ ### Fixed
29
+ * Fixed how `entry_mapping` is cached in order to avoid errors when deserializing resources that have been serialized with previously deleted mapping classes. [#212](https://github.com/contentful/contentful.rb/issues/212)
30
+
5
31
  ## 2.15.0
6
32
  ### Added
7
33
  * Added the capability for `Array#next_page` to support carry-over of query parameters.
data/README.md CHANGED
@@ -363,6 +363,8 @@ client = Contentful::Client.new(
363
363
  <td>
364
364
  The default severity is set to INFO and logs only the request attributes (headers, parameters and url).
365
365
  Setting it to DEBUG will also log the raw JSON response.
366
+ WARNING: Setting this will override the level on the logger instance. Leave out this key to preserve
367
+ the original log_level on the logger, for example when using Rails.logger.
366
368
  </td>
367
369
  </tr>
368
370
  </tbody>
@@ -422,6 +424,15 @@ entry.color # 'rainbow'
422
424
  entry.birthday # #<DateTime: 2011-04-04T22:00:00+00:00 ((2455656j,79200s,0n),+0s,2299161j)>
423
425
  ```
424
426
 
427
+ #### Accessing tags
428
+
429
+ Tags can be accessed via the `#_metadata` method.
430
+
431
+ ```ruby
432
+ entry = client.entry 'nyancat'
433
+ entry._metadata[:tags] # => [<Contentful::Link id='tagID'>]
434
+ ```
435
+
425
436
  #### Dynamic entries
426
437
 
427
438
  However, you can (and should) set `:dynamic_entries` to `:auto` in your client configuration.
data/contentful.gemspec CHANGED
@@ -27,7 +27,7 @@ Gem::Specification.new do |gem|
27
27
  gem.add_dependency 'multi_json', '~> 1'
28
28
 
29
29
  gem.add_development_dependency 'bundler'
30
- gem.add_development_dependency 'rake', '< 11.0'
30
+ gem.add_development_dependency 'rake', '>= 12.3.3'
31
31
  gem.add_development_dependency 'rubygems-tasks', '~> 0.2'
32
32
 
33
33
  gem.add_development_dependency 'guard'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Contentful
2
4
  # Useful methods for array-like resources that can be included if an
3
5
  # :items property exists
@@ -37,8 +39,8 @@ module Contentful
37
39
  # Delegates to items#[]
38
40
  #
39
41
  # @return [Contentful::Entry, Contentful::Asset]
40
- def [](index)
41
- items[index]
42
+ def [](*args)
43
+ items[*args]
42
44
  end
43
45
 
44
46
  # Delegates to items#last
@@ -47,5 +49,12 @@ module Contentful
47
49
  def last
48
50
  items.last
49
51
  end
52
+
53
+ # Delegates to items#to_ary
54
+ #
55
+ # @return [Contentful::Entry, Contentful::Asset]
56
+ def to_ary
57
+ items
58
+ end
50
59
  end
51
60
  end
@@ -10,10 +10,7 @@ module Contentful
10
10
 
11
11
  # @private
12
12
  def marshal_dump
13
- {
14
- configuration: @configuration,
15
- raw: raw
16
- }
13
+ super.merge(raw: raw)
17
14
  end
18
15
 
19
16
  # @private
@@ -23,6 +20,11 @@ module Contentful
23
20
  define_asset_methods!
24
21
  end
25
22
 
23
+ # @private
24
+ def known_link?(*)
25
+ false
26
+ end
27
+
26
28
  # @private
27
29
  def inspect
28
30
  "<#{repr_name} id='#{sys[:id]}' url='#{url}'>"
@@ -91,6 +93,10 @@ module Contentful
91
93
  end
92
94
 
93
95
  def define_asset_methods!
96
+ define_singleton_method :title do
97
+ fields.fetch(:title, nil)
98
+ end
99
+
94
100
  define_singleton_method :description do
95
101
  fields.fetch(:description, nil)
96
102
  end
@@ -5,7 +5,7 @@ require_relative 'support'
5
5
  module Contentful
6
6
  # Base definition of a Contentful Resource containing Sys properties
7
7
  class BaseResource
8
- attr_reader :raw, :default_locale, :sys
8
+ attr_reader :raw, :default_locale, :sys, :_metadata
9
9
 
10
10
  # rubocop:disable Metrics/ParameterLists
11
11
  def initialize(item, configuration = {}, _localized = false, _includes = [], entries = {}, depth = 0, _errors = [])
@@ -15,6 +15,7 @@ module Contentful
15
15
  @depth = depth
16
16
  @configuration = configuration
17
17
  @sys = hydrate_sys
18
+ @_metadata = hydrate_metadata
18
19
 
19
20
  define_sys_methods!
20
21
  end
@@ -31,18 +32,33 @@ module Contentful
31
32
 
32
33
  # @private
33
34
  def marshal_dump
35
+ entry_mapping = @configuration[:entry_mapping].each_with_object({}) do |(k, v), res|
36
+ res[k] = v.to_s
37
+ end
38
+
34
39
  {
35
- configuration: @configuration,
40
+ # loggers usually have a file handle that can't be marshalled, so let's not return that
41
+ configuration: @configuration.merge(entry_mapping: entry_mapping, logger: nil),
36
42
  raw: raw
37
43
  }
38
44
  end
39
45
 
40
46
  # @private
41
47
  def marshal_load(raw_object)
48
+ raw_object[:configuration][:entry_mapping] = raw_object[:configuration].fetch(:entry_mapping, {}).each_with_object({}) do |(k, v), res|
49
+ begin
50
+ v = v.to_s unless v.is_a?(::String)
51
+ res[k] = v.split('::').inject(Object) { |o, c| o.const_get c }
52
+ rescue
53
+ next
54
+ end
55
+ end
56
+
42
57
  @raw = raw_object[:raw]
43
58
  @configuration = raw_object[:configuration]
44
59
  @default_locale = @configuration[:default_locale]
45
60
  @sys = hydrate_sys
61
+ @_metadata = hydrate_metadata
46
62
  @depth = 0
47
63
  define_sys_methods!
48
64
  end
@@ -79,6 +95,15 @@ module Contentful
79
95
  result
80
96
  end
81
97
 
98
+ def hydrate_metadata
99
+ result = {}
100
+ raw.fetch('metadata', {}).each do |k, v|
101
+ v.map! { |tag| build_link(tag) } if k == 'tags'
102
+ result[Support.snakify(k, @configuration[:use_camel_case]).to_sym] = v
103
+ end
104
+ result
105
+ end
106
+
82
107
  protected
83
108
 
84
109
  def repr_name
@@ -30,7 +30,6 @@ module Contentful
30
30
  raw_mode: false,
31
31
  gzip_encoded: true,
32
32
  logger: false,
33
- log_level: Logger::INFO,
34
33
  proxy_host: nil,
35
34
  proxy_username: nil,
36
35
  proxy_password: nil,
@@ -105,7 +104,7 @@ module Contentful
105
104
  # @private
106
105
  def setup_logger
107
106
  @logger = configuration[:logger]
108
- logger.level = configuration[:log_level] if logger
107
+ logger.level = configuration[:log_level] if logger && configuration.key?(:log_level)
109
108
  end
110
109
 
111
110
  # @private
@@ -17,7 +17,8 @@ module Contentful
17
17
  private
18
18
 
19
19
  def coerce(field_id, value, includes, errors, entries = {})
20
- if Support.link?(value) && !Support.unresolvable?(value, errors)
20
+ if Support.link?(value)
21
+ return nil if Support.unresolvable?(value, errors)
21
22
  return build_nested_resource(value, includes, entries, errors)
22
23
  end
23
24
  return coerce_link_array(value, includes, errors, entries) if Support.link_array?(value)
@@ -48,11 +48,7 @@ module Contentful
48
48
 
49
49
  # @private
50
50
  def marshal_dump
51
- {
52
- configuration: @configuration,
53
- raw: raw_with_links,
54
- localized: localized
55
- }
51
+ super.merge(raw: raw_with_links, localized: localized)
56
52
  end
57
53
 
58
54
  # @private
@@ -13,7 +13,12 @@ module Contentful
13
13
 
14
14
  if id
15
15
  @type = :single
16
- @id = URI.escape(id)
16
+ # Given the deprecation of `URI::escape` and `URI::encode`
17
+ # it is needed to replace it with `URI::encode_www_form_component`.
18
+ # This method, does replace spaces with `+` instead of `%20`.
19
+ # Therefore, to keep backwards compatibility, we're replacing the resulting `+`
20
+ # back with `%20`.
21
+ @id = URI.encode_www_form_component(id).gsub('+', '%20')
17
22
  else
18
23
  @type = :multi
19
24
  @id = nil
@@ -1,5 +1,5 @@
1
1
  # Contentful Namespace
2
2
  module Contentful
3
3
  # Gem Version
4
- VERSION = '2.15.0'
4
+ VERSION = '2.16.0'
5
5
  end
data/spec/array_spec.rb CHANGED
@@ -36,6 +36,16 @@ describe Contentful::Array do
36
36
  end
37
37
  end
38
38
 
39
+ describe '#[]' do
40
+ it 'provides access to items by index' do
41
+ expect(array[0]).to be_a Contentful::BaseResource
42
+ end
43
+
44
+ it 'provides access to items by two indices' do
45
+ expect(array[0, 4]).to eq array.items
46
+ end
47
+ end
48
+
39
49
  describe '#each' do
40
50
  it 'is an Enumerator' do
41
51
  expect(array.each).to be_a Enumerator
@@ -50,6 +60,16 @@ describe Contentful::Array do
50
60
  end
51
61
  end
52
62
 
63
+ describe "#to_ary" do
64
+ it 'is an array' do
65
+ expect(array.to_ary).to be_a ::Array
66
+ end
67
+
68
+ it 'returns items' do
69
+ expect(array.to_ary).to eq array.items
70
+ end
71
+ end
72
+
53
73
  describe '#next_page' do
54
74
  it 'requests more of the same content from the server, using its limit and skip values' do
55
75
  array_page_1 = vcr('array_page_1') { create_client.content_types(skip: 3, limit: 2) }
data/spec/asset_spec.rb CHANGED
@@ -189,4 +189,32 @@ describe Contentful::Asset do
189
189
  }
190
190
  end
191
191
  end
192
+
193
+ describe 'tags metadata' do
194
+ let(:asset_id) { '686aLBcjj1f47uFWxrepj6' }
195
+
196
+ it 'can load an asset with tags' do
197
+ vcr('asset/with_tags') {
198
+ expect {
199
+ asset = create_client.asset(asset_id)
200
+ }.not_to raise_error
201
+ }
202
+ end
203
+
204
+ it 'hydrates tags' do
205
+ vcr('asset/with_tags') {
206
+ asset = create_client.asset(asset_id)
207
+ expect(asset._metadata[:tags].first).to be_a Contentful::Link
208
+ }
209
+ end
210
+
211
+ it 'loads tag links with their proper attributes' do
212
+ vcr('asset/with_tags') {
213
+ asset = create_client.asset(asset_id)
214
+ tag = asset._metadata[:tags].first
215
+ expect(tag.id).to eq 'mobQa'
216
+ expect(tag.link_type).to eq 'Tag'
217
+ }
218
+ end
219
+ end
192
220
  end
@@ -48,6 +48,23 @@ describe 'Client Configuration Options' do
48
48
  end
49
49
  end
50
50
 
51
+ describe ':log_level' do
52
+
53
+ let(:logger) { Logger.new(STDOUT) }
54
+
55
+ it 'changes the level of the logger instance when given' do
56
+ expect do
57
+ create_client(logger: logger, log_level: ::Logger::WARN)
58
+ end.to change { logger.level }.from(::Logger::DEBUG).to(::Logger::WARN)
59
+ end
60
+
61
+ it 'does not change the level of the logger instance when not given' do
62
+ expect do
63
+ create_client(logger: logger)
64
+ end.not_to change { logger.level }
65
+ end
66
+ end
67
+
51
68
  describe ':dynamic_entries' do
52
69
  before :each do
53
70
  Contentful::ContentTypeCache.clear!
data/spec/entry_spec.rb CHANGED
@@ -160,6 +160,7 @@ describe Contentful::Entry do
160
160
  describe 'can be marshalled' do
161
161
  def test_dump(nyancat)
162
162
  dump = Marshal.dump(nyancat)
163
+ yield if block_given?
163
164
  new_cat = Marshal.load(dump)
164
165
 
165
166
  # Attributes
@@ -184,6 +185,14 @@ describe Contentful::Entry do
184
185
  expect(new_cat.image.file.url).to eq "//images.contentful.com/cfexampleapi/4gp6taAwW4CmSgumq2ekUm/9da0cd1936871b8d72343e895a00d611/Nyan_cat_250px_frame.png"
185
186
  end
186
187
 
188
+ it 'marshals properly when entry_mapping changed' do
189
+ vcr('entry/marshall') {
190
+ class TestEntryMapping; end
191
+ nyancat = create_client(gzip_encoded: false, max_include_resolution_depth: 2, entry_mapping: { 'irrelevant_model' => TestEntryMapping }).entries(include: 2, 'sys.id' => 'nyancat').first
192
+ test_dump(nyancat) { Object.send(:remove_const, :TestEntryMapping) }
193
+ }
194
+ end
195
+
187
196
  it 'marshals properly' do
188
197
  vcr('entry/marshall') {
189
198
  nyancat = create_client(gzip_encoded: false, max_include_resolution_depth: 2).entries(include: 2, 'sys.id' => 'nyancat').first
@@ -191,6 +200,16 @@ describe Contentful::Entry do
191
200
  }
192
201
  end
193
202
 
203
+ it 'marshals with a logger set but keeps the instance' do
204
+ logger = Logger.new(IO::NULL)
205
+ vcr('entry/marshall') {
206
+ nyancat = create_client(gzip_encoded: false, max_include_resolution_depth: 2, logger: logger).entries(include: 2, 'sys.id' => 'nyancat').first
207
+ expect(nyancat.instance_variable_get(:@configuration)[:logger]).to eq(logger)
208
+ test_dump(nyancat)
209
+ expect(nyancat.instance_variable_get(:@configuration)[:logger]).to eq(logger)
210
+ }
211
+ end
212
+
194
213
  it 'can remarshall an unmarshalled object' do
195
214
  vcr('entry/marshall') {
196
215
  nyancat = create_client(max_include_resolution_depth: 2).entries(include: 2, 'sys.id' => 'nyancat').first
@@ -477,6 +496,17 @@ describe Contentful::Entry do
477
496
  end
478
497
 
479
498
  describe 'issues' do
499
+ it 'filters out unresolvable assets' do
500
+ vcr('entries/unresolvable_assets') {
501
+ client = create_client(space: 'facgnwwgj5fe', access_token: '4d0f55d940975f78139daae5d965b463c0816e88ad16062d2c1ee3d6cb930521')
502
+ entry = client.entry('gLVzQlb09IeOeU181fwtz')
503
+
504
+ expect(entry.single_asset).to be_nil
505
+ expect(entry.multi_asset.size).to eq 1
506
+ expect(entry.raw["fields"]["multiAsset"].size).to eq 2
507
+ }
508
+ end
509
+
480
510
  it 'Symbol/Text field with null values should be serialized as nil - #117' do
481
511
  vcr('entries/issue_117') {
482
512
  client = create_client(space: '8jbbayggj9gj', access_token: '4ce0108f04e55c76476ba84ab0e6149734db73d67cd1b429323ef67f00977e07')
@@ -754,4 +784,32 @@ describe Contentful::Entry do
754
784
  }
755
785
  end
756
786
  end
787
+
788
+ describe 'tags metadata' do
789
+ let(:entry_id) { '52GcYcPOPhuhlaogl05DIh' }
790
+
791
+ it 'can load an entry with tags' do
792
+ vcr('entry/with_tags') {
793
+ expect {
794
+ entry = create_client.entry(entry_id)
795
+ }.not_to raise_error
796
+ }
797
+ end
798
+
799
+ it 'hydrates tags' do
800
+ vcr('entry/with_tags') {
801
+ entry = create_client.entry(entry_id)
802
+ expect(entry._metadata[:tags].first).to be_a Contentful::Link
803
+ }
804
+ end
805
+
806
+ it 'loads tag links with their proper attributes' do
807
+ vcr('entry/with_tags') {
808
+ entry = create_client.entry(entry_id)
809
+ tag = entry._metadata[:tags].first
810
+ expect(tag.id).to eq 'mobQa'
811
+ expect(tag.link_type).to eq 'Tag'
812
+ }
813
+ end
814
+ end
757
815
  end
@@ -0,0 +1,138 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://cdn.contentful.com/spaces/cfexampleapi/environments/master/assets/686aLBcjj1f47uFWxrepj6
6
+ body:
7
+ encoding: UTF-8
8
+ string: ''
9
+ headers:
10
+ X-Contentful-User-Agent:
11
+ - sdk contentful.rb/2.15.4; platform ruby/2.7.1; os macOS/19;
12
+ Authorization:
13
+ - Bearer b4c0n73n7fu1
14
+ Content-Type:
15
+ - application/vnd.contentful.delivery.v1+json
16
+ Connection:
17
+ - close
18
+ Host:
19
+ - cdn.contentful.com
20
+ User-Agent:
21
+ - http.rb/4.4.1
22
+ response:
23
+ status:
24
+ code: 200
25
+ message: OK
26
+ headers:
27
+ Connection:
28
+ - close
29
+ Content-Length:
30
+ - '1106'
31
+ Access-Control-Allow-Headers:
32
+ - 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,X-Contentful-User-Agent,X-Contentful-Enable-Alpha-Feature
33
+ Access-Control-Allow-Methods:
34
+ - GET,HEAD,OPTIONS
35
+ Access-Control-Allow-Origin:
36
+ - "*"
37
+ Access-Control-Expose-Headers:
38
+ - Etag
39
+ Access-Control-Max-Age:
40
+ - '86400'
41
+ Cf-Environment-Id:
42
+ - master
43
+ Cf-Environment-Uuid:
44
+ - a8fd17fd-5c8e-465f-bf8d-eb67f144dca0
45
+ Cf-Organization-Id:
46
+ - 4kQeJmhUWIKtNNmMkketza
47
+ Cf-Space-Id:
48
+ - cfexampleapi
49
+ Content-Type:
50
+ - application/vnd.contentful.delivery.v1+json
51
+ Contentful-Api:
52
+ - cda_cached
53
+ Etag:
54
+ - W/"3103305513039094952"
55
+ Server:
56
+ - Contentful
57
+ X-Content-Type-Options:
58
+ - nosniff
59
+ X-Contentful-Region:
60
+ - us-east-1
61
+ X-Contentful-Route:
62
+ - "/spaces/:space/environments/:environment/assets/:id"
63
+ Via:
64
+ - 1.1 varnish, 1.1 varnish
65
+ Accept-Ranges:
66
+ - bytes
67
+ Date:
68
+ - Mon, 29 Mar 2021 10:27:50 GMT
69
+ Age:
70
+ - '0'
71
+ X-Served-By:
72
+ - cache-dca17737-DCA, cache-bom4746-BOM
73
+ X-Cache-Hits:
74
+ - 0, 0
75
+ X-Timer:
76
+ - S1617013670.812930,VS0,VE282
77
+ Vary:
78
+ - Accept-Encoding
79
+ X-Cache:
80
+ - MISS
81
+ X-Contentful-Request-Id:
82
+ - a82aa39b-c5fb-4f2c-8848-f1b26cc7d313
83
+ body:
84
+ encoding: ASCII-8BIT
85
+ string: |
86
+ {
87
+ "metadata": {
88
+ "tags": [
89
+ {
90
+ "sys": {
91
+ "type": "Link",
92
+ "linkType": "Tag",
93
+ "id": "mobQa"
94
+ }
95
+ }
96
+ ]
97
+ },
98
+ "sys": {
99
+ "space": {
100
+ "sys": {
101
+ "type": "Link",
102
+ "linkType": "Space",
103
+ "id": "cfexampleapi"
104
+ }
105
+ },
106
+ "id": "686aLBcjj1f47uFWxrepj6",
107
+ "type": "Asset",
108
+ "createdAt": "2021-02-06T05:59:37.794Z",
109
+ "updatedAt": "2021-03-29T10:22:06.152Z",
110
+ "environment": {
111
+ "sys": {
112
+ "id": "master",
113
+ "type": "Link",
114
+ "linkType": "Environment"
115
+ }
116
+ },
117
+ "revision": 2,
118
+ "locale": "en-US"
119
+ },
120
+ "fields": {
121
+ "title": "Avatar",
122
+ "description": "my photo",
123
+ "file": {
124
+ "url": "//images.ctfassets.net/cfexampleapi/686aLBcjj1f47uFWxrepj6/3bd27e35028b8210ca732eb037f4b567/WhatsApp_Image_2019-06-25_at_12.17.04.jpeg",
125
+ "details": {
126
+ "size": 108963,
127
+ "image": {
128
+ "width": 868,
129
+ "height": 1000
130
+ }
131
+ },
132
+ "fileName": "Avatar.jpeg",
133
+ "contentType": "image/jpeg"
134
+ }
135
+ }
136
+ }
137
+ recorded_at: Mon, 29 Mar 2021 10:27:49 GMT
138
+ recorded_with: VCR 6.0.0
@@ -0,0 +1,89 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://cdn.contentful.com/spaces/facgnwwgj5fe/environments/master/entries?sys.id=gLVzQlb09IeOeU181fwtz
6
+ body:
7
+ encoding: UTF-8
8
+ string: ''
9
+ headers:
10
+ X-Contentful-User-Agent:
11
+ - sdk contentful.rb/2.15.1; platform ruby/2.6.3; os macOS/18;
12
+ Authorization:
13
+ - Bearer 4d0f55d940975f78139daae5d965b463c0816e88ad16062d2c1ee3d6cb930521
14
+ Content-Type:
15
+ - application/vnd.contentful.delivery.v1+json
16
+ Accept-Encoding:
17
+ - gzip
18
+ Connection:
19
+ - close
20
+ Host:
21
+ - cdn.contentful.com
22
+ User-Agent:
23
+ - http.rb/4.2.0
24
+ response:
25
+ status:
26
+ code: 200
27
+ message: OK
28
+ headers:
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,X-Contentful-User-Agent,X-Contentful-Enable-Alpha-Feature
31
+ Access-Control-Allow-Methods:
32
+ - GET,HEAD,OPTIONS
33
+ Access-Control-Allow-Origin:
34
+ - "*"
35
+ Access-Control-Expose-Headers:
36
+ - Etag
37
+ Access-Control-Max-Age:
38
+ - '86400'
39
+ Cf-Environment-Id:
40
+ - master
41
+ Cf-Environment-Uuid:
42
+ - 7df33faa-1d21-4dea-83e9-9ebda5f47ba9
43
+ Cf-Organization-Id:
44
+ - 4SsuxQCaMaemfIms52Jr8s
45
+ Cf-Space-Id:
46
+ - facgnwwgj5fe
47
+ Content-Encoding:
48
+ - gzip
49
+ Content-Type:
50
+ - application/vnd.contentful.delivery.v1+json
51
+ Contentful-Api:
52
+ - cda_cached
53
+ Etag:
54
+ - W/"14036385179019726604"
55
+ Server:
56
+ - Contentful
57
+ X-Content-Type-Options:
58
+ - nosniff
59
+ X-Contentful-Region:
60
+ - us-east-1
61
+ Content-Length:
62
+ - '832'
63
+ Accept-Ranges:
64
+ - bytes
65
+ Date:
66
+ - Thu, 19 Dec 2019 09:54:02 GMT
67
+ Via:
68
+ - 1.1 varnish
69
+ Age:
70
+ - '0'
71
+ Connection:
72
+ - close
73
+ X-Served-By:
74
+ - cache-ams21023-AMS
75
+ X-Cache:
76
+ - MISS
77
+ X-Cache-Hits:
78
+ - '0'
79
+ Vary:
80
+ - Accept-Encoding
81
+ X-Contentful-Request-Id:
82
+ - e8767cee-9cbe-46be-8fab-47d35d6c5db7
83
+ body:
84
+ encoding: ASCII-8BIT
85
+ string: !binary |-
86
+ H4sIAAAAAAAAA81WW2+bMBR+769APK8J5NbSt25r127VqqZJq22qIgMHYkoMwiZZWuW/zxdIHEpINk3TUBRhG5/znet3Xo8Mw6RLap4Zr/yVL9gyBb4yz7MMLU2+t3onvmEJQzHft+WKPuOULyy5iPEMM3FkqTVmMBMCf0iBSmxFi9REU+QJVeUXalPDIjbkZonpBpNnU+jcPFw7eR4VmO+lxMoH2BfmBMgLyWIRRv0AhFXls1q/SzvVY6o74c3Dy13sWs413MLYPrWDBXvRxK9xXRCWLfUDLwPEwD8XbjE7lu0c251j2xlZzlnf5r9Wtzf4rl/IU//3LgCZ4ywhMyBCx34XKotmiDLIqh461L0Xms69LsxgjilOSJkzhWe9hDCOuYjYftyHYvugya1NgJykuRtjOuVhoRQY3Z8FceKhWBYDkOPxfXlhnShmgCH2N7UjTDQZZurOeKPQKDRqGUYxCWOQ+wfF71A/KIm1HhhEEXr46OZkNIiW6PLh5+XYuRrvd8MsjxkukaqiVsHUo1dT4EXEG5DL5rEp3zrs/BOVup34PWTzG5/ln/E1HV4NrShiCx09b1V6Vuo++KdIH++6wym6fQzpt9GXr/e9IB/M4waga9BPxZsyQ/w/yQYLWZZkh3RU5SmSsCHQJJ4jl2eilnNlJKS8t9nsA0M4rqZz0VorrbcxbgdFrDBSwdtNEv+XSc0lVI0bJl6c+6CRa7WKNnm5RcJF5dQR5N+oszqaXNfZLqJsqK4i3vV5r5fhZriQfW/rqIEye5w1rVZ/YOuUyQE3kOauK7tpc7djG6iTXzq8ve2gzybH1pOoaJv11FRMa0X+1NCTAFwS1Kck9oEYGbAMwxwyg88snJWMFIfUCJKkEqAAS16rtNI8E1Oh2W7jGQqBtjwWIEmvLQKsrSdTuzY/2l3PPUXd7kkHen3/xHVcO+gg1wPUCzpgn1ptBXOyhjlRMCcC5kTAbEVpWB1p6npZWVX4Rdjh2J2T7jZPihoQVryxUhL7Avtsyo/6asxV0sp/cwo4nAoqH/QdjYXEuc5KWwGSYoVbv6KZHDP+yNTtiUpZ0I5SCHcw+xbJCMpZHa2OfgEgI0mYCAwAAA==
87
+ http_version:
88
+ recorded_at: Thu, 19 Dec 2019 09:54:02 GMT
89
+ recorded_with: VCR 5.0.0
@@ -0,0 +1,238 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://cdn.contentful.com/spaces/cfexampleapi/environments/master/content_types?limit=1000
6
+ body:
7
+ encoding: UTF-8
8
+ string: ''
9
+ headers:
10
+ X-Contentful-User-Agent:
11
+ - sdk contentful.rb/2.15.4; platform ruby/2.7.1; os macOS/19;
12
+ Authorization:
13
+ - Bearer b4c0n73n7fu1
14
+ Content-Type:
15
+ - application/vnd.contentful.delivery.v1+json
16
+ Accept-Encoding:
17
+ - gzip
18
+ Connection:
19
+ - close
20
+ Host:
21
+ - cdn.contentful.com
22
+ User-Agent:
23
+ - http.rb/4.4.1
24
+ response:
25
+ status:
26
+ code: 200
27
+ message: OK
28
+ headers:
29
+ Connection:
30
+ - close
31
+ Content-Length:
32
+ - '731'
33
+ Access-Control-Allow-Headers:
34
+ - 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,X-Contentful-User-Agent,X-Contentful-Enable-Alpha-Feature
35
+ Access-Control-Allow-Methods:
36
+ - GET,HEAD,OPTIONS
37
+ Access-Control-Allow-Origin:
38
+ - "*"
39
+ Access-Control-Expose-Headers:
40
+ - Etag
41
+ Access-Control-Max-Age:
42
+ - '86400'
43
+ Cf-Environment-Id:
44
+ - master
45
+ Cf-Environment-Uuid:
46
+ - a8fd17fd-5c8e-465f-bf8d-eb67f144dca0
47
+ Cf-Organization-Id:
48
+ - 4kQeJmhUWIKtNNmMkketza
49
+ Cf-Space-Id:
50
+ - cfexampleapi
51
+ Content-Encoding:
52
+ - gzip
53
+ Content-Type:
54
+ - application/vnd.contentful.delivery.v1+json
55
+ Contentful-Api:
56
+ - cda_cached
57
+ Etag:
58
+ - W/"1428365732249037051"
59
+ Server:
60
+ - Contentful
61
+ X-Content-Type-Options:
62
+ - nosniff
63
+ X-Contentful-Region:
64
+ - us-east-1
65
+ X-Contentful-Route:
66
+ - "/spaces/:space/environments/:environment/content_types"
67
+ Accept-Ranges:
68
+ - bytes
69
+ Date:
70
+ - Sun, 28 Mar 2021 12:13:52 GMT
71
+ Via:
72
+ - 1.1 varnish
73
+ Age:
74
+ - '87766'
75
+ X-Served-By:
76
+ - cache-bom4721-BOM
77
+ X-Cache-Hits:
78
+ - '1'
79
+ X-Timer:
80
+ - S1616933633.514348,VS0,VE1
81
+ Vary:
82
+ - Accept-Encoding
83
+ X-Cache:
84
+ - HIT
85
+ X-Contentful-Request-Id:
86
+ - 4452e776-4432-4002-b3ea-ef8e597daa42
87
+ body:
88
+ encoding: ASCII-8BIT
89
+ string: !binary |-
90
+ H4sIAAAAAAAAA+1XTY/aMBC9769APhdkJyEsuaFqK1XqqcupFUIGzGKRrzqGlq747x07OImDWVB3FxWpvoA9nhnP8+R55vmu00HFrkBR5xn+wkTucgYzNBKC7hCs7T+oPTKTNIZ1X8+KNc9hgvUk5gmXMCMYlwtcskRZ/K4tlnZbbrSrIqdz5cvsKBcbh1ELetEc6gtP10g5rQe4T9fjw6EftcXWBr5Q8WTBKnwa/vTzLOMqLDP21X8daDlQqSNZIb2GueocH7NUslRqtw2tuWBUssVIoYE87JEu9rqkP8ZhFPgRwb3Qv//WVNjki2MFDxSCyB9EhPSCYGgpsHTLRZYm4Pwi4Mo4ElpIJtq4XArqQ8PnWeAE2/KCZ6nKB++wuwIWLXiRx3T3ibNYX0rCJAUEaHU0lNJEp58NPVqwYi54LkvLqN6/VKbqZFPXZ6VTCUBOUyv6ys2RwIDyGS74qYUZirM5jflvps6+pHHBmpmGBPux4eKEECKns/iEMIMPCPLGWHVlpCOoI/BU8FVkbqkJ73GXzLLYxuTq0R3inOjfQ5LcMFvQjVxlza/sr+gCh2Pcj/phhMOeT4LzdKEUYLcXBUFvMOzfLF2cZwvJZVzzbZXpIxv313IF3QIh2WRZuXLJTtLotejCIqHmazgqCibrt67xvjnYRPD5asx+STdPuqUm9K9O3avzSQ2EIz47eSyqHFt5pUX/efJ9q6p25WTwvrywIl2PjAmGIiki/R4Jw3NMCQrAlMMI+1GAe/cDuxK7pcLKC84WVqp8murayF1aTTXg5oN5LWWmm2TGBHFTRymctqRvU2dJsbFrsHcosxxQ2uwBUNuRm9iO6fTfokQg9bV8ifId0jei/GtcnGBLJljaagirt/yE2ARY9r/223qd8t/yaXrp5ot2piHeQo8CTRW0SrovmjTt6Xa97pcfUil0k29Goxu2q3OYTe72d38AoWM06DAQAAA=
91
+ recorded_at: Sun, 28 Mar 2021 12:13:52 GMT
92
+ - request:
93
+ method: get
94
+ uri: https://cdn.contentful.com/spaces/cfexampleapi/environments/master/entries?sys.id=52GcYcPOPhuhlaogl05DIh
95
+ body:
96
+ encoding: UTF-8
97
+ string: ''
98
+ headers:
99
+ X-Contentful-User-Agent:
100
+ - sdk contentful.rb/2.15.4; platform ruby/2.7.1; os macOS/19;
101
+ Authorization:
102
+ - Bearer b4c0n73n7fu1
103
+ Content-Type:
104
+ - application/vnd.contentful.delivery.v1+json
105
+ Accept-Encoding:
106
+ - gzip
107
+ Connection:
108
+ - close
109
+ Host:
110
+ - cdn.contentful.com
111
+ User-Agent:
112
+ - http.rb/4.4.1
113
+ response:
114
+ status:
115
+ code: 200
116
+ message: OK
117
+ headers:
118
+ Connection:
119
+ - close
120
+ Content-Length:
121
+ - '956'
122
+ Access-Control-Allow-Headers:
123
+ - 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,X-Contentful-User-Agent,X-Contentful-Enable-Alpha-Feature
124
+ Access-Control-Allow-Methods:
125
+ - GET,HEAD,OPTIONS
126
+ Access-Control-Allow-Origin:
127
+ - "*"
128
+ Access-Control-Expose-Headers:
129
+ - Etag
130
+ Access-Control-Max-Age:
131
+ - '86400'
132
+ Cf-Environment-Id:
133
+ - master
134
+ Cf-Environment-Uuid:
135
+ - a8fd17fd-5c8e-465f-bf8d-eb67f144dca0
136
+ Cf-Organization-Id:
137
+ - 4kQeJmhUWIKtNNmMkketza
138
+ Cf-Space-Id:
139
+ - cfexampleapi
140
+ Content-Type:
141
+ - application/vnd.contentful.delivery.v1+json
142
+ Contentful-Api:
143
+ - cda_cached
144
+ Etag:
145
+ - '"18024233839947354630"'
146
+ Server:
147
+ - Contentful
148
+ X-Content-Type-Options:
149
+ - nosniff
150
+ X-Contentful-Region:
151
+ - us-east-1
152
+ X-Contentful-Route:
153
+ - "/spaces/:space/environments/:environment/entries"
154
+ Accept-Ranges:
155
+ - bytes
156
+ Date:
157
+ - Sun, 28 Mar 2021 12:13:52 GMT
158
+ Via:
159
+ - 1.1 varnish
160
+ Age:
161
+ - '0'
162
+ X-Served-By:
163
+ - cache-bom4749-BOM
164
+ X-Cache-Hits:
165
+ - '1'
166
+ X-Timer:
167
+ - S1616933633.546080,VS0,VE285
168
+ Vary:
169
+ - Accept-Encoding
170
+ X-Cache:
171
+ - HIT
172
+ X-Contentful-Request-Id:
173
+ - 129a8fd6-d7a1-4873-8d23-b61c7fe7b62b
174
+ body:
175
+ encoding: ASCII-8BIT
176
+ string: |
177
+ {
178
+ "sys": {
179
+ "type": "Array"
180
+ },
181
+ "total": 1,
182
+ "skip": 0,
183
+ "limit": 100,
184
+ "items": [
185
+ {
186
+ "metadata": {
187
+ "tags": [
188
+ {
189
+ "sys": {
190
+ "type": "Link",
191
+ "linkType": "Tag",
192
+ "id": "mobQa"
193
+ }
194
+ }
195
+ ]
196
+ },
197
+ "sys": {
198
+ "space": {
199
+ "sys": {
200
+ "type": "Link",
201
+ "linkType": "Space",
202
+ "id": "cfexampleapi"
203
+ }
204
+ },
205
+ "id": "52GcYcPOPhuhlaogl05DIh",
206
+ "type": "Entry",
207
+ "createdAt": "2021-02-21T06:31:58.023Z",
208
+ "updatedAt": "2021-02-25T04:29:51.706Z",
209
+ "environment": {
210
+ "sys": {
211
+ "id": "master",
212
+ "type": "Link",
213
+ "linkType": "Environment"
214
+ }
215
+ },
216
+ "revision": 3,
217
+ "contentType": {
218
+ "sys": {
219
+ "type": "Link",
220
+ "linkType": "ContentType",
221
+ "id": "test2"
222
+ }
223
+ },
224
+ "locale": "en-US"
225
+ },
226
+ "fields": {
227
+ "title": {
228
+ "en-US": "Can't publish this"
229
+ },
230
+ "shortDescription": {
231
+ "en-US": "What is going on here can I still write? changed"
232
+ }
233
+ }
234
+ }
235
+ ]
236
+ }
237
+ recorded_at: Sun, 28 Mar 2021 12:13:52 GMT
238
+ recorded_with: VCR 6.0.0
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: contentful
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.15.0
4
+ version: 2.16.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Contentful GmbH (Jan Lelis)
8
8
  - Contentful GmbH (Andreas Tiefenthaler)
9
9
  - Contentful GmbH (David Litvak Bruno)
10
- autorequire:
10
+ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2019-11-15 00:00:00.000000000 Z
13
+ date: 2021-03-31 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: http
@@ -64,16 +64,16 @@ dependencies:
64
64
  name: rake
65
65
  requirement: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - "<"
67
+ - - ">="
68
68
  - !ruby/object:Gem::Version
69
- version: '11.0'
69
+ version: 12.3.3
70
70
  type: :development
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
73
73
  requirements:
74
- - - "<"
74
+ - - ">="
75
75
  - !ruby/object:Gem::Version
76
- version: '11.0'
76
+ version: 12.3.3
77
77
  - !ruby/object:Gem::Dependency
78
78
  name: rubygems-tasks
79
79
  requirement: !ruby/object:Gem::Requirement
@@ -443,6 +443,7 @@ files:
443
443
  - spec/fixtures/vcr_cassettes/asset/select_no_sys.yml
444
444
  - spec/fixtures/vcr_cassettes/asset/select_one_field.yml
445
445
  - spec/fixtures/vcr_cassettes/asset/select_only_sys.yml
446
+ - spec/fixtures/vcr_cassettes/asset/with_tags.yml
446
447
  - spec/fixtures/vcr_cassettes/assets/issues_129.yml
447
448
  - spec/fixtures/vcr_cassettes/assets/issues_jekyll_46.yml
448
449
  - spec/fixtures/vcr_cassettes/bad_request.yml
@@ -455,6 +456,7 @@ files:
455
456
  - spec/fixtures/vcr_cassettes/entries/rich_text_hydration_issue.yml
456
457
  - spec/fixtures/vcr_cassettes/entries/rich_text_nested_fields.yml
457
458
  - spec/fixtures/vcr_cassettes/entries/rich_text_unresolved_relationships.yml
459
+ - spec/fixtures/vcr_cassettes/entries/unresolvable_assets.yml
458
460
  - spec/fixtures/vcr_cassettes/entries/unresolvable_filter.yml
459
461
  - spec/fixtures/vcr_cassettes/entries/unresolvable_filter_deeply_nested.yml
460
462
  - spec/fixtures/vcr_cassettes/entry.yml
@@ -475,6 +477,7 @@ files:
475
477
  - spec/fixtures/vcr_cassettes/entry/select_one_field.yml
476
478
  - spec/fixtures/vcr_cassettes/entry/select_one_field_proper.yml
477
479
  - spec/fixtures/vcr_cassettes/entry/select_only_sys.yml
480
+ - spec/fixtures/vcr_cassettes/entry/with_tags.yml
478
481
  - spec/fixtures/vcr_cassettes/entry_cache.yml
479
482
  - spec/fixtures/vcr_cassettes/entry_locales.yml
480
483
  - spec/fixtures/vcr_cassettes/field.yml
@@ -519,7 +522,7 @@ homepage: https://github.com/contentful/contentful.rb
519
522
  licenses:
520
523
  - MIT
521
524
  metadata: {}
522
- post_install_message:
525
+ post_install_message:
523
526
  rdoc_options: []
524
527
  require_paths:
525
528
  - lib
@@ -535,7 +538,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
535
538
  version: '0'
536
539
  requirements: []
537
540
  rubygems_version: 3.0.3
538
- signing_key:
541
+ signing_key:
539
542
  specification_version: 4
540
543
  summary: contentful
541
544
  test_files:
@@ -592,6 +595,7 @@ test_files:
592
595
  - spec/fixtures/vcr_cassettes/asset/select_no_sys.yml
593
596
  - spec/fixtures/vcr_cassettes/asset/select_one_field.yml
594
597
  - spec/fixtures/vcr_cassettes/asset/select_only_sys.yml
598
+ - spec/fixtures/vcr_cassettes/asset/with_tags.yml
595
599
  - spec/fixtures/vcr_cassettes/assets/issues_129.yml
596
600
  - spec/fixtures/vcr_cassettes/assets/issues_jekyll_46.yml
597
601
  - spec/fixtures/vcr_cassettes/bad_request.yml
@@ -604,6 +608,7 @@ test_files:
604
608
  - spec/fixtures/vcr_cassettes/entries/rich_text_hydration_issue.yml
605
609
  - spec/fixtures/vcr_cassettes/entries/rich_text_nested_fields.yml
606
610
  - spec/fixtures/vcr_cassettes/entries/rich_text_unresolved_relationships.yml
611
+ - spec/fixtures/vcr_cassettes/entries/unresolvable_assets.yml
607
612
  - spec/fixtures/vcr_cassettes/entries/unresolvable_filter.yml
608
613
  - spec/fixtures/vcr_cassettes/entries/unresolvable_filter_deeply_nested.yml
609
614
  - spec/fixtures/vcr_cassettes/entry.yml
@@ -624,6 +629,7 @@ test_files:
624
629
  - spec/fixtures/vcr_cassettes/entry/select_one_field.yml
625
630
  - spec/fixtures/vcr_cassettes/entry/select_one_field_proper.yml
626
631
  - spec/fixtures/vcr_cassettes/entry/select_only_sys.yml
632
+ - spec/fixtures/vcr_cassettes/entry/with_tags.yml
627
633
  - spec/fixtures/vcr_cassettes/entry_cache.yml
628
634
  - spec/fixtures/vcr_cassettes/entry_locales.yml
629
635
  - spec/fixtures/vcr_cassettes/field.yml