Class: DataNode
- Inherits:
-
Object
- Object
- DataNode
- Defined in:
- lib/data_node.rb
Instance Method Summary collapse
- #add_ast(ast, file, project, &block) ⇒ Object
- #collapse_data(data) ⇒ Object
-
#initialize(db, agg_db, type, key_procs = {}, data_procs = {}, combine = {}, query = nil) ⇒ DataNode
constructor
A new instance of DataNode.
- #process_all_ast ⇒ Object
- #process_node(ast, file, project, &block) ⇒ Object
- #query(ast, file = "N/A", project = "N/A") ⇒ Object
- #save! ⇒ Object
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_ast ⇒ Object
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 |