neo4j-wrapper 0.0.1-java
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +10 -0
- data/README.rdoc +64 -0
- data/lib/db/active_tx_log +1 -0
- data/lib/db/index/lucene/node/Person_exact/_0.fdt +0 -0
- data/lib/db/index/lucene/node/Person_exact/_0.fdx +0 -0
- data/lib/db/index/lucene/node/Person_exact/_0.fnm +1 -0
- data/lib/db/index/lucene/node/Person_exact/_0.frq +0 -0
- data/lib/db/index/lucene/node/Person_exact/_0.nrm +1 -0
- data/lib/db/index/lucene/node/Person_exact/_0.prx +0 -0
- data/lib/db/index/lucene/node/Person_exact/_0.tii +0 -0
- data/lib/db/index/lucene/node/Person_exact/_0.tis +0 -0
- data/lib/db/index/lucene/node/Person_exact/_1.fdt +0 -0
- data/lib/db/index/lucene/node/Person_exact/_1.fdx +0 -0
- data/lib/db/index/lucene/node/Person_exact/_1.fnm +1 -0
- data/lib/db/index/lucene/node/Person_exact/_1.frq +0 -0
- data/lib/db/index/lucene/node/Person_exact/_1.nrm +1 -0
- data/lib/db/index/lucene/node/Person_exact/_1.prx +0 -0
- data/lib/db/index/lucene/node/Person_exact/_1.tii +0 -0
- data/lib/db/index/lucene/node/Person_exact/_1.tis +0 -0
- data/lib/db/index/lucene/node/Person_exact/_2.fdt +0 -0
- data/lib/db/index/lucene/node/Person_exact/_2.fdx +0 -0
- data/lib/db/index/lucene/node/Person_exact/_2.fnm +1 -0
- data/lib/db/index/lucene/node/Person_exact/_2.frq +0 -0
- data/lib/db/index/lucene/node/Person_exact/_2.nrm +1 -0
- data/lib/db/index/lucene/node/Person_exact/_2.prx +0 -0
- data/lib/db/index/lucene/node/Person_exact/_2.tii +0 -0
- data/lib/db/index/lucene/node/Person_exact/_2.tis +0 -0
- data/lib/db/index/lucene/node/Person_exact/segments.gen +0 -0
- data/lib/db/index/lucene/node/Person_exact/segments_3 +0 -0
- data/lib/db/index/lucene-store.db +0 -0
- data/lib/db/index/lucene.log.active +0 -0
- data/lib/db/index.db +0 -0
- data/lib/db/messages.log +826 -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/example.rb +34 -0
- data/lib/neo4j/identity_map.rb +109 -0
- data/lib/neo4j/node_mixin.rb +74 -0
- data/lib/neo4j/relationship_mixin.rb +62 -0
- data/lib/neo4j/type_converters/type_converters.rb +333 -0
- data/lib/neo4j-wrapper/class_methods.rb +27 -0
- data/lib/neo4j-wrapper/find.rb +65 -0
- data/lib/neo4j-wrapper/has_n/class_methods.rb +131 -0
- data/lib/neo4j-wrapper/has_n/decl_rel.rb +261 -0
- data/lib/neo4j-wrapper/has_n/instance_methods.rb +12 -0
- data/lib/neo4j-wrapper/has_n/nodes.rb +83 -0
- data/lib/neo4j-wrapper/node_mixin/class_methods.rb +53 -0
- data/lib/neo4j-wrapper/node_mixin/delegates.rb +140 -0
- data/lib/neo4j-wrapper/node_mixin/initialize.rb +43 -0
- data/lib/neo4j-wrapper/properties/class_methods.rb +150 -0
- data/lib/neo4j-wrapper/relationship_mixin/class_methods.rb +30 -0
- data/lib/neo4j-wrapper/relationship_mixin/delegates.rb +110 -0
- data/lib/neo4j-wrapper/relationship_mixin/initialize.rb +35 -0
- data/lib/neo4j-wrapper/rule/class_methods.rb +204 -0
- data/lib/neo4j-wrapper/rule/event_listener.rb +66 -0
- data/lib/neo4j-wrapper/rule/functions/count.rb +45 -0
- data/lib/neo4j-wrapper/rule/functions/function.rb +76 -0
- data/lib/neo4j-wrapper/rule/functions/sum.rb +31 -0
- data/lib/neo4j-wrapper/rule/instance_methods.rb +16 -0
- data/lib/neo4j-wrapper/rule/neo4j_core_ext/traverser.rb +29 -0
- data/lib/neo4j-wrapper/rule/rule.rb +134 -0
- data/lib/neo4j-wrapper/rule/rule_node.rb +205 -0
- data/lib/neo4j-wrapper/version.rb +5 -0
- data/lib/neo4j-wrapper/wrapper.rb +38 -0
- data/lib/neo4j-wrapper.rb +35 -0
- data/lib/test.rb +61 -0
- data/neo4j-wrapper.gemspec +31 -0
- metadata +162 -0
@@ -0,0 +1,140 @@
|
|
1
|
+
module Neo4j
|
2
|
+
module Wrapper
|
3
|
+
module NodeMixin
|
4
|
+
module Delegates
|
5
|
+
class << self
|
6
|
+
private
|
7
|
+
# @macro [new] node.delegate
|
8
|
+
# @method $1(*args, &block)
|
9
|
+
# Delegates to {http://rdoc.info/github/andreasronge/neo4j-core/master/Neo4j/Core/$2#$1-instance_method Neo4j::Core::Node#$1} using the <tt>_java_entity</tt> instance with the supplied parameters.
|
10
|
+
# @see Neo4j::NodeMixin#_java_entity
|
11
|
+
# @see http://rdoc.info/github/andreasronge/neo4j-core/master/Neo4j/Core/$2#$1-instance_method Neo4j::Core::Node#$1
|
12
|
+
def delegate(*args)
|
13
|
+
method_name = args.first
|
14
|
+
class_eval(<<-EOM, __FILE__, __LINE__)
|
15
|
+
def #{method_name}(*args, &block)
|
16
|
+
_java_entity.send(:#{method_name}, *args, &block)
|
17
|
+
end
|
18
|
+
EOM
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
# Methods included from Core::Property
|
24
|
+
# [], #[]=, #neo_id, #property?, #props, #update
|
25
|
+
|
26
|
+
# @macro node.delegate
|
27
|
+
delegate :[]=, 'Property'
|
28
|
+
|
29
|
+
# @macro node.delegate
|
30
|
+
delegate :[], 'Property'
|
31
|
+
|
32
|
+
# @macro node.delegate
|
33
|
+
delegate :property?, 'Property'
|
34
|
+
|
35
|
+
# @macro node.delegate
|
36
|
+
delegate :props, 'Property'
|
37
|
+
|
38
|
+
# @macro node.delegate
|
39
|
+
delegate :update, 'Property'
|
40
|
+
|
41
|
+
# @macro node.delegate
|
42
|
+
delegate :neo_id, 'Property'
|
43
|
+
|
44
|
+
|
45
|
+
#Methods included from Core::Rels
|
46
|
+
# _node, #_nodes, #_rel, #_rels, #node, #nodes, #rel, #rel?, #rels
|
47
|
+
|
48
|
+
# @macro node.delegate
|
49
|
+
delegate :node, 'Rels'
|
50
|
+
|
51
|
+
# @macro node.delegate
|
52
|
+
delegate :_node, 'Rels'
|
53
|
+
|
54
|
+
# @macro node.delegate
|
55
|
+
delegate :nodes, 'Rels'
|
56
|
+
|
57
|
+
# @macro node.delegate
|
58
|
+
delegate :_nodes, 'Rels'
|
59
|
+
|
60
|
+
# @macro node.delegate
|
61
|
+
delegate :rel, 'Rels'
|
62
|
+
|
63
|
+
# @macro node.delegate
|
64
|
+
delegate :_rel, 'Rels'
|
65
|
+
|
66
|
+
# @macro node.delegate
|
67
|
+
delegate :rels, 'Rels'
|
68
|
+
|
69
|
+
# @macro node.delegate
|
70
|
+
delegate :_rels, 'Rels'
|
71
|
+
|
72
|
+
# @macro node.delegate
|
73
|
+
delegate :rel?, 'Rels'
|
74
|
+
|
75
|
+
|
76
|
+
# Methods included from Core::Traversal
|
77
|
+
# both, #eval_paths, #expand, #incoming, #outgoing, #unique
|
78
|
+
|
79
|
+
# @macro node.delegate
|
80
|
+
delegate :both, 'Traversal'
|
81
|
+
|
82
|
+
# @macro node.delegate
|
83
|
+
delegate :eval_paths, 'Traversal'
|
84
|
+
|
85
|
+
# @macro node.delegate
|
86
|
+
delegate :expand, 'Traversal'
|
87
|
+
|
88
|
+
# @macro node.delegate
|
89
|
+
delegate :incoming, 'Traversal'
|
90
|
+
|
91
|
+
# @macro node.delegate
|
92
|
+
delegate :outgoing, 'Traversal'
|
93
|
+
|
94
|
+
# @macro node.delegate
|
95
|
+
delegate :unique, 'Traversal'
|
96
|
+
|
97
|
+
|
98
|
+
# Methods included from Core::Node
|
99
|
+
# #del, #exist?
|
100
|
+
|
101
|
+
# @macro node.delegate
|
102
|
+
delegate :del, 'Node'
|
103
|
+
|
104
|
+
# @macro node.delegate
|
105
|
+
delegate :exist?, 'Node'
|
106
|
+
|
107
|
+
# Methods included from Core::Property::Java
|
108
|
+
#get_property, #graph_database, #property_keys, #remove_property, #set_property
|
109
|
+
|
110
|
+
# @macro node.delegate
|
111
|
+
delegate :get_property, 'Property/Java'
|
112
|
+
|
113
|
+
# @macro node.delegate
|
114
|
+
delegate :set_property, 'Property/Java'
|
115
|
+
|
116
|
+
# @macro node.delegate
|
117
|
+
delegate :property_keys, 'Property/Java'
|
118
|
+
|
119
|
+
# @macro node.delegate
|
120
|
+
delegate :remove_property, 'Property/Java'
|
121
|
+
|
122
|
+
# Methods included from Core::Equal
|
123
|
+
#==, #eql?, #equal?
|
124
|
+
|
125
|
+
# @macro node.delegate
|
126
|
+
delegate :equal?, 'Equal'
|
127
|
+
|
128
|
+
# @macro node.delegate
|
129
|
+
delegate :eql?, 'Equal'
|
130
|
+
|
131
|
+
|
132
|
+
# @macro node.delegate
|
133
|
+
delegate :==
|
134
|
+
|
135
|
+
# @macro node.delegate
|
136
|
+
delegate :getId
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Neo4j
|
2
|
+
module Wrapper
|
3
|
+
module NodeMixin
|
4
|
+
module Initialize
|
5
|
+
|
6
|
+
# Init this node with the specified java neo node
|
7
|
+
# @param [Neo4j::Node] java_node the node this instance wraps
|
8
|
+
def init_on_load(java_node)
|
9
|
+
@_java_node = java_node
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
# Creates a new node and initialize with given properties.
|
14
|
+
# You can override this to provide your own initialization.
|
15
|
+
#
|
16
|
+
# @param [Object, :each_pair] args if the first item in the list implements :each_pair then it will be initialize with those properties
|
17
|
+
def init_on_create(*args)
|
18
|
+
_java_entity[:_classname] = self.class.to_s
|
19
|
+
if args[0].respond_to?(:each_pair)
|
20
|
+
args[0].each_pair { |k, v| respond_to?("#{k}=") ? self.send("#{k}=", v) : _java_entity[k] = v }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# @return [Neo4j::Node] Returns the org.neo4j.graphdb.Node wrapped object
|
25
|
+
# @see http://rdoc.info/github/andreasronge/neo4j-core/master/Neo4j/Node
|
26
|
+
def _java_node
|
27
|
+
@_java_node
|
28
|
+
end
|
29
|
+
|
30
|
+
# Implements the Neo4j::Node#wrapper and Neo4j::Relationship#wrapper method
|
31
|
+
# so that we don't have to care if the node is wrapped or not.
|
32
|
+
# @return self
|
33
|
+
def wrapper
|
34
|
+
self
|
35
|
+
end
|
36
|
+
|
37
|
+
alias_method :_java_entity, :_java_node
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,150 @@
|
|
1
|
+
module Neo4j
|
2
|
+
module Wrapper
|
3
|
+
module Property
|
4
|
+
|
5
|
+
module ClassMethods
|
6
|
+
|
7
|
+
# @return [Hash] a hash of all properties and its configuration defined by property class method
|
8
|
+
def _decl_props
|
9
|
+
@_decl_props ||= {}
|
10
|
+
end
|
11
|
+
|
12
|
+
# make sure the inherited classes inherit the <tt>_decl_props</tt> hash
|
13
|
+
def inherited(klass)
|
14
|
+
klass.instance_variable_set(:@_decl_props, _decl_props.clone)
|
15
|
+
super
|
16
|
+
end
|
17
|
+
|
18
|
+
# Generates accessor method and sets configuration for Neo4j node properties.
|
19
|
+
# The generated accessor creates a wrapper around the <tt>#[]</tt> and <tt>#[]=</tt> operators and
|
20
|
+
# support conversion of values before it is read or written to the database, using the <tt>:type</tt> config parameter.
|
21
|
+
# If a property is set to nil the property will be removed (just like the <tt>#[]=</tt>accessor])
|
22
|
+
# A lucene index can also be specified, using the <tt>:index</tt> config parameter.
|
23
|
+
# If you want to add index on a none declared property you can (still) use the <tt>index</tt> class method, see
|
24
|
+
# {Neo4j::Core::Index::Indexer}[http://rdoc.info/github/andreasronge/neo4j-core/master/Neo4j/Core/Index/Indexer]
|
25
|
+
#
|
26
|
+
# === :type
|
27
|
+
# A property can be of any primitive type (Boolean, String, Fixnum, Float)
|
28
|
+
# and does not even have to be the same. Arrays of primitive types is also supported. Array values must
|
29
|
+
# be of the same type and are mutable, e.g. you have to create a new array if you want to change one value.
|
30
|
+
# To make sure a property is always stored as the same type you can use the TypeConverter, which is specified using
|
31
|
+
# either the <tt>:type</tt> or the <tt>:converter</tt> parameter. This is also important when indexing, e.g finding a
|
32
|
+
# property which has been declared as a Fixnum but queried as a String will not work.
|
33
|
+
#
|
34
|
+
# === :converter
|
35
|
+
# You can implement your own converter, see Neo4j::TypeConverters.
|
36
|
+
# You can write your own converter by writing a class that respond to <tt>:index_as</tt>, <tt>:to_ruby</tt> and
|
37
|
+
# <tt>:to_java</tt>.
|
38
|
+
#
|
39
|
+
# === :index
|
40
|
+
# If a <tt>:index</tt> is specified the property will be automatically indexed.
|
41
|
+
# By default, there are two different indices available: <tt>:fulltext</tt> and <tt>:exact</tt>
|
42
|
+
# If not specified in a query it will use by default an <tt>:exact</tt> index.
|
43
|
+
# Notice, that you can't combine a fulltext and exact lucene query in the same query.
|
44
|
+
# If you are using fulltext index you <b>must</b> specify the type parameter in the find method
|
45
|
+
# (<tt>:exact</tt> is default).
|
46
|
+
# Also, if you want to sort or do range query make sure use the same query parameters as the declared type
|
47
|
+
# For example if you index with <tt>property :age, :index => :exact, :type => Fixnum)</tt> then you must query
|
48
|
+
# with age parameter being a fixnum, see examples below.
|
49
|
+
#
|
50
|
+
# @example a property with an index
|
51
|
+
#
|
52
|
+
# class Foo
|
53
|
+
# include Neo4j::NodeMixin
|
54
|
+
# property :description, :index => :fulltext
|
55
|
+
# end
|
56
|
+
#
|
57
|
+
# @example Lucene Query
|
58
|
+
# Foo.find("description: bla", :type => :fulltext)
|
59
|
+
# Foo.find({:description => "bla"}, {:type => :fulltext})
|
60
|
+
#
|
61
|
+
# @example Lucene Query with a Fixnum index
|
62
|
+
# Foo.find(:age => 35)
|
63
|
+
# Foo.find(:age => (32..37))
|
64
|
+
# Foo.find("age: 35") # does not work !
|
65
|
+
#
|
66
|
+
# === More Examples
|
67
|
+
#
|
68
|
+
# @example declare a property
|
69
|
+
# class Foo
|
70
|
+
# include Neo4j::NodeMixin
|
71
|
+
# property :age
|
72
|
+
# end
|
73
|
+
#
|
74
|
+
# @example use a declared property
|
75
|
+
# foo = Foo.new
|
76
|
+
# foo.age = "hej" # first set it to string
|
77
|
+
# foo.age = 42 # change it to a Fixnum
|
78
|
+
#
|
79
|
+
# However, you can specify an type for the index, see Neo4j::Index::Indexer#index
|
80
|
+
#
|
81
|
+
# @example conversion of none primitive types
|
82
|
+
#
|
83
|
+
# class Foo
|
84
|
+
# include Neo4j::NodeMixin
|
85
|
+
# property :since, :type => DateTime # will be converted into a fixnum
|
86
|
+
# end
|
87
|
+
#
|
88
|
+
# @example declare several properties in one line
|
89
|
+
#
|
90
|
+
# class Foo
|
91
|
+
# include Neo4j::NodeMixin
|
92
|
+
# property :name, :description, :type => String, :index => :exact
|
93
|
+
# end
|
94
|
+
#
|
95
|
+
# @param [Symbol, Hash] props one or more properties and optionally last a Hash for options
|
96
|
+
# @see Neo4j::TypeConverters
|
97
|
+
# @see http://rdoc.info/github/andreasronge/neo4j-core/master/Neo4j/Core/Index/LuceneQuery Neo4j::Core::Index::LuceneQuery
|
98
|
+
# @see http://rdoc.info/github/andreasronge/neo4j-core/master/Neo4j/Core/Index/Indexer Neo4j::Core::Index::Indexer
|
99
|
+
def property(*props)
|
100
|
+
options = props.last.kind_of?(Hash) ? props.pop : {}
|
101
|
+
|
102
|
+
props.uniq.each do |prop|
|
103
|
+
pname = prop.to_sym
|
104
|
+
_decl_props[pname] ||= {}
|
105
|
+
options.each { |key, value| _decl_props[pname][key] = value }
|
106
|
+
|
107
|
+
converter = options[:converter] || Neo4j::TypeConverters.converter(_decl_props[pname][:type])
|
108
|
+
_decl_props[pname][:converter] = converter
|
109
|
+
|
110
|
+
if options.include?(:index)
|
111
|
+
index(pname, :type => options[:index], :field_type => converter.index_as)
|
112
|
+
end
|
113
|
+
|
114
|
+
define_method(pname) do
|
115
|
+
self.class._converter(pname).to_ruby(self[pname])
|
116
|
+
end
|
117
|
+
|
118
|
+
name = (pname.to_s() +"=").to_sym
|
119
|
+
define_method(name) do |value|
|
120
|
+
self[pname] = self.class._converter(pname).to_java(value)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
|
126
|
+
# @param [String, Symbol] prop_name the name of the property
|
127
|
+
# @return [#to_java, #to_ruby, #field_type] a converter for the given property name
|
128
|
+
# @note if the property has not been defined it will return the DefaultConverter
|
129
|
+
# @see Neo4j::TypeConverters::DefaultConverter
|
130
|
+
def _converter(prop_name)
|
131
|
+
prop_conf = _decl_props[prop_name.to_sym]
|
132
|
+
Neo4j::TypeConverters::DefaultConverter unless prop_conf
|
133
|
+
prop_conf[:converter]
|
134
|
+
end
|
135
|
+
|
136
|
+
# Returns true if the given property name has been defined with the class
|
137
|
+
# method property or properties.
|
138
|
+
#
|
139
|
+
# Notice that the node may have properties that has not been declared.
|
140
|
+
# It is always possible to set an undeclared property on a node.
|
141
|
+
#
|
142
|
+
# @return [true, false]
|
143
|
+
def property?(prop_name)
|
144
|
+
return false if _decl_props[prop_name.to_sym].nil?
|
145
|
+
!_decl_props[prop_name.to_sym].nil?
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Neo4j
|
2
|
+
module Wrapper
|
3
|
+
module RelationshipMixin
|
4
|
+
module ClassMethods
|
5
|
+
|
6
|
+
# Creates a relationship between given nodes.
|
7
|
+
#
|
8
|
+
# You can use two callback method to initialize the relationship
|
9
|
+
# init_on_load:: this method is called when the relationship is loaded from the database
|
10
|
+
# init_on_create:: called when the relationship is created, will be provided with the same argument as the new method
|
11
|
+
#
|
12
|
+
# @param [String, Symbol] type the type of the relationships
|
13
|
+
# @param [Neo4j::Node, Neo4j::NodeMixin] from_node create relationship from this node
|
14
|
+
# @param [Neo4j::Node, Neo4j::NodeMixin] to_node create relationship to this node
|
15
|
+
# @param [Hash] props optional hash of properties to initialize the create relationship with
|
16
|
+
# @see http://rdoc.info/github/andreasronge/neo4j-core/master/Neo4j/Relationship Neo4j::Relationship
|
17
|
+
def new(type, from_node, to_node, *props)
|
18
|
+
rel = Neo4j::Relationship.create(type, from_node, to_node)
|
19
|
+
wrapped_rel = super()
|
20
|
+
Neo4j::IdentityMap.add(rel, wrapped_rel)
|
21
|
+
wrapped_rel.init_on_load(rel)
|
22
|
+
wrapped_rel.init_on_create(type, from_node, to_node, *props)
|
23
|
+
wrapped_rel
|
24
|
+
end
|
25
|
+
|
26
|
+
alias_method :create, :new
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
module Neo4j
|
2
|
+
module Wrapper
|
3
|
+
module RelationshipMixin
|
4
|
+
module Delegates
|
5
|
+
|
6
|
+
class << self
|
7
|
+
private
|
8
|
+
# @macro [new] node.delegate
|
9
|
+
# @method $1(*args, &block)
|
10
|
+
# Delegates to {http://rdoc.info/github/andreasronge/neo4j-core/master/Neo4j/Core/$2#$1-instance_method Neo4j::Core::Relationship#$1} using the <tt>_java_entity</tt> instance with the supplied parameters.
|
11
|
+
# @see Neo4j::Relationship#_java_entity
|
12
|
+
# @see http://rdoc.info/github/andreasronge/neo4j-core/master/Neo4j/Core/$2#$1-instance_method Neo4j::Relationship#$1
|
13
|
+
def delegate(*args)
|
14
|
+
method_name = args.first
|
15
|
+
class_eval(<<-EOM, __FILE__, __LINE__)
|
16
|
+
def #{method_name}(*args, &block)
|
17
|
+
_java_entity.send(:#{method_name}, *args, &block)
|
18
|
+
end
|
19
|
+
EOM
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
# Methods included from Core::Property
|
25
|
+
# [], #[]=, #neo_id, #property?, #props, #update
|
26
|
+
|
27
|
+
# @macro node.delegate
|
28
|
+
delegate :[]=, 'Property'
|
29
|
+
|
30
|
+
# @macro node.delegate
|
31
|
+
delegate :[], 'Property'
|
32
|
+
|
33
|
+
# @macro node.delegate
|
34
|
+
delegate :property?, 'Property'
|
35
|
+
|
36
|
+
# @macro node.delegate
|
37
|
+
delegate :props, 'Property'
|
38
|
+
|
39
|
+
# @macro node.delegate
|
40
|
+
delegate :update, 'Property'
|
41
|
+
|
42
|
+
# @macro node.delegate
|
43
|
+
delegate :neo_id, 'Property'
|
44
|
+
|
45
|
+
# Methods included from Core::Relationship
|
46
|
+
|
47
|
+
# @macro node.delegate
|
48
|
+
delegate :_end_node, 'Relationship'
|
49
|
+
|
50
|
+
# @macro node.delegate
|
51
|
+
delegate :end_node, 'Relationship'
|
52
|
+
|
53
|
+
|
54
|
+
# @macro node.delegate
|
55
|
+
delegate :_start_node, 'Relationship'
|
56
|
+
|
57
|
+
# @macro node.delegate
|
58
|
+
delegate :end_node, 'Relationship'
|
59
|
+
|
60
|
+
# @macro node.delegate
|
61
|
+
delegate :other_node, 'Relationship'
|
62
|
+
|
63
|
+
# @macro node.delegate
|
64
|
+
delegate :_other_node, 'Relationship'
|
65
|
+
|
66
|
+
# @macro node.delegate
|
67
|
+
delegate :del, 'Relationship'
|
68
|
+
|
69
|
+
# @macro node.delegate
|
70
|
+
delegate :exist?, 'Relationship'
|
71
|
+
|
72
|
+
# @macro node.delegate
|
73
|
+
delegate :rel_type, 'Relationship'
|
74
|
+
|
75
|
+
# Methods included from Core::Property::Java
|
76
|
+
#get_property, #graph_database, #property_keys, #remove_property, #set_property
|
77
|
+
|
78
|
+
# @macro node.delegate
|
79
|
+
delegate :get_property, 'Property/Java'
|
80
|
+
|
81
|
+
# @macro node.delegate
|
82
|
+
delegate :set_property, 'Property/Java'
|
83
|
+
|
84
|
+
# @macro node.delegate
|
85
|
+
delegate :property_keys, 'Property/Java'
|
86
|
+
|
87
|
+
# @macro node.delegate
|
88
|
+
delegate :remove_property, 'Property/Java'
|
89
|
+
|
90
|
+
# Methods included from Core::Equal
|
91
|
+
#==, #eql?, #equal?
|
92
|
+
|
93
|
+
# @macro node.delegate
|
94
|
+
delegate :equal?, 'Equal'
|
95
|
+
|
96
|
+
# @macro node.delegate
|
97
|
+
delegate :eql?, 'Equal'
|
98
|
+
|
99
|
+
|
100
|
+
# @macro node.delegate
|
101
|
+
delegate :==
|
102
|
+
|
103
|
+
# @macro node.delegate
|
104
|
+
delegate :getId
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Neo4j
|
2
|
+
module Wrapper
|
3
|
+
module RelationshipMixin
|
4
|
+
module Initialize
|
5
|
+
|
6
|
+
# Init this node with the specified java neo4j relationship.
|
7
|
+
def init_on_load(java_rel)
|
8
|
+
@_java_rel = java_rel
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
# Creates a new node and initialize with given properties.
|
13
|
+
# You can override this to provide your own initialization.
|
14
|
+
#
|
15
|
+
# @param (see Neo4j::Wrapper::RelationshipMixin::ClassMethods#new)
|
16
|
+
def init_on_create(rel_type, from_node, to_node, *props) # :nodoc:
|
17
|
+
_java_entity[:_classname] = self.class.to_s
|
18
|
+
if props.first.respond_to?(:each_pair)
|
19
|
+
props.first.each_pair { |k, v| respond_to?("#{k}=") ? self.send("#{k}=", v) : @_java_rel[k] = v }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# @returns [Neo4j::Relationship] the wrapped relationship object
|
24
|
+
# @see http://rdoc.info/github/andreasronge/neo4j-core/master/Neo4j/Relationship Neo4j::Relationship
|
25
|
+
def _java_rel
|
26
|
+
@_java_rel
|
27
|
+
end
|
28
|
+
|
29
|
+
alias_method :_java_entity, :_java_rel
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|