From adf9b6b36945a20a17fff312bf48622cdd03d5fd Mon Sep 17 00:00:00 2001 From: Andrew Lank Date: Fri, 15 Mar 2013 11:07:23 -0400 Subject: [PATCH 01/11] added model example --- README.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/README.md b/README.md index a675683..5e2d0f6 100644 --- a/README.md +++ b/README.md @@ -122,6 +122,22 @@ Keymaker.service.delete_relationship_request(:relationship_id => rel.neo4j_id) ``` +### Models + +``` +class People + include Keymaker::Node + + property :name, String + property :age, Integer + property :title, String + + # creates an index called people with keys name and age + index :people, :on => :name + index :people, :on => :age + +end +``` ### Nodes ``` From 83d86321cd010df283bb5a96344d720952fc4a95 Mon Sep 17 00:00:00 2001 From: Andrew Lank Date: Fri, 15 Mar 2013 11:17:59 -0400 Subject: [PATCH 02/11] added model example --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5e2d0f6..67cc111 100644 --- a/README.md +++ b/README.md @@ -138,6 +138,7 @@ class People end ``` + ### Nodes ``` From 2d890a3856c1da2ed3ee9290e1042132bee12700 Mon Sep 17 00:00:00 2001 From: Andrew Lank Date: Fri, 15 Mar 2013 11:24:07 -0400 Subject: [PATCH 03/11] cypher query example --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 67cc111..63c2c69 100644 --- a/README.md +++ b/README.md @@ -160,6 +160,7 @@ Coming soon ### Querying ``` +## Cypher ## Coming soon ``` From a7579da402e0eb5988028cec761fdfc0ee80aae1 Mon Sep 17 00:00:00 2001 From: Andrew Lank Date: Fri, 15 Mar 2013 11:30:00 -0400 Subject: [PATCH 04/11] test --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 63c2c69..e93b6ae 100644 --- a/README.md +++ b/README.md @@ -161,6 +161,7 @@ Coming soon ``` ## Cypher ## + Coming soon ``` From ecb9c437ffea5e5d0705b6f6fe2c808835a59187 Mon Sep 17 00:00:00 2001 From: Andrew Lank Date: Fri, 15 Mar 2013 12:04:20 -0400 Subject: [PATCH 05/11] examples of controller call of model --- README.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index e93b6ae..1cebe65 100644 --- a/README.md +++ b/README.md @@ -124,7 +124,7 @@ Keymaker.service.delete_relationship_request(:relationship_id => rel.neo4j_id) ### Models -``` +```ruby class People include Keymaker::Node @@ -137,6 +137,9 @@ class People index :people, :on => :age end + +## in some controller ## +node = People.new(:name => 'Trinity', :title => 'computer programmer and hacker', :age => '27') ``` ### Nodes @@ -159,10 +162,11 @@ Coming soon ### Querying -``` -## Cypher ## +```ruby +## Cypher # + +results = Keymaker.service.execute_cypher("START n=node:tests(name='Trinity') return n", {}) -Coming soon ``` ## Contributing From 57aec62089299117275d9e2718e8ca3d3388d95c Mon Sep 17 00:00:00 2001 From: Andrew Lank Date: Fri, 15 Mar 2013 12:05:03 -0400 Subject: [PATCH 06/11] examples of controller call of model --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1cebe65..385c217 100644 --- a/README.md +++ b/README.md @@ -140,6 +140,7 @@ end ## in some controller ## node = People.new(:name => 'Trinity', :title => 'computer programmer and hacker', :age => '27') +node.save ``` ### Nodes From e19594d4e9c0784255b0986bd47a48dd5fabd64c Mon Sep 17 00:00:00 2001 From: Andrew Lank Date: Fri, 15 Mar 2013 14:47:25 -0400 Subject: [PATCH 07/11] added logging --- lib/keymaker.rb | 33 +++++++++++++++++++++------------ lib/keymaker/railtie.rb | 3 +++ lib/keymaker/service.rb | 1 + 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/lib/keymaker.rb b/lib/keymaker.rb index 73b4142..114911d 100644 --- a/lib/keymaker.rb +++ b/lib/keymaker.rb @@ -45,18 +45,27 @@ module Keymaker VERSION = "0.1.0" - def self.service - @service ||= Keymaker::Service.new(Keymaker::Configuration.new) - end - - def self.configure - @configuration = Keymaker::Configuration.new - yield @configuration - @service = Keymaker::Service.new(@configuration) - end + class << self + + attr_accessor :logger + + def service + @service ||= Keymaker::Service.new(Keymaker::Configuration.new) + end - def self.configuration - @configuration + def configure + @configuration = Keymaker::Configuration.new + yield @configuration + @service = Keymaker::Service.new(@configuration) + end + + def configuration + @configuration + end + + def logger + @logger ||= Logger.new(ENV['KEYMAKER_LOG'] ? ENV['KEYMAKER_LOG_FILE'] || $stdout : '/dev/null') + end + end - end diff --git a/lib/keymaker/railtie.rb b/lib/keymaker/railtie.rb index 0097d87..d9f0117 100644 --- a/lib/keymaker/railtie.rb +++ b/lib/keymaker/railtie.rb @@ -1,6 +1,9 @@ require 'rails' class Railtie < Rails::Railtie + initializer 'Rails logger' do + Keymaker.logger = Rails.logger + end rake_tasks do load "keymaker/rails_tasks.rb" end diff --git a/lib/keymaker/service.rb b/lib/keymaker/service.rb index 1564c72..ee3d422 100644 --- a/lib/keymaker/service.rb +++ b/lib/keymaker/service.rb @@ -81,6 +81,7 @@ def batch_get_nodes(node_ids) def execute_cypher(query, params) response = execute_cypher_request({query: query, params: params}) + Keymaker::logger.info(response.to_yaml) Keymaker::CypherResponseParser.parse(response.body) end From e5a74a5f179cbc35285a46833fe758e3dcf63fd7 Mon Sep 17 00:00:00 2001 From: Andrew Lank Date: Fri, 22 Mar 2013 11:52:11 -0400 Subject: [PATCH 08/11] node_id and relationship_id returned on cypher query --- lib/keymaker.rb | 1 + lib/keymaker/parsers/cypher_response_parser.rb | 4 +++- lib/keymaker/service.rb | 3 ++- spec/keymaker_spec.rb | 17 +++++++++++++++++ 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/lib/keymaker.rb b/lib/keymaker.rb index 114911d..2bf1856 100644 --- a/lib/keymaker.rb +++ b/lib/keymaker.rb @@ -1,6 +1,7 @@ require 'faraday' require 'faraday_middleware' require 'hashie' +require 'logger' require 'active_model' require 'active_model/validations' require 'active_model/callbacks' diff --git a/lib/keymaker/parsers/cypher_response_parser.rb b/lib/keymaker/parsers/cypher_response_parser.rb index a5d471b..fbe6e91 100644 --- a/lib/keymaker/parsers/cypher_response_parser.rb +++ b/lib/keymaker/parsers/cypher_response_parser.rb @@ -4,11 +4,13 @@ class CypherResponseParser def self.parse(response_body) response_body.data.map do |result| if response_body.columns.one? && result.first.kind_of?(Hashie::Mash) - result.first.data + thing_id = result.first.self.split('/').slice(-2,2) + result.first.data.merge({thing_id[0] + '_id' => thing_id[1].to_i}) else translate_response(response_body, result) end end + end def self.translate_response(response_body, result) diff --git a/lib/keymaker/service.rb b/lib/keymaker/service.rb index ee3d422..a205922 100644 --- a/lib/keymaker/service.rb +++ b/lib/keymaker/service.rb @@ -80,8 +80,9 @@ def batch_get_nodes(node_ids) end def execute_cypher(query, params) + Keymaker::logger.info("Keymaker:Cypher Request #{query.to_yaml}") response = execute_cypher_request({query: query, params: params}) - Keymaker::logger.info(response.to_yaml) + Keymaker::logger.info("Keymaker:Cypher Response #{response.to_yaml}") Keymaker::CypherResponseParser.parse(response.body) end diff --git a/spec/keymaker_spec.rb b/spec/keymaker_spec.rb index f1b4e60..fabc6bb 100644 --- a/spec/keymaker_spec.rb +++ b/spec/keymaker_spec.rb @@ -178,8 +178,25 @@ def do_it it "performs the cypher query and responds" do do_it.first.email.should == john_email end + + end + + context "node results returned (array)" do + let(:cypher_string) { "START n=node(*) RETURN n" } + + it "returns the node id as node_id" do + do_it.first.node_id.should == john_node_id.to_i + end end + + context "relationship returned (array)" do + let(:cypher_string) { "START n=node(*) MATCH n-[r]-o RETURN r" } + it "returns the relationship id as relationship_id" do + relationship = Keymaker.service.create_relationship(:loves, john_node_id, sarah_node_id) + do_it.first.relationship_id.should == relationship.neo4j_id + end + end end context "nodes" do From 758d1b9edbfd7f26eb5dfccc77b332236d0f4146 Mon Sep 17 00:00:00 2001 From: Andrew Lank Date: Fri, 15 Mar 2013 11:07:23 -0400 Subject: [PATCH 09/11] doc for model definition and cypher example examples of controller call of model examples of controller call of model --- README.md | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a675683..385c217 100644 --- a/README.md +++ b/README.md @@ -122,6 +122,27 @@ Keymaker.service.delete_relationship_request(:relationship_id => rel.neo4j_id) ``` +### Models + +```ruby +class People + include Keymaker::Node + + property :name, String + property :age, Integer + property :title, String + + # creates an index called people with keys name and age + index :people, :on => :name + index :people, :on => :age + +end + +## in some controller ## +node = People.new(:name => 'Trinity', :title => 'computer programmer and hacker', :age => '27') +node.save +``` + ### Nodes ``` @@ -142,8 +163,11 @@ Coming soon ### Querying -``` -Coming soon +```ruby +## Cypher # + +results = Keymaker.service.execute_cypher("START n=node:tests(name='Trinity') return n", {}) + ``` ## Contributing From ce65646e3fb6dc3bec1db410bbccf65fe9791bfc Mon Sep 17 00:00:00 2001 From: Andrew Lank Date: Fri, 15 Mar 2013 14:47:25 -0400 Subject: [PATCH 10/11] added logging --- lib/keymaker.rb | 33 +++++++++++++++++++++------------ lib/keymaker/railtie.rb | 3 +++ lib/keymaker/service.rb | 1 + 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/lib/keymaker.rb b/lib/keymaker.rb index 73b4142..114911d 100644 --- a/lib/keymaker.rb +++ b/lib/keymaker.rb @@ -45,18 +45,27 @@ module Keymaker VERSION = "0.1.0" - def self.service - @service ||= Keymaker::Service.new(Keymaker::Configuration.new) - end - - def self.configure - @configuration = Keymaker::Configuration.new - yield @configuration - @service = Keymaker::Service.new(@configuration) - end + class << self + + attr_accessor :logger + + def service + @service ||= Keymaker::Service.new(Keymaker::Configuration.new) + end - def self.configuration - @configuration + def configure + @configuration = Keymaker::Configuration.new + yield @configuration + @service = Keymaker::Service.new(@configuration) + end + + def configuration + @configuration + end + + def logger + @logger ||= Logger.new(ENV['KEYMAKER_LOG'] ? ENV['KEYMAKER_LOG_FILE'] || $stdout : '/dev/null') + end + end - end diff --git a/lib/keymaker/railtie.rb b/lib/keymaker/railtie.rb index 0097d87..d9f0117 100644 --- a/lib/keymaker/railtie.rb +++ b/lib/keymaker/railtie.rb @@ -1,6 +1,9 @@ require 'rails' class Railtie < Rails::Railtie + initializer 'Rails logger' do + Keymaker.logger = Rails.logger + end rake_tasks do load "keymaker/rails_tasks.rb" end diff --git a/lib/keymaker/service.rb b/lib/keymaker/service.rb index 1564c72..ee3d422 100644 --- a/lib/keymaker/service.rb +++ b/lib/keymaker/service.rb @@ -81,6 +81,7 @@ def batch_get_nodes(node_ids) def execute_cypher(query, params) response = execute_cypher_request({query: query, params: params}) + Keymaker::logger.info(response.to_yaml) Keymaker::CypherResponseParser.parse(response.body) end From e5baf5cbfe987e9ce7c222f8e462b9f2941a9df1 Mon Sep 17 00:00:00 2001 From: Andrew Lank Date: Fri, 22 Mar 2013 11:52:11 -0400 Subject: [PATCH 11/11] node_id and relationship_id returned on cypher query --- lib/keymaker.rb | 1 + lib/keymaker/parsers/cypher_response_parser.rb | 4 +++- lib/keymaker/service.rb | 3 ++- spec/keymaker_spec.rb | 17 +++++++++++++++++ 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/lib/keymaker.rb b/lib/keymaker.rb index 114911d..2bf1856 100644 --- a/lib/keymaker.rb +++ b/lib/keymaker.rb @@ -1,6 +1,7 @@ require 'faraday' require 'faraday_middleware' require 'hashie' +require 'logger' require 'active_model' require 'active_model/validations' require 'active_model/callbacks' diff --git a/lib/keymaker/parsers/cypher_response_parser.rb b/lib/keymaker/parsers/cypher_response_parser.rb index a5d471b..fbe6e91 100644 --- a/lib/keymaker/parsers/cypher_response_parser.rb +++ b/lib/keymaker/parsers/cypher_response_parser.rb @@ -4,11 +4,13 @@ class CypherResponseParser def self.parse(response_body) response_body.data.map do |result| if response_body.columns.one? && result.first.kind_of?(Hashie::Mash) - result.first.data + thing_id = result.first.self.split('/').slice(-2,2) + result.first.data.merge({thing_id[0] + '_id' => thing_id[1].to_i}) else translate_response(response_body, result) end end + end def self.translate_response(response_body, result) diff --git a/lib/keymaker/service.rb b/lib/keymaker/service.rb index ee3d422..a205922 100644 --- a/lib/keymaker/service.rb +++ b/lib/keymaker/service.rb @@ -80,8 +80,9 @@ def batch_get_nodes(node_ids) end def execute_cypher(query, params) + Keymaker::logger.info("Keymaker:Cypher Request #{query.to_yaml}") response = execute_cypher_request({query: query, params: params}) - Keymaker::logger.info(response.to_yaml) + Keymaker::logger.info("Keymaker:Cypher Response #{response.to_yaml}") Keymaker::CypherResponseParser.parse(response.body) end diff --git a/spec/keymaker_spec.rb b/spec/keymaker_spec.rb index f1b4e60..fabc6bb 100644 --- a/spec/keymaker_spec.rb +++ b/spec/keymaker_spec.rb @@ -178,8 +178,25 @@ def do_it it "performs the cypher query and responds" do do_it.first.email.should == john_email end + + end + + context "node results returned (array)" do + let(:cypher_string) { "START n=node(*) RETURN n" } + + it "returns the node id as node_id" do + do_it.first.node_id.should == john_node_id.to_i + end end + + context "relationship returned (array)" do + let(:cypher_string) { "START n=node(*) MATCH n-[r]-o RETURN r" } + it "returns the relationship id as relationship_id" do + relationship = Keymaker.service.create_relationship(:loves, john_node_id, sarah_node_id) + do_it.first.relationship_id.should == relationship.neo4j_id + end + end end context "nodes" do