neon 0.1.0
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.
- checksums.yaml +7 -0
- data/Gemfile +6 -0
- data/README.md +432 -0
- data/lib/helpers/argument_helpers.rb +19 -0
- data/lib/helpers/transaction_helpers.rb +56 -0
- data/lib/neon.rb +23 -0
- data/lib/neon/Gemfile +8 -0
- data/lib/neon/node.rb +48 -0
- data/lib/neon/node/embedded.rb +31 -0
- data/lib/neon/node/rest.rb +109 -0
- data/lib/neon/property_container.rb +277 -0
- data/lib/neon/relationship.rb +38 -0
- data/lib/neon/relationship/embedded.rb +59 -0
- data/lib/neon/relationship/rest.rb +73 -0
- data/lib/neon/session.rb +68 -0
- data/lib/neon/session/embedded.rb +92 -0
- data/lib/neon/session/invalid_session.rb +6 -0
- data/lib/neon/session/rest.rb +53 -0
- data/lib/neon/transaction.rb +28 -0
- data/lib/neon/transaction/placebo.rb +38 -0
- data/lib/neon/transaction/rest.rb +47 -0
- data/lib/neon/version.rb +7 -0
- data/lib/tasks.rb +139 -0
- data/neon.gemspec +33 -0
- metadata +180 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
module Neon
|
|
2
|
+
module Transaction
|
|
3
|
+
class Rest < Placebo
|
|
4
|
+
def initialize(session)
|
|
5
|
+
@session = session
|
|
6
|
+
@tx = @session.neo.begin_transaction
|
|
7
|
+
# Mark for failure by default
|
|
8
|
+
failure
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def keep_alive
|
|
12
|
+
@session.neo.keep_transaction @tx
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def run_query(query, params={}, formats=nil)
|
|
16
|
+
query = [query, params] unless query.is_a?(Array) || !params.empty?
|
|
17
|
+
query << formats if formats.is_a?(Array)
|
|
18
|
+
@session.neo.in_transaction(@tx, query)["results"]
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def close
|
|
22
|
+
if success?
|
|
23
|
+
# puts "Commited tx"
|
|
24
|
+
@session.neo.commit_transaction @tx
|
|
25
|
+
else
|
|
26
|
+
# puts "Rollabcked tx"
|
|
27
|
+
@session.neo.rollback_transaction @tx
|
|
28
|
+
end
|
|
29
|
+
id = self.class.id_mapper(@session)
|
|
30
|
+
Thread.current[id] = nil if Thread.current[id] == self
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
class << self
|
|
34
|
+
def begin_tx(session)
|
|
35
|
+
id = id_mapper(session)
|
|
36
|
+
# Fetch the transaction associated with session. If none is found then begin a new one.
|
|
37
|
+
Thread.current[id] || Thread.current[id] = new(session)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Identity mapper
|
|
41
|
+
def id_mapper(session)
|
|
42
|
+
"Neon::#{session}"
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
data/lib/neon/version.rb
ADDED
data/lib/tasks.rb
ADDED
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# borrowed from architect4r
|
|
2
|
+
require 'os'
|
|
3
|
+
|
|
4
|
+
namespace :neo4j do
|
|
5
|
+
desc "Install Neo4j"
|
|
6
|
+
task :install, :edition, :version do |t, args|
|
|
7
|
+
args.with_defaults(:edition => "community", :version => "2.0.0")
|
|
8
|
+
puts "Installing Neo4j-#{args[:edition]}-#{args[:version]}"
|
|
9
|
+
|
|
10
|
+
if OS::Underlying.windows?
|
|
11
|
+
# Download Neo4j
|
|
12
|
+
unless File.exist?('neo4j.zip')
|
|
13
|
+
df = File.open('neo4j.zip', 'wb')
|
|
14
|
+
begin
|
|
15
|
+
df << HTTParty.get("http://dist.neo4j.org/neo4j-#{args[:edition]}-#{args[:version]}-windows.zip")
|
|
16
|
+
ensure
|
|
17
|
+
df.close()
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Extract and move to neo4j directory
|
|
22
|
+
unless File.exist?('neo4j')
|
|
23
|
+
Zip::ZipFile.open('neo4j.zip') do |zip_file|
|
|
24
|
+
zip_file.each do |f|
|
|
25
|
+
f_path=File.join(".", f.name)
|
|
26
|
+
FileUtils.mkdir_p(File.dirname(f_path))
|
|
27
|
+
begin
|
|
28
|
+
zip_file.extract(f, f_path) unless File.exist?(f_path)
|
|
29
|
+
rescue
|
|
30
|
+
puts f.name + " failed to extract."
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
FileUtils.mv "neo4j-#{args[:edition]}-#{args[:version]}", "neo4j"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Install if running with Admin Privileges
|
|
38
|
+
if %x[reg query "HKU\\S-1-5-19"].size > 0
|
|
39
|
+
puts %x[neo4j/bin/neo4j install]
|
|
40
|
+
puts "Neo4j Installed as a service."
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
else
|
|
44
|
+
file_name = "neo4j-#{args[:edition]}-#{args[:version]}-unix.tar.gz"
|
|
45
|
+
unless File.exist?(file_name)
|
|
46
|
+
puts %x[wget http://dist.neo4j.org/#{file_name}]
|
|
47
|
+
end
|
|
48
|
+
puts %x[tar -xvzf #{file_name}]
|
|
49
|
+
puts %x[mv neo4j-#{args[:edition]}-#{args[:version]} neo4j]
|
|
50
|
+
puts "Neo4j Installed in to neo4j directory."
|
|
51
|
+
# Make a duplicate database
|
|
52
|
+
puts %x[mkdir another_neo4j]
|
|
53
|
+
puts %x[cp -r neo4j/* another_neo4j]
|
|
54
|
+
end
|
|
55
|
+
# Replace default port 7474 with 4747 and HTTPS port 7473 with 4746
|
|
56
|
+
replace = File.read("another_neo4j/conf/neo4j-server.properties").gsub(/7474/, "4747").sub(/7473/, "4746")
|
|
57
|
+
File.open("another_neo4j/conf/neo4j-server.properties", "w") { |file| file.puts replace }
|
|
58
|
+
puts "Type 'rake neo4j:start' to start it"
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
desc "Start the Neo4j Server"
|
|
62
|
+
task :start do
|
|
63
|
+
puts "Starting Neo4j..."
|
|
64
|
+
if OS::Underlying.windows?
|
|
65
|
+
if %x[reg query "HKU\\S-1-5-19"].size > 0
|
|
66
|
+
puts %x[neo4j/bin/Neo4j.bat start] #start service
|
|
67
|
+
else
|
|
68
|
+
puts "Starting Neo4j directly, not as a service."
|
|
69
|
+
puts %x[neo4j/bin/Neo4j.bat]
|
|
70
|
+
end
|
|
71
|
+
else
|
|
72
|
+
puts %x[neo4j/bin/neo4j start]
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
desc "Stop the Neo4j Server"
|
|
77
|
+
task :stop do
|
|
78
|
+
puts "Stopping Neo4j..."
|
|
79
|
+
if OS::Underlying.windows?
|
|
80
|
+
if %x[reg query "HKU\\S-1-5-19"].size > 0
|
|
81
|
+
puts %x[neo4j/bin/Neo4j.bat stop] #stop service
|
|
82
|
+
else
|
|
83
|
+
puts "You do not have administrative rights to stop the Neo4j Service"
|
|
84
|
+
end
|
|
85
|
+
else
|
|
86
|
+
puts %x[neo4j/bin/neo4j stop]
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
desc "Restart the Neo4j Server"
|
|
91
|
+
task :restart do
|
|
92
|
+
puts "Restarting Neo4j..."
|
|
93
|
+
if OS::Underlying.windows?
|
|
94
|
+
if %x[reg query "HKU\\S-1-5-19"].size > 0
|
|
95
|
+
puts %x[neo4j/bin/Neo4j.bat restart]
|
|
96
|
+
else
|
|
97
|
+
puts "You do not have administrative rights to restart the Neo4j Service"
|
|
98
|
+
end
|
|
99
|
+
else
|
|
100
|
+
puts %x[neo4j/bin/neo4j restart]
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
desc "Reset the Neo4j Server"
|
|
105
|
+
task :reset do
|
|
106
|
+
# Stop the server
|
|
107
|
+
if OS::Underlying.windows?
|
|
108
|
+
if %x[reg query "HKU\\S-1-5-19"].size > 0
|
|
109
|
+
%x[neo4j/bin/Neo4j.bat stop]
|
|
110
|
+
|
|
111
|
+
# Reset the database
|
|
112
|
+
FileUtils.rm_rf("neo4j/data/graph.db")
|
|
113
|
+
FileUtils.mkdir("neo4j/data/graph.db")
|
|
114
|
+
|
|
115
|
+
# Remove log files
|
|
116
|
+
FileUtils.rm_rf("neo4j/data/log")
|
|
117
|
+
FileUtils.mkdir("neo4j/data/log")
|
|
118
|
+
|
|
119
|
+
puts %x[neo4j/bin/Neo4j.bat start]
|
|
120
|
+
else
|
|
121
|
+
puts "You do not have administrative rights to reset the Neo4j Service"
|
|
122
|
+
end
|
|
123
|
+
else
|
|
124
|
+
%x[neo4j/bin/neo4j stop]
|
|
125
|
+
|
|
126
|
+
# Reset the database
|
|
127
|
+
FileUtils.rm_rf("neo4j/data/graph.db")
|
|
128
|
+
FileUtils.mkdir("neo4j/data/graph.db")
|
|
129
|
+
|
|
130
|
+
# Remove log files
|
|
131
|
+
FileUtils.rm_rf("neo4j/data/log")
|
|
132
|
+
FileUtils.mkdir("neo4j/data/log")
|
|
133
|
+
|
|
134
|
+
# Start the server
|
|
135
|
+
puts %x[neo4j/bin/neo4j start]
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
end
|
data/neon.gemspec
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
lib = File.expand_path('../lib/', __FILE__)
|
|
2
|
+
$:.unshift lib unless $:.include?(lib)
|
|
3
|
+
|
|
4
|
+
require 'neon/version'
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |s|
|
|
7
|
+
s.name = "neon"
|
|
8
|
+
s.version = Neon::VERSION
|
|
9
|
+
s.required_ruby_version = ">= 1.9.2"
|
|
10
|
+
|
|
11
|
+
s.authors = "Ujjwal Thaakar"
|
|
12
|
+
s.email = 'ujjwalthaakar@gmail.com'
|
|
13
|
+
s.homepage = "http://github.com/ujjwalt/neon"
|
|
14
|
+
s.summary = "Sleek ruby bindings for Neo4J"
|
|
15
|
+
s.description = <<-EOF
|
|
16
|
+
Neon is fast, minimal ruby binding for the Neo4J.
|
|
17
|
+
It provides a simple api to manipulate a Neo4J database instance hosted on a server or running as an embedded instance.
|
|
18
|
+
EOF
|
|
19
|
+
|
|
20
|
+
s.require_path = 'lib'
|
|
21
|
+
s.files = Dir.glob("{bin,lib,config}/**/*") + %w(README.md Gemfile neon.gemspec)
|
|
22
|
+
|
|
23
|
+
# Development dependencies
|
|
24
|
+
s.add_development_dependency "os", "~> 0.9"
|
|
25
|
+
s.add_development_dependency "rake", "~> 10.1"
|
|
26
|
+
s.add_development_dependency "rspec", "~> 2.8"
|
|
27
|
+
s.add_development_dependency "yard", "~> 0.8"
|
|
28
|
+
|
|
29
|
+
s.add_dependency "httparty", "~> 0.12"
|
|
30
|
+
s.add_dependency "json", "~> 1.8"
|
|
31
|
+
s.add_dependency "neo4j-cypher", "~> 1.0"
|
|
32
|
+
s.add_dependency "neography", "~> 1.3"
|
|
33
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: neon
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Ujjwal Thaakar
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2014-01-14 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: os
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0.9'
|
|
20
|
+
type: :development
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '0.9'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: rake
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '10.1'
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '10.1'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: rspec
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '2.8'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '2.8'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: yard
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - "~>"
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0.8'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - "~>"
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '0.8'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: httparty
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - "~>"
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '0.12'
|
|
76
|
+
type: :runtime
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - "~>"
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '0.12'
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: json
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - "~>"
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: '1.8'
|
|
90
|
+
type: :runtime
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - "~>"
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: '1.8'
|
|
97
|
+
- !ruby/object:Gem::Dependency
|
|
98
|
+
name: neo4j-cypher
|
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
|
100
|
+
requirements:
|
|
101
|
+
- - "~>"
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
version: '1.0'
|
|
104
|
+
type: :runtime
|
|
105
|
+
prerelease: false
|
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
+
requirements:
|
|
108
|
+
- - "~>"
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: '1.0'
|
|
111
|
+
- !ruby/object:Gem::Dependency
|
|
112
|
+
name: neography
|
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
|
114
|
+
requirements:
|
|
115
|
+
- - "~>"
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: '1.3'
|
|
118
|
+
type: :runtime
|
|
119
|
+
prerelease: false
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
requirements:
|
|
122
|
+
- - "~>"
|
|
123
|
+
- !ruby/object:Gem::Version
|
|
124
|
+
version: '1.3'
|
|
125
|
+
description: |2
|
|
126
|
+
Neon is fast, minimal ruby binding for the Neo4J.
|
|
127
|
+
It provides a simple api to manipulate a Neo4J database instance hosted on a server or running as an embedded instance.
|
|
128
|
+
email: ujjwalthaakar@gmail.com
|
|
129
|
+
executables: []
|
|
130
|
+
extensions: []
|
|
131
|
+
extra_rdoc_files: []
|
|
132
|
+
files:
|
|
133
|
+
- Gemfile
|
|
134
|
+
- README.md
|
|
135
|
+
- lib/helpers/argument_helpers.rb
|
|
136
|
+
- lib/helpers/transaction_helpers.rb
|
|
137
|
+
- lib/neon.rb
|
|
138
|
+
- lib/neon/Gemfile
|
|
139
|
+
- lib/neon/node.rb
|
|
140
|
+
- lib/neon/node/embedded.rb
|
|
141
|
+
- lib/neon/node/rest.rb
|
|
142
|
+
- lib/neon/property_container.rb
|
|
143
|
+
- lib/neon/relationship.rb
|
|
144
|
+
- lib/neon/relationship/embedded.rb
|
|
145
|
+
- lib/neon/relationship/rest.rb
|
|
146
|
+
- lib/neon/session.rb
|
|
147
|
+
- lib/neon/session/embedded.rb
|
|
148
|
+
- lib/neon/session/invalid_session.rb
|
|
149
|
+
- lib/neon/session/rest.rb
|
|
150
|
+
- lib/neon/transaction.rb
|
|
151
|
+
- lib/neon/transaction/placebo.rb
|
|
152
|
+
- lib/neon/transaction/rest.rb
|
|
153
|
+
- lib/neon/version.rb
|
|
154
|
+
- lib/tasks.rb
|
|
155
|
+
- neon.gemspec
|
|
156
|
+
homepage: http://github.com/ujjwalt/neon
|
|
157
|
+
licenses: []
|
|
158
|
+
metadata: {}
|
|
159
|
+
post_install_message:
|
|
160
|
+
rdoc_options: []
|
|
161
|
+
require_paths:
|
|
162
|
+
- lib
|
|
163
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
164
|
+
requirements:
|
|
165
|
+
- - ">="
|
|
166
|
+
- !ruby/object:Gem::Version
|
|
167
|
+
version: 1.9.2
|
|
168
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
169
|
+
requirements:
|
|
170
|
+
- - ">="
|
|
171
|
+
- !ruby/object:Gem::Version
|
|
172
|
+
version: '0'
|
|
173
|
+
requirements: []
|
|
174
|
+
rubyforge_project:
|
|
175
|
+
rubygems_version: 2.2.0
|
|
176
|
+
signing_key:
|
|
177
|
+
specification_version: 4
|
|
178
|
+
summary: Sleek ruby bindings for Neo4J
|
|
179
|
+
test_files: []
|
|
180
|
+
has_rdoc:
|