module CustomAttributes::ActsAsCustomizable::ClassMethods

Public Instance Methods

acts_as_customizable(options = {}) click to toggle source
# File lib/custom_attributes/acts_as/acts_as_customizable.rb, line 9
def acts_as_customizable(options = {})
  cattr_accessor :customizable_options

  self.customizable_options = options
  has_many :custom_values, -> { includes(:custom_field).order("#{CustomField.table_name}.position") },
           as: :customizable,
           inverse_of: :customizable,
           dependent: :delete_all,
           validate: false

  include CustomAttributes::ActsAsCustomizable::InstanceMethods

  validate :validate_custom_field_values
  after_save :save_custom_field_values
end
available_custom_fields() click to toggle source
# File lib/custom_attributes/acts_as/acts_as_customizable.rb, line 37
def available_custom_fields
  CustomField.where("model_type = '#{self.name}CustomField'").sorted.to_a
end
default_fields() click to toggle source
# File lib/custom_attributes/acts_as/acts_as_customizable.rb, line 41
def default_fields
  []
end
index_custom_values(context) click to toggle source

Helper function to index custom values Use this in mapping context and pass `self` as parameter

# File lib/custom_attributes/acts_as/acts_as_customizable.rb, line 27
def index_custom_values(context)
  return unless context.class.name == 'Elasticsearch::Model::Indexing::Mappings'

  context.indexes :visible_in_search, type: 'boolean'
  context.indexes :custom_field_values, type: 'nested' do
    context.indexes :value, type: 'text', fields: { raw: { type: 'keyword' } }
    context.indexes :custom_field_id, type: 'integer'
  end
end