Class: Neo4j::Session
- Inherits:
-
Object
show all
- Defined in:
- lib/neo4j/session.rb
Defined Under Namespace
Classes: CypherError, InitializationError
Constant Summary
collapse
- @@current_session =
nil
- @@all_sessions =
{}
- @@factories =
{}
Class Method Summary
collapse
Instance Method Summary
collapse
Class Method Details
._listeners ⇒ Object
185
186
187
188
|
# File 'lib/neo4j/session.rb', line 185
def _listeners
@@listeners ||= []
@@listeners
end
|
._notify_listeners(event, data) ⇒ Object
191
192
193
|
# File 'lib/neo4j/session.rb', line 191
def _notify_listeners(event, data)
_listeners.shift.call(event, data) until _listeners.empty?
end
|
.add_listener(&listener) ⇒ Object
180
181
182
|
# File 'lib/neo4j/session.rb', line 180
def add_listener(&listener)
_listeners << listener
end
|
.clear_listeners ⇒ Object
175
176
177
|
# File 'lib/neo4j/session.rb', line 175
def clear_listeners
@@listeners = []
end
|
.create_session(db_type, endpoint_url, params = {}) ⇒ Object
120
121
122
123
124
125
|
# File 'lib/neo4j/session.rb', line 120
def create_session(db_type, endpoint_url, params = {})
unless @@factories[db_type]
fail InitializationError, "Can't connect to database '#{db_type}', available #{@@factories.keys.join(',')}"
end
@@factories[db_type].call(endpoint_url, params)
end
|
Returns the current session.
128
129
130
|
# File 'lib/neo4j/session.rb', line 128
def current
@@current_session
end
|
.current! ⇒ Object
Returns the current session or raise an exception if no session is available
133
134
135
136
|
# File 'lib/neo4j/session.rb', line 133
def current!
fail 'No session, please create a session first with Neo4j::Session.open(:server_db) or :embedded_db' unless current
current
end
|
.inspect ⇒ Object
211
212
213
|
# File 'lib/neo4j/session.rb', line 211
def inspect
"Neo4j::Session available: #{@@factories && @@factories.keys}"
end
|
.named(name) ⇒ Object
Returns a session with given name or else raise an exception
144
145
146
|
# File 'lib/neo4j/session.rb', line 144
def named(name)
@@all_sessions[name] || fail("No session named #{name}.")
end
|
.on_next_session_available ⇒ Object
Registers a callback which will be called immediately if session is already available, or called when it later becomes available.
156
157
158
159
160
161
162
|
# File 'lib/neo4j/session.rb', line 156
def on_next_session_available
return yield(Neo4j::Session.current) if Neo4j::Session.current
add_listener do |event, data|
yield data if event == :session_available
end
end
|
.open(db_type = :server_db, endpoint_url = nil, 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)
99
100
101
102
103
104
105
106
107
108
109
110
|
# File 'lib/neo4j/session.rb', line 99
def open(db_type = :server_db, endpoint_url = nil, params = {})
case db_type
when :server_db then require 'neo4j-server'
when :embedded_db then require 'neo4j-embedded'
end
validate_session_num!(db_type)
name = params[:name]
default = params[:default]
%i[name default].each { |k| params.delete(k) }
register(create_session(db_type, endpoint_url, params), name, default)
end
|
.query(*args) ⇒ Object
139
140
141
|
# File 'lib/neo4j/session.rb', line 139
def query(*args)
current!.query(*args)
end
|
.register(session, name = nil, default = nil) ⇒ Object
196
197
198
199
200
201
202
203
204
|
# File 'lib/neo4j/session.rb', line 196
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
216
217
218
219
|
# File 'lib/neo4j/session.rb', line 216
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
150
151
152
|
# File 'lib/neo4j/session.rb', line 150
def set_current(session)
@@current_session = session
end
|
.unregister(session) ⇒ Object
207
208
209
|
# File 'lib/neo4j/session.rb', line 207
def unregister(session)
@@current_session = nil if @@current_session == session
end
|
.user_agent_string ⇒ Object
164
165
166
167
168
169
170
171
172
173
|
# File 'lib/neo4j/session.rb', line 164
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
|
.validate_session_num!(db_type) ⇒ Object
113
114
115
116
|
# File 'lib/neo4j/session.rb', line 113
def validate_session_num!(db_type)
return unless current && db_type == :embedded_db
fail InitializationError, 'Multiple sessions are not supported by Neo4j Embedded.'
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.
71
72
73
|
# File 'lib/neo4j/session.rb', line 71
def _query(*params)
fail 'not implemented'
end
|
#auto_commit? ⇒ Boolean
35
36
37
|
# File 'lib/neo4j/session.rb', line 35
def auto_commit?
true end
|
#close ⇒ Object
8
9
10
|
# File 'lib/neo4j/session.rb', line 8
def close
self.class.unregister(self)
end
|
#db_type ⇒ :embedded_db | :server_db
31
32
33
|
# File 'lib/neo4j/session.rb', line 31
def db_type
fail 'not impl.'
end
|
Performs a cypher query. See Core::Query for more details, but basic usage looks like:
64
65
66
|
# File 'lib/neo4j/session.rb', line 64
def query(options = {})
fail 'not implemented, abstract'
end
|
#running ⇒ Object
Only for embedded database
26
27
28
|
# File 'lib/neo4j/session.rb', line 26
def running
fail 'not impl.'
end
|
#shutdown ⇒ Object
Only for embedded database
20
21
22
|
# File 'lib/neo4j/session.rb', line 20
def shutdown
fail 'not impl.'
end
|
#start ⇒ Object
Only for embedded database
14
15
16
|
# File 'lib/neo4j/session.rb', line 14
def start
fail 'not impl.'
end
|
#transaction_class ⇒ Object
75
76
77
|
# File 'lib/neo4j/session.rb', line 75
def transaction_class
self.class.transaction_class
end
|