Module: CommandSearch::CommandDealiaser
- Defined in:
- lib/command_search/command_dealiaser.rb
Class Method Summary collapse
- .dealias(ast, aliases) ⇒ Object
- .dealias_key(key, aliases) ⇒ Object
- .dealias_values(key_node, search_node, aliases) ⇒ Object
- .decompose_unaliasable(ast, aliases) ⇒ Object
- .unnest_unaliased(node, aliases) ⇒ Object
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 |