contentful-management 2.11.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +36 -0
  3. data/README.md +30 -13
  4. data/contentful-management.gemspec +1 -1
  5. data/lib/contentful/management/asset.rb +2 -0
  6. data/lib/contentful/management/client.rb +10 -12
  7. data/lib/contentful/management/{client_usage_period_methods_factory.rb → client_organization_periodic_usage_methods_factory.rb} +3 -4
  8. data/lib/contentful/management/{client_api_usage_methods_factory.rb → client_space_periodic_usage_methods_factory.rb} +4 -11
  9. data/lib/contentful/management/entry.rb +16 -12
  10. data/lib/contentful/management/field.rb +3 -1
  11. data/lib/contentful/management/organization.rb +18 -8
  12. data/lib/contentful/management/{api_usage.rb → organization_periodic_usage.rb} +13 -18
  13. data/lib/contentful/management/organization_user_methods_factory.rb +18 -0
  14. data/lib/contentful/management/resource.rb +3 -2
  15. data/lib/contentful/management/resource/metadata.rb +44 -0
  16. data/lib/contentful/management/resource_builder.rb +8 -6
  17. data/lib/contentful/management/space.rb +10 -0
  18. data/lib/contentful/management/{usage_period.rb → space_periodic_usage.rb} +12 -9
  19. data/lib/contentful/management/space_user_methods_factory.rb +19 -0
  20. data/lib/contentful/management/tag.rb +14 -0
  21. data/lib/contentful/management/user.rb +7 -1
  22. data/lib/contentful/management/version.rb +1 -1
  23. data/spec/fixtures/vcr_cassettes/asset/issue_219.yml +442 -0
  24. data/spec/fixtures/vcr_cassettes/entry/issue_215_1.yml +905 -0
  25. data/spec/fixtures/vcr_cassettes/entry/issue_215_2.yml +899 -0
  26. data/spec/fixtures/vcr_cassettes/entry/issue_215_3.yml +893 -0
  27. data/spec/fixtures/vcr_cassettes/entry/issue_219.yml +535 -0
  28. data/spec/fixtures/vcr_cassettes/organization/user.yml +238 -0
  29. data/spec/fixtures/vcr_cassettes/organization_periodic_usage/all.yml +368 -0
  30. data/spec/fixtures/vcr_cassettes/organization_periodic_usage/filters.yml +167 -0
  31. data/spec/fixtures/vcr_cassettes/space/user.yml +254 -0
  32. data/spec/fixtures/vcr_cassettes/space_periodic_usage/all.yml +6800 -0
  33. data/spec/fixtures/vcr_cassettes/space_periodic_usage/filters.yml +1976 -0
  34. data/spec/lib/contentful/management/asset_spec.rb +31 -0
  35. data/spec/lib/contentful/management/entry_spec.rb +77 -0
  36. data/spec/lib/contentful/management/organization_periodic_usage_spec.rb +36 -0
  37. data/spec/lib/contentful/management/organization_spec.rb +20 -0
  38. data/spec/lib/contentful/management/space_periodic_usage_spec.rb +36 -0
  39. data/spec/lib/contentful/management/space_spec.rb +20 -0
  40. metadata +43 -21
  41. data/spec/fixtures/vcr_cassettes/api_usage/all.yml +0 -155
  42. data/spec/fixtures/vcr_cassettes/usage_period/all.yml +0 -114
  43. data/spec/lib/contentful/management/api_usage_spec.rb +0 -28
  44. data/spec/lib/contentful/management/usage_period_spec.rb +0 -27
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f6053a222f0246ee05c699c0f53a7a0c56834aff0dfb109dbe8e2e00336cafb7
4
- data.tar.gz: 7ea4cad8b0090a73e11d1ce14058d84ad8aa840d928335d12627f11441c8266d
3
+ metadata.gz: 85f13e855cf6a3d868bb24e36b3bc311f05a5df0206ae6d66a5f9b1d6ba5a94a
4
+ data.tar.gz: 979be40c83e892575ccebbd1fcd2a41f2da39a87992d43994d31d999feae33e8
5
5
  SHA512:
