Sha256: 3ae663892840363e4ac4b3ede285e410ed46f4259ad0895a271480146bc7ef1b

Contents?: true

Size: 1.27 KB

Versions: 1

Compression:

Stored size: 1.27 KB

Contents

require "king_konf/decoder"

module KingKonf
  class Variable
    attr_reader :name, :type, :default, :description, :allowed_values, :options

    def initialize(name:, type:, default: nil, description: "", required: false, allowed_values: nil, options: {})
      @name, @type, @default = name, type, default
      @description = description
      @required = required
      @allowed_values = allowed_values
      @options = options
    end

    def cast(value)
      case @type
      when :float then value.to_f
      else value
      end
    end

    def required?
      @required
    end

    def valid?(value)
      case @type
      when :string then value.is_a?(String) || value.nil?
      when :list then value.is_a?(Array)
      when :integer then value.is_a?(Integer) || value.nil?
      when :float then value.is_a?(Float) || value.is_a?(Integer) || value.nil?
      when :boolean then value == true || value == false
      else raise "invalid type #{@type}"
      end
    end

    def allowed?(value)
      allowed_values.nil? || allowed_values.include?(value)
    end

    def decode(value)
      Decoder.public_send(@type, value, **options)
    end

    %i(boolean integer float string list).each do |type|
      define_method("#{type}?") do
        @type == type
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
king_konf-0.2.0 lib/king_konf/variable.rb