Class: Neo4j::Session
- Inherits:
-
Object
show all
- Defined in:
- lib/neo4j/session.rb
Defined Under Namespace
Classes: CypherError
Constant Summary
collapse
- @@current_session =
nil
- @@all_sessions =
{}
- @@factories =
{}
Class Method Summary
collapse
-
._listeners ⇒ Object
-
._notify_listeners(event, data) ⇒ Object
-
.add_listener(&listener) ⇒ Object
-
.create_session(db_type, params = {}) ⇒ Object
-
.current ⇒ Neo4j::Session
-
.current! ⇒ Object
Returns the current session or raise an exception if no session is available.
-
.inspect ⇒ Object
-
.named(name) ⇒ Object
Returns a session with given name or else raise an exception.
-
.on_session_available(&callback) ⇒ Object
Registers a callback which will be called immediately if session is already available, or called when it later becomes available.
-
.open(db_type = :server_db, *params) ⇒ Object
Creates a new session to Neo4j.
-
.open_named(db_type, name, default = nil, *params) ⇒ Object
-
.query(*args) ⇒ Object
-
.register(session, name = nil, default = nil) ⇒ Object
-
.register_db(db, &session_factory) ⇒ Object
-
.set_current(session) ⇒ Object
Sets the session to be used as default.
-
.unregister(session) ⇒ Object
-
.user_agent_string ⇒ Object
Instance Method Summary
collapse
Class Method Details
._listeners ⇒ Object
170
171
172
173
|
# File 'lib/neo4j/session.rb', line 170
def _listeners
@@listeners ||= []
@@listeners
end
|
._notify_listeners(event, data) ⇒ Object
176
177
178
|
# File 'lib/neo4j/session.rb', line 176
def _notify_listeners(event, data)
_listeners.each {|li| li.call(event, data)}
end
|
.add_listener(&listener) ⇒ Object
165
166
167
|
# File 'lib/neo4j/session.rb', line 165
def add_listener(&listener)
self._listeners << listener
end
|
.create_session(db_type, params = {}) ⇒ Object
108
109
110
111
112
113
|
# File 'lib/neo4j/session.rb', line 108
def create_session(db_type, params = {})
unless (@@factories[db_type])
raise "Can't connect to database '#{db_type}', available #{@@factories.keys.join(',')}"
end
@@factories[db_type].call(*params)
end
|
Returns the current session.
116
117
118
|
# File 'lib/neo4j/session.rb', line 116
def current
@@current_session
end
|
.current! ⇒ Object
Returns the current session or raise an exception if no session is available
121
122
123
124
|
# File 'lib/neo4j/session.rb', line 121
def current!
raise "No session, please create a session first with Neo4j::Session.open(:server_db) or :embedded_db" unless current
current
end
|
.inspect ⇒ Object
196
197
198
|
# File 'lib/neo4j/session.rb', line 196
def inspect
"Neo4j::Session available: #{@@factories && @@factories.keys}"
end
|
.named(name) ⇒ Object
Returns a session with given name or else raise an exception
132
133
134
|
# File 'lib/neo4j/session.rb', line 132
def named(name)
@@all_sessions[name] || raise("No session named #{name}.")
end
|
.on_session_available(&callback) ⇒ Object
Registers a callback which will be called immediately if session is already available, or called when it later becomes available.
144
145
146
147
148
149
150
151
|
# File 'lib/neo4j/session.rb', line 144
def on_session_available(&callback)
if (Neo4j::Session.current)
callback.call(Neo4j::Session.current)
end
add_listener do |event, data|
callback.call(data) if event == :session_available
end
end
|
.open(db_type = :server_db, *params) ⇒ Object
Creates a new session to Neo4j. This will be the default session to be used unless there is already a session created (see #current and #set_current)
98
99
100
|
# File 'lib/neo4j/session.rb', line 98
def open(db_type=:server_db, *params)
register(create_session(db_type, params))
end
|
.open_named(db_type, name, default = nil, *params) ⇒ Object
102
103
104
105
|
# File 'lib/neo4j/session.rb', line 102
def open_named(db_type, name, default = nil, *params)
raise "Multiple sessions is currently only supported for Neo4j Server connections." unless db_type == :server_db
register(create_session(db_type, params), name, default)
end
|
.query(*args) ⇒ Object
127
128
129
|
# File 'lib/neo4j/session.rb', line 127
def query(*args)
current!.query(*args)
end
|
.register(session, name = nil, default = nil) ⇒ Object
181
182
183
184
185
186
187
188
189
|
# File 'lib/neo4j/session.rb', line 181
def register(session, name = nil, default = nil)
if default == true
set_current(session)
elsif default.nil?
set_current(session) unless @@current_session
end
@@all_sessions[name] = session if name
session
end
|
.register_db(db, &session_factory) ⇒ Object
201
202
203
204
|
# File 'lib/neo4j/session.rb', line 201
def register_db(db, &session_factory)
puts "replace factory for #{db}" if @@factories[db]
@@factories[db] = session_factory
end
|
.set_current(session) ⇒ Object
Sets the session to be used as default
138
139
140
|
# File 'lib/neo4j/session.rb', line 138
def set_current(session)
@@current_session = session
end
|
.unregister(session) ⇒ Object
192
193
194
|
# File 'lib/neo4j/session.rb', line 192
def unregister(session)
@@current_session = nil if @@current_session == session
end
|
.user_agent_string ⇒ Object
153
154
155
156
157
158
159
160
161
162
|
# File 'lib/neo4j/session.rb', line 153
def user_agent_string
gem, version = if defined?(::Neo4j::ActiveNode)
['neo4j', ::Neo4j::VERSION]
else
['neo4j-core', ::Neo4j::Core::VERSION]
end
"#{gem} gem/#{version} (https://github.com/neo4jrb/#{gem})"
end
|
Instance Method Details
#_query(*params) ⇒ Object
Same as #query but does not accept an DSL and returns the raw result from the database. Notice, it might return different values depending on which database is used, embedded or server.
76
77
78
|
# File 'lib/neo4j/session.rb', line 76
def _query(*params)
raise 'not implemented'
end
|
#auto_commit? ⇒ Boolean
36
37
38
|
# File 'lib/neo4j/session.rb', line 36
def auto_commit?
true end
|
#begin_tx ⇒ Object
41
42
43
|
# File 'lib/neo4j/session.rb', line 41
def begin_tx
raise "not impl."
end
|
#close ⇒ Object
9
10
11
|
# File 'lib/neo4j/session.rb', line 9
def close
self.class.unregister(self)
end
|
#db_type ⇒ :embedded_db | :server_db
32
33
34
|
# File 'lib/neo4j/session.rb', line 32
def db_type
raise "not impl."
end
|
Performs a cypher query. See Core::Query for more details, but basic usage looks like:
69
70
71
|
# File 'lib/neo4j/session.rb', line 69
def query(options = {})
raise 'not implemented, abstract'
end
|
#running ⇒ Object
Only for embedded database
27
28
29
|
# File 'lib/neo4j/session.rb', line 27
def running
raise "not impl."
end
|
#shutdown ⇒ Object
Only for embedded database
21
22
23
|
# File 'lib/neo4j/session.rb', line 21
def shutdown
raise "not impl."
end
|
#start ⇒ Object
Only for embedded database
15
16
17
|
# File 'lib/neo4j/session.rb', line 15
def start
raise "not impl."
end
|