keymaker 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Rakefile CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  #############################################################################
3
2
  #
4
3
  # Helper functions
@@ -121,3 +120,78 @@ task :validate do
121
120
  exit!
122
121
  end
123
122
  end
123
+
124
+ #############################################################################
125
+ #
126
+ # Neo4j tasks
127
+ #
128
+ #############################################################################
129
+
130
+ KEYMAKER_ROOT = File.expand_path(File.dirname(__FILE__) + '/../..')
131
+ KEYMAKER_TMP_DIR = File.expand_path(File.join(KEYMAKER_ROOT, "tmp"))
132
+ NEO4J_INSTALL_DIR = ENV['NEO4J_INSTALL_DIR'] || File.expand_path(File.join(KEYMAKER_TMP_DIR, "keymaker_development"))
133
+ NEO4J_PORT = ENV['NEO4J_PORT'] || '7477' # Don't clobber standard neo4j ports 7474 or 7475 for development
134
+
135
+ namespace :neo4j do
136
+
137
+ desc "Install neo4j on localhost:#{NEO4J_PORT}. e.g. rake neo4j:install[community,1.7.M03]"
138
+ task :install, :edition, :version do |t, args|
139
+ args.with_defaults(:edition => "community", :version => "1.7")
140
+
141
+ source_name = "neo4j-#{args[:edition]}-#{args[:version]}"
142
+ tarball = "#{source_name}-unix.tar.gz"
143
+
144
+ puts "Installing #{source_name} to localhost:#{NEO4J_PORT}..."
145
+
146
+ ssl_url_true = "org.neo4j.server.webserver.https.enabled=true"
147
+ ssl_url_false = ssl_url_true.gsub("true","false")
148
+
149
+ %x[mkdir -p #{KEYMAKER_TMP_DIR}; cd #{KEYMAKER_TMP_DIR}]
150
+ FileUtils.rm_rf(NEO4J_INSTALL_DIR) if Dir.exists?(NEO4J_INSTALL_DIR) && File.owned?(NEO4J_INSTALL_DIR)
151
+ %x[wget http://dist.neo4j.org/#{tarball}]
152
+ %x[tar xvzf #{tarball}]
153
+
154
+ %x[mv #{source_name} #{NEO4J_INSTALL_DIR}]
155
+ %x[rm #{tarball}]
156
+
157
+ %x[sed -i.bak 's/7474/#{NEO4J_PORT}/g' #{NEO4J_INSTALL_DIR}/conf/neo4j-server.properties]
158
+ %x[sed -i.bak 's/#{ssl_url_true}/#{ssl_url_false}/g' #{NEO4J_INSTALL_DIR}/conf/neo4j-server.properties]
159
+
160
+ puts "#{source_name} Installed into the #{NEO4J_INSTALL_DIR} directory."
161
+ puts "Run `rake neo4j:start` to start it"
162
+ end
163
+
164
+ desc "Start the neo4j server running on localhost:#{NEO4J_PORT}"
165
+ task :start do
166
+ puts "Starting neo4j for keymaker_development..."
167
+ %x[#{NEO4J_INSTALL_DIR}/bin/neo4j start]
168
+ end
169
+
170
+ desc "Stop the neo4j server running on localhost:#{NEO4J_PORT}"
171
+ task :stop do
172
+ puts "Stopping neo4j for keymaker_development..."
173
+ %x[#{NEO4J_INSTALL_DIR}/bin/neo4j stop]
174
+ end
175
+
176
+ desc "Restart the neo4j server running on localhost:#{NEO4J_PORT}"
177
+ task :restart do
178
+ puts "Restarting neo4j for keymaker_development..."
179
+ %x[#{NEO4J_INSTALL_DIR}/bin/neo4j restart]
180
+ end
181
+
182
+ desc "Wipe out and recreate the neo4j server running on localhost:#{NEO4J_PORT}"
183
+ task :reset do
184
+ puts "Resetting neo4j for keymaker_development..."
185
+ # Stop the server
186
+ %x[#{NEO4J_INSTALL_DIR}/bin/neo4j stop]
187
+ # Reset the database
188
+ FileUtils.rm_rf("#{NEO4J_INSTALL_DIR}/data/graph.db")
189
+ FileUtils.mkdir("#{NEO4J_INSTALL_DIR}/data/graph.db")
190
+ # Remove log files
191
+ FileUtils.rm_rf("#{NEO4J_INSTALL_DIR}/data/log")
192
+ FileUtils.mkdir("#{NEO4J_INSTALL_DIR}/data/log")
193
+ # Start the server
194
+ %x[#{NEO4J_INSTALL_DIR}/bin/neo4j start]
195
+ end
196
+
197
+ end
data/keymaker.gemspec CHANGED
@@ -14,8 +14,8 @@ Gem::Specification.new do |s|
14
14
  ## If your rubyforge_project name is different, then edit it and comment out
15
15
  ## the sub! line in the Rakefile
16
16
  s.name = 'keymaker'
17
- s.version = '0.0.2'
18
- s.date = '2012-06-07'
17
+ s.version = '0.0.3'
18
+ s.date = '2012-06-15'
19
19
 
20
20
  ## Make sure your summary is short. The description may be as long
21
21
  ## as you like.
@@ -63,7 +63,6 @@ Gem::Specification.new do |s|
63
63
  README.md
64
64
  Rakefile
65
65
  keymaker.gemspec
66
- keymaker_integration_spec.rb
67
66
  lib/keymaker.rb
68
67
  lib/keymaker/add_node_to_index_request.rb
69
68
  lib/keymaker/batch_get_nodes_request.rb
@@ -76,6 +75,7 @@ Gem::Specification.new do |s|
76
75
  lib/keymaker/indexing.rb
77
76
  lib/keymaker/node.rb
78
77
  lib/keymaker/path_traverse_request.rb
78
+ lib/keymaker/rails_tasks.rb
79
79
  lib/keymaker/remove_node_from_index_request.rb
80
80
  lib/keymaker/request.rb
81
81
  lib/keymaker/response.rb
data/lib/keymaker.rb CHANGED
@@ -24,7 +24,7 @@ require 'keymaker/node'
24
24
 
25
25
  module Keymaker
26
26
 
27
- VERSION = "0.0.2"
27
+ VERSION = "0.0.3"
28
28
 
29
29
  def self.service
30
30
  @service ||= Keymaker::Service.new(Keymaker::Configuration.new)
@@ -0,0 +1,68 @@
1
+ # Inspired by the neo4j tasks in maxdemarzi/neography
2
+ NEO4J_INSTALL_DIR = ENV['NEO4J_INSTALL_DIR'] || File.expand_path(File.join(Rails.root, "tmp", "neo_#{Rails.env}"))
3
+ NEO4J_PORT = ENV['NEO4J_PORT'] || Rails.env.test? ? "7475" : "7474"
4
+
5
+ namespace :neo4j do
6
+
7
+ desc "Install Neo4j for the current environment. e.g. rake neo4j:install or rake neo4j:install RAILS_ENV=test"
8
+ task :install, [:edition, :version] => [:environment] do |t, args|
9
+ args.with_defaults(:edition => "community", :version => "1.7")
10
+ source_name = "neo4j-#{args[:edition]}-#{args[:version]}"
11
+ tarball = "#{source_name}-unix.tar.gz"
12
+
13
+ puts "Installing #{source_name} for #{Rails.env} to localhost:#{NEO4J_PORT}..."
14
+
15
+ ssl_url_true = "org.neo4j.server.webserver.https.enabled=true"
16
+ ssl_url_false = ssl_url_true.gsub("true","false")
17
+
18
+ FileUtils.rm_rf(NEO4J_INSTALL_DIR) if Dir.exists?(NEO4J_INSTALL_DIR) && File.owned?(NEO4J_INSTALL_DIR)
19
+ %x[wget http://dist.neo4j.org/#{tarball}]
20
+ %x[tar xvzf #{tarball}]
21
+
22
+ %x[mv #{source_name} #{NEO4J_INSTALL_DIR}]
23
+ %x[rm #{tarball}]
24
+
25
+ %x[sed -i.bak 's/7474/#{NEO4J_PORT}/g' #{NEO4J_INSTALL_DIR}/conf/neo4j-server.properties]
26
+ %x[sed -i.bak 's/#{ssl_url_true}/#{ssl_url_false}/g' #{NEO4J_INSTALL_DIR}/conf/neo4j-server.properties]
27
+
28
+ puts "Installed #{source_name} for #{Rails.env} to localhost:#{NEO4J_PORT}..."
29
+ puts "Run `#{"RAILS_ENV=#{Rails.env} " if Rails.env.test?}rake neo4j:start` to start it"
30
+ end
31
+
32
+ desc "Start the Neo4j Server"
33
+ task :start => :environment do
34
+ puts "Starting Neo4j for #{Rails.env} on localhost:#{NEO4J_PORT}..."
35
+ %x[#{NEO4J_INSTALL_DIR}/bin/neo4j start]
36
+ end
37
+
38
+ desc "Stop the Neo4j Server"
39
+ task :stop => :environment do
40
+ puts "Stopping Neo4j for #{Rails.env} on localhost:#{NEO4J_PORT}..."
41
+ %x[#{NEO4J_INSTALL_DIR}/bin/neo4j stop]
42
+ end
43
+
44
+ desc "Restart the Neo4j Server"
45
+ task :restart => :environment do
46
+ puts "Restarting Neo4j for #{Rails.env} on localhost:#{NEO4J_PORT}..."
47
+ %x[#{NEO4J_INSTALL_DIR}/bin/neo4j restart]
48
+ end
49
+
50
+ desc "Reset the Neo4j Server"
51
+ task :reset => :environment do
52
+ puts "Resetting Neo4j for #{Rails.env} on localhost:#{NEO4J_PORT}..."
53
+ # Stop the server
54
+ %x[#{NEO4J_INSTALL_DIR}/bin/neo4j stop]
55
+
56
+ # Reset the database
57
+ FileUtils.rm_rf("#{NEO4J_INSTALL_DIR}/data/graph.db")
58
+ FileUtils.mkdir("#{NEO4J_INSTALL_DIR}/data/graph.db")
59
+
60
+ # Remove log files
61
+ FileUtils.rm_rf("#{NEO4J_INSTALL_DIR}/data/log")
62
+ FileUtils.mkdir("#{NEO4J_INSTALL_DIR}/data/log")
63
+
64
+ # Start the server
65
+ %x[#{NEO4J_INSTALL_DIR}/bin/neo4j start]
66
+ end
67
+
68
+ end
@@ -11,7 +11,7 @@ describe Keymaker do
11
11
 
12
12
  context "given a bad port number" do
13
13
 
14
- let(:url) { john_node_url.dup.gsub("7475", "49152") }
14
+ let(:url) { john_node_url.dup.gsub("7477", "49152") }
15
15
 
16
16
  after { service.connection = connection }
17
17
 
@@ -2,12 +2,12 @@ require 'keymaker'
2
2
 
3
3
  Keymaker.configure do |c|
4
4
  c.server = "localhost"
5
- c.port = 7475
5
+ c.port = 7477
6
6
  end
7
7
 
8
8
  shared_context "Keymaker connections" do
9
9
  let(:connection) do
10
- Faraday.new({url: "http://localhost:7475"}) do |conn|
10
+ Faraday.new({url: "http://localhost:7477"}) do |conn|
11
11
  conn.request :json
12
12
  conn.use FaradayMiddleware::ParseJson, content_type: /\bjson$/
13
13
  conn.adapter :net_http
@@ -81,11 +81,11 @@ def clear_graph
81
81
  end
82
82
 
83
83
  def clear_users_index
84
- raw_connection.delete("http://localhost:7475/db/data/index/node/users")
84
+ raw_connection.delete("http://localhost:7477/db/data/index/node/users")
85
85
  end
86
86
 
87
87
  def raw_connection
88
- Faraday.new({url: "http://localhost:7475"}) do |conn|
88
+ Faraday.new({url: "http://localhost:7477"}) do |conn|
89
89
  conn.request :json
90
90
  conn.use FaradayMiddleware::ParseJson, content_type: /\bjson$/
91
91
  conn.adapter :net_http
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: keymaker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-06-07 00:00:00.000000000 Z
13
+ date: 2012-06-15 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: addressable
@@ -139,7 +139,6 @@ files:
139
139
  - README.md
140
140
  - Rakefile
141
141
  - keymaker.gemspec
142
- - keymaker_integration_spec.rb
143
142
  - lib/keymaker.rb
144
143
  - lib/keymaker/add_node_to_index_request.rb
145
144
  - lib/keymaker/batch_get_nodes_request.rb
@@ -152,6 +151,7 @@ files:
152
151
  - lib/keymaker/indexing.rb
153
152
  - lib/keymaker/node.rb
154
153
  - lib/keymaker/path_traverse_request.rb
154
+ - lib/keymaker/rails_tasks.rb
155
155
  - lib/keymaker/remove_node_from_index_request.rb
156
156
  - lib/keymaker/request.rb
157
157
  - lib/keymaker/response.rb
@@ -177,7 +177,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
177
177
  version: '0'
178
178
  segments:
179
179
  - 0
180
- hash: 3389385073700397945
180
+ hash: 2452337814492070163
181
181
  required_rubygems_version: !ruby/object:Gem::Requirement
182
182
  none: false
183
183
  requirements:
@@ -1,182 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Keymaker do
4
-
5
- include_context "John and Sarah nodes"
6
-
7
- context "indeces" do
8
- include_context "John and Sarah indexed nodes"
9
-
10
- context "given a bad port number" do
11
-
12
- let(:url) { john_node_url.dup.gsub("7475", "49152") }
13
-
14
- after { service.connection = connection }
15
-
16
- def do_it
17
- connection.get(url)
18
- end
19
-
20
- it "raises an error" do
21
- expect { do_it }.to raise_error
22
- end
23
-
24
- end
25
-
26
- context "given an explicit connection" do
27
-
28
- let(:url) { john_node_url }
29
-
30
- before { service.connection = test_connection }
31
- after { service.connection = connection }
32
-
33
- def do_it
34
- service.connection.get(url)
35
- end
36
-
37
- it "uses the connection for requests" do
38
- faraday_stubs.get(Addressable::URI.parse(url).path) do
39
- [200, {}, "{}"]
40
- end
41
- do_it
42
- faraday_stubs.verify_stubbed_calls
43
- end
44
-
45
- end
46
-
47
- describe "#add_node_to_index(index_name, key, value, node_id)" do
48
-
49
- def do_it
50
- service.add_node_to_index(:users, :email, email, node_id)
51
- end
52
-
53
- context "given existing values" do
54
-
55
- let(:email) { john_email }
56
- let(:node_id) { john_node_id }
57
-
58
- it "adds the node to the index" do
59
- do_it
60
- connection.get(index_query_for_john_url).body.should be_present
61
- end
62
-
63
- it "returns a status of 201" do
64
- do_it.status.should == 201
65
- end
66
-
67
- end
68
-
69
- context "given an invalid node id" do
70
-
71
- let(:email) { john_email }
72
- let(:node_id) { -22 }
73
-
74
- it "returns a 500 status" do
75
- do_it.status.should == 500
76
- end
77
-
78
- end
79
-
80
- end
81
-
82
- describe "#remove_node_from_index(index_name, key, value, node_id)" do
83
-
84
- def do_it
85
- service.remove_node_from_index(:users, :email, email, node_id)
86
- end
87
-
88
- context "given existing values" do
89
-
90
- let(:email) { john_email }
91
- let(:node_id) { john_node_id }
92
-
93
- it "removes the node from the index" do
94
- do_it
95
- connection.get(index_query_for_john_url).body.should be_empty
96
- end
97
-
98
- it "returns a status of 204" do
99
- do_it.status.should == 204
100
- end
101
-
102
- it "keeps the other node indices" do
103
- do_it
104
- connection.get(index_query_for_sarah_url).body.should_not be_empty
105
- end
106
-
107
- end
108
-
109
- context "given unmatched values" do
110
-
111
- let(:email) { "unknown@example.com" }
112
- let(:node_id) { -22 }
113
-
114
- it "returns a 404 status" do
115
- do_it.status.should == 404
116
- end
117
-
118
- end
119
-
120
- end
121
- end
122
-
123
- describe "#execute_query" do
124
-
125
- def do_it
126
- service.execute_query("START user=node:users(email={email} RETURN user", email: john_email)
127
- end
128
-
129
- context "given existing values" do
130
-
131
- before { service.add_node_to_index(:users, :email, john_email, john_node_id) }
132
-
133
- it "performs the cypher query and responds" do
134
- do_it.should be_present
135
- end
136
-
137
- end
138
-
139
- end
140
-
141
- context "nodes" do
142
-
143
- include_context "Keymaker connections"
144
-
145
- describe "#create_node" do
146
-
147
- let(:properties) { { first_name: "john", last_name: "connor", email: "john@resistance.net" } }
148
-
149
- def do_it
150
- new_node_id = service.create_node(properties).neo4j_id
151
- connection.get("/db/data/node/#{new_node_id}/properties").body
152
- end
153
-
154
- it "creates a node with properties" do
155
- do_it.should == {"first_name"=>"john", "email"=>"john@resistance.net", "last_name"=>"connor"}
156
- end
157
-
158
- end
159
-
160
- end
161
-
162
- context "relationships" do
163
-
164
- include_context "Keymaker connections"
165
-
166
- describe "#create_relationship" do
167
-
168
- def do_it
169
- service.create_relationship(:loves, john_node_id, sarah_node_id).neo4j_id
170
- connection.get("/db/data/node/#{john_node_id}/relationships/all/loves").body.first
171
- end
172
-
173
- it "creates the relationship between the two nodes" do
174
- do_it["start"].should == john_node_url
175
- do_it["end"].should == sarah_node_url
176
- end
177
-
178
- end
179
-
180
- end
181
-
182
- end