Sha256: 7c3c67d561006890cf68ac0d6d4f513e681ffd368d46a9c4a9ff0abe857e2b68

Contents?: true

Size: 1.51 KB

Versions: 1

Compression:

Stored size: 1.51 KB

Contents

# frozen_string_literal: true

class ProfilePageType
  include EnumField::DefineEnum
  attr_reader :code, :slug, :disabled

  def initialize(code, slug = nil, disabled = false)
    @code = code.to_sym
    @slug = (slug || code).to_s
    @disabled = disabled
  end

  def title
    I18n.t(code, scope: [:account, :profile, :form_type_title])
  end

  def disabled?
    @disabled
  end

  define_enum do |builder|
    builder.member :default, object: new(:default, 'about')
    builder.member :billing, object: new(:billing, 'billing')
    builder.member :mailing, object: new(:mailing)
  end

  def build_form(params = {})
    if mailing?
      Account::MailingForm.new(params[:mailing])
    elsif billing?
      Account::BillingForm.new(params[:billing])
    else
      if params[:personal].present?
        Account::ProfileForm.new(params[:personal])
      elsif params[:email].present?
        Account::ProfileEmailForm.new(params[:email])
      elsif params[:password].present?
        Account::ProfilePasswordForm.new(params[:password])
      end
    end
  end

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

  class << self
    def find_by_slug(slug)
      return first if slug.nil?

      all.detect { |type| type.slug == slug }
    end

    def find_by_params(params = {})
      if params[:mailing].present?
        mailing
      elsif params[:billing].present?
        billing
      else
        default
      end
    end

    def enabled
      all.reject(&:disabled?)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

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