Sha256: 4fb874f695bced9d6f63e48e24a2367d42c7de09715a29fef9063cdf26023d59

Contents?: true

Size: 1.22 KB

Versions: 2

Compression:

Stored size: 1.22 KB

Contents

# frozen_string_literal: true

require "json"

module Yattho
  module ViewComponents
    # A module for constants that are used in the view components.
    class Constants
      CONSTANTS = JSON.parse(
        File.read(
          File.join(File.dirname(__FILE__), "../../../static/constants.json")
        )
      ).freeze

      class << self
        def get(component:, constant:, invert: true, symbolize: false)
          values = CONSTANTS.dig(component, constant)

          case values
          when Hash
            format_hash(values, invert, symbolize)
          when Array
            format_array(values, symbolize)
          else
            values
          end
        end

        private

        def format_hash(values, invert, symbolize)
          val = invert ? values.invert : values
          # remove defaults
          val = val.except("", nil)

          return val.transform_values { |v| symbolize_value(v) } if symbolize

          val
        end

        def format_array(values, symbolize)
          val = values.select(&:present?)

          return val.map { |v| symbolize_value(v) } if symbolize

          val
        end

        def symbolize_value(value)
          ":#{value}"
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
yattho_view_components-0.1.1 lib/yattho/view_components/constants.rb
yattho_view_components-0.0.1 lib/yattho/view_components/constants.rb