Sha256: c1c0c67b9d217f2d1ae37fe388f9f1b461db517563cbd1debf66c566504a3ae6

Contents?: true

Size: 1.73 KB

Versions: 5

Compression:

Stored size: 1.73 KB

Contents

# frozen_string_literal: true

module WCC::Contentful::ActiveRecordShim
  extend ActiveSupport::Concern

  def attributes
    @attributes ||= to_h['fields'].tap { |fields| fields['id'] = id }
  end

  def cache_key
    return cache_key_with_version unless ActiveRecord::Base.try(:cache_versioning) == true

    "#{self.class.model_name}/#{id}"
  end

  def cache_key_with_version
    "#{self.class.model_name}/#{id}-#{cache_version}"
  end

  def cache_version
    sys.revision.to_s
  end

  included do
    unless defined?(ActiveRecord)
      raise NotImplementedError, 'WCC::Contentful::ActiveRecordShim requires ActiveRecord to be loaded'
    end
  end

  class_methods do
    def model_name
      WCC::Contentful::Helpers.constant_from_content_type(content_type)
    end

    def const_get(name)
      # Because our pattern is `class MyModel < WCC::Contentful::Model::MyModel`
      # if you do MyModel.const_get('MyModel') Algolia expects you to return
      # ::MyModel not WCC::Contentful::Model::MyModel
      return self if name == model_name

      super
    end

    def table_name
      model_name.tableize
    end

    def unscoped
      yield
    end

    def find_in_batches(options, &block)
      options ||= {}
      batch_size = options.delete(:batch_size) || 1000
      filter = {
        options: {
          limit: batch_size,
          skip: options.delete(:start) || 0,
          include: options.delete(:include) || 1
        }
      }

      find_all(filter).each_slice(batch_size, &block)
    end

    def where(**conditions)
      # TODO: return a Query object that implements more of the ActiveRecord query interface
      # https://guides.rubyonrails.org/active_record_querying.html#conditions
      find_all(conditions)
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
wcc-contentful-1.0.1 lib/wcc/contentful/active_record_shim.rb
wcc-contentful-1.0.0 lib/wcc/contentful/active_record_shim.rb
wcc-contentful-1.0.0.pre.rc3 lib/wcc/contentful/active_record_shim.rb
wcc-contentful-1.0.0.pre.rc2 lib/wcc/contentful/active_record_shim.rb
wcc-contentful-1.0.0.pre.rc1 lib/wcc/contentful/active_record_shim.rb