diff --git a/README.rdoc b/README.rdoc index 9997506..a64a190 100644 --- a/README.rdoc +++ b/README.rdoc @@ -56,6 +56,9 @@ It will add the following rake tasks to your project: rake neo4j:restart # Restart Neo4j rake neo4j:reset_yes_i_am_sure # Wipe your Neo4j Database +Windows users will need to run in a command prompt with Administrative Privileges +in order to install Neo4j as a Service. + === Documentation @neo = Neography::Rest.new({:protocol => 'http://', diff --git a/lib/neography.rb b/lib/neography.rb index b37d851..e5835eb 100644 --- a/lib/neography.rb +++ b/lib/neography.rb @@ -21,6 +21,8 @@ def find_and_require_user_defined_code require 'json' require 'logger' require 'ostruct' +require 'os' +require 'zip/zipfilesystem' require 'neography/config' require 'neography/rest' diff --git a/lib/neography/tasks.rb b/lib/neography/tasks.rb index d87b123..f5a0c2a 100644 --- a/lib/neography/tasks.rb +++ b/lib/neography/tasks.rb @@ -4,35 +4,113 @@ desc "Install Neo4j" task :install do puts 'Installing Neo4j...' - %x[wget http://dist.neo4j.org/neo4j-community-1.5.M02-unix.tar.gz] - %x[tar -xvzf neo4j-community-1.5.M02-unix.tar.gz] - %x[mv neo4j-community-1.5.M02 neo4j] - %x[rm neo4j-community-1.5.M02-unix.tar.gz] - puts "Neo4j Installed in to neo4j directory." + + if OS::Underlying.windows? + # Download Neo4j + unless File.exist?('neo4j.zip') + df = File.open('neo4j.zip', 'wb') + begin + df << HTTParty.get("http://dist.neo4j.org/neo4j-community-1.5.M02-windows.zip") + ensure + df.close() + end + end + + # Extract and move to neo4j directory + unless File.exist?('neo4j') + Zip::ZipFile.open('neo4j.zip') do |zip_file| + zip_file.each do |f| + f_path=File.join(".", f.name) + FileUtils.mkdir_p(File.dirname(f_path)) + begin + zip_file.extract(f, f_path) unless File.exist?(f_path) + rescue + puts f.name + " failed to extract." + end + end + end + FileUtils.mv "neo4j-community-1.5.M02", "neo4j" + end + + # Install if running with Admin Privileges + if %x[reg query "HKU\\S-1-5-19"].size > 0 + %x[neo4j/bin/neo4j install] + puts "Neo4j Installed as a service." + end + + else + %x[wget http://dist.neo4j.org/neo4j-community-1.5.M02-unix.tar.gz] + %x[tar -xvzf neo4j-community-1.5.M02-unix.tar.gz] + %x[mv neo4j-community-1.5.M02 neo4j] + %x[rm neo4j-community-1.5.M02-unix.tar.gz] + puts "Neo4j Installed in to neo4j directory." + end puts "Type 'rake neo4j:start' to start it" end desc "Start the Neo4j Server" task :start do puts "Starting Neo4j..." - %x[neo4j/bin/neo4j start] + if OS::Underlying.windows? + if %x[reg query "HKU\\S-1-5-19"].size > 0 + %x[neo4j/bin/Neo4j.bat start] #start service + else + puts "Starting Neo4j directly, not as a service." + %x[neo4j/bin/Neo4j.bat] + end + else + %x[neo4j/bin/neo4j start] + end end desc "Stop the Neo4j Server" task :stop do puts "Stopping Neo4j..." - %x[neo4j/bin/neo4j stop] + if OS::Underlying.windows? + if %x[reg query "HKU\\S-1-5-19"].size > 0 + %x[neo4j/bin/Neo4j.bat stop] #stop service + else + puts "You do not have administrative rights to stop the Neo4j Service" + end + else + %x[neo4j/bin/neo4j stop] + end end desc "Restart the Neo4j Server" task :restart do puts "Restarting Neo4j..." - %x[neo4j/bin/neo4j restart] + if OS::Underlying.windows? + if %x[reg query "HKU\\S-1-5-19"].size > 0 + %x[neo4j/bin/Neo4j.bat restart] + else + puts "You do not have administrative rights to stop the Neo4j Service" + end + else + %x[neo4j/bin/neo4j restart] + end end desc "Reset the Neo4j Server" task :reset_yes_i_am_sure do - # Stop the server + # Stop the server + if OS::Underlying.windows? + if %x[reg query "HKU\\S-1-5-19"].size > 0 + %x[neo4j/bin/Neo4j.bat stop] + + # Reset the database + FileUtils.rm_rf("neo4j/data/graph.db") + FileUtils.mkdir("neo4j/data/graph.db") + + # Remove log files + FileUtils.rm_rf("neo4j/data/log") + FileUtils.mkdir("neo4j/data/log") + + %x[neo4j/bin/Neo4j.bat start] + else + puts "You do not have administrative rights to reset the Neo4j Service" + end + else %x[neo4j/bin/neo4j stop] # Reset the database @@ -46,5 +124,6 @@ # Start the server %x[neo4j/bin/neo4j start] end + end -end \ No newline at end of file +end diff --git a/neography.gemspec b/neography.gemspec index dc7e9a5..080f544 100644 --- a/neography.gemspec +++ b/neography.gemspec @@ -25,4 +25,6 @@ Gem::Specification.new do |s| s.add_development_dependency "rake", "~> 0.8.7" s.add_dependency "httparty", "~> 0.7.3" s.add_dependency "json" + s.add_dependency "os" + s.add_dependency "rubyzip" end