app/pb_kits/playbook/pb_kit/base.rb



# frozen_string_literal: true

module Playbook
  module PbKit
    class Base
      #============= Default props =============
      def aria(ui_aria = {})
        merge_value(configured_aria, ui_aria)
      end

      def classname(ui_classes = "")
        concat_value(configured_classname, ui_classes)
      end

      def data(ui_data = {})
        merge_value(configured_data, ui_data)
      end

      def id(ui_id = nil)
        default_value(configured_id, ui_id)
      end

      #============= Type checking =============
      def is_true?(value)
        is_boolean?(value) && value == true
      end

      def is_string?(value)
        value.is_a? String
      end

      def is_integer?(value)
        value.is_a? Integer
      end

      def is_boolean?(value)
        [true, false].include? value
      end

      def one_of?(value, options = [])
        options.include? value
      end

      def is_set?(value)
        value != default_configuration
      end

      #============= Default value =============
      def default_value(value, default_value)
        is_set?(value) ? value : default_value
      end

      def adjusted_value(value, adjusted_value, default_value)
        is_set?(value) ? adjusted_value : default_value
      end

      def concat_value(value, value2)
        is_set?(value) ? value2 + " " + value : value2
      end

      def merge_value(value, value2)
        value2 ||= {}
        is_set?(value) ? value.merge(value2) : value2
      end

      def one_of_value(value, options = [], default = "")
        if is_set?(value)
          options.include?(value) ? value : default
        else
          default
        end
      end

      def true_value(value, true_value = "", false_value = "")
        if is_set?(value)
          is_true?(value) ? true_value : false_value
        else
          false_value
        end
      end

      def false_value(value, false_value = "", true_value = "")
        if is_set?(value)
          is_true?(value) ? true_value : false_value
        else
          false_value
        end
      end

    private

      DEFAULT = Object.new
      private_constant :DEFAULT
      def default_configuration
        DEFAULT
      end
    end
  end
end