contentful 1.2.2 → 2.0.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.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -0
  3. data/LICENSE.txt +1 -0
  4. data/README.md +8 -0
  5. data/contentful.gemspec +2 -1
  6. data/examples/custom_classes.rb +23 -26
  7. data/examples/raise_errors.rb +2 -2
  8. data/lib/contentful.rb +0 -1
  9. data/lib/contentful/array.rb +27 -19
  10. data/lib/contentful/array_like.rb +51 -0
  11. data/lib/contentful/asset.rb +43 -11
  12. data/lib/contentful/base_resource.rb +87 -0
  13. data/lib/contentful/client.rb +43 -34
  14. data/lib/contentful/coercions.rb +116 -0
  15. data/lib/contentful/content_type.rb +23 -8
  16. data/lib/contentful/content_type_cache.rb +26 -0
  17. data/lib/contentful/deleted_asset.rb +2 -5
  18. data/lib/contentful/deleted_entry.rb +2 -5
  19. data/lib/contentful/entry.rb +55 -33
  20. data/lib/contentful/error.rb +1 -1
  21. data/lib/contentful/field.rb +37 -9
  22. data/lib/contentful/fields_resource.rb +115 -0
  23. data/lib/contentful/file.rb +7 -8
  24. data/lib/contentful/link.rb +3 -6
  25. data/lib/contentful/locale.rb +6 -6
  26. data/lib/contentful/location.rb +7 -5
  27. data/lib/contentful/resource_builder.rb +72 -226
  28. data/lib/contentful/space.rb +16 -6
  29. data/lib/contentful/support.rb +41 -3
  30. data/lib/contentful/sync_page.rb +17 -10
  31. data/lib/contentful/version.rb +1 -1
  32. data/spec/array_spec.rb +4 -8
  33. data/spec/client_class_spec.rb +12 -23
  34. data/spec/client_configuration_spec.rb +13 -23
  35. data/spec/content_type_spec.rb +0 -5
  36. data/spec/entry_spec.rb +130 -125
  37. data/spec/error_requests_spec.rb +1 -1
  38. data/spec/field_spec.rb +0 -5
  39. data/spec/file_spec.rb +0 -5
  40. data/spec/fixtures/vcr_cassettes/entry.yml +54 -64
  41. data/spec/fixtures/vcr_cassettes/entry/include_resolution.yml +101 -0
  42. data/spec/fixtures/vcr_cassettes/entry/marshall.yml +227 -251
  43. data/spec/fixtures/vcr_cassettes/entry/raw.yml +88 -124
  44. data/spec/fixtures/vcr_cassettes/entry_locales.yml +56 -74
  45. data/spec/fixtures/vcr_cassettes/human.yml +63 -40
  46. data/spec/fixtures/vcr_cassettes/location.yml +99 -211
  47. data/spec/fixtures/vcr_cassettes/multi_locale_array_reference.yml +12 -16
  48. data/spec/fixtures/vcr_cassettes/not_found.yml +26 -21
  49. data/spec/fixtures/vcr_cassettes/nyancat.yml +53 -63
  50. data/spec/fixtures/vcr_cassettes/ratelimit.yml +1 -1
  51. data/spec/fixtures/vcr_cassettes/reloaded_entry.yml +54 -64
  52. data/spec/fixtures/vcr_cassettes/unauthorized.yml +1 -1
  53. data/spec/fixtures/vcr_cassettes/unavailable.yml +27 -15
  54. data/spec/link_spec.rb +3 -2
  55. data/spec/locale_spec.rb +0 -5
  56. data/spec/location_spec.rb +1 -6
  57. data/spec/request_spec.rb +3 -2
  58. data/spec/resource_building_spec.rb +10 -7
  59. data/spec/response_spec.rb +1 -1
  60. data/spec/space_spec.rb +0 -5
  61. data/spec/spec_helper.rb +3 -0
  62. data/spec/support/json_responses.rb +3 -3
  63. data/spec/sync_page_spec.rb +1 -6
  64. data/spec/sync_spec.rb +11 -7
  65. metadata +69 -20
  66. data/examples/dynamic_entries.rb +0 -124
  67. data/examples/resource_mapping.rb +0 -32
  68. data/lib/contentful/constants.rb +0 -504
  69. data/lib/contentful/dynamic_entry.rb +0 -57
  70. data/lib/contentful/resource.rb +0 -239
  71. data/lib/contentful/resource/array_like.rb +0 -39
  72. data/lib/contentful/resource/asset_fields.rb +0 -58
  73. data/lib/contentful/resource/custom_resource.rb +0 -29
  74. data/lib/contentful/resource/fields.rb +0 -73
  75. data/lib/contentful/resource/system_properties.rb +0 -55
  76. data/spec/coercions_spec.rb +0 -23
  77. data/spec/dynamic_entry_spec.rb +0 -75
  78. data/spec/resource_spec.rb +0 -79
