Sha256: e34698ffee87c5d580c5c66c45b8e52c03a2e8fc384104a96020759afabf6ccd

Contents?: true

Size: 1.22 KB

Versions: 220

Compression:

Stored size: 1.22 KB

Contents

# frozen_string_literal: true

require "json"

module Primer
  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

220 entries across 220 versions & 2 rubygems

Version Path
primer_view_components-0.38.0 lib/primer/view_components/constants.rb
openproject-primer_view_components-0.56.1 lib/primer/view_components/constants.rb
openproject-primer_view_components-0.56.0 lib/primer/view_components/constants.rb
openproject-primer_view_components-0.55.0 lib/primer/view_components/constants.rb
openproject-primer_view_components-0.54.1 lib/primer/view_components/constants.rb
primer_view_components-0.37.0 lib/primer/view_components/constants.rb
openproject-primer_view_components-0.54.0 lib/primer/view_components/constants.rb
openproject-primer_view_components-0.53.1 lib/primer/view_components/constants.rb
openproject-primer_view_components-0.53.0 lib/primer/view_components/constants.rb
openproject-primer_view_components-0.52.4 lib/primer/view_components/constants.rb
openproject-primer_view_components-0.52.3 lib/primer/view_components/constants.rb
primer_view_components-0.36.5 lib/primer/view_components/constants.rb
openproject-primer_view_components-0.52.2 lib/primer/view_components/constants.rb
primer_view_components-0.36.4 lib/primer/view_components/constants.rb
openproject-primer_view_components-0.52.1 lib/primer/view_components/constants.rb
openproject-primer_view_components-0.52.0 lib/primer/view_components/constants.rb
primer_view_components-0.36.3 lib/primer/view_components/constants.rb
openproject-primer_view_components-0.51.0 lib/primer/view_components/constants.rb
primer_view_components-0.36.2 lib/primer/view_components/constants.rb
openproject-primer_view_components-0.50.1 lib/primer/view_components/constants.rb