class Delfos::Neo4j::Informer
Public Instance Methods
args_query(args)
click to toggle source
# File lib/delfos/neo4j/informer.rb, line 92 def args_query(args) query_text = args.argument_classes.map do |k| name = query_variable(k) "MERGE (cs) - [:ARG] -> (#{name})" end query_text.join("\n") end
assign_query_variables(args, call_site, called_code)
click to toggle source
# File lib/delfos/neo4j/informer.rb, line 71 def assign_query_variables(args, call_site, called_code) klasses = [call_site.klass, called_code.klass] + args.argument_classes klasses.uniq.each do |k| query_variables.assign(k, "k") end end
log(args, call_site, called_code)
click to toggle source
# File lib/delfos/neo4j/informer.rb, line 11 def log(args, call_site, called_code) query = query_for(args, call_site, called_code) params = params_for(args, call_site, called_code) Neo4j.execute(query, params) end
method_node(id)
click to toggle source
# File lib/delfos/neo4j/informer.rb, line 79 def method_node(id) <<-NODE (#{id}:Method { type: {#{id}_type}, name: {#{id}_name}, file: {#{id}_file}, line_number: {#{id}_line_number} } ) NODE end
params_for(args, call_site, called_code)
click to toggle source
# File lib/delfos/neo4j/informer.rb, line 18 def params_for(args, call_site, called_code) assign_query_variables(args, call_site, called_code) params = query_variables.each_with_object({}) do |(klass, name), object| object[name] = klass.to_s end params["m1_type"] = call_site.method_type params["m1_name"] = call_site.method_name params["m1_file"] = call_site.method_definition_file params["m1_line_number"] = call_site.method_definition_line params["cs_file"] = call_site.file params["cs_line_number"] = call_site.line_number params["m2_type"] = called_code.method_type params["m2_name"] = called_code.method_name params["m2_file"] = called_code.method_definition_file params["m2_line_number"] = called_code.method_definition_line params end
query_for(args, call_site, called_code)
click to toggle source
# File lib/delfos/neo4j/informer.rb, line 41 def query_for(args, call_site, called_code) assign_query_variables(args, call_site, called_code) klasses_query = query_variables.map do |_klass, name| "MERGE (#{name}:Class {name: {#{name}}})" end.join("\n") <<-QUERY #{klasses_query} MERGE (#{query_variable(call_site.klass)}) - [:OWNS] -> #{method_node("m1")} MERGE (m1) - [:CONTAINS] -> (cs:CallSite { file: {cs_file}, line_number: {cs_line_number} } ) MERGE (#{query_variable(called_code.klass)}) - [:OWNS] -> #{method_node("m2")} MERGE (cs) - [:CALLS] -> (m2) #{args_query args} QUERY end
query_variable(k)
click to toggle source
# File lib/delfos/neo4j/informer.rb, line 101 def query_variable(k) query_variables[k.to_s] end
query_variables()
click to toggle source
# File lib/delfos/neo4j/informer.rb, line 105 def query_variables @query_variables ||= QueryVariables.new end
save_call_stack(call_sites, execution_number)
click to toggle source
# File lib/delfos/neo4j/informer.rb, line 6 def save_call_stack(call_sites, execution_number) q = Neo4j::CallStackQuery.new(call_sites, execution_number) Neo4j.execute(q.query, q.params) end