diff --git a/CHANGELOG.md b/CHANGELOG.md index 98966ba..b06c3a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ # Change Log ## Unreleased +### Fixed +* Fixed Marshalling for custom resources in Arrays. [#138](https://github.com/contentful/contentful.rb/issues/138) ## 2.1.2 ### Fixed diff --git a/lib/contentful/array.rb b/lib/contentful/array.rb index e62ecff..d28359c 100644 --- a/lib/contentful/array.rb +++ b/lib/contentful/array.rb @@ -14,9 +14,11 @@ class Array < BaseResource attr_reader :total, :limit, :skip, :items, :endpoint def initialize(item = nil, - default_locale = Contentful::Client::DEFAULT_CONFIGURATION[:default_locale], + configuration = { + default_locale: Contentful::Client::DEFAULT_CONFIGURATION[:default_locale] + }, endpoint = '', *) - super(item, { default_locale: default_locale }) + super(item, configuration) @endpoint = endpoint @total = item.fetch('total', nil) diff --git a/lib/contentful/resource_builder.rb b/lib/contentful/resource_builder.rb index 8dd9b8b..422b0fb 100644 --- a/lib/contentful/resource_builder.rb +++ b/lib/contentful/resource_builder.rb @@ -60,7 +60,7 @@ def build_array build_item(item, includes) end array_class = fetch_array_class - array_class.new(json.dup.merge('items' => result), default_locale, endpoint) + array_class.new(json.dup.merge('items' => result), @configuration, endpoint) end def build_single diff --git a/lib/contentful/sync_page.rb b/lib/contentful/sync_page.rb index 8c9c53f..5f9d179 100644 --- a/lib/contentful/sync_page.rb +++ b/lib/contentful/sync_page.rb @@ -8,8 +8,11 @@ class SyncPage < BaseResource attr_reader :sync, :items, :next_sync_url, :next_page_url - def initialize(item, default_locale, *) - super(item, { default_locale: default_locale }, true) + def initialize(item, + configuration = { + default_locale: Contentful::Client::DEFAULT_CONFIGURATION[:default_locale] + }, *) + super(item, configuration, true) @items = item.fetch('items', []) @next_sync_url = item.fetch('nextSyncUrl', nil) diff --git a/spec/array_spec.rb b/spec/array_spec.rb index 9adf4a4..e3ab1a8 100644 --- a/spec/array_spec.rb +++ b/spec/array_spec.rb @@ -1,5 +1,7 @@ require 'spec_helper' +class CustomClass < Contentful::Entry; end + describe Contentful::Array do let(:client) { create_client } let(:array) { vcr('array') { client.content_types } } @@ -94,5 +96,27 @@ expect(entries.last.image2.url).to eq rehydrated.last.image2.url } end + + it 'marshals custom resources properly - #138' do + vcr('array/marshal_custom_classes') { + client = create_client( + space: 'j8tb59fszch7', + access_token: '5f711401f965951eb724ac72ac905e13d892294ba209268f13a9b32e896c8694', + dynamic_entries: :auto, + max_include_resolution_depth: 5, + entry_mapping: { + 'parent' => CustomClass + } + ) + + entries = client.entries(content_type: 'parent') + + expect(entries.first.inspect).to eq "" + + dehydrated = Marshal.load(Marshal.dump(entries)) + + expect(dehydrated.first.inspect).to eq "" + } + end end end diff --git a/spec/fixtures/vcr_cassettes/array/marshal_custom_classes.yml b/spec/fixtures/vcr_cassettes/array/marshal_custom_classes.yml new file mode 100644 index 0000000..47a7889 --- /dev/null +++ b/spec/fixtures/vcr_cassettes/array/marshal_custom_classes.yml @@ -0,0 +1,159 @@ +--- +http_interactions: +- request: + method: get + uri: https://cdn.contentful.com/spaces/j8tb59fszch7/content_types?limit=1000 + body: + encoding: US-ASCII + string: '' + headers: + X-Contentful-User-Agent: + - sdk contentful.rb/2.1.2; platform ruby/2.4.1; os macOS/16; + Authorization: + - Bearer 5f711401f965951eb724ac72ac905e13d892294ba209268f13a9b32e896c8694 + Content-Type: + - application/vnd.contentful.delivery.v1+json + Accept-Encoding: + - gzip + Connection: + - close + Host: + - cdn.contentful.com + User-Agent: + - http.rb/2.2.2 + response: + status: + code: 200 + message: OK + headers: + Access-Control-Allow-Headers: + - 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-Experimental-Feature + Access-Control-Allow-Methods: + - GET,HEAD,OPTIONS + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Etag + Access-Control-Max-Age: + - '86400' + Cache-Control: + - max-age=0 + Content-Encoding: + - gzip + Content-Type: + - application/vnd.contentful.delivery.v1+json + Etag: + - W/"dbd86bc89681ff36b482b61f9acf6336" + Server: + - Contentful + X-Content-Type-Options: + - nosniff + X-Contentful-Request-Id: + - 2a18bccb70cba71bd8464663780f6fba + Content-Length: + - '458' + Accept-Ranges: + - bytes + Date: + - Thu, 17 Aug 2017 12:23:27 GMT + Via: + - 1.1 varnish + Age: + - '0' + Connection: + - close + X-Served-By: + - cache-gru7120-GRU + X-Cache: + - MISS + X-Cache-Hits: + - '0' + X-Timer: + - S1502972607.174656,VS0,VE300 + Vary: + - Accept-Encoding + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAAAAAAAAA9VVO2/CMBDe+RWR54KSkJCSDVXt1K1MrRhMYoqL86htkALiv/fsPHCiQJ9ShZfkzr73fXeHgWUhUQgUWgf4BUIWOQEKzTjHBQLe8Ua9kZnEDPiupsSG5kDYmmA0oRIox7ZLBpUkURpftMZSb8eMNiVyHClb9YuSaTijGJpZO/VI0w1SRk8HzKebeeX0k9bYeUBjFc/brVz605XYR+tAhVWfY/OvAy0PKmWiNWWxoa7x4y5LJUmlNmtIRZxgSeKZygZybScY2sHQ9efONHQnoe+OJlPv2RTY5vH3BDjZUUGzVKW78rZxG8VU5AwXD5SA16GVbhmrnUMpTnRZ2yGhmIiI01yWKlHjG1opJaciqrS0ylQmiCb4lTithDeW+u7O1hGxLMKM7olyfIWZIGYRESfvW8rPXELYeMnOXGbQm1CSXq1m58yEIPLUF0YvnAvbvRB25+56wq56aqG/VRKuGMA55gDTP0KwH3r2yHNvv4rg8Tj0g5FnOy0BA8HjHyG4E9NvIawHgujv5b679n5oofQ/MFzvGhOlnyyMHQwaGLsw8vR8W1zYJ/ep5HoJ1sfYFm2oALUYHAcfDww1W1AHAAA= + http_version: + recorded_at: Thu, 17 Aug 2017 12:23:27 GMT +- request: + method: get + uri: https://cdn.contentful.com/spaces/j8tb59fszch7/entries?content_type=parent + body: + encoding: US-ASCII + string: '' + headers: + X-Contentful-User-Agent: + - sdk contentful.rb/2.1.2; platform ruby/2.4.1; os macOS/16; + Authorization: + - Bearer 5f711401f965951eb724ac72ac905e13d892294ba209268f13a9b32e896c8694 + Content-Type: + - application/vnd.contentful.delivery.v1+json + Accept-Encoding: + - gzip + Connection: + - close + Host: + - cdn.contentful.com + User-Agent: + - http.rb/2.2.2 + response: + status: + code: 200 + message: OK + headers: + Access-Control-Allow-Headers: + - 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-Experimental-Feature + Access-Control-Allow-Methods: + - GET,HEAD,OPTIONS + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Etag + Access-Control-Max-Age: + - '86400' + Cache-Control: + - max-age=0 + Content-Encoding: + - gzip + Content-Type: + - application/vnd.contentful.delivery.v1+json + Etag: + - W/"50b10e6946ba58441081ab4010bcc603" + Server: + - Contentful + X-Content-Type-Options: + - nosniff + X-Contentful-Request-Id: + - 54e27668a0265d1a9bc522aecba71a1a + Content-Length: + - '1171' + Accept-Ranges: + - bytes + Date: + - Thu, 17 Aug 2017 12:23:29 GMT + Via: + - 1.1 varnish + Age: + - '0' + Connection: + - close + X-Served-By: + - cache-gru7123-GRU + X-Cache: + - MISS + X-Cache-Hits: + - '0' + X-Timer: + - S1502972609.832470,VS0,VE217 + Vary: + - Accept-Encoding + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAAAAAAAAA+2Y3W/iOBDA3/evqHg+iO34I+ENVS3a7bVcj7K99rQPxnHAbQgcCYfoqv/7OQ4fgSahzaW70qp5QImTsWfG85vx8P3TyUkjWkWN9sl3fasf4tVM6qdGZz7nq4Yee/4t+SaexjzQ49A8RY9qph+AeQjURMXJK5A+q1hOkgn/NhOm0x6sYlaKZlwkS22+SAczuiQDZnCj0+8qfGwka+4uvXr4eLPWuW9mPPhAeYk5D048JK4fPYkxS6zaXM/be2NnejVSGcK/2j0QkIcBEMtr1Htc3UWrQWb+rWJnYTxfZV+IueSx9DqJXxoIQNYErInIDXTbNmwj2iIM3GcFFjPvbQJz+a+K1DTc7MlaczENYxnGa4/U59rTzLy5Dp7xuV73uGuDqeCBiTAZNgf9jcDW+w1fycDbBWRiV0OMVTqWxlRqa9a4nPhaO6Qkdkzs7qLncBP3YuHuHN3f/BnMuqd9uhx1VpNl/+I0a60GJRtWWR/9UEWJq+iXED+Nou6gv6Tq89md7N6WaLrV+tv6LrUj+f1m+FahCBaezOSI1FMbwneM5+5CLue5X5qtfv1+5dGeqFvKe8k2bajPd2B2Qwu5T0K1lHyAW4yhLPlapJz9XJF8+pPlC/mvw+XFWWDreINqSbjt+bEgGayLzhrAnISQrDbhIwkPykcdNnaiSMYHRWRrHe7/9fVmDi7OBqtbdXl52uMDORi81lyjM/rROsOrAbwTV9dfup87CI06F5OLf26nJTrvSuImI2w2bZfJ9g4N643KK+h17Mg7gZ6f0mvgHLltjFoUvIHzIpEPzn8O5+z8IVDDoDPpTLuXywFFl/KaPpYwsxc2P4nz2bC7uL1HrEe7lz3Q68rJSHRKdH7JuRkxVV9zmybCX7TKFyTFXPpfVoTSKg/amLWgi99Q5QtECun/H3UzVnF6/CZMSopdBAUiPuf61hfMRY4DXSZsaO+VQH0qN1IHR9nFPOkJG5ZlIj5qrU8f/iLQtxMr23RZ+R63CPU5ZWg4hIyzIeMSMWZ7wJEQQA8Q1zqmZ+thNjrs+TwZcxXsNxGbIqWeEkOIjTHN7rYJeWPGCzPNq6Xy4rERNF3u/tUYSzUaJ80eJfDgbbYt2DvYmGkTv17xiWmIqli6f95LDbAeZnKU5T7T5P7SFR3mZ8AaoNb1GZEWdeDroS4SeVeozxdhuGqe8rj5hxLxYi6j5lLFYz0yi/WfBVET1o51rs8tjqFDgE25TTHgHsYu9G3Hc1xEAbD50DquaTWwKWCwEtgUlYLtIFwZ7Gq2fqBtMmTazxc0XjWgbYM2ZPr/uDec1otE3hVtCfSZQgoOhQNtQm0qJNBj2MaQYEfUXq/zPW4J1+cIYeoRglzuCl2opaA+sR3mCexT65ie1bDGLnMrYU0oLq3XlFTGuoqlH1BnoC7osmqAGjltov9kR2+p1wUi7wr10cqASN0FO9/pFkUEuJ7vAunjofRsRwAG4HDocu4IhsXxgq0PSJWO4rbOZ+4ho685ih+p2Bixymi/Yl/yjK1Kd9p369/nT8+f/gNYpN8blBsAAA== + http_version: + recorded_at: Thu, 17 Aug 2017 12:23:29 GMT +recorded_with: VCR 3.0.3