Sha256: 75306621776a7440937305079dca8de0ccad3a8172ad38ea3e039d0deb2ed17a

Contents?: true

Size: 1.62 KB

Versions: 1

Compression:

Stored size: 1.62 KB

Contents

# frozen_string_literal: true

class FeatureType
  include EnumField::DefineEnum

  attr_reader :code, :type, :options

  def initialize(code, type = :default, options = {})
    @code = code.to_sym
    @type = type.to_sym
    @options = options
  end

  def title
    I18n.t(code, scope: [:feature_type, :title])
  end

  def description
    I18n.t(code, scope: [:feature_type, :description])
  end

  def name(value = nil)
    return title if value.blank?

    case @code
    when :writer_level then "#{title}: #{value}"
    else
      value
    end
  end

  def show?
    @type == :extras
  end

  def multiple_variants?
    @options[:multiple_variants]
  end

  def extras?
    @type == :extras
  end

  class << self
    def extras
      all.select(&:extras?)
    end
  end

  define_enum do |builder|
    builder.member :proofread_by_editor,  object: new(:proofread_by_editor, :extras)
    builder.member :preferred_writer,     object: new(:preferred_writer)
    builder.member :writer_level,         object: new(:writer_level, :defaults, multiple_variants: true)
    builder.member :printed_version,      object: new(:printed_version, :extras)
    builder.member :vip_support,          object: new(:vip_support, :extras)
    builder.member :certification,        object: new(:certification, :extras,
                                                      display_static_pricing: true,
                                                      fields: [:certification_feature])
    builder.member :other,                object: new(:other, :extras)
  end

  all.map(&:code).each do |code|
    define_method "#{code}?" do
      @code == code
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
translation_cms-0.1.5 app/models/enums/feature_type.rb