Module: WCC::Contentful
- Defined in:
- lib/wcc/contentful.rb,
lib/wcc/contentful/version.rb,
lib/wcc/contentful/services.rb,
lib/wcc/contentful/exceptions.rb,
lib/wcc/contentful/sync_engine.rb,
lib/wcc/contentful/model_builder.rb,
lib/wcc/contentful/simple_client.rb,
lib/wcc/contentful/instrumentation.rb,
lib/wcc/contentful/webhook_enable_job.rb,
lib/wcc/contentful/content_type_indexer.rb,
lib/wcc/contentful/indexed_representation.rb,
app/controllers/wcc/contentful/webhook_controller.rb,
app/controllers/wcc/contentful/application_controller.rb,
lib/wcc/contentful/engine.rb
Overview
The root namespace of the wcc-contentful gem
Initialize the gem with the ‘configure` and `init` methods inside your initializer.
Defined Under Namespace
Modules: ActiveRecordShim, EntryLocaleTransformer, Event, Helpers, Instrumentation, Middleware, ModelAPI, ModelMethods, ModelSingletonMethods, RSpec, RichText, ServiceAccessors, Store, Test Classes: ActionViewRichTextRenderer, ApplicationController, CircularReferenceError, Configuration, ContentTypeIndexer, ContentTypeNotFoundError, DownloadsSchema, Engine, Events, IndexedRepresentation, InitializationError, Link, LinkVisitor, LocaleMismatchError, Model, ModelBuilder, ResolveError, RichTextRenderer, Services, SimpleClient, SyncEngine, SyncError, WebhookController, WebhookEnableJob
Constant Summary collapse
- VERSION =
'1.7.1'
- SERVICES =
WCC::Contentful::Services.instance_methods(false) .select { |m| WCC::Contentful::Services.instance_method(m).arity == 0 }
Class Attribute Summary collapse
-
.configuration ⇒ Object
readonly
Gets the current configuration, after calling WCC::Contentful.configure.
-
.initialized ⇒ Object
readonly
Returns the value of attribute initialized.
Class Method Summary collapse
-
.configure {|configuration| ... } ⇒ Object
Configures the WCC::Contentful gem to talk to a Contentful space.
- .deprecator ⇒ Object
-
.init! ⇒ Object
Initializes the WCC::Contentful model-space and backing store.
-
.locales ⇒ Object
Gets all queryable locales.
- .logger ⇒ Object
- .types ⇒ Object
Class Attribute Details
.configuration ⇒ Object (readonly)
Gets the current configuration, after calling WCC::Contentful.configure
40 41 42 |
# File 'lib/wcc/contentful.rb', line 40 def configuration @configuration end |
.initialized ⇒ Object (readonly)
Returns the value of attribute initialized.
37 38 39 |
# File 'lib/wcc/contentful.rb', line 37 def initialized @initialized end |
Class Method Details
.configure {|configuration| ... } ⇒ Object
Configures the WCC::Contentful gem to talk to a Contentful space. This must be called first in your initializer, before #init! or accessing the client. See WCC::Contentful::Configuration for all configuration options.
73 74 75 76 77 78 79 80 81 82 |
# File 'lib/wcc/contentful.rb', line 73 def self.configure raise InitializationError, 'Cannot configure after initialization' if @initialized @configuration ||= Configuration.new yield(configuration) configuration.validate! configuration end |
.deprecator ⇒ Object
57 58 59 60 61 62 63 64 65 66 |
# File 'lib/wcc/contentful.rb', line 57 def deprecator @deprecator ||= begin next_major_version = WCC::Contentful::VERSION.split('.').first.next ActiveSupport::Deprecation.new( "#{next_major_version}.0", 'wcc-contentful' ) end end |
.init! ⇒ Object
Initializes the WCC::Contentful model-space and backing store. This populates the WCC::Contentful::Model namespace with Ruby classes that represent content types in the configured Contentful space.
These content types can be queried directly:
WCC::Contentful::Model::Page.find('1xab...')
Or you can inherit from them in your own app:
class Page < WCC::Contentful::Model::Page; end
Page.find_by(slug: 'about-us')
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/wcc/contentful.rb', line 93 def self.init! raise InitializationError, 'Please first call WCC:Contentful.configure' if configuration.nil? raise InitializationError, 'Already Initialized' if @initialized if configuration.update_schema_file == :always || (configuration.update_schema_file == :if_possible && Services.instance.management_client) || (configuration.update_schema_file == :if_missing && !File.exist?(configuration.schema_file)) begin downloader = WCC::Contentful::DownloadsSchema.new downloader.update! if configuration.update_schema_file == :always || downloader.needs_update? rescue WCC::Contentful::SimpleClient::ApiError => e raise InitializationError, e if configuration.update_schema_file == :always Services.instance.logger.warn("Unable to download schema from management API - #{e.}") end end schema = begin JSON.parse(File.read(configuration.schema_file)) if File.exist?(configuration.schema_file) rescue JSON::ParserError Services.instance.warn("Schema file invalid, ignoring it: #{configuration.schema_file}") nil end content_types = schema['contentTypes'] if schema locales = schema['locales'] if schema if !schema && %i[if_possible never].include?(configuration.update_schema_file) # Final fallback - try to grab content types from CDN. We can't update the file # because the CDN doesn't have all the field validation info, but we can at least # build the WCC::Contentful::Model instances. client = Services.instance.management_client || Services.instance.client begin content_types = client.content_types(limit: 1000).items if client rescue WCC::Contentful::SimpleClient::ApiError => e # indicates bad credentials Services.instance.logger.warn("Unable to load content types from API - #{e.}") end end unless content_types raise InitializationError, 'Unable to load content types from schema file or API! ' \ 'Check your access token and space ID.' end # Set the schema on the default WCC::Contentful::Model WCC::Contentful::Model.configure( configuration, schema: WCC::Contentful::ContentTypeIndexer.from_json_schema(content_types).types, services: WCC::Contentful::Services.instance ) # Update the locale fallbacks from the schema file, unless they have already # been configured. locales&.each do |locale_hash| next if @configuration.locale_fallbacks[locale_hash['code']] @configuration.locale_fallbacks[locale_hash['code']] = locale_hash['fallbackCode'] end # Enqueue an initial sync WCC::Contentful::SyncEngine::Job.perform_later if defined?(WCC::Contentful::SyncEngine::Job) @configuration = @configuration.freeze @initialized = true end |
.locales ⇒ Object
Gets all queryable locales.
48 49 50 |
# File 'lib/wcc/contentful.rb', line 48 def locales configuration&.locale_fallbacks end |
.logger ⇒ Object
52 53 54 55 |
# File 'lib/wcc/contentful.rb', line 52 def logger WCC::Contentful.deprecator.warn('Use WCC::Contentful::Services.instance.logger instead') WCC::Contentful::Services.instance.logger end |
.types ⇒ Object
42 43 44 45 |
# File 'lib/wcc/contentful.rb', line 42 def types WCC::Contentful.deprecator.warn('Use WCC::Contentful::Model.schema instead') WCC::Contentful::Model.schema end |