class HashAtPath::Path

Public Class Methods

extract_path_data(path_string) click to toggle source

Extracts paths and predicates from the provide full path

# File lib/hash_at_path/path.rb, line 18
def extract_path_data(path_string)
  results = array_wrap(path_string.scan(/([^\[]*)(\[)*(\d|\-\d|\*)*(\])*/i))
  results.map { |match| { path: match[0], predicate: match[2] } }
end
parse(path_string) click to toggle source
# File lib/hash_at_path/path.rb, line 6
def parse(path_string)
  path_string = replace_predicates(path_string)
  extract_path_data(path_string)
end
replace_predicates(path_string) click to toggle source
# File lib/hash_at_path/path.rb, line 11
def replace_predicates(path_string)
  path_string = path_string.gsub(/first\(\)/, '0')
  path_string = path_string.gsub(/last\(\)/, '-1')
  path_string
end

Private Class Methods

array_wrap(object) click to toggle source

Stolen from activesupport/lib/active_support/core_ext/array/wrap.rb

# File lib/hash_at_path/path.rb, line 26
def array_wrap(object)
  if object.nil?
    []
  elsif object.respond_to?(:to_ary)
    object.to_ary || [object]
  else
    [object]
  end
end