# frozen_string_literal: true module C module Imageable extend ActiveSupport::Concern included do has_many :images, as: :imageable, autosave: true, dependent: :destroy has_one :feature_image, -> { where(featured_image: true) }, as: :imageable, class_name: 'C::Image' has_one :preview_image, -> { where(preview_image: true) }, as: :imageable, class_name: 'C::Image' accepts_nested_attributes_for :images, allow_destroy: true def new_images=(val) Array(val).each do |image| images.build(image: image) end end def feature_image(fallback=nil) super&.image || images.first&.image || fallback || '' end def feature_image? images.where(featured_image: true).exists? end def preview_image(fallback=nil) super&.image || images.first&.image || fallback || '' end def teaser_image(fallback=nil) preview_image fallback end def preview_image? images.where(preview_image: true).exists? end def teaser_image? preview_image? end end class_methods do def asd; end IMAGEABLE_ATTRIBUTES = [images_attributes: [:_destroy, :id, :alt, :caption, :image, :image_cache, :feature_image, :preview_image, :weight, :featured_image]].freeze end end end