neo4j-core 2.0.0.alpha.1-java → 2.0.0-java
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +2 -2
- data/README.rdoc +161 -13
- data/config/neo4j/config.yml +1 -1
- data/lib/db/active_tx_log +1 -0
- data/lib/db/index/lucene-store.db +0 -0
- data/lib/db/index/lucene.log.active +0 -0
- data/lib/db/messages.log +2299 -0
- data/lib/db/neostore +0 -0
- data/lib/db/neostore.id +0 -0
- data/lib/db/neostore.nodestore.db +0 -0
- data/lib/db/neostore.nodestore.db.id +0 -0
- data/lib/db/neostore.propertystore.db +0 -0
- data/lib/db/neostore.propertystore.db.arrays +0 -0
- data/lib/db/neostore.propertystore.db.arrays.id +0 -0
- data/lib/db/neostore.propertystore.db.id +0 -0
- data/lib/db/neostore.propertystore.db.index +0 -0
- data/lib/db/neostore.propertystore.db.index.id +0 -0
- data/lib/db/neostore.propertystore.db.index.keys +0 -0
- data/lib/db/neostore.propertystore.db.index.keys.id +0 -0
- data/lib/db/neostore.propertystore.db.strings +0 -0
- data/lib/db/neostore.propertystore.db.strings.id +0 -0
- data/lib/db/neostore.relationshipstore.db +0 -0
- data/lib/db/neostore.relationshipstore.db.id +0 -0
- data/lib/db/neostore.relationshiptypestore.db +0 -0
- data/lib/db/neostore.relationshiptypestore.db.id +0 -0
- data/lib/db/neostore.relationshiptypestore.db.names +0 -0
- data/lib/db/neostore.relationshiptypestore.db.names.id +0 -0
- data/lib/db/nioneo_logical.log.active +0 -0
- data/lib/db/tm_tx_log.1 +0 -0
- data/lib/neo4j-core.rb +20 -3
- data/lib/neo4j-core/cypher/cypher.rb +1033 -0
- data/lib/neo4j-core/cypher/result_wrapper.rb +48 -0
- data/lib/neo4j-core/database.rb +4 -5
- data/lib/neo4j-core/event_handler.rb +1 -1
- data/lib/neo4j-core/hash_with_indifferent_access.rb +165 -0
- data/lib/neo4j-core/index/class_methods.rb +27 -41
- data/lib/neo4j-core/index/index.rb +3 -4
- data/lib/neo4j-core/index/index_config.rb +30 -23
- data/lib/neo4j-core/index/indexer.rb +65 -53
- data/lib/neo4j-core/index/indexer_registry.rb +2 -2
- data/lib/neo4j-core/index/lucene_query.rb +53 -42
- data/lib/neo4j-core/index/unique_factory.rb +54 -0
- data/lib/neo4j-core/node/class_methods.rb +4 -4
- data/lib/neo4j-core/node/node.rb +1 -8
- data/lib/neo4j-core/property/java.rb +59 -0
- data/lib/neo4j-core/property/property.rb +1 -3
- data/lib/neo4j-core/relationship/relationship.rb +8 -10
- data/lib/neo4j-core/rels/rels.rb +9 -4
- data/lib/neo4j-core/rels/traverser.rb +13 -27
- data/lib/neo4j-core/traversal/prune_evaluator.rb +2 -2
- data/lib/neo4j-core/traversal/traverser.rb +122 -27
- data/lib/neo4j-core/version.rb +1 -1
- data/lib/neo4j-core/wrapper/class_methods.rb +22 -0
- data/lib/neo4j-core/wrapper/wrapper.rb +20 -0
- data/lib/neo4j/algo.rb +300 -0
- data/lib/neo4j/config.rb +3 -6
- data/lib/neo4j/cypher.rb +180 -0
- data/lib/neo4j/neo4j.rb +51 -23
- data/lib/neo4j/node.rb +27 -0
- data/lib/neo4j/relationship.rb +25 -0
- data/lib/test.rb~ +27 -0
- data/neo4j-core.gemspec +2 -2
- metadata +44 -11
- data/lib/neo4j-core/type_converters/type_converters.rb +0 -287
- data/lib/neo4j-core/version.rb~ +0 -3
- data/lib/test.rb +0 -27
data/lib/neo4j/neo4j.rb
CHANGED
@@ -5,10 +5,17 @@
|
|
5
5
|
# The Neo4j modules is used to interact with an Neo4j Database instance.
|
6
6
|
# You can for example start and stop an instance and list all the nodes that exist in the database.
|
7
7
|
#
|
8
|
-
#
|
8
|
+
# @example
|
9
|
+
# require 'neo4j'
|
10
|
+
# Neo4j::Transaction.run { Neo4j.ref_node.outgoing(:friends) << Neo4j::Node.new(:name => 'andreas')}
|
11
|
+
# Neo4j.ref_node.node(:outgoing, :friends)[:name] #=> 'andreas'
|
12
|
+
# Neo4j.query(Neo4j.ref_node){|ref| ref > ':friends' > :x; :x}
|
13
|
+
#
|
14
|
+
# ==== Notice - Starting and Stopping Neo4j
|
9
15
|
# You don't normally need to start the Neo4j database since it will be automatically started when needed.
|
10
16
|
# Before the database is started you should configure where the database is stored, see {Neo4j::Config]}.
|
11
17
|
#
|
18
|
+
#
|
12
19
|
module Neo4j
|
13
20
|
|
14
21
|
# @return [String] The version of the Neo4j jar files
|
@@ -51,9 +58,10 @@ module Neo4j
|
|
51
58
|
end
|
52
59
|
|
53
60
|
# Checks read only mode of the database. Only one process can have write access to the database.
|
61
|
+
# It will always return false if the database is not started yet.
|
54
62
|
# @return [true, false] if the database has started up in read only mode
|
55
63
|
def read_only?
|
56
|
-
(@db && @db.graph && @db.read_only?)
|
64
|
+
!!(@db && @db.graph && @db.read_only?)
|
57
65
|
end
|
58
66
|
|
59
67
|
# Returns a started db instance. Starts it's not running.
|
@@ -64,14 +72,10 @@ module Neo4j
|
|
64
72
|
db
|
65
73
|
end
|
66
74
|
|
67
|
-
#
|
68
|
-
|
69
|
-
|
70
|
-
end
|
71
|
-
|
72
|
-
# @return [String, nil] the current storage path of a running neo4j database. If the database is not running it returns nil.
|
75
|
+
# If the database is not running it returns Neo4j::Config.storage_path otherwise it asks the database
|
76
|
+
# @return [String] the current storage path of the database
|
73
77
|
def storage_path
|
74
|
-
return
|
78
|
+
return Neo4j::Config.storage_path unless db.running?
|
75
79
|
db.storage_path
|
76
80
|
end
|
77
81
|
|
@@ -85,18 +89,42 @@ module Neo4j
|
|
85
89
|
# Check the neo4j
|
86
90
|
# Returns an enumerable of hash values.
|
87
91
|
#
|
88
|
-
# @example
|
92
|
+
# @example Using the Cypher DSL
|
93
|
+
# q = Neo4j.query{ match node(3) <=> node(:x); ret :x}
|
94
|
+
# q.first[:n] #=> the @node
|
95
|
+
# q.columns.first => :n
|
96
|
+
#
|
97
|
+
# @example Using the Cypher DSL and one parameter (n=Neo4j.ref_node)
|
98
|
+
# q = Neo4j.query(Neo4j.ref_node){|n| n <=> node(:x); :x}
|
99
|
+
# q.first[:n] #=> the @node
|
100
|
+
# q.columns.first => :n
|
101
|
+
#
|
102
|
+
# @example Using an array of nodes
|
103
|
+
# # same as - two_nodes=node(Neo4j.ref_node.neo_id, node_b.neo_id), b = node(b.neo_id)
|
104
|
+
# q = Neo4j.query([Neo4j.ref_node, node_b], node_c){|two_nodes, b| two_nodes <=> b; b}
|
89
105
|
#
|
90
|
-
#
|
91
|
-
# q.
|
92
|
-
# q.
|
106
|
+
# @example With an string
|
107
|
+
# q = Neo4j._query("START n=node(42) RETURN n")
|
108
|
+
# q.first(:n) #=> the @node
|
109
|
+
# q.columns.first => :n
|
93
110
|
#
|
94
|
-
# @see
|
111
|
+
# @see Cypher
|
112
|
+
# @see http://docs.neo4j.org/chunked/milestone/cypher-query-lang.html The Cypher Query Language Documentation
|
95
113
|
# @note Returns a read-once only forward iterable.
|
96
|
-
# @
|
97
|
-
|
98
|
-
|
99
|
-
|
114
|
+
# @param params parameter for the query_dsl block
|
115
|
+
# @return [Neo4j::Core::Cypher::ResultWrapper] a forward read once only Enumerable, containing hash values.
|
116
|
+
def query(*params, &query_dsl)
|
117
|
+
q = Cypher.new(*params, &query_dsl).to_s
|
118
|
+
_query(q)
|
119
|
+
end
|
120
|
+
|
121
|
+
# Performs a cypher query with given string
|
122
|
+
# @param [String] q the cypher query as a String
|
123
|
+
# @return (see #query)
|
124
|
+
def _query(q)
|
125
|
+
engine = Java::OrgNeo4jCypherJavacompat::ExecutionEngine.new(db)
|
126
|
+
result = engine.execute(q)
|
127
|
+
Neo4j::Core::Cypher::ResultWrapper.new(result)
|
100
128
|
end
|
101
129
|
|
102
130
|
|
@@ -165,9 +193,8 @@ module Neo4j
|
|
165
193
|
|
166
194
|
# Usually, a client attaches relationships to this node that leads into various parts of the node space.
|
167
195
|
# ®return the reference node, which is a "starting point" in the node space.
|
168
|
-
# @note In case the ref_node has been assigned via the threadlocal_ref_node method,
|
196
|
+
# @note In case the ref_node has been assigned via the threadlocal_ref_node method,
|
169
197
|
# then that node will be returned instead.
|
170
|
-
# @see the design guide at http://wiki.neo4j.org/content/Design_Guide
|
171
198
|
def ref_node(this_db = self.started_db)
|
172
199
|
return Thread.current[:local_ref_node] if Thread.current[:local_ref_node]
|
173
200
|
default_ref_node(this_db)
|
@@ -199,15 +226,16 @@ module Neo4j
|
|
199
226
|
# Neo4j.management(org.neo4j.management.HighAvailability).isMaster
|
200
227
|
#
|
201
228
|
# @param jmx_clazz the JMX class http://api.neo4j.org/current/org/neo4j/management/package-summary.html
|
202
|
-
# @param this_db default currently
|
229
|
+
# @param this_db default currently running instance or a newly started neo4j db instance
|
203
230
|
# @see for the jmx_clazz p
|
204
|
-
|
231
|
+
# @node this
|
232
|
+
def management(jmx_clazz = Java::OrgNeo4jJmx::Primitives, this_db = self.started_db)
|
205
233
|
this_db.management(jmx_clazz)
|
206
234
|
end
|
207
235
|
|
208
236
|
# @return [Enumerable] all nodes in the database
|
209
237
|
def all_nodes(this_db = self.started_db)
|
210
|
-
|
238
|
+
Enumerator.new(this_db, :each_node)
|
211
239
|
end
|
212
240
|
|
213
241
|
# @return [Enumerable] all nodes in the database but not wrapped in ruby classes.
|
data/lib/neo4j/node.rb
CHANGED
@@ -9,14 +9,39 @@ module Neo4j
|
|
9
9
|
# *org.neo4j.kernel.impl.core.NodeProxy* object. This java object includes the same mixin as this class. The #class method on the java object
|
10
10
|
# returns Neo4j::Node in order to make it feel like an ordinary Ruby object.
|
11
11
|
#
|
12
|
+
# @example Create a node with one property (see {Neo4j::Core::Node::ClassMethods})
|
13
|
+
# Neo4j::Node.new(:name => 'andreas')
|
14
|
+
#
|
15
|
+
# @example Create a relationship (see {Neo4j::Core::Traversal})
|
16
|
+
# Neo4j::Node.new.outgoing(:friends) << Neo4j::Node.new
|
17
|
+
#
|
18
|
+
# @example Finding relationships (see {Neo4j::Core::Rels})
|
19
|
+
# node.rels(:outgoing, :friends)
|
20
|
+
#
|
21
|
+
# @example Lucene index (see {Neo4j::Core::Index})
|
22
|
+
# Neo4j::Node.trigger_on(:typex => 'MyTypeX')
|
23
|
+
# Neo4j::Node.index(:name)
|
24
|
+
# a = Neo4j::Node.new(:name => 'andreas', :typex => 'MyTypeX')
|
25
|
+
# # finish_tx
|
26
|
+
# Neo4j::Node.find(:name => 'andreas').first.should == a
|
27
|
+
#
|
12
28
|
class Node
|
13
29
|
extend Neo4j::Core::Node::ClassMethods
|
30
|
+
extend Neo4j::Core::Wrapper::ClassMethods
|
31
|
+
extend Neo4j::Core::Index::ClassMethods
|
14
32
|
|
15
33
|
include Neo4j::Core::Property
|
16
34
|
include Neo4j::Core::Rels
|
17
35
|
include Neo4j::Core::Traversal
|
18
36
|
include Neo4j::Core::Equal
|
19
37
|
include Neo4j::Core::Node
|
38
|
+
include Neo4j::Core::Wrapper
|
39
|
+
include Neo4j::Core::Property::Java # for documentation purpose only
|
40
|
+
include Neo4j::Core::Index
|
41
|
+
|
42
|
+
node_indexer do
|
43
|
+
index_names :exact => 'default_node_index_exact', :fulltext => 'default_node_index_fulltext'
|
44
|
+
end
|
20
45
|
|
21
46
|
class << self
|
22
47
|
|
@@ -29,6 +54,8 @@ module Neo4j
|
|
29
54
|
include Neo4j::Core::Traversal
|
30
55
|
include Neo4j::Core::Equal
|
31
56
|
include Neo4j::Core::Node
|
57
|
+
include Neo4j::Core::Wrapper
|
58
|
+
include Neo4j::Core::Index
|
32
59
|
end
|
33
60
|
end
|
34
61
|
end
|
data/lib/neo4j/relationship.rb
CHANGED
@@ -29,13 +29,36 @@ module Neo4j
|
|
29
29
|
#
|
30
30
|
# node.outgoing(:friends) << other_node << yet_another_node
|
31
31
|
#
|
32
|
+
# @example lucene index
|
33
|
+
# Neo4j::Relationship.trigger_on(:typey => 123)
|
34
|
+
# Neo4j::Relationship.index(:name)
|
35
|
+
# a = Neo4j::Relationship.new(:friends, Neo4j::Node.new, Neo4j::Node.new, :typey => 123, :name => 'kalle')
|
36
|
+
# # Finish tx
|
37
|
+
# Neo4j::Relationship.find(:name => 'kalle').first.should be_nil
|
38
|
+
#
|
32
39
|
# @see http://api.neo4j.org/current/org/neo4j/graphdb/Relationship.html
|
33
40
|
#
|
34
41
|
class Relationship
|
35
42
|
extend Neo4j::Core::Relationship::ClassMethods
|
43
|
+
extend Neo4j::Core::Wrapper::ClassMethods
|
44
|
+
extend Neo4j::Core::Index::ClassMethods
|
45
|
+
|
36
46
|
include Neo4j::Core::Property
|
37
47
|
include Neo4j::Core::Equal
|
38
48
|
include Neo4j::Core::Relationship
|
49
|
+
include Neo4j::Core::Wrapper
|
50
|
+
include Neo4j::Core::Property::Java # for documentation purpose only
|
51
|
+
include Neo4j::Core::Index
|
52
|
+
|
53
|
+
|
54
|
+
# (see Neo4j::Core::Relationship::ClassMethods#new)
|
55
|
+
def initialize(rel_type, start_node, end_node, props={})
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
rel_indexer do
|
60
|
+
index_names :exact => 'default_rel_index_exact', :fulltext => 'default_rel_index_fulltext'
|
61
|
+
end
|
39
62
|
|
40
63
|
class << self
|
41
64
|
def extend_java_class(java_clazz) #:nodoc:
|
@@ -43,6 +66,8 @@ module Neo4j
|
|
43
66
|
include Neo4j::Core::Property
|
44
67
|
include Neo4j::Core::Equal
|
45
68
|
include Neo4j::Core::Relationship
|
69
|
+
include Neo4j::Core::Wrapper
|
70
|
+
include Neo4j::Core::Index
|
46
71
|
end
|
47
72
|
end
|
48
73
|
|
data/lib/test.rb~
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'neo4j-core'
|
3
|
+
|
4
|
+
|
5
|
+
def connect(d)
|
6
|
+
d.each{|i| Neo4j::Relationship.new(:flies_to, i[:from], i[:to])}
|
7
|
+
end
|
8
|
+
|
9
|
+
puts "Using #{Neo4j::Core::VERSION}"
|
10
|
+
|
11
|
+
tx = Neo4j::Transaction.new
|
12
|
+
@a, @b, @c, @z = (1..4).map{Neo4j::Node.new}
|
13
|
+
connect([ {:from=>@a, :to=>@b}, {:from=>@a, :to=>@c}, {:from=>@b, :to=>@c},
|
14
|
+
{:from=>@b, :to=>@z}, {:from=>@c, :to=>@b}, {:from=>@c, :to=>@z}])
|
15
|
+
tx.success
|
16
|
+
tx.finish
|
17
|
+
|
18
|
+
|
19
|
+
traversal = @a.outgoing(:flies_to).depth(:all).eval_paths { |path| :include_and_continue }
|
20
|
+
|
21
|
+
# This prints out
|
22
|
+
#Path (1)--[flies_to,0]-->(2)
|
23
|
+
#Path (1)--[flies_to,1]-->(3)
|
24
|
+
#Path (1)--[flies_to,0]-->(2)--[flies_to,3]-->(4)
|
25
|
+
traversal.paths.each do |path|
|
26
|
+
puts "Path #{path.to_s}"
|
27
|
+
end
|
data/neo4j-core.gemspec
CHANGED
@@ -25,7 +25,7 @@ It comes included with the Apache Lucene document database.
|
|
25
25
|
s.files = Dir.glob("{bin,lib,config}/**/*") + %w(README.rdoc Gemfile neo4j-core.gemspec)
|
26
26
|
s.has_rdoc = true
|
27
27
|
s.extra_rdoc_files = %w( README.rdoc )
|
28
|
-
s.rdoc_options = ["--quiet", "--title", "Neo4j
|
28
|
+
s.rdoc_options = ["--quiet", "--title", "Neo4j::Core", "--line-numbers", "--main", "README.rdoc", "--inline-source"]
|
29
29
|
|
30
|
-
s.add_dependency("neo4j-community", "1.
|
30
|
+
s.add_dependency("neo4j-community", ">= 1.7.0")
|
31
31
|
end
|
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: neo4j-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
version: 2.0.0
|
4
|
+
prerelease:
|
5
|
+
version: 2.0.0
|
6
6
|
platform: java
|
7
7
|
authors:
|
8
8
|
- Andreas Ronge
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2012-
|
13
|
+
date: 2012-05-07 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: neo4j-community
|
@@ -18,9 +18,9 @@ dependencies:
|
|
18
18
|
requirement: &id001 !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
|
-
- - "
|
21
|
+
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 1.
|
23
|
+
version: 1.7.0
|
24
24
|
type: :runtime
|
25
25
|
version_requirements: *id001
|
26
26
|
description: |
|
@@ -37,9 +37,11 @@ extensions: []
|
|
37
37
|
extra_rdoc_files:
|
38
38
|
- README.rdoc
|
39
39
|
files:
|
40
|
-
- lib/test.rb
|
41
40
|
- lib/neo4j-core.rb
|
41
|
+
- lib/test.rb~
|
42
42
|
- lib/neo4j/config.rb
|
43
|
+
- lib/neo4j/algo.rb
|
44
|
+
- lib/neo4j/cypher.rb
|
43
45
|
- lib/neo4j/transaction.rb
|
44
46
|
- lib/neo4j/neo4j.rb
|
45
47
|
- lib/neo4j/neo4j.rb~
|
@@ -47,13 +49,14 @@ files:
|
|
47
49
|
- lib/neo4j/relationship.rb
|
48
50
|
- lib/neo4j-core/event_handler.rb
|
49
51
|
- lib/neo4j-core/lazy_map.rb
|
50
|
-
- lib/neo4j-core/
|
52
|
+
- lib/neo4j-core/hash_with_indifferent_access.rb
|
51
53
|
- lib/neo4j-core/database.rb
|
52
54
|
- lib/neo4j-core/relationship_set.rb
|
53
55
|
- lib/neo4j-core/version.rb
|
54
56
|
- lib/neo4j-core/to_java.rb
|
55
57
|
- lib/neo4j-core/node/node.rb
|
56
58
|
- lib/neo4j-core/node/class_methods.rb
|
59
|
+
- lib/neo4j-core/property/java.rb
|
57
60
|
- lib/neo4j-core/property/property.rb
|
58
61
|
- lib/neo4j-core/equal/equal.rb
|
59
62
|
- lib/neo4j-core/traversal/rel_expander.rb
|
@@ -62,17 +65,47 @@ files:
|
|
62
65
|
- lib/neo4j-core/traversal/traversal.rb
|
63
66
|
- lib/neo4j-core/traversal/traverser.rb
|
64
67
|
- lib/neo4j-core/traversal/evaluator.rb
|
65
|
-
- lib/neo4j-core/type_converters/type_converters.rb
|
66
68
|
- lib/neo4j-core/rels/traverser.rb
|
67
69
|
- lib/neo4j-core/rels/rels.rb
|
70
|
+
- lib/neo4j-core/wrapper/wrapper.rb
|
71
|
+
- lib/neo4j-core/wrapper/class_methods.rb
|
68
72
|
- lib/neo4j-core/index/index_config.rb
|
69
73
|
- lib/neo4j-core/index/indexer.rb
|
70
74
|
- lib/neo4j-core/index/lucene_query.rb
|
71
75
|
- lib/neo4j-core/index/indexer_registry.rb
|
76
|
+
- lib/neo4j-core/index/unique_factory.rb
|
72
77
|
- lib/neo4j-core/index/class_methods.rb
|
73
78
|
- lib/neo4j-core/index/index.rb
|
74
79
|
- lib/neo4j-core/relationship/class_methods.rb
|
75
80
|
- lib/neo4j-core/relationship/relationship.rb
|
81
|
+
- lib/neo4j-core/cypher/cypher.rb
|
82
|
+
- lib/neo4j-core/cypher/result_wrapper.rb
|
83
|
+
- lib/db/neostore.relationshiptypestore.db.names
|
84
|
+
- lib/db/neostore.id
|
85
|
+
- lib/db/neostore.relationshiptypestore.db.names.id
|
86
|
+
- lib/db/neostore.nodestore.db.id
|
87
|
+
- lib/db/neostore.propertystore.db.index
|
88
|
+
- lib/db/neostore.propertystore.db.strings.id
|
89
|
+
- lib/db/nioneo_logical.log.active
|
90
|
+
- lib/db/neostore.propertystore.db.strings
|
91
|
+
- lib/db/neostore.relationshiptypestore.db.id
|
92
|
+
- lib/db/neostore
|
93
|
+
- lib/db/neostore.nodestore.db
|
94
|
+
- lib/db/neostore.propertystore.db.index.keys.id
|
95
|
+
- lib/db/neostore.propertystore.db.arrays.id
|
96
|
+
- lib/db/messages.log
|
97
|
+
- lib/db/neostore.relationshipstore.db.id
|
98
|
+
- lib/db/neostore.propertystore.db.arrays
|
99
|
+
- lib/db/neostore.relationshipstore.db
|
100
|
+
- lib/db/neostore.propertystore.db.index.id
|
101
|
+
- lib/db/neostore.propertystore.db.id
|
102
|
+
- lib/db/neostore.propertystore.db
|
103
|
+
- lib/db/tm_tx_log.1
|
104
|
+
- lib/db/neostore.relationshiptypestore.db
|
105
|
+
- lib/db/active_tx_log
|
106
|
+
- lib/db/neostore.propertystore.db.index.keys
|
107
|
+
- lib/db/index/lucene-store.db
|
108
|
+
- lib/db/index/lucene.log.active
|
76
109
|
- config/neo4j/config.yml
|
77
110
|
- README.rdoc
|
78
111
|
- Gemfile
|
@@ -84,7 +117,7 @@ post_install_message:
|
|
84
117
|
rdoc_options:
|
85
118
|
- --quiet
|
86
119
|
- --title
|
87
|
-
- Neo4j
|
120
|
+
- Neo4j::Core
|
88
121
|
- --line-numbers
|
89
122
|
- --main
|
90
123
|
- README.rdoc
|
@@ -100,9 +133,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
100
133
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
134
|
none: false
|
102
135
|
requirements:
|
103
|
-
- - "
|
136
|
+
- - ">="
|
104
137
|
- !ruby/object:Gem::Version
|
105
|
-
version:
|
138
|
+
version: "0"
|
106
139
|
requirements: []
|
107
140
|
|
108
141
|
rubyforge_project: neo4j-core
|
@@ -1,287 +0,0 @@
|
|
1
|
-
module Neo4j
|
2
|
-
|
3
|
-
# Responsible for converting values from and to Java Neo4j and Lucene.
|
4
|
-
# You can implement your own converter by implementing the method <tt>convert?</tt>
|
5
|
-
# <tt>to_java</tt> and <tt>to_ruby</tt> in this module.
|
6
|
-
#
|
7
|
-
# There are currently three default converters that are triggered when a Time, Date or a DateTime is read or written
|
8
|
-
# if there is a type declared for the property.
|
9
|
-
#
|
10
|
-
# ==== Example
|
11
|
-
#
|
12
|
-
# Example of writing your own marshalling converter:
|
13
|
-
#
|
14
|
-
# class Foo
|
15
|
-
# include Neo4j::NodeMixin
|
16
|
-
# property :thing, :type => MyType
|
17
|
-
# end
|
18
|
-
#
|
19
|
-
# module Neo4j::TypeConverters
|
20
|
-
# class MyTypeConverter
|
21
|
-
# class << self
|
22
|
-
# def convert?(type)
|
23
|
-
# type == MyType
|
24
|
-
# end
|
25
|
-
#
|
26
|
-
# def to_java(val)
|
27
|
-
# "silly:#{val}"
|
28
|
-
# end
|
29
|
-
#
|
30
|
-
# def to_ruby(val)
|
31
|
-
# val.sub(/silly:/, '')
|
32
|
-
# end
|
33
|
-
# end
|
34
|
-
# end
|
35
|
-
# end
|
36
|
-
#
|
37
|
-
module TypeConverters
|
38
|
-
|
39
|
-
# The default converter to use if there isn't a specific converter for the type
|
40
|
-
class DefaultConverter
|
41
|
-
class << self
|
42
|
-
|
43
|
-
def to_java(value)
|
44
|
-
value
|
45
|
-
end
|
46
|
-
|
47
|
-
def to_ruby(value)
|
48
|
-
value
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
|
54
|
-
class BooleanConverter
|
55
|
-
class << self
|
56
|
-
|
57
|
-
def convert?(class_or_symbol)
|
58
|
-
:boolean == class_or_symbol
|
59
|
-
end
|
60
|
-
|
61
|
-
def to_java(value)
|
62
|
-
return nil if value.nil?
|
63
|
-
!!value && value != '0'
|
64
|
-
end
|
65
|
-
|
66
|
-
def to_ruby(value)
|
67
|
-
return nil if value.nil?
|
68
|
-
!!value && value != '0'
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
class SymbolConverter
|
74
|
-
class << self
|
75
|
-
|
76
|
-
def convert?(class_or_symbol)
|
77
|
-
:symbol == class_or_symbol || Symbol == class_or_symbol
|
78
|
-
end
|
79
|
-
|
80
|
-
def to_java(value)
|
81
|
-
return nil if value.nil?
|
82
|
-
value.to_s
|
83
|
-
end
|
84
|
-
|
85
|
-
def to_ruby(value)
|
86
|
-
return nil if value.nil?
|
87
|
-
value.to_sym
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
|
93
|
-
class StringConverter
|
94
|
-
class << self
|
95
|
-
|
96
|
-
def convert?(class_or_symbol)
|
97
|
-
[String, :string, :text].include? class_or_symbol
|
98
|
-
end
|
99
|
-
|
100
|
-
def to_java(value)
|
101
|
-
return nil if value.nil?
|
102
|
-
value.to_s
|
103
|
-
end
|
104
|
-
|
105
|
-
def to_ruby(value)
|
106
|
-
return nil if value.nil?
|
107
|
-
value.to_s
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
class FixnumConverter
|
115
|
-
class << self
|
116
|
-
|
117
|
-
def convert?(class_or_symbol)
|
118
|
-
Fixnum == class_or_symbol || :fixnum == class_or_symbol || :numeric == class_or_symbol
|
119
|
-
end
|
120
|
-
|
121
|
-
def to_java(value)
|
122
|
-
return nil if value.nil?
|
123
|
-
value.to_i
|
124
|
-
end
|
125
|
-
|
126
|
-
def to_ruby(value)
|
127
|
-
return nil if value.nil?
|
128
|
-
value.to_i
|
129
|
-
end
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
class FloatConverter
|
134
|
-
class << self
|
135
|
-
|
136
|
-
def convert?(clazz_or_symbol)
|
137
|
-
Float == clazz_or_symbol || :float == clazz_or_symbol
|
138
|
-
end
|
139
|
-
|
140
|
-
def to_java(value)
|
141
|
-
return nil if value.nil?
|
142
|
-
value.to_f
|
143
|
-
end
|
144
|
-
|
145
|
-
def to_ruby(value)
|
146
|
-
return nil if value.nil?
|
147
|
-
value.to_f
|
148
|
-
end
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
# Converts Date objects to Java long types. Must be timezone UTC.
|
153
|
-
class DateConverter
|
154
|
-
class << self
|
155
|
-
|
156
|
-
def convert?(clazz_or_symbol)
|
157
|
-
Date == clazz_or_symbol || :date == clazz_or_symbol
|
158
|
-
end
|
159
|
-
|
160
|
-
def to_java(value)
|
161
|
-
return nil if value.nil?
|
162
|
-
Time.utc(value.year, value.month, value.day).to_i
|
163
|
-
end
|
164
|
-
|
165
|
-
def to_ruby(value)
|
166
|
-
return nil if value.nil?
|
167
|
-
Time.at(value).utc.to_date
|
168
|
-
end
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
# Converts DateTime objects to and from Java long types. Must be timezone UTC.
|
173
|
-
class DateTimeConverter
|
174
|
-
class << self
|
175
|
-
|
176
|
-
def convert?(clazz_or_symbol)
|
177
|
-
DateTime == clazz_or_symbol || :datetime == clazz_or_symbol
|
178
|
-
end
|
179
|
-
|
180
|
-
# Converts the given DateTime (UTC) value to an Fixnum.
|
181
|
-
# Only utc times are supported !
|
182
|
-
def to_java(value)
|
183
|
-
return nil if value.nil?
|
184
|
-
if value.class == Date
|
185
|
-
Time.utc(value.year, value.month, value.day, 0, 0, 0).to_i
|
186
|
-
else
|
187
|
-
Time.utc(value.year, value.month, value.day, value.hour, value.min, value.sec).to_i
|
188
|
-
end
|
189
|
-
end
|
190
|
-
|
191
|
-
def to_ruby(value)
|
192
|
-
return nil if value.nil?
|
193
|
-
t = Time.at(value).utc
|
194
|
-
DateTime.civil(t.year, t.month, t.day, t.hour, t.min, t.sec)
|
195
|
-
end
|
196
|
-
end
|
197
|
-
end
|
198
|
-
|
199
|
-
class TimeConverter
|
200
|
-
class << self
|
201
|
-
|
202
|
-
def convert?(clazz_or_symbol)
|
203
|
-
Time == clazz_or_symbol || :time == clazz_or_symbol
|
204
|
-
end
|
205
|
-
|
206
|
-
# Converts the given DateTime (UTC) value to an Fixnum.
|
207
|
-
# Only utc times are supported !
|
208
|
-
def to_java(value)
|
209
|
-
return nil if value.nil?
|
210
|
-
if value.class == Date
|
211
|
-
Time.utc(value.year, value.month, value.day, 0, 0, 0).to_i
|
212
|
-
else
|
213
|
-
value.utc.to_i
|
214
|
-
end
|
215
|
-
end
|
216
|
-
|
217
|
-
def to_ruby(value)
|
218
|
-
return nil if value.nil?
|
219
|
-
Time.at(value).utc
|
220
|
-
end
|
221
|
-
end
|
222
|
-
end
|
223
|
-
|
224
|
-
class << self
|
225
|
-
|
226
|
-
# Mostly for testing purpose, You can use this method in order to
|
227
|
-
# add a converter while the neo4j has already started.
|
228
|
-
def converters=(converters)
|
229
|
-
@converters = converters
|
230
|
-
end
|
231
|
-
|
232
|
-
# Always returns a converter that handles to_ruby or to_java
|
233
|
-
# if +enforce_type+ is set to false then it will raise in case of unknown type
|
234
|
-
# otherwise it will return the DefaultConverter.
|
235
|
-
def converter(type = nil, enforce_type = true)
|
236
|
-
return DefaultConverter unless type
|
237
|
-
@converters ||= begin
|
238
|
-
Neo4j::TypeConverters.constants.find_all do |c|
|
239
|
-
Neo4j::TypeConverters.const_get(c).respond_to?(:convert?)
|
240
|
-
end.map do |c|
|
241
|
-
Neo4j::TypeConverters.const_get(c)
|
242
|
-
end
|
243
|
-
end
|
244
|
-
found = @converters.find {|c| c.convert?(type) }
|
245
|
-
raise "The type #{type.inspect} is unknown. Use one of #{@converters.map{|c| c.name }.join(", ")} or create a custom type converter." if !found && enforce_type
|
246
|
-
found or DefaultConverter
|
247
|
-
end
|
248
|
-
|
249
|
-
# Converts the given value to a Java type by using the registered converters.
|
250
|
-
# It just looks at the class of the given value unless an attribute name is given.
|
251
|
-
def convert(value, attribute = nil, klass = nil, enforce_type = true)
|
252
|
-
converter(attribute_type(value, attribute, klass), enforce_type).to_java(value)
|
253
|
-
end
|
254
|
-
|
255
|
-
# Converts the given property (key, value) to Java if there is a type converter for given type.
|
256
|
-
# The type must also be declared using Neo4j::NodeMixin#property property_name, :type => clazz
|
257
|
-
# If no Converter is defined for this value then it simply returns the given value.
|
258
|
-
def to_java(clazz, key, value)
|
259
|
-
type = clazz._decl_props[key.to_sym] && clazz._decl_props[key.to_sym][:type]
|
260
|
-
converter(type).to_java(value)
|
261
|
-
end
|
262
|
-
|
263
|
-
# Converts the given property (key, value) to Ruby if there is a type converter for given type.
|
264
|
-
# If no Converter is defined for this value then it simply returns the given value.
|
265
|
-
def to_ruby(clazz, key, value)
|
266
|
-
type = clazz._decl_props[key.to_sym] && clazz._decl_props[key.to_sym][:type]
|
267
|
-
converter(type).to_ruby(value)
|
268
|
-
end
|
269
|
-
|
270
|
-
private
|
271
|
-
def attribute_type(value, attribute = nil, klass = nil)
|
272
|
-
type = (attribute && klass) ? attribute_type_from_attribute_and_klass(value, attribute, klass) : nil
|
273
|
-
type || attribute_type_from_value(value)
|
274
|
-
end
|
275
|
-
|
276
|
-
def attribute_type_from_attribute_and_klass(value, attribute, klass)
|
277
|
-
if klass.respond_to?(:_decl_props)
|
278
|
-
(klass._decl_props.has_key?(attribute) && klass._decl_props[attribute][:type]) ? klass._decl_props[attribute][:type] : nil
|
279
|
-
end
|
280
|
-
end
|
281
|
-
|
282
|
-
def attribute_type_from_value(value)
|
283
|
-
value.class
|
284
|
-
end
|
285
|
-
end
|
286
|
-
end
|
287
|
-
end
|