Sha256: 4fd60850378d342e80d49e0eddeb25a2100fa1a9b0dfbbceff71f533d03a53c2
Contents?: true
Size: 1.58 KB
Versions: 1
Compression:
Stored size: 1.58 KB
Contents
# frozen_string_literal: true module Leftovers class ValueRule def initialize(values) # rubocop:disable Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/AbcSize, Metrics/PerceivedComplexity literal_values = Set.new value_types = Set.new Array.each_or_self(values) do |value| case value when Hash raise ArgumentError, "invalid value #{value.inspect}" unless value[:type] value_types.merge( Array(value[:type]).map do |v| case v when 'String', :String then :str when 'Symbol', :Symbol then :sym else v.to_s.downcase.to_sym end end ) else (literal_values << value) if value end end if literal_values.length <= 1 @literal_value = literal_values.first @literal_values = nil else @literal_value = nil @literal_values = literal_values end if value_types.length <= 1 @value_type = value_types.first @value_types = nil else @value_type = nil @value_types = value_types end freeze end def match?(value_node) # rubocop:disable Metrics/CyclomaticComplexity return true if @value_type&.== value_node.type return true if @value_types&.include?(value_node.type) return false unless (@literal_value || @literal_values) && value_node.scalar? return true if @literal_value&.== value_node.to_scalar_value @literal_values&.include?(value_node.to_scalar_value) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
leftovers-0.1.0 | lib/leftovers/value_rule.rb |