class KatteHiveAutodep::Resolver

Public Class Methods

call(nodes) click to toggle source
# File lib/katte_hive_autodep/resolver.rb, line 10
def self.call(nodes)
  new.call(nodes)
end
new() click to toggle source
# File lib/katte_hive_autodep/resolver.rb, line 5
def initialize
  @table_node_mapping = {}
  @dependency_mapping = {}
end

Public Instance Methods

call(nodes) click to toggle source
# File lib/katte_hive_autodep/resolver.rb, line 13
def call(nodes)
  hive_nodes = find_hive_nodes(nodes)

  load_all(hive_nodes)

  resolve
end

Private Instance Methods

add_dependency(node, hive_table) click to toggle source
# File lib/katte_hive_autodep/resolver.rb, line 25
def add_dependency(node, hive_table)
  (@dependency_mapping[node] ||= []) << hive_table
end
add_table(node, hive_table) click to toggle source
# File lib/katte_hive_autodep/resolver.rb, line 22
def add_table(node, hive_table)
  (@table_node_mapping[hive_table] ||= []) << node
end
find_hive_nodes(nodes) click to toggle source
# File lib/katte_hive_autodep/resolver.rb, line 42
def find_hive_nodes(nodes)
  nodes.select {|node|
    node.file_type.extname == 'sql'
  }
end
load(node) click to toggle source
# File lib/katte_hive_autodep/resolver.rb, line 29
def load(node)
  dependency = HDP.new.run(node.path)

  dependency["sources"].each do |src|
    add_dependency(node, src)
  end
  dependency["destinations"].each do |dst|
    add_table(node, dst)
  end
end
load_all(nodes) click to toggle source
# File lib/katte_hive_autodep/resolver.rb, line 39
def load_all(nodes)
  nodes.each {|node| load node }
end
resolve() click to toggle source
# File lib/katte_hive_autodep/resolver.rb, line 48
def resolve
  @dependency_mapping.each {|node, hive_tables|
    hive_tables.each {|hive_table|
      next unless @table_node_mapping[hive_table]
      
      @table_node_mapping[hive_table].each do |depending_node|
        next unless depending_node.is_a? Katte::Node::Base
      
        node.requires << depending_node.name
      end
    }
  }
end