Sha256: e3d4f6becba4d7c29016a5a219318db5cd47a9f95ff0d55d363c3ec8fa7eb40d
Contents?: true
Size: 1.02 KB
Versions: 1
Compression:
Stored size: 1.02 KB
Contents
# Scans for occurrences of a key in a line of text and returns any associated # values. # # Looks for the following patterns of key-value pairs: # KEY=value # KEY='value' # KEY="value" # KEY value # KEY 'value' # KEY "value" # KEY: value # KEY => value class Carwash::ValueDiscoverer < Struct.new(:key) ESCAPE_CHARACTERS = { "\\0" => "\0", "\\a" => "\a", "\\b" => "\b", "\\f" => "\f", "\\n" => "\n", "\\r" => "\r", "\\t" => "\t", "\\v" => "\v", } def discover(line) patterns.flat_map { |pattern| line.scan(pattern).map(&:first) }.reject(&:nil?).reject(&:empty?).map(&:downcase).map { |val| unescape_value(val) } end def patterns @patterns ||= [ %r{#{key}['"]?\s*(?:=>|=|:|\s+)\s*'((?:\\'|[^'])+)'}i, %r{#{key}['"]?\s*(?:=>|=|:|\s+)\s*"((?:\\"|[^"])+)"}i, %r{#{key}['"]?\s*(?:=>|=|:|\s+)\s*((?:\\\s|\\"|\\'|[^\s'"])+)}i ] end def unescape_value(value) value.gsub(/\\(.)/) { |match| ESCAPE_CHARACTERS.fetch(match, $1) } end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
carwash-1.0.6 | lib/carwash/value_discoverer.rb |