Sha256: 9215995531e431325cc0c0af4e3883291d7a10c0669f8acde24d2ff4484232f3
Contents?: true
Size: 1.42 KB
Versions: 1
Compression:
Stored size: 1.42 KB
Contents
# frozen_string_literal: true module Esse module CLI module Parser FALSEY = [false, 'false', 'FALSE', 'f', 'F'].freeze TRUTHY = [true, 'true', 'TRUE', 't', 'T'].freeze HASH_MATCHER = /([\w\.\-]+)\:([^\s]+)/.freeze HASH_SEPARATOR = /[\s]+/.freeze ARRAY_SEPARATOR = /[\,]+/.freeze class BoolOrHash def initialize(key, default: nil) @key = key @default = default end def parse(input) return true if TRUTHY.include?(input) return false if FALSEY.include?(input) return input if input.is_a?(Hash) return @default if input.nil? return true if @key.to_s == input return @default unless HASH_MATCHER.match?(input) compact_hash = input.to_s.split(HASH_SEPARATOR).each_with_object({}) do |pair, hash| key, val = pair.match(HASH_MATCHER).captures hash[key.to_sym] = may_array(val) end return @default if compact_hash.empty? Esse::HashUtils.explode_keys(compact_hash) end private def may_array(value) return may_bool(value) unless ARRAY_SEPARATOR.match?(value) value.split(ARRAY_SEPARATOR).map { |v| may_bool(v) } end def may_bool(value) return true if TRUTHY.include?(value) return false if FALSEY.include?(value) value end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
esse-0.4.0.rc3 | lib/esse/cli/parser/bool_or_hash.rb |