6
- metadata.gz: 3be70b623839233a8c98f4c8442fdb1e5d4b24a8d67852181597f90a8d5cb443b83bd6f8a27fa0a66e10a9b393d490d96cc777c02be54f2fcd99cec2685d0022
7
- data.tar.gz: 98b4aaa70e1594f19d113893c26ab6d53c292e105591c21e51c21095a0c6f79896d396f0ca55bbab54cc9f52809595fb9c9311b2a1ec510bd4a9cda0130726df
6
+ metadata.gz: 2e724340067a6e209d5387388e6c05e71fec59f9211cbcf60e868d79a439fe1a2f76ebfb36b936e7be61956be2b2fe3ee0c859d2f1125c48ccaaa007acdadcd7
7
+ data.tar.gz: e95297441626f040734f1e0719f748816ae76b72afe8c57a4f9705d4afde5ed568cfffce73f9ec438cc8ef92299d1ad5b6328d6ca29c0a4231e43ec54e3b55b5
data/CHANGELOG.md CHANGED
@@ -2,6 +2,42 @@
2
2
 
3
3
  ## Master
4
4
 
5
+ ## 3.0.0
6
+ ### Fixed
7
+ * Added support for Tags metadata
8
+
9
+ ### Changed
10
+
11
+ **BREAKING CHANGES**:
12
+ * Introduction of new top-level tags `metadata` property in api response.
13
+
14
+ ## 2.13.1
15
+ ### Fixed
16
+ * Fixed an issue when loading entries or assets that included tags. [#219](https://github.com/contentful/contentful-management.rb/issues/219)
17
+
18
+ ## 2.13.0
19
+ ### Fixed
20
+ * Fixed a possible validation error when submitting a content type. [#218](https://github.com/contentful/contentful-management.rb/pull/218)
21
+
22
+ ### Added
23
+ * Added support for Users API. [#217](https://github.com/contentful/contentful-management.rb/pull/217)
24
+
25
+ ## 2.12.1
26
+
27
+ ### Fixed
28
+ * Fixed an issue where JSON fields with top-level arrays were not properly parsed. [#215](https://github.com/contentful/contentful-management.rb/issues/215)
29
+
30
+ ## 2.12.0
31
+
32
+ *Note*: Only a minor change because the removed feature was *Alpha*.
33
+
34
+ ### Added
35
+ * Add `OrganizationPeriodicUsage`, `Client#organization_periodic_usages` and `Organization#periodic_usages`.
36
+ * Add `SpacePeriodicUsage`, `Client#space_periodic_usages` and `Organization#space_periodic_usages`.
37
+
38
+ ### Removed
39
+ * Removed now deprecated Alpha Usage APIs, which have been superseeded by the new APIs added.
40
+
5
41
  ## 2.11.0
6
42
  ### Added
7
43
  * Added support for Rich Text specific validations. [#200](https://github.com/contentful/contentful-management.rb/pull/200)
data/README.md CHANGED
@@ -827,40 +827,46 @@ Retrieving all organization details:
827
827
  organizations = client.organizations.all
828
828
  ```
829
829
 
830
- ### Usage Periods (ALPHA)
830
+ ### Usage
831
831
 
832
832
  *Note*: This feature is available only to Commited v2 customers.
833
833
 
834
- Retrieving all Usage Periods for an Organizations you belong to:
834
+ #### Organization Periodic Usage
835
+
836
+ Retrieving all API Usage statistics for an Organization during a given usage period, broken down by organization for all APIs:
835
837
 
836
838
  ```ruby
837
- usage_periods = client.usage_periods('organization_id').all
839
+ # Optionally, you can pass the metric, start and end date filters
840
+ usage = client.organization_periodic_usages('organization_id').all
841
+
842
+ # For example only CDA and CMA metrics from yesterday onwards
843
+ usage = client.organization_periodic_usages('organization_id').all('metric[in]': ['cda', 'cma'], startDate: (Date.today - 1).iso8601)
838
844
  ```
839
845
 
840
846
  Alternatively, if you have an already fetched organization:
841
847
 
842
848
  ```ruby
843
- usage_periods = organization.usage_periods().all()
849
+ # Breaking down CMA usage by space, for a given period.
850
+ usage = organization.periodic_usages.all
844
851
  ```
845
852
 
846
- ### API Usage (ALPHA)
853
+ #### Space Periodic Usage
847
854
 
848
- *Note*: This feature is available only to Commited v2 customers.
849
-
850
- Retrieving all API Usage statistics for an Organizations during a given usage period, broken down by organization for all APIs:
855
+ Retrieving all API Usage statistics for an Organization during a given usage period, broken down by space for all APIs:
851
856
 
852
857
  ```ruby
853
- # Valid usage types are by 'organization' and by 'space'.
854
- # Usage period IDs are numerical and can be fetched from the Usage Periods API.
855
- # Valid API breakdowns are: 'cda', 'cpa', 'cma' or 'all_apis'.
856
- usage = client.api_usage('organization_id').all('organization', usage_period_id, 'all_apis')
858
+ # Optionally, you can pass the metric, start and end date filters
859
+ usage = client.space_periodic_usages('organization_id').all
860
+
861
+ # For example only CDA and CMA metrics from yesterday onwards
862
+ usage = client.space_periodic_usages('organization_id').all('metric[in]': ['cda', 'cma'], startDate: (Date.today - 1).iso8601)
857
863
  ```
858
864
 
859
865
  Alternatively, if you have an already fetched organization:
860
866
 
861
867
  ```ruby
862
868
  # Breaking down CMA usage by space, for a given period.
863
- usage = organization.api_usage().all('space', usage_period_id, 'cma')
869
+ usage = organization.space_periodic_usages.all
864
870
  ```
865
871
 
866
872
  ### Users
@@ -871,6 +877,17 @@ Retrieving current user details:
871
877
  user = client.users.me
872
878
  ```
873
879
 
880
+ Retrieving one user by ID from the space:
881
+
882
+ ```ruby
883
+ user = blog_space.users.find(user_id)
884
+ ```
885
+
886
+ Retrieving one user by ID from an organization:
887
+
888
+ ```ruby
889
+ user = organization.users.find('user_id')
890
+ ```
874
891
  ### UI Extensions
875
892
 
876
893
  Retrieving all UI extensions from the environment:
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.add_dependency 'json', '>= 1.8', '< 3.0'
23
23
 
24
24
  spec.add_development_dependency 'bundler'
25
- spec.add_development_dependency 'rake', '< 11.0'
25
+ spec.add_development_dependency 'rake', '>= 12.3.3'
26
26
  spec.add_development_dependency 'public_suffix', '< 1.5'
27
27
  spec.add_development_dependency 'rspec', '~> 3'
28
28
  spec.add_development_dependency 'rspec-its'
@@ -1,6 +1,7 @@
1
1
  require_relative 'resource'
2
2
  require_relative 'resource/fields'
3
3
  require_relative 'resource/archiver'
4
+ require_relative 'resource/metadata'
4
5
  require_relative 'resource/publisher'
5
6
  require_relative 'resource/asset_fields'
6
7
  require_relative 'resource/environment_aware'
@@ -15,6 +16,7 @@ module Contentful
15
16
  include Contentful::Management::Resource
16
17
  include Contentful::Management::Resource::Fields
17
18
  include Contentful::Management::Resource::Archiver
19
+ include Contentful::Management::Resource::Metadata
18
20
  include Contentful::Management::Resource::Refresher
19
21
  include Contentful::Management::Resource::Publisher
20
22
  include Contentful::Management::Resource::SystemProperties
@@ -20,9 +20,7 @@ require 'contentful/management/client_upload_methods_factory'
20
20
  require 'contentful/management/client_api_key_methods_factory'
21
21
  require 'contentful/management/client_webhook_methods_factory'
22
22
  require 'contentful/management/client_snapshot_methods_factory'
23
- require 'contentful/management/client_api_usage_methods_factory'
24
23
  require 'contentful/management/client_environment_methods_factory'
25
- require 'contentful/management/client_usage_period_methods_factory'
26
24
  require 'contentful/management/client_organization_methods_factory'
27
25
  require 'contentful/management/client_content_type_methods_factory'
28
26
  require 'contentful/management/client_ui_extension_methods_factory'
@@ -31,7 +29,9 @@ require 'contentful/management/client_webhook_health_methods_factory'
31
29
  require 'contentful/management/client_preview_api_key_methods_factory'
32
30
  require 'contentful/management/client_space_membership_methods_factory'
33
31
  require 'contentful/management/client_editor_interface_methods_factory'
32
+ require 'contentful/management/client_space_periodic_usage_methods_factory'
34
33
  require 'contentful/management/client_personal_access_tokens_methods_factory'
34
+ require 'contentful/management/client_organization_periodic_usage_methods_factory'
35
35
 
36
36
  module Contentful
37
37
  module Management
@@ -133,22 +133,20 @@ module Contentful
133
133
  ClientOrganizationMethodsFactory.new(self)
134
134
  end
135
135
 
136
- # Allows viewing of usage periods in context of the current client
137
- # Allows listing all usage periods for client.
136
+ # Allows listing all usage periods for organization grouped by organization.
138
137
  # @see _ README for details.
139
138
  #
140
- # @return [Contentful::Management::ClientUsagePeriodMethodsFactory]
141
- def usage_periods(organization_id)
142
- ClientUsagePeriodMethodsFactory.new(self, organization_id)
139
+ # @return [Contentful::Management::ClientOrganizationPeriodicUsageMethodsFactory]
140
+ def organization_periodic_usages(organization_id)
141
+ ClientOrganizationPeriodicUsageMethodsFactory.new(self, organization_id)
143
142
  end
144
143
 
145
- # Allows viewing of api usage in context of the current client
146
- # Allows listing all api usage for client.
144
+ # Allows listing all usage periods for organization grouped by space.
147
145
  # @see _ README for details.
148
146
  #
149
- # @return [Contentful::Management::ClientApiUsageMethodsFactory]
150
- def api_usage(organization_id)
151
- ClientApiUsageMethodsFactory.new(self, organization_id)
147
+ # @return [Contentful::Management::ClientSpacePeriodicUsageMethodsFactory]
148
+ def space_periodic_usages(organization_id)
149
+ ClientSpacePeriodicUsageMethodsFactory.new(self, organization_id)
152
150
  end
153
151
 
154
152
  # Allows viewing of users in context of the current client
@@ -2,9 +2,9 @@ require_relative 'client_association_methods_factory'
2
2
 
3
3
  module Contentful
4
4
  module Management
5
- # Wrapper for Usage Period for usage from within Client
5
+ # Wrapper for Organization Periodic Usages for usage from within Client
6
6
  # @private
7
- class ClientUsagePeriodMethodsFactory
7
+ class ClientOrganizationPeriodicUsageMethodsFactory
8
8
  include Contentful::Management::ClientAssociationMethodsFactory
9
9
 
10
10
  def initialize(client, organization_id)
@@ -17,8 +17,7 @@ module Contentful
17
17
  {
18
18
  organization_id: @organization_id
19
19
  },
20
- params,
21
- 'x-contentful-enable-alpha-feature' => 'usage-insights'
20
+ params
22
21
  )
23
22
  end
24
23
 
@@ -2,9 +2,9 @@ require_relative 'client_association_methods_factory'
2
2
 
3
3
  module Contentful
4
4
  module Management
5
- # Wrapper for API Usage for usage from within Client
5
+ # Wrapper for Space Periodic Usages for usage from within Client
6
6
  # @private
7
- class ClientApiUsageMethodsFactory
7
+ class ClientSpacePeriodicUsageMethodsFactory
8
8
  include Contentful::Management::ClientAssociationMethodsFactory
9
9
 
10
10
  def initialize(client, organization_id)
@@ -12,19 +12,12 @@ module Contentful
12
12
  @organization_id = organization_id
13
13
  end
14
14
 
15
- def all(usage_type, usage_period_id, api, params = {})
16
- mandatory_params = {
17
- 'filters[usagePeriod]' => usage_period_id,
18
- 'filters[metric]' => api
19
- }
20
-
15
+ def all(params = {})
21
16
  @resource_requester.all(
22
17
  {
23
- usage_type: usage_type,
24
18
  organization_id: @organization_id
25
19
  },
26
- mandatory_params.merge(params),
27
- 'x-contentful-enable-alpha-feature' => 'usage-insights'
20
+ params
28
21
  )
29
22
  end
30
23
 
@@ -1,6 +1,7 @@
1
1
  require_relative 'resource'
2
2
  require_relative 'resource/fields'
3
3
  require_relative 'resource/archiver'
4
+ require_relative 'resource/metadata'
4
5
  require_relative 'resource/publisher'
5
6
  require_relative 'resource_requester'
6
7
  require_relative 'resource/field_aware'
@@ -15,6 +16,7 @@ module Contentful
15
16
  # @see _ https://www.contentful.com/developers/documentation/content-management-api/#resources-entries
16
17
  class Entry
17
18
  include Contentful::Management::Resource
19
+ include Contentful::Management::Resource::Metadata
18
20
  extend Contentful::Management::Resource::EntryFields
19
21
  include Contentful::Management::Resource::SystemProperties
20
22
 
@@ -95,18 +97,20 @@ module Contentful
95
97
 
96
98
  # @private
97
99
  def self.parse_objects_array(attributes)
98
- attributes.each_with_object([]) do |attr, arr|
99
- if attr.is_a? Entry
100
- arr << hash_with_link_object('Entry', attr)
101
- elsif attr.is_a? Asset
102
- arr << hash_with_link_object('Asset', attr)
103
- elsif attr.is_a? Hash
104
- arr << attr
105
- elsif attr.class.ancestors.map(&:to_s).include?('Contentful::Entry')
106
- arr << hash_with_link_object('Entry', attr)
107
- elsif attr.class.ancestors.map(&:to_s).include?('Contentful::Asset')
108
- arr << hash_with_link_object('Asset', attr)
109
- end
100
+ attributes.each_with_object([]) do |attribute, result|
101
+ result << if attribute.is_a? Entry
102
+ hash_with_link_object('Entry', attribute)
103
+ elsif attribute.is_a? Asset
104
+ hash_with_link_object('Asset', attribute)
105
+ elsif attribute.is_a? Hash
106
+ attribute
107
+ elsif attribute.class.ancestors.map(&:to_s).include?('Contentful::Entry')
108
+ hash_with_link_object('Entry', attribute)
109
+ elsif attribute.class.ancestors.map(&:to_s).include?('Contentful::Asset')
110
+ hash_with_link_object('Asset', attribute)
111
+ else
112
+ attribute
113
+ end
110
114
  end
111
115
  end
112
116
 
@@ -87,7 +87,9 @@ module Contentful
87
87
 
88
88
  def validations_to_hash(validations)
89
89
  validations.each_with_object([]) do |validation, results|
90
- results << validation.properties_to_hash
90
+ validation_hash = validation.properties_to_hash
91
+
92
+ results << validation.properties_to_hash if Field.value_exists?(validation_hash)
91
93
  end
92
94
  end
93
95
  end
@@ -1,4 +1,5 @@
1
1
  require_relative 'resource'
2
+ require 'contentful/management/organization_user_methods_factory'
2
3
 
3
4
  module Contentful
4
5
  module Management
@@ -16,20 +17,29 @@ module Contentful
16
17
  'organizations'
17
18
  end
18
19
 
19
- # Allows listing all usage periods for organization.
20
+ # Allows listing all usage periods for organization grouped by organization or space.
20
21
  # @see _ README for details.
21
22
  #
22
- # @return [Contentful::Management::ClientApiUsageMethodsFactory]
23
- def usage_periods
24
- ClientApiUsageMethodsFactory.new(client, id)
23
+ # @return [Contentful::Management::ClientOrganizationPeriodicUsageMethodsFactory]
24
+ def periodic_usages
25
+ ClientOrganizationPeriodicUsageMethodsFactory.new(client, id)
25
26
  end
26
27
 
27
- # Allows listing all api usage for organization.
28
+ # Allows listing all usage periods for organization grouped by organization or space.
28
29
  # @see _ README for details.
29
30
  #
30
- # @return [Contentful::Management::ClientApiUsageMethodsFactory]
31
- def api_usage
32
- ClientApiUsageMethodsFactory.new(client, id)
31
+ # @return [Contentful::Management::ClientSpacePeriodicUsageMethodsFactory]
32
+ def space_periodic_usages
33
+ ClientSpacePeriodicUsageMethodsFactory.new(client, id)
34
+ end
35
+
36
+ # Allows viewing of users in context of an organization
37
+ # Allows listing all users for an organization, and finding one by ID.
38
+ # @see _ README for details.
39
+ #
40
+ # @return [Contentful::Management::OrganizationUserMethodsFactory]
41
+ def users
42
+ OrganizationUserMethodsFactory.new(client, id)
33
43
  end
34
44
  end
35
45
  end
@@ -2,40 +2,35 @@ require_relative 'resource'
2
2
 
3
3
  module Contentful
4
4
  module Management
5
- # Resource class for ApiUsage.
6
- # @see _ https://www.contentful.com/developers/docs/references/content-management-api/#/reference/api-usages
7
- class ApiUsage
5
+ # Resource class for OrganizationPeriodicUsage.
6
+ # @see _ https://www.contentful.com/developers/docs/references/content-management-api/#/reference/usage/organization-usage/get-organization-usage/console/curl
7
+ class OrganizationPeriodicUsage
8
8
  include Contentful::Management::Resource
9
9
  include Contentful::Management::Resource::Refresher
10
10
  include Contentful::Management::Resource::SystemProperties
11
11
 
12
- property :unitOfMeasure
13
- property :interval
14
- property :usage
15
- property :startDate, :date
16
- property :endDate, :date
12
+ property :metric, :string
13
+ property :usage, :integer
14
+ property :usagePerDay, :object
15
+ property :unitOfMeasure, :string
16
+ property :dateRange, :object
17
17
 
18
18
  # @private
19
19
  def self.build_endpoint(endpoint_options)
20
20
  organization_id = endpoint_options[:organization_id]
21
- usage_type = endpoint_options[:usage_type]
22
21
 
23
- "organizations/#{organization_id}/usages/#{usage_type}"
22
+ "organizations/#{organization_id}/organization_periodic_usages"
24
23
  end
25
24
 
26
- # Gets all api usage statistics for a given organization and usage type, filtered by usage period and api.
25
+ # Gets all organization periodic usages for a given organization.
27
26
  #
28
27
  # @param [Contentful::Management::Client] client
29
28
  # @param [String] organization_id
30
- # @param [String] usage_type
31
- # @param [Integer] usage_period_id
32
- # @param [String] api
33
29
  # @param [Hash] params
34
30
  #
35
- # @return [Contentful::Management::Array<Contentful::Management::ApiUsage>]
36
- # rubocop:disable Metrics/ParameterLists
37
- def self.all(client, organization_id, usage_type, usage_period_id, api, params = {})
38
- ClientApiUsageMethodsFactory.new(client, organization_id).all(usage_type, usage_period_id, api, params)
31
+ # @return [Contentful::Management::Array<Contentful::Management::OrganizationPeriodicUsage>]
32
+ def self.all(client, organization_id, params = {})
33
+ ClientOrganizationPeriodicUsageMethodsFactory.new(client, organization_id).all(params)
39
34
  end
40
35
 
41
36
  # Not supported
@@ -0,0 +1,18 @@
1
+ module Contentful
2
+ module Management
3
+ # Wrapper for Users API for usage from within Organization
4
+ # @private
5
+ class OrganizationUserMethodsFactory
6
+ attr_reader :client
7
+
8
+ def initialize(client, organization_id)
9
+ @client = client
10
+ @organization_id = organization_id
11
+ end
12
+
13
+ def find(id)
14
+ User.find(client, nil, nil, id, @organization_id)
15
+ end
16
+ end
17
+ end
18
+ end