module ActiveContent::Metable

Public Instance Methods

has_meta(field, cast_type, options={}) click to toggle source
# File lib/active_content/metable.rb, line 6
def has_meta(field, cast_type, options={})
  include ActiveDelegate

  assoc_opts = { as: :metable, class_name: ActiveContent.config.metum_class_name, autosave: true, dependent: :destroy }
  assoc_proc = -> { where field: field }
  value_opts = options.merge(to: :"#{field}_metum", prefix: field, alias: field, cast: true, localized: ActiveContent.config.metum_locale_accessors)

  has_one :"#{field}_metum", assoc_proc, assoc_opts
  delegate_attribute :value, cast_type, value_opts

  before_save do
    self.send(:"#{field}_metum=", nil) if send(field).to_s.blank?
  end
end