Sha256: 2eb066fed579b5c42e4b72a9f2c8e6414161a0a5bda4237b885cb66794ff5b83

Contents?: true

Size: 1.93 KB

Versions: 2

Compression:

Stored size: 1.93 KB

Contents

module Pulitzer
  class PostTypeContentElementType < ActiveRecord::Base
    include Pulitzer::PostTypeElement

    belongs_to :post_type_version
    belongs_to :content_element_type
    has_many :styles

    before_save :handle_sort_order

    delegate :type, :image_type?, :has_styles?, to: :content_element_type

    default_scope { order(sort_order: :asc) }

    validates :label, presence: true

    Any_clickable = OpenStruct.new
    Any_clickable.gid = 'any'
    Any_clickable.name = 'Any'
    Any_clickable.freeze

    URL_clickable = OpenStruct.new
    URL_clickable.gid = 'url'
    URL_clickable.name = 'URL'
    URL_clickable.freeze

    def self.clickable_kinds
      [Any_clickable] + Pulitzer::CustomOptionList.all.to_a + [URL_clickable]
    end

    def clickable_kind_display
      GlobalID::Locator.locate(clickable_kind)&.name || clickable_kind.humanize
    end

    def any_clickable_kind?
      'any' == clickable_kind
    end

    def url_clickable_kind?
      'url' == clickable_kind
    end

    def clickable_kinds
      Pulitzer::CustomOptionList.all.to_a + [URL_clickable]
    end

    def custom_clickable_kinds
      Pulitzer::CustomOptionList.all.to_a
    end

    def custom_option_list
      GlobalID::Locator.locate(clickable_kind)
    end

    def custom_options
      custom_option_list&.custom_options
    end

    def type_specific_display
      case type
      when :image
        "#{height}x#{width}"
      when :text
        text_editor_display
      when :clickable
        clickable_kind_display
      else
        ''
      end
    end

    def text_editor_display
      case text_editor
      when 'None'
        'no editor'
      else
        text_editor
      end
    end

    def first_style
      styles.first
    end

    def clone_me
      clone_attrs = self.attributes.dup
      clone_attrs.delete 'id'
      clone_attrs.delete 'post_type_version_id'
      Pulitzer::PostTypeContentElementType.new(clone_attrs)
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
pulitzer-0.15.12 app/models/pulitzer/post_type_content_element_type.rb
pulitzer-0.15.11 app/models/pulitzer/post_type_content_element_type.rb