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 diff --git a/lib/keymaker.rb b/lib/keymaker.rb index 73b4142..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' @@ -45,18 +46,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/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/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..a205922 100644 --- a/lib/keymaker/service.rb +++ b/lib/keymaker/service.rb @@ -80,7 +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("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