@@ -1,55 +0,0 @@
1
- module Contentful
2
- module Resource
3
- # Adds the feature to have system properties to a Resource.
4
- module SystemProperties
5
- # @private
6
- # Coercions for System Properties to native types
7
- SYS_COERCIONS = {
8
- type: :string,
9
- id: :string,
10
- space: nil,
11
- contentType: nil,
12
- linkType: :string,
13
- revision: :integer,
14
- createdAt: :date,
15
- updatedAt: :date,
16
- locale: :string
17
- }
18
- attr_reader :sys
19
-
20
- # @private
21
- def initialize(object = nil, *)
22
- super
23
- @sys = object ? extract_from_object(object['sys'], :sys) : {}
24
- end
25
-
26
- # @private
27
- def inspect(info = nil)
28
- if sys.empty?
29
- super(info)
30
- else
31
- super("#{info} @sys=#{sys.inspect}")
32
- end
33
- end
34
-
35
- # @private
36
- module ClassMethods
37
- # @private
38
- def sys_coercions
39
- SYS_COERCIONS
40
- end
41
- end
42
-
43
- # @private
44
- def self.included(base)
45
- base.extend(ClassMethods)
46
-
47
- base.sys_coercions.keys.each do |name|
48
- base.send :define_method, Contentful::Support.snakify(name) do
49
- sys[name.to_sym]
50
- end
51
- end
52
- end
53
- end
54
- end
55
- end
@@ -1,23 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe 'Coercion Examples' do
4
- let(:entry) { vcr('entry') { create_client.entry 'nyancat' } }
5
-
6
- it 'converts contentful to ruby DateTime objects' do
7
- expect(entry.created_at).to be_a DateTime
8
- expect(entry.created_at.day).to eq 27
9
- end
10
-
11
- describe 'custom coercion' do
12
- class TestCar
13
- include Contentful::Resource
14
-
15
- property :parts, ->(v) { Array(v) unless v }
16
- end
17
-
18
- it 'can use proc' do
19
- car = TestCar.new("parts" => nil)
20
- expect(car.parts).to be_empty
21
- end
22
- end
23
- end
@@ -1,75 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Contentful::DynamicEntry do
4
- let(:content_type) { vcr('content_type') { create_client.content_type 'cat' } }
5
-
6
- it 'create as a class' do
7
- expect(Contentful::DynamicEntry.create(content_type)).to be_instance_of Class
8
- end
9
-
10
- it 'also works with raw json object input as argument' do
11
- expect(Contentful::DynamicEntry.create(json_fixture('content_type'))).to be_instance_of Class
12
- end
13
-
14
- it 'should create Contentful::DynamicEntry instances' do
15
- expect(Contentful::DynamicEntry.create(content_type).new(json_fixture('nyancat'))).to \
16
- be_a Contentful::DynamicEntry
17
- end
18
-
19
- describe 'Example Entry Class' do
20
- before do
21
- NyanCatEntry = Contentful::DynamicEntry.create(content_type)
22
- end
23
-
24
- it 'defines getters for entry fields' do
25
- nyancat = NyanCatEntry.new json_fixture('nyancat')
26
- expect(nyancat.color).to eq 'rainbow'
27
- end
28
-
29
- it 'automatically coerces types' do
30
- nyancat = NyanCatEntry.new json_fixture('nyancat')
31
- expect(nyancat.birthday).to be_a DateTime
32
- end
33
- end
34
-
35
- describe 'issues' do
36
- describe 'JSON Fields should not be treated as locale data - #96' do
37
- before do
38
- vcr('entry/json_objects_client') {
39
- @client = create_client(
40
- space: 'h425t6gef30p',
41
- access_token: '278f7aa72f2eb90c0e002d60f85bf2144c925acd2d37dd990d3ca274f25076cf',
42
- dynamic_entries: :auto
43
- )
44
-
45
- }
46
- vcr('entry/json_objects') {
47
- @entry = @client.entries.first
48
- }
49
- end
50
-
51
- it 'only has default locale' do
52
- expect(@entry.instance_variable_get(:@fields).keys).to eq ['en-US']
53
- end
54
-
55
- it 'can obtain all values properly' do
56
- expect(@entry.name).to eq('Test')
57
- expect(@entry.object_test).to eq({
58
- null: nil,
59
- text: 'some text',
60
- array: [1, 2, 3],
61
- number: 123,
62
- boolean: true,
63
- object: {
64
- null: nil,
65
- text: 'bar',
66
- array: [1, 2, 3],
67
- number: 123,
68
- boolean: false,
69
- object: {foo: 'bar'}
70
- }
71
- })
72
- end
73
- end
74
- end
75
- end
@@ -1,79 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Contentful::Resource do
4
- it 'must be included to get functionality' do
5
- c = Class.new
6
- c.send :include, Contentful::Resource
7
- expect(c).to respond_to :property_coercions
8
- end
9
-
10
- describe 'creation' do
11
- it 'must be initialized with a (hash) object' do
12
- expect do
13
- Contentful::ContentType.new json_fixture('nyancat')
14
- end.not_to raise_error
15
- end
16
-
17
- it 'can deal with invalid objects' do
18
- expect do
19
- Contentful::ContentType.new
20
- end.not_to raise_error
21
- end
22
- end
23
-
24
- describe 'custom resource' do
25
- class TestCat
26
- include Contentful::Resource
27
-
28
- property :name
29
- property :likes
30
- property :color
31
- property :bestFriend
32
- property :birthday
33
- property :lives
34
- property :image
35
- end
36
-
37
- it 'can create a custom resource' do
38
- cat = TestCat.new("name" => "foobar")
39
- expect(cat).to respond_to(:name)
40
- expect(cat.name).to eq "foobar"
41
- end
42
-
43
- it 'can create a custom resource from API' do
44
- vcr('entry') {
45
- cat = TestCat.new create_client(raw_mode: true).entry('nyancat').object["fields"]
46
- expect(cat.name).to eq "Nyan Cat"
47
- }
48
- end
49
- end
50
-
51
- describe '#request' do
52
- it 'will return a request object, if it has been initialized with one' do
53
- request = Contentful::Request.new(nil, 'content_types')
54
- resource = Contentful::ContentType.new({}, request)
55
- expect(resource.request).to eq request
56
- end
57
- end
58
-
59
- describe '#reload' do
60
- let(:client) { create_client }
61
- let(:entry) { vcr('entry') { client.entry 'nyancat' } }
62
-
63
- it 'triggers the request connected to the resource (again)' do
64
- stub(entry.request).get
65
- entry.reload
66
- expect(entry.request).to have_received.get
67
- end
68
-
69
- it 'the reloaded resource is different from the original one' do
70
- reloaded_entry = vcr('reloaded_entry') { entry.reload }
71
- expect(reloaded_entry).to be_a Contentful::Entry
72
- expect(reloaded_entry).not_to be entry
73
- end
74
-
75
- it 'will return false if #request not available' do
76
- expect(Contentful::ContentType.new({}).reload).to be_falsey
77
- end
78
- end
79
- end