Class: DataNode

Inherits:
Object
  • Object
show all
Defined in:
lib/data_node.rb

Instance Method Summary collapse

Constructor Details

#initialize(db, agg_db, type, key_procs = {}, data_procs = {}, combine = {}, query = nil) ⇒ DataNode

Returns a new instance of DataNode.



9
10
11
12
13
14
15
16
17
18
# 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

Instance Method Details

#add_ast(ast, file, project, &block) ⇒ Object



34
35
36
37
38
39
40
41
# 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) ⇒ Object



82
83
84
85
86
87
88
# 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_astObject



43
44
45
46
47
48
49
# 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, &block) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
# 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") ⇒ Object



51
52
53
54
55
56
57
58
# 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!Object



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# 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