Sha256: fdb9922cc2636156e4c0121b057f7bff1a8757e1fe9d81b36f53d65731a54629

Contents?: true

Size: 795 Bytes

Versions: 5

Compression:

Stored size: 795 Bytes

Contents

# frozen_string_literal: true

module Bs5
  class BadgeComponent < ViewComponent::Base
    attr_reader :text, :style

    include ActiveModel::Validations
    validates :style, style: true

    def initialize(text:, style: :secondary, pill: false)
      @text = text
      @style = style.to_sym
      @pill = pill
    end

    def before_render
      raise errors.full_messages.to_sentence if invalid?
    end

    private

    def component_class
      class_names = ['badge', contextual_class]
      class_names << %w[rounded-pill] if pill?
      class_names.join(' ')
    end

    def pill?
      @pill
    end

    def contextual_class
      class_names = ["bg-#{@style}"]
      class_names << %w[text-dark] if style.in?(%i[warning info light])
      class_names.join(' ')
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
bs5-0.0.8 app/components/bs5/badge_component.rb
bs5-0.0.7 app/components/bs5/badge_component.rb
bs5-0.0.6 app/components/bs5/badge_component.rb
bs5-0.0.5 app/components/bs5/badge_component.rb
bs5-0.0.4 app/components/bs5/badge_component.rb