Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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