neo4j 2.0.0.alpha.5-java → 2.0.0.alpha.6-java
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/CHANGELOG +12 -0
- data/Gemfile +0 -4
- data/README.rdoc +106 -62
- data/lib/neo4j.rb +7 -33
- data/lib/neo4j/performance.rb +43 -0
- data/lib/neo4j/rails/accept_id.rb +19 -18
- data/lib/neo4j/rails/attributes.rb +366 -120
- data/lib/neo4j/rails/finders.rb +41 -15
- data/lib/neo4j/rails/has_n.rb +203 -0
- data/lib/neo4j/rails/identity.rb +25 -0
- data/lib/neo4j/rails/model.rb +65 -242
- data/lib/neo4j/rails/nested_attributes.rb +108 -0
- data/lib/neo4j/rails/node_persistance.rb +56 -0
- data/lib/neo4j/rails/observer.rb +0 -2
- data/lib/neo4j/rails/persistence.rb +32 -154
- data/lib/neo4j/rails/rack_middleware.rb +26 -2
- data/lib/neo4j/rails/rails.rb +9 -6
- data/lib/neo4j/rails/railtie.rb +1 -2
- data/lib/neo4j/rails/relationship.rb +18 -125
- data/lib/neo4j/rails/relationship_persistence.rb +107 -0
- data/lib/neo4j/rails/relationships/node_dsl.rb +72 -44
- data/lib/neo4j/rails/relationships/relationships.rb +187 -59
- data/lib/neo4j/rails/relationships/rels_dsl.rb +18 -17
- data/lib/neo4j/rails/relationships/storage.rb +19 -17
- data/lib/neo4j/rails/timestamps.rb +53 -51
- data/lib/neo4j/rails/transaction.rb +9 -1
- data/lib/neo4j/rails/validations/uniqueness.rb +1 -1
- data/lib/neo4j/rails/versioning/versioning.rb +2 -2
- data/lib/neo4j/version.rb +1 -1
- data/lib/orm_adapter/adapters/neo4j.rb +47 -46
- data/neo4j.gemspec +1 -1
- metadata +10 -69
- data/lib/neo4j/algo/algo.rb +0 -294
- data/lib/neo4j/batch/batch.rb +0 -4
- data/lib/neo4j/batch/indexer.rb +0 -109
- data/lib/neo4j/batch/inserter.rb +0 -179
- data/lib/neo4j/batch/rule_inserter.rb +0 -24
- data/lib/neo4j/batch/rule_node.rb +0 -72
- data/lib/neo4j/config.rb +0 -177
- data/lib/neo4j/core_ext/class/inheritable_attributes.rb +0 -12
- data/lib/neo4j/core_ext/class/rewrite_inheritable_attributes.rb +0 -170
- data/lib/neo4j/database.rb +0 -158
- data/lib/neo4j/equal.rb +0 -21
- data/lib/neo4j/event_handler.rb +0 -263
- data/lib/neo4j/has_list/class_methods.rb +0 -11
- data/lib/neo4j/has_list/has_list.rb +0 -3
- data/lib/neo4j/has_list/mapping.rb +0 -133
- data/lib/neo4j/has_n/class_methods.rb +0 -119
- data/lib/neo4j/has_n/decl_relationship_dsl.rb +0 -246
- data/lib/neo4j/has_n/has_n.rb +0 -3
- data/lib/neo4j/has_n/mapping.rb +0 -98
- data/lib/neo4j/identity_map.rb +0 -140
- data/lib/neo4j/index/class_methods.rb +0 -108
- data/lib/neo4j/index/index.rb +0 -39
- data/lib/neo4j/index/indexer.rb +0 -341
- data/lib/neo4j/index/indexer_registry.rb +0 -68
- data/lib/neo4j/index/lucene_query.rb +0 -256
- data/lib/neo4j/load.rb +0 -25
- data/lib/neo4j/migrations/class_methods.rb +0 -110
- data/lib/neo4j/migrations/extensions.rb +0 -58
- data/lib/neo4j/migrations/lazy_node_mixin.rb +0 -41
- data/lib/neo4j/migrations/migration.rb +0 -112
- data/lib/neo4j/migrations/migrations.rb +0 -6
- data/lib/neo4j/migrations/node_mixin.rb +0 -80
- data/lib/neo4j/migrations/ref_node_wrapper.rb +0 -32
- data/lib/neo4j/model.rb +0 -4
- data/lib/neo4j/neo4j.rb +0 -216
- data/lib/neo4j/node.rb +0 -270
- data/lib/neo4j/node_mixin/class_methods.rb +0 -51
- data/lib/neo4j/node_mixin/node_mixin.rb +0 -141
- data/lib/neo4j/paginated.rb +0 -23
- data/lib/neo4j/property/class_methods.rb +0 -79
- data/lib/neo4j/property/property.rb +0 -111
- data/lib/neo4j/rails/mapping/property.rb +0 -183
- data/lib/neo4j/rails/rel_persistence.rb +0 -237
- data/lib/neo4j/relationship.rb +0 -239
- data/lib/neo4j/relationship_mixin/class_methods.rb +0 -36
- data/lib/neo4j/relationship_mixin/relationship_mixin.rb +0 -142
- data/lib/neo4j/relationship_set.rb +0 -58
- data/lib/neo4j/rels/rels.rb +0 -110
- data/lib/neo4j/rels/traverser.rb +0 -102
- data/lib/neo4j/rule/class_methods.rb +0 -201
- data/lib/neo4j/rule/event_listener.rb +0 -66
- data/lib/neo4j/rule/functions/count.rb +0 -43
- data/lib/neo4j/rule/functions/function.rb +0 -74
- data/lib/neo4j/rule/functions/functions.rb +0 -3
- data/lib/neo4j/rule/functions/sum.rb +0 -29
- data/lib/neo4j/rule/rule.rb +0 -150
- data/lib/neo4j/rule/rule_node.rb +0 -217
- data/lib/neo4j/to_java.rb +0 -31
- data/lib/neo4j/transaction.rb +0 -73
- data/lib/neo4j/traversal/filter_predicate.rb +0 -25
- data/lib/neo4j/traversal/prune_evaluator.rb +0 -14
- data/lib/neo4j/traversal/rel_expander.rb +0 -31
- data/lib/neo4j/traversal/traversal.rb +0 -141
- data/lib/neo4j/traversal/traverser.rb +0 -284
- data/lib/neo4j/type_converters/type_converters.rb +0 -288
data/lib/neo4j/batch/batch.rb
DELETED
data/lib/neo4j/batch/indexer.rb
DELETED
@@ -1,109 +0,0 @@
|
|
1
|
-
module Neo4j
|
2
|
-
module Batch
|
3
|
-
class Indexer
|
4
|
-
|
5
|
-
delegate :field_types, :entity_type, :indexer_for, :indexed_value_for, :lucene_config, :via_relationships, :to => :@wrapped_indexer
|
6
|
-
|
7
|
-
def initialize(wrapped_indexer)
|
8
|
-
@wrapped_indexer = wrapped_indexer
|
9
|
-
@parent_indexers = wrapped_indexer.parent_indexers.collect{|i| Indexer.new(i)}
|
10
|
-
end
|
11
|
-
|
12
|
-
def indexer_for_field(field, rel_type)
|
13
|
-
dsl = via_relationships[field]
|
14
|
-
return nil if dsl.nil?
|
15
|
-
return nil if dsl.rel_type != rel_type
|
16
|
-
|
17
|
-
target_class = dsl.target_class
|
18
|
-
self.class.instance_for(target_class)
|
19
|
-
end
|
20
|
-
|
21
|
-
def index_node_via_rel(rel_type, other, node_props) #:nodoc:
|
22
|
-
return if node_props.empty? || via_relationships.empty?
|
23
|
-
props_copy = node_props.clone
|
24
|
-
|
25
|
-
while !props_copy.empty?
|
26
|
-
indexer = indexer_for_field(props_copy.keys.first, rel_type)
|
27
|
-
|
28
|
-
# put all other fields that are not of this index type in a new hash
|
29
|
-
other_index = {}
|
30
|
-
# delete all fields that are not of this index
|
31
|
-
props_copy.delete_if { |k, v| indexer != indexer_for_field(k, rel_type) && other_index[k] = v }
|
32
|
-
# add all those properties for this index
|
33
|
-
indexer && indexer.index_entity(other, props_copy)
|
34
|
-
|
35
|
-
# continue with the remaining fields
|
36
|
-
props_copy = other_index
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def index_entity(entity_id, props)
|
41
|
-
filter_props = props.keys.inject({}) { |memo, field| memo[field] = indexed_value_for(field, props[field]) if field_types.has_key?(field); memo }
|
42
|
-
|
43
|
-
while !filter_props.empty?
|
44
|
-
# pick one index type
|
45
|
-
index = batch_index_for_field(filter_props.keys[0])
|
46
|
-
# put all other fields that are not of this index type in a new hash
|
47
|
-
other_index = {}
|
48
|
-
# delete all fields that are not of this index
|
49
|
-
filter_props.delete_if { |k, v| index != batch_index_for_field(k) && other_index[k] = v }
|
50
|
-
# add all those properties for this index
|
51
|
-
index.add(entity_id, filter_props)
|
52
|
-
# continue with the remaining fields
|
53
|
-
filter_props = other_index
|
54
|
-
end
|
55
|
-
|
56
|
-
@parent_indexers.each { |i| i.index_entity(entity_id, props) }
|
57
|
-
end
|
58
|
-
|
59
|
-
def index_flush
|
60
|
-
return nil if @batch_indexes.nil?
|
61
|
-
@batch_indexes.values.each {|index| index.flush}
|
62
|
-
end
|
63
|
-
|
64
|
-
def index_get(key, value, index_type)
|
65
|
-
index = @batch_indexes && @batch_indexes[index_type]
|
66
|
-
return nil if index.nil?
|
67
|
-
index.get(key,value)
|
68
|
-
end
|
69
|
-
|
70
|
-
def index_query(query, index_type)
|
71
|
-
index = @batch_indexes && @batch_indexes[index_type]
|
72
|
-
return nil if index.nil?
|
73
|
-
index.query(query)
|
74
|
-
end
|
75
|
-
|
76
|
-
|
77
|
-
def batch_index_for_field(field)
|
78
|
-
type = field_types[field]
|
79
|
-
@batch_indexes ||= {}
|
80
|
-
@batch_indexes[type] ||= create_batch_index_with(type)
|
81
|
-
end
|
82
|
-
|
83
|
-
def create_batch_index_with(type)
|
84
|
-
index_config = lucene_config(type)
|
85
|
-
|
86
|
-
if entity_type == :node
|
87
|
-
self.class.index_provider.node_index(indexer_for.index_names[type], index_config)
|
88
|
-
else
|
89
|
-
self.class.index_provider.relationship_index(indexer_for.index_names[type], index_config)
|
90
|
-
end
|
91
|
-
|
92
|
-
end
|
93
|
-
|
94
|
-
class << self
|
95
|
-
attr_accessor :index_provider
|
96
|
-
|
97
|
-
def instance_for(clazz)
|
98
|
-
@instances ||= {}
|
99
|
-
@instances[clazz.to_s] ||= Indexer.new(clazz._indexer)
|
100
|
-
end
|
101
|
-
|
102
|
-
# Mostly for testing
|
103
|
-
def clear_all_instances
|
104
|
-
@instances = nil
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
data/lib/neo4j/batch/inserter.rb
DELETED
@@ -1,179 +0,0 @@
|
|
1
|
-
module Neo4j
|
2
|
-
module Batch
|
3
|
-
|
4
|
-
# = Batch Insert
|
5
|
-
# Neo4j has a batch insert mode that drops support for transactions and concurrency in favor of insertion speed.
|
6
|
-
# This is useful when you have a big dataset that needs to be loaded once. In our experience, the batch inserter will
|
7
|
-
# typically inject data around five times faster than running in normal transactional mode.
|
8
|
-
#
|
9
|
-
# Be aware that the BatchInserter is intended use is for initial import of data
|
10
|
-
# * non thread safe
|
11
|
-
# * non transactional
|
12
|
-
# * failure to successfully invoke shutdown (properly) results in corrupt database files
|
13
|
-
#
|
14
|
-
class Inserter
|
15
|
-
attr_reader :batch_inserter, :batch_indexer
|
16
|
-
include ToJava
|
17
|
-
include Neo4j::Load
|
18
|
-
|
19
|
-
# Creates a new batch inserter.
|
20
|
-
# Will raise an exception if Neo4j is already running at the same storage_path
|
21
|
-
#
|
22
|
-
def initialize(storage_path=Neo4j.config.storage_path, config={})
|
23
|
-
# check if neo4j is running and using the same storage path
|
24
|
-
raise "Not allowed to start batch inserter while Neo4j is already running at storage location #{storage_path}" if Neo4j.storage_path == storage_path
|
25
|
-
@batch_inserter = org.neo4j.kernel.impl.batchinsert.BatchInserterImpl.new(storage_path, config)
|
26
|
-
Indexer.index_provider = org.neo4j.index.impl.lucene.LuceneBatchInserterIndexProvider.new(@batch_inserter)
|
27
|
-
@rule_inserter = RuleInserter.new(self)
|
28
|
-
end
|
29
|
-
|
30
|
-
def running?
|
31
|
-
@batch_inserter != nil
|
32
|
-
end
|
33
|
-
|
34
|
-
# This method MUST be called after inserting is completed.
|
35
|
-
def shutdown
|
36
|
-
@batch_inserter && @batch_inserter.shutdown
|
37
|
-
@batch_inserter = nil
|
38
|
-
@rule_inserter = nil
|
39
|
-
|
40
|
-
Indexer.index_provider
|
41
|
-
Indexer.index_provider && Indexer.index_provider.shutdown
|
42
|
-
Indexer.index_provider = nil
|
43
|
-
Indexer.clear_all_instances
|
44
|
-
end
|
45
|
-
|
46
|
-
# Creates a node. Returns a Fixnum id of the created node.
|
47
|
-
# Adds a lucene index if there is a lucene index declared on the properties
|
48
|
-
def create_node(props=nil, clazz = Neo4j::Node)
|
49
|
-
props = {} if clazz != Neo4j::Node && props.nil?
|
50
|
-
props['_classname'] = clazz.to_s if clazz != Neo4j::Node
|
51
|
-
|
52
|
-
props = ensure_valid_props(props)
|
53
|
-
|
54
|
-
node = @batch_inserter.create_node(props)
|
55
|
-
props && _index(node, props, clazz)
|
56
|
-
@rule_inserter.node_added(node, props)
|
57
|
-
node
|
58
|
-
end
|
59
|
-
|
60
|
-
# returns true if the node exists
|
61
|
-
def node_exist?(id)
|
62
|
-
@batch_inserter.node_exists(id)
|
63
|
-
end
|
64
|
-
|
65
|
-
def ref_node
|
66
|
-
@batch_inserter.get_reference_node
|
67
|
-
end
|
68
|
-
|
69
|
-
# creates a relationship between given nodes of given type.
|
70
|
-
# Returns a fixnum id of the created relationship.
|
71
|
-
def create_rel(rel_type, from_node, to_node, props=nil, clazz=Neo4j::Relationship)
|
72
|
-
props = {} if clazz != Neo4j::Relationship && props.nil?
|
73
|
-
props['_classname'] = clazz.to_s if clazz != Neo4j::Relationship
|
74
|
-
|
75
|
-
props = ensure_valid_props(props)
|
76
|
-
|
77
|
-
rel = @batch_inserter.create_relationship(from_node, to_node, type_to_java(rel_type), props)
|
78
|
-
|
79
|
-
props && _index(rel, props, clazz)
|
80
|
-
|
81
|
-
from_props = node_props(from_node)
|
82
|
-
|
83
|
-
if from_props['_classname']
|
84
|
-
from_class = to_class(from_props['_classname'])
|
85
|
-
indexer = Indexer.instance_for(from_class)
|
86
|
-
indexer.index_node_via_rel(rel_type, to_node, from_props)
|
87
|
-
end
|
88
|
-
|
89
|
-
to_props = node_props(to_node)
|
90
|
-
if to_props['_classname']
|
91
|
-
to_class = to_class(to_props['_classname'])
|
92
|
-
indexer = Indexer.instance_for(to_class)
|
93
|
-
indexer.index_node_via_rel(rel_type, from_node, to_props)
|
94
|
-
end
|
95
|
-
rel
|
96
|
-
end
|
97
|
-
|
98
|
-
# Return a hash of all properties of given node
|
99
|
-
def node_props(node)
|
100
|
-
@batch_inserter.get_node_properties(node)
|
101
|
-
end
|
102
|
-
|
103
|
-
# Sets the properties of the given node, overwrites old properties
|
104
|
-
def set_node_props(node, hash, clazz = Neo4j::Node)
|
105
|
-
@batch_inserter.set_node_properties(node, hash)
|
106
|
-
_index(node, hash, clazz)
|
107
|
-
end
|
108
|
-
|
109
|
-
# Sets the old properties of the given relationship, overwrites old properties
|
110
|
-
def set_rel_props(rel, hash)
|
111
|
-
@batch_inserter.set_relationship_properties(rel, hash)
|
112
|
-
end
|
113
|
-
|
114
|
-
# Returns the properties of the given relationship
|
115
|
-
def rel_props(rel)
|
116
|
-
@batch_inserter.get_relationship_properties(rel)
|
117
|
-
end
|
118
|
-
|
119
|
-
# Returns all the relationships of the given node
|
120
|
-
def rels(node)
|
121
|
-
@batch_inserter.getRelationships(node)
|
122
|
-
end
|
123
|
-
|
124
|
-
# Makes sure additions/updates can be seen by #index_get and #index_query
|
125
|
-
# so that they are guaranteed to return correct results.
|
126
|
-
def index_flush(clazz = Neo4j::Node)
|
127
|
-
indexer = Indexer.instance_for(clazz)
|
128
|
-
indexer.index_flush
|
129
|
-
end
|
130
|
-
|
131
|
-
# Returns matches from the index specified by index_type and class.
|
132
|
-
#
|
133
|
-
# ==== Parameters
|
134
|
-
# * key :: the lucene key
|
135
|
-
# * value :: the lucene value we look for given the key
|
136
|
-
# * index_type :: :exact or :fulltext
|
137
|
-
# * clazz :: on which clazz we want to perform the query
|
138
|
-
#
|
139
|
-
def index_get(key, value, index_type = :exact, clazz = Neo4j::Node)
|
140
|
-
indexer = Indexer.instance_for(clazz)
|
141
|
-
indexer.index_get(key, value, index_type)
|
142
|
-
end
|
143
|
-
|
144
|
-
# Returns matches from the index specified by index_type and class.
|
145
|
-
#
|
146
|
-
# ==== Parameters
|
147
|
-
# * query :: lucene query
|
148
|
-
# * index_type :: :exact or :fulltext
|
149
|
-
# * clazz :: on which clazz we want to perform the query
|
150
|
-
#
|
151
|
-
def index_query(query, index_type = :exact, clazz = Neo4j::Node)
|
152
|
-
indexer = Indexer.instance_for(clazz)
|
153
|
-
indexer.index_query(query, index_type)
|
154
|
-
end
|
155
|
-
|
156
|
-
# index the given entity (a node or a relationship)
|
157
|
-
def _index(entity, props, clazz = Neo4j::Node) #:nodoc:
|
158
|
-
indexer = Indexer.instance_for(clazz)
|
159
|
-
indexer.index_entity(entity, props)
|
160
|
-
end
|
161
|
-
|
162
|
-
|
163
|
-
# hmm, maybe faster not wrapping this ?
|
164
|
-
def to_java_map(hash)
|
165
|
-
return nil if hash.nil?
|
166
|
-
map = java.util.HashMap.new
|
167
|
-
hash.each_pair do |k, v|
|
168
|
-
case v
|
169
|
-
when Symbol
|
170
|
-
map[k.to_s] = v.to_s
|
171
|
-
else
|
172
|
-
map[k.to_s] = v
|
173
|
-
end
|
174
|
-
end
|
175
|
-
map
|
176
|
-
end
|
177
|
-
end
|
178
|
-
end
|
179
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
module Neo4j
|
2
|
-
module Batch
|
3
|
-
class RuleInserter #:nodoc:
|
4
|
-
def initialize(inserter)
|
5
|
-
@inserter = inserter
|
6
|
-
end
|
7
|
-
|
8
|
-
def node_added(node, props)
|
9
|
-
classname = props && props['_classname']
|
10
|
-
classname && create_rules(node, props, classname)
|
11
|
-
end
|
12
|
-
|
13
|
-
|
14
|
-
def create_rules(node, props, classname)
|
15
|
-
rule_node = RuleNode.rule_node_for(classname, @inserter)
|
16
|
-
rule_node && rule_node.execute_rules(@inserter, node, props)
|
17
|
-
|
18
|
-
if (clazz = eval("#{classname}.superclass")) && clazz.include?(Neo4j::NodeMixin)
|
19
|
-
create_rules(node, props, clazz.to_s)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,72 +0,0 @@
|
|
1
|
-
module Neo4j
|
2
|
-
module Batch
|
3
|
-
class RuleNode #:nodoc:
|
4
|
-
attr_reader :node
|
5
|
-
delegate :rules, :to => :@wrapped_rule_node
|
6
|
-
|
7
|
-
def initialize(wrapped_rule_node, node)
|
8
|
-
@wrapped_rule_node = wrapped_rule_node
|
9
|
-
@node = node
|
10
|
-
end
|
11
|
-
|
12
|
-
def execute_rules(inserter, node, props)
|
13
|
-
rules.each do |rule|
|
14
|
-
if execute_filter(rule, props)
|
15
|
-
inserter.create_rel(rule.rule_name, @node, node)
|
16
|
-
execute_add_functions(inserter, rule, props)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def execute_add_functions(inserter, rule, props)
|
22
|
-
rule_props = nil
|
23
|
-
executed_functions = []
|
24
|
-
props.keys.each do |key|
|
25
|
-
functions = rule.functions_for(key)
|
26
|
-
next unless functions
|
27
|
-
functions -= executed_functions
|
28
|
-
rule_props ||= clone_node_props(inserter) #inserter.node_props(@node)
|
29
|
-
functions.each { |f| executed_functions << f; f.add(rule.rule_name, rule_props, props[key]) }
|
30
|
-
end
|
31
|
-
rule_props && inserter.set_node_props(@node, rule_props)
|
32
|
-
end
|
33
|
-
|
34
|
-
def clone_node_props(inserter)
|
35
|
-
hash = {}
|
36
|
-
props = inserter.node_props(@node) # need to clone this since we can't modify it
|
37
|
-
props.each_pair{|k,v| hash[k]=v}
|
38
|
-
hash
|
39
|
-
end
|
40
|
-
|
41
|
-
def execute_filter(rule, props)
|
42
|
-
if rule.filter.nil?
|
43
|
-
true
|
44
|
-
elsif rule.filter.arity != 1
|
45
|
-
classname = props['_classname'] || 'Neo4j::Node'
|
46
|
-
clazz = Neo4j::Node.to_class(classname)
|
47
|
-
wrapper = clazz.load_wrapper(ActiveSupport::HashWithIndifferentAccess.new(props))
|
48
|
-
wrapper.instance_eval(&rule.filter)
|
49
|
-
else
|
50
|
-
rule.filter.call(ActiveSupport::HashWithIndifferentAccess.new(props))
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
class << self
|
55
|
-
def rule_node_for(classname, inserter)
|
56
|
-
return nil unless Neo4j::Rule::Rule.has_rules?(classname)
|
57
|
-
wrapped_rule_node = Neo4j::Rule::Rule.rule_node_for(classname)
|
58
|
-
@rule_nodes ||= {}
|
59
|
-
@rule_nodes[classname] ||= RuleNode.new(wrapped_rule_node, create_node(classname, inserter))
|
60
|
-
end
|
61
|
-
|
62
|
-
def create_node(classname, inserter)
|
63
|
-
rule_node = inserter.create_node
|
64
|
-
inserter.create_rel(classname, inserter.ref_node, rule_node)
|
65
|
-
rule_node
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
data/lib/neo4j/config.rb
DELETED
@@ -1,177 +0,0 @@
|
|
1
|
-
|
2
|
-
module Neo4j
|
3
|
-
|
4
|
-
|
5
|
-
# == Keeps configuration for neo4j
|
6
|
-
#
|
7
|
-
# The most important configuration is <tt>Neo4j::Config[:storage_path]</tt> which is used to
|
8
|
-
# locate where the neo4j database is stored on the filesystem.
|
9
|
-
# If this directory is empty then a new database will be created, otherwise it will use the
|
10
|
-
# database from that directory.
|
11
|
-
#
|
12
|
-
# ==== Default Configurations
|
13
|
-
# <tt>:storage_path</tt>:: default <tt>tmp/neo4j</tt> where the database is stored
|
14
|
-
# <tt>:timestamps</tt>:: default <tt>true</tt> for Rails Neo4j::Model - if timestamps should be used when saving the model
|
15
|
-
# <tt>:lucene</tt>:: default hash keys: <tt>:fulltext</tt>, <tt>:exact</tt> configuration how the lucene index is stored
|
16
|
-
# <tt>:enable_rules</tt>:: default true, if false the _all relationship to all instances will not be created and custom rules will not be available.
|
17
|
-
# <tt>:identity_map</tt>:: default false, See Neo4j::IdentityMap
|
18
|
-
#
|
19
|
-
class Config
|
20
|
-
# This code is copied from merb-core/config.rb.
|
21
|
-
class << self
|
22
|
-
|
23
|
-
# The location of the default configuration file
|
24
|
-
def default_file
|
25
|
-
@default_file ||= File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "config", "neo4j", "config.yml"))
|
26
|
-
end
|
27
|
-
|
28
|
-
# You can keep all the configuration in your own yaml file
|
29
|
-
# Also deletes all old configurations.
|
30
|
-
def default_file=(file_path)
|
31
|
-
@configuration = nil
|
32
|
-
@defaults = nil
|
33
|
-
@default_file = File.expand_path(file_path)
|
34
|
-
end
|
35
|
-
|
36
|
-
# Returns the hash of default config values for neo4j.
|
37
|
-
#
|
38
|
-
# ==== Returns
|
39
|
-
# Hash:: The defaults for the config.
|
40
|
-
def defaults
|
41
|
-
@defaults ||= YAML.load_file(default_file)
|
42
|
-
end
|
43
|
-
|
44
|
-
# Returns a Java HashMap used by the Java Neo4j API as configuration for the GraphDatabase
|
45
|
-
def to_java_map
|
46
|
-
map = java.util.HashMap.new
|
47
|
-
to_hash.each_pair do |k, v|
|
48
|
-
case v
|
49
|
-
when TrueClass
|
50
|
-
map[k.to_s] = "YES"
|
51
|
-
when FalseClass
|
52
|
-
map[k.to_s] = "NO"
|
53
|
-
when String, Fixnum, Float
|
54
|
-
map[k.to_s] = v.to_s
|
55
|
-
# skip list and hash values - not accepted by the Java Neo4j API
|
56
|
-
end
|
57
|
-
end
|
58
|
-
map
|
59
|
-
end
|
60
|
-
|
61
|
-
|
62
|
-
# Returns the expanded path of the Config[:storage_path] property
|
63
|
-
def storage_path
|
64
|
-
File.expand_path(self[:storage_path])
|
65
|
-
end
|
66
|
-
|
67
|
-
# Yields the configuration.
|
68
|
-
#
|
69
|
-
# ==== Block parameters
|
70
|
-
# c :: The configuration parameters, a hash.
|
71
|
-
#
|
72
|
-
# ==== Examples
|
73
|
-
# Neo4j::Config.use do |config|
|
74
|
-
# config[:storage_path] = '/var/neo4j'
|
75
|
-
# end
|
76
|
-
#
|
77
|
-
# ==== Returns
|
78
|
-
# nil
|
79
|
-
def use
|
80
|
-
@configuration ||= {}
|
81
|
-
yield @configuration
|
82
|
-
nil
|
83
|
-
end
|
84
|
-
|
85
|
-
|
86
|
-
# Set the value of a config entry.
|
87
|
-
#
|
88
|
-
# ==== Parameters
|
89
|
-
# key :: The key to set the parameter for.
|
90
|
-
# val :: The value of the parameter.
|
91
|
-
#
|
92
|
-
def []=(key, val)
|
93
|
-
(@configuration ||= setup)[key] = val
|
94
|
-
end
|
95
|
-
|
96
|
-
|
97
|
-
# Gets the the value of a config entry
|
98
|
-
#
|
99
|
-
# ==== Parameters
|
100
|
-
# key:: The key of the config entry value we want
|
101
|
-
#
|
102
|
-
def [](key)
|
103
|
-
(@configuration ||= setup)[key]
|
104
|
-
end
|
105
|
-
|
106
|
-
|
107
|
-
# Remove the value of a config entry.
|
108
|
-
#
|
109
|
-
# ==== Parameters
|
110
|
-
# key<Object>:: The key of the parameter to delete.
|
111
|
-
#
|
112
|
-
# ==== Returns
|
113
|
-
# The value of the removed entry.
|
114
|
-
#
|
115
|
-
def delete(key)
|
116
|
-
@configuration.delete(key)
|
117
|
-
end
|
118
|
-
|
119
|
-
|
120
|
-
# Remove all configuration. This can be useful for testing purpose.
|
121
|
-
#
|
122
|
-
#
|
123
|
-
# ==== Returns
|
124
|
-
# nil
|
125
|
-
#
|
126
|
-
def delete_all
|
127
|
-
@configuration = nil
|
128
|
-
end
|
129
|
-
|
130
|
-
|
131
|
-
# Retrieve the value of a config entry, returning the provided default if the key is not present
|
132
|
-
#
|
133
|
-
# ==== Parameters
|
134
|
-
# key:: The key to retrieve the parameter for.
|
135
|
-
# default::The default value to return if the parameter is not set.
|
136
|
-
#
|
137
|
-
# ==== Returns
|
138
|
-
# The value of the configuration parameter or the default.
|
139
|
-
#
|
140
|
-
def fetch(key, default)
|
141
|
-
@configuration.fetch(key, default)
|
142
|
-
end
|
143
|
-
|
144
|
-
# Sets up the configuration to use the default.
|
145
|
-
#
|
146
|
-
# ==== Returns
|
147
|
-
# The a new configuration using default values as a hash.
|
148
|
-
#
|
149
|
-
def setup()
|
150
|
-
@configuration = defaults.with_indifferent_access #nested_under_indifferent_access
|
151
|
-
@configuration.merge!(defaults)
|
152
|
-
@configuration
|
153
|
-
end
|
154
|
-
|
155
|
-
|
156
|
-
# Returns the configuration as a hash.
|
157
|
-
#
|
158
|
-
# ==== Returns
|
159
|
-
# The config as a hash.
|
160
|
-
#
|
161
|
-
def to_hash
|
162
|
-
@configuration ||= setup
|
163
|
-
end
|
164
|
-
|
165
|
-
# Returns the config as YAML.
|
166
|
-
#
|
167
|
-
# ==== Returns
|
168
|
-
# The config as YAML.
|
169
|
-
#
|
170
|
-
def to_yaml
|
171
|
-
require "yaml"
|
172
|
-
@configuration.to_yaml
|
173
|
-
end
|
174
|
-
end
|
175
|
-
end
|
176
|
-
|
177
|
-
end
|