Module: CommandSearch::CommandDealiaser

Defined in:
lib/command_search/command_dealiaser.rb

Class Method Summary collapse

Class Method Details

.dealias(ast, aliases) ⇒ Object



25
26
27
28
29
30
31
32
33
# File 'lib/command_search/command_dealiaser.rb', line 25

def dealias(ast, aliases)
  ast.map! do |x|
    next x unless x[:nest_type]
    dealias(x[:value], aliases)
    next x unless [:colon, :compare].include?(x[:nest_type])
    x[:value] = dealias_values(x[:value], aliases)
    x
  end
end

.dealias_key(key, aliases) ⇒ Object



5
6
7
8
# File 'lib/command_search/command_dealiaser.rb', line 5

def dealias_key(key, aliases)
  key = aliases[key.to_sym] while aliases[key.to_sym].is_a?(Symbol)
  key.to_s
end

.dealias_values(key_node, search_node, aliases) ⇒ Object



10
11
12
13
14
# File 'lib/command_search/command_dealiaser.rb', line 10

def dealias_values((key_node, search_node), aliases)
  new_key = dealias_key(key_node[:value], aliases)
  key_node[:value] = new_key
  [key_node, search_node]
end

.decompose_unaliasable(ast, aliases) ⇒ Object



35
36
37
38
39
40
41
42
# File 'lib/command_search/command_dealiaser.rb', line 35

def decompose_unaliasable(ast, aliases)
  ast.map! do |x|
    next x unless x[:nest_type]
    decompose_unaliasable(x[:value], aliases)
    next x unless [:colon, :compare].include?(x[:nest_type])
    unnest_unaliased(x, aliases)
  end
end

.unnest_unaliased(node, aliases) ⇒ Object



16
17
18
19
20
21
22
23
# File 'lib/command_search/command_dealiaser.rb', line 16

def unnest_unaliased(node, aliases)
  type = node[:nest_type]
  values = node[:value].map { |x| x[:value].to_sym }
  return node if type == :colon && aliases[values.first]
  return node if type == :compare && (values & aliases.keys).any?
  str_values = values.join(node[:nest_op])
  { type: :str, value: str_values }
end