Skip to content
Open
28 changes: 26 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

```
Expand All @@ -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
Expand Down
34 changes: 22 additions & 12 deletions lib/keymaker.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
require 'faraday'
require 'faraday_middleware'
require 'hashie'
require 'logger'
require 'active_model'
require 'active_model/validations'
require 'active_model/callbacks'
Expand Down Expand Up @@ -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
4 changes: 3 additions & 1 deletion lib/keymaker/parsers/cypher_response_parser.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
3 changes: 3 additions & 0 deletions lib/keymaker/railtie.rb
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 2 additions & 0 deletions lib/keymaker/service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
17 changes: 17 additions & 0 deletions spec/keymaker_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down