Class: Delfos::Neo4j::Informer
- Inherits:
-
Object
- Object
- Delfos::Neo4j::Informer
- Defined in:
- lib/delfos/neo4j/informer.rb
Defined Under Namespace
Classes: QueryVariables
Instance Method Summary collapse
- #args_query(args) ⇒ Object
- #assign_query_variables(args, call_site, called_code) ⇒ Object
- #log(args, call_site, called_code) ⇒ Object
- #method_node(id) ⇒ Object
- #params_for(args, call_site, called_code) ⇒ Object
- #query_for(args, call_site, called_code) ⇒ Object
- #query_variable(k) ⇒ Object
- #query_variables ⇒ Object
- #save_call_stack(call_sites, execution_number) ⇒ Object
Instance Method Details
#args_query(args) ⇒ Object
92 93 94 95 96 97 98 99 |
# 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) ⇒ Object
71 72 73 74 75 76 77 |
# 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) ⇒ Object
11 12 13 14 15 16 |
# 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) ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 90 |
# 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) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# 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) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# 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) ⇒ Object
101 102 103 |
# File 'lib/delfos/neo4j/informer.rb', line 101 def query_variable(k) query_variables[k.to_s] end |
#query_variables ⇒ Object
105 106 107 |
# File 'lib/delfos/neo4j/informer.rb', line 105 def query_variables @query_variables ||= QueryVariables.new end |
#save_call_stack(call_sites, execution_number) ⇒ Object
6 7 8 9 |
# 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 |