class Contentful::Management::Client
Client
for interacting with the Contentful
Management
API @see _ www.contentful.com/developers/docs/references/content-management-api/
Constants
- DEFAULT_CONFIGURATION
Default configuration for
Contentful::Management::Client
- RATE_LIMIT_RESET_HEADER_KEY
Rate Limit Reset Header Key
Attributes
Public Class Methods
@param [String] access_token
@param [Hash] configuration @option configuration [String] :api_url @option configuration [String] :api_version @option configuration [String] :default_locale @option configuration [Boolean] :gzip_encoded @option configuration [false, ::Logger] :logger @option configuration [::Logger::DEBUG, ::Logger::INFO, ::Logger::WARN, ::Logger::ERROR] :log_level @option configuration [Boolean] :raise_errors @option configuration [::Array<String>] :dynamic_entries @option configuration [Boolean] :disable_content_type_caching @option configuration [String] :proxy_host @option configuration [Fixnum] :proxy_port @option configuration [String] :proxy_username @option configuration [String] :proxy_username @option configuration [String] :application_name @option configuration [String] :application_version @option configuration [String] :integration_name @option configuration [String] :integration_version
# File lib/contentful/management/client.rb, line 94 def initialize(access_token = nil, configuration = {}) @configuration = default_configuration.merge(configuration) setup_logger @access_token = access_token @dynamic_entry_cache = {} Thread.current[:client] = self update_all_dynamic_entry_cache! end
Public Instance Methods
@private
# File lib/contentful/management/client.rb, line 626 def accept_encoding_header(encoding) Hash['Accept-Encoding', encoding] end
Allows manipulation of api keys in context of the current client Allows listing all api keys for client, creating new and finding one by ID. @see _ README for details.
@return [Contentful::Management::ClientApiKeyMethodsFactory]
# File lib/contentful/management/client.rb, line 169 def api_keys(space_id) ClientApiKeyMethodsFactory.new(self, space_id) end
@private
# File lib/contentful/management/client.rb, line 369 def api_version configuration[:api_version] end
@private
# File lib/contentful/management/client.rb, line 537 def api_version_header Hash['Content-Type', "application/vnd.contentful.management.v#{api_version}+json"] end
Returns the X-Contentful-User-Agent app data @private
# File lib/contentful/management/client.rb, line 557 def app_info { name: configuration[:application_name], version: configuration[:application_version] } end
Allows manipulation of assets in context of the current client Allows listing all assets for client, creating new and finding one by ID. @see _ README for details.
@return [Contentful::Management::ClientAssetMethodsFactory]
# File lib/contentful/management/client.rb, line 196 def assets(space_id, environment_id) ClientAssetMethodsFactory.new(self, space_id, environment_id) end
@private
# File lib/contentful/management/client.rb, line 532 def authentication_header Hash['Authorization', "Bearer #{access_token}"] end
@private
# File lib/contentful/management/client.rb, line 512 def base_url "#{protocol}://#{configuration[:api_url]}/" end
@private
# File lib/contentful/management/client.rb, line 437 def clear_headers self.content_type_id = nil self.version = nil self.organization_id = nil end
@private
# File lib/contentful/management/client.rb, line 621 def content_type_header(content_type_id) Hash['X-Contentful-Content-Type', content_type_id] end
Allows manipulation of content type snapshots in context of the current client Allows listing all content type snapshots for client and finding one by ID. @see _ README for details.
@return [Contentful::Management::ClientSnapshotMethodsFactory]
# File lib/contentful/management/client.rb, line 322 def content_type_snapshots(space_id, environment_id) ClientSnapshotMethodsFactory.new(self, space_id, environment_id, 'content_types') end
Allows manipulation of content types in context of the current client Allows listing all content types for client, creating new and finding one by ID. @see _ README for details.
@return [Contentful::Management::ClientContentTypeMethodsFactory]
# File lib/contentful/management/client.rb, line 214 def content_types(space_id, environment_id) ClientContentTypeMethodsFactory.new(self, space_id, environment_id) end
Returns the X-Contentful-User-Agent @private
# File lib/contentful/management/client.rb, line 586 def contentful_user_agent header = { 'sdk' => sdk_info, 'app' => app_info, 'integration' => integration_info, 'platform' => platform_info, 'os' => os_info } result = [] header.each do |key, values| next unless values[:name] result << format_user_agent_header(key, values) end result.join(' ') end
@private
# File lib/contentful/management/client.rb, line 379 def default_configuration DEFAULT_CONFIGURATION.dup end
@private
# File lib/contentful/management/client.rb, line 522 def default_locale configuration[:default_locale] end
@private
# File lib/contentful/management/client.rb, line 444 def delete(request) execute_request(request) do |url| http_send(:delete, url, { params: request.query }, request_headers(request), proxy_parameters) end end
Allows manipulation of editor interfaces in context of the current client Allows listing all editor interfaces for client and finding one by content type. @see _ README for details.
@return [Contentful::Management::ClientEditorInterfaceMethodsFactory]
# File lib/contentful/management/client.rb, line 259 def editor_interfaces(space_id, environment_id, content_type_id) ClientEditorInterfaceMethodsFactory.new(self, space_id, environment_id, content_type_id) end
Allows manipulation of entries in context of the current client Allows listing all entries for client, creating new and finding one by ID. @see _ README for details.
@return [Contentful::Management::ClientEntryMethodsFactory]
# File lib/contentful/management/client.rb, line 223 def entries(space_id, environment_id) ClientEntryMethodsFactory.new(self, space_id, environment_id) end
Allows manipulation of entry snapshots in context of the current client Allows listing all entry snapshots for client and finding one by ID. @see _ README for details.
@return [Contentful::Management::ClientSnapshotMethodsFactory]
# File lib/contentful/management/client.rb, line 313 def entry_snapshots(space_id, environment_id) ClientSnapshotMethodsFactory.new(self, space_id, environment_id, 'entries') end
Allows manipulation of environments in context of the current client Allows listing all environments for client, creating new and finding one by ID. @see _ README for details.
@return [Contentful::Management::ClientEnvironmentMethodsFactory]
# File lib/contentful/management/client.rb, line 117 def environments(space_id) ClientEnvironmentMethodsFactory.new(self, space_id) end
@private
# File lib/contentful/management/client.rb, line 389 def execute_request(request) retries_left = configuration[:max_rate_limit_retries] host = host_url(request) url = request.absolute? ? request.url : host + request.url begin logger.info(request: { url: url, query: request.query, header: request_headers(request) }) if logger raw_response = yield(url) logger.debug(response: raw_response) if logger result = Response.new(raw_response, request) fail result.object if result.object.is_a?(Error) && configuration[:raise_errors] rescue Contentful::Management::RateLimitExceeded => e reset_time = e.response.raw[RATE_LIMIT_RESET_HEADER_KEY].to_i if should_retry(retries_left, reset_time, configuration[:max_rate_limit_wait]) retries_left -= 1 logger.info(retry_message(retries_left, reset_time)) if logger sleep(reset_time * Random.new.rand(1.0..1.2)) retry end raise ensure clear_headers end result end
Returns the formatted part of the X-Contentful-User-Agent header @private
# File lib/contentful/management/client.rb, line 543 def format_user_agent_header(key, values) header = "#{key} #{values[:name]}" header = "#{header}/#{values[:version]}" if values[:version] "#{header};" end
@private
# File lib/contentful/management/client.rb, line 451 def get(request) execute_request(request) do |url| http_send(:get, url, { params: request.query }, request_headers(request), proxy_parameters) end end
@private
# File lib/contentful/management/client.rb, line 374 def gzip_encoded configuration[:gzip_encoded] end
@private
# File lib/contentful/management/client.rb, line 418 def host_url(request) %r{^spaces/[\w|-|_]+/uploads(?:/[\w|-|_]*)?$} =~ request.url ? uploads_url : base_url end
HTTP Helper Abtracts the Proxy/No-Proxy logic
@param [Symbol] type @param [String] url @param [Hash] params @param [Hash] headers @param [Hash] proxy
@return [HTTP::Response]
# File lib/contentful/management/client.rb, line 505 def http_send(type, url, params, headers, proxy) return proxy_send(type, url, params, headers, proxy) unless proxy[:host].nil? HTTP[headers].public_send(type, url, params) end
Returns the X-Contentful-User-Agent integration data @private
# File lib/contentful/management/client.rb, line 563 def integration_info { name: configuration[:integration_name], version: configuration[:integration_version] } end
Allows manipulation of locales in context of the current client Allows listing all locales for client, creating new and finding one by ID. @see _ README for details.
@return [Contentful::Management::ClientLocaleMethodsFactory]
# File lib/contentful/management/client.rb, line 232 def locales(space_id, environment_id) ClientLocaleMethodsFactory.new(self, space_id, environment_id) end
@private
# File lib/contentful/management/client.rb, line 611 def organization_header(organization_id) Hash['X-Contentful-Organization', organization_id] end
Allows listing all usage periods for organization grouped by organization. @see _ README for details.
@return [Contentful::Management::ClientOrganizationPeriodicUsageMethodsFactory]
# File lib/contentful/management/client.rb, line 143 def organization_periodic_usages(organization_id) ClientOrganizationPeriodicUsageMethodsFactory.new(self, organization_id) end
Allows viewing of organizations in context of the current client Allows listing all organizations for client. @see _ README for details.
@return [Contentful::Management::ClientOrganizationMethodsFactory]
# File lib/contentful/management/client.rb, line 135 def organizations ClientOrganizationMethodsFactory.new(self) end
Returns the X-Contentful-User-Agent os data @private
# File lib/contentful/management/client.rb, line 575 def os_info os_name = case ::RbConfig::CONFIG['host_os'] when /(cygwin|mingw|mswin|windows)/i then 'Windows' when /(darwin|macruby|mac os)/i then 'macOS' when /(linux|bsd|aix|solarix)/i then 'Linux' end { name: os_name, version: Gem::Platform.local.version } end
Allows manipulation of personal access tokens in context of the current client Allows listing all personal access tokens for client, creating new and finding one by ID. @see _ README for details.
@return [Contentful::Management::ClientPersonalAccessTokenMethodsFactory]
# File lib/contentful/management/client.rb, line 187 def personal_access_tokens ClientPersonalAccessTokenMethodsFactory.new(self) end
Returns the X-Contentful-User-Agent platform data @private
# File lib/contentful/management/client.rb, line 569 def platform_info { name: 'ruby', version: RUBY_VERSION } end
@private
# File lib/contentful/management/client.rb, line 458 def post(request) execute_request(request) do |url| data = if url.include?(Client::DEFAULT_CONFIGURATION[:uploads_url]) { body: request.query } else { json: request.query } end http_send(:post, url, data, request_headers(request), proxy_parameters) end end
Allows manipulation of api keys in context of the current client Allows listing all preview api keys for client and finding one by ID. @see _ README for details.
@return [Contentful::Management::ClientPreviewApiKeyMethodsFactory]
# File lib/contentful/management/client.rb, line 178 def preview_api_keys(space_id) ClientPreviewApiKeyMethodsFactory.new(self, space_id) end
@private
# File lib/contentful/management/client.rb, line 527 def protocol configuration[:secure] ? 'https' : 'http' end
@private
# File lib/contentful/management/client.rb, line 652 def proxy_parameters { host: configuration[:proxy_host], port: configuration[:proxy_port], username: configuration[:proxy_username], password: configuration[:proxy_password] } end
Proxy Helper
@param [Symbol] type @param [String] url @param [Hash] params @param [Hash] headers @param [Hash] proxy
@return [HTTP::Response]
# File lib/contentful/management/client.rb, line 486 def proxy_send(type, url, params, headers, proxy) HTTP[headers].via( proxy[:host], proxy[:port], proxy[:username], proxy[:password] ).public_send(type, url, params) end
@private
# File lib/contentful/management/client.rb, line 471 def put(request) execute_request(request) do |url| http_send(:put, url, { json: request.query }, request_headers(request), proxy_parameters) end end
@private
# File lib/contentful/management/client.rb, line 384 def register_dynamic_entry(key, klass) @dynamic_entry_cache[key.to_sym] = klass end
@todo headers should be supplied differently, maybe through the request object. @private
# File lib/contentful/management/client.rb, line 632 def request_headers(request = nil) headers = {} headers.merge! user_agent headers.merge! authentication_header headers.merge! api_version_header headers.merge! organization_header(organization_id) if organization_id headers.merge! version_header(version) if version headers.merge! content_type_header(content_type_id) if content_type_id headers.merge! accept_encoding_header('gzip') if gzip_encoded headers.merge! request.headers unless request.nil? headers end
@private
# File lib/contentful/management/client.rb, line 423 def retry_message(retries_left, reset_time) retry_message = 'Contentful Management API Rate Limit Hit! ' retry_message += "Retrying - Retries left: #{retries_left}" retry_message += "- Time until reset (seconds): #{reset_time}" retry_message end
Allows manipulation of roles in context of the current client Allows listing all roles for client, creating new and finding one by ID. @see _ README for details.
@return [Contentful::Management::ClientRoleMethodsFactory]
# File lib/contentful/management/client.rb, line 241 def roles(space_id) ClientRoleMethodsFactory.new(self, space_id) end
Returns the X-Contentful-User-Agent sdk data @private
# File lib/contentful/management/client.rb, line 551 def sdk_info { name: 'contentful-management.rb', version: ::Contentful::Management::VERSION } end
@private
# File lib/contentful/management/client.rb, line 327 def setup_logger @logger = configuration[:logger] logger.level = configuration[:log_level] if logger end
@private
# File lib/contentful/management/client.rb, line 432 def should_retry(retries_left, reset_time, max_wait) retries_left.positive? && max_wait > reset_time end
Allows manipulation of snapshots in context of the current client Allows listing all snapshots for client and finding one by ID. @see _ README for details.
@return [Contentful::Management::ClientSnapshotMethodsFactory]
# File lib/contentful/management/client.rb, line 304 def snapshots(space_id, environment_id, resource_type = 'entries') ClientSnapshotMethodsFactory.new(self, space_id, environment_id, resource_type) end
Allows manipulation of space memberships in context of the current client Allows listing all space memberships for client, creating new and finding one by ID. @see _ README for details.
@return [Contentful::Management::ClientSpaceMembershipMethodsFactory]
# File lib/contentful/management/client.rb, line 126 def space_memberships(space_id) ClientSpaceMembershipMethodsFactory.new(self, space_id) end
Allows listing all usage periods for organization grouped by space. @see _ README for details.
@return [Contentful::Management::ClientSpacePeriodicUsageMethodsFactory]
# File lib/contentful/management/client.rb, line 151 def space_periodic_usages(organization_id) ClientSpacePeriodicUsageMethodsFactory.new(self, organization_id) end
Allows manipulation of spaces in context of the current client Allows listing all spaces for client, creating new and finding one by ID. @see _ README for details.
@return [Contentful::Management::ClientSpaceMethodsFactory]
# File lib/contentful/management/client.rb, line 108 def spaces ClientSpaceMethodsFactory.new(self) end
Allows manipulation of UI extensions in context of the current client Allows listing all UI extensions for client, creating new and finding one by ID. @see _ README for details.
@return [Contentful::Management::ClientUIExtensionMethodsFactory]
# File lib/contentful/management/client.rb, line 250 def ui_extensions(space_id, environment_id) ClientUIExtensionMethodsFactory.new(self, space_id, environment_id) end
@private
# File lib/contentful/management/client.rb, line 333 def update_all_dynamic_entry_cache! return if configuration[:dynamic_entries].empty? || configuration[:disable_content_type_caching] environments = configuration[:dynamic_entries].map do |space_id, environment_id| ::Contentful::Management::Environment.find(self, space_id, environment_id) end update_dynamic_entry_cache_for_environments!(environments) end
@private
# File lib/contentful/management/client.rb, line 362 def update_dynamic_entry_cache!(content_types) content_types.each do |ct| @dynamic_entry_cache[ct.id.to_sym] = DynamicEntry.create(ct, self) end end
Use this method together with the client’s :dynamic_entries configuration. See README for details. @private
# File lib/contentful/management/client.rb, line 355 def update_dynamic_entry_cache_for_environment!(environment) return if configuration[:disable_content_type_caching] update_dynamic_entry_cache!(environment.content_types.all) end
@private
# File lib/contentful/management/client.rb, line 344 def update_dynamic_entry_cache_for_environments!(environments) return if configuration[:disable_content_type_caching] environments.each do |environment| update_dynamic_entry_cache_for_environment!(environment) end end
Allows manipulation of uploads in context of the current client Allows creating new and finding uploads by ID. @see _ README for details.
@return [Contentful::Management::ClientUploadMethodsFactory]
# File lib/contentful/management/client.rb, line 295 def uploads(space_id) ClientUploadMethodsFactory.new(self, space_id) end
@private
# File lib/contentful/management/client.rb, line 517 def uploads_url "#{protocol}://#{configuration[:uploads_url]}/" end
@private
# File lib/contentful/management/client.rb, line 606 def user_agent Hash['X-Contentful-User-Agent', contentful_user_agent] end
Allows viewing of users in context of the current client Allows listing all users for client. @see _ README for details.
@return [Contentful::Management::ClientUserMethodsFactory]
# File lib/contentful/management/client.rb, line 160 def users ClientUserMethodsFactory.new(self) end
@private
# File lib/contentful/management/client.rb, line 616 def version_header(version) Hash['X-Contentful-Version', version] end
Allows manipulation of webhook calls in context of the current client Allows listing all webhook call details for client and finding one by ID. @see _ README for details.
@return [Contentful::Management::ClientWebhookCallMethodsFactory]
# File lib/contentful/management/client.rb, line 277 def webhook_calls(space_id, webhook_id) ClientWebhookCallMethodsFactory.new(self, space_id, webhook_id) end
Allows manipulation of webhook health in context of the current client Allows listing all webhook health details for client and finding one by ID. @see _ README for details.
@return [Contentful::Management::ClientWebhookHealthMethodsFactory]
# File lib/contentful/management/client.rb, line 286 def webhook_health(space_id) ClientWebhookHealthMethodsFactory.new(self, space_id) end
Allows manipulation of webhooks in context of the current client Allows listing all webhooks for client, creating new and finding one by ID. @see _ README for details.
@return [Contentful::Management::ClientWebhookMethodsFactory]
# File lib/contentful/management/client.rb, line 268 def webhooks(space_id) ClientWebhookMethodsFactory.new(self, space_id) end