class DataNode

Public Class Methods

new(db, agg_db, type, key_procs = {}, data_procs = {}, combine = {}, query = nil) click to toggle source
# File lib/data_node.rb, line 9
def initialize(db, agg_db, type, key_procs = {}, data_procs = {}, combine = {}, query = nil)
  @type = type
  @data = Hash.new { |h,k| h[k] = [] }
  @combine = combine
  @processed = {}
  @key_procs = key_procs
  @data_procs = data_procs
  @db, @agg_db = db, agg_db
  @query = query
end

Public Instance Methods

add_ast(ast, file, project) { |keys, data| ... } click to toggle source
# File lib/data_node.rb, line 34
def add_ast(ast, file, project, &block)   
  process_node(ast, file, project) do |keys, data_point|
    #join_keys = keys.map { |k,v| v }.join("-")
    @data[keys].push(data_point)
    yield keys, @data[keys] if block
  end
  @data
end
collapse_data(data) click to toggle source
# File lib/data_node.rb, line 82
def collapse_data(data)
  combined = {}
  @combine.each do |k,proc|
    combined[k] = proc.call(data)
  end
  combined
end
process_all_ast() click to toggle source
# File lib/data_node.rb, line 43
def process_all_ast
  @processed = {}
  @data.each do |k,v|
    @processed[k] = collapse_data(v).merge(k)
  end
  @processed
end
process_node(ast, file, project) { |keys, data_point| ... } click to toggle source
# File lib/data_node.rb, line 20
def process_node(ast, file, project, &block)
  if @type.call(ast)
    keys = {}
    data_point = {}
    @key_procs.each do |name, proc|
      keys[name] = proc.call(ast, file, project)
    end
    @data_procs.each do |name, proc|
      data_point[name] = proc.call(ast, file, project)
    end
    yield keys, data_point if block
  end
end
query(ast, file = "N/A", project = "N/A") click to toggle source
# File lib/data_node.rb, line 51
def query(ast, file = "N/A", project = "N/A")
  if @query
    process_node(ast, file, project) do |keys, data|
      unlikely = @query.call(@agg_db, keys, data)
      unlikely ? unlikely : nil 
    end
  end
end
save!() click to toggle source
# File lib/data_node.rb, line 60
def save!
  process_all_ast
  #@db.delete_all
  #@agg_db.delete_all
  count = 0
  if !@key_procs.empty?
    @processed.each do |k,v| 
      @agg_db.new(v).save
      count += 1
      puts count
    end
  end
  # @data.each do |k,v|
  #   v.each do |v_a|
  #     @db.new(v_a.merge(k)).save
  #     count += 1
  #     puts count
  #   end
  # end
  true
end