Class: Neo4j::Server::CypherResponse
- Inherits:
-
Object
- Object
- Neo4j::Server::CypherResponse
show all
- Defined in:
- lib/neo4j-server/cypher_response.rb
Defined Under Namespace
Classes: HashEnumeration, ResponseError
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(response, uncommited = false) ⇒ CypherResponse
Returns a new instance of CypherResponse.
89
90
91
92
|
# File 'lib/neo4j-server/cypher_response.rb', line 89
def initialize(response, uncommited = false)
@response = response
@uncommited = uncommited
end
|
Instance Attribute Details
#columns ⇒ Object
Returns the value of attribute columns.
3
4
5
|
# File 'lib/neo4j-server/cypher_response.rb', line 3
def columns
@columns
end
|
#data ⇒ Object
Returns the value of attribute data.
3
4
5
|
# File 'lib/neo4j-server/cypher_response.rb', line 3
def data
@data
end
|
#error_code ⇒ Object
Returns the value of attribute error_code.
3
4
5
|
# File 'lib/neo4j-server/cypher_response.rb', line 3
def error_code
@error_code
end
|
#error_msg ⇒ Object
Returns the value of attribute error_msg.
3
4
5
|
# File 'lib/neo4j-server/cypher_response.rb', line 3
def error_msg
@error_msg
end
|
#error_status ⇒ Object
Returns the value of attribute error_status.
3
4
5
|
# File 'lib/neo4j-server/cypher_response.rb', line 3
def error_status
@error_status
end
|
#response ⇒ Object
Returns the value of attribute response.
3
4
5
|
# File 'lib/neo4j-server/cypher_response.rb', line 3
def response
@response
end
|
#struct ⇒ Object
Returns the value of attribute struct.
87
88
89
|
# File 'lib/neo4j-server/cypher_response.rb', line 87
def struct
@struct
end
|
Class Method Details
.create_with_no_tx(response) ⇒ Object
172
173
174
175
176
177
178
179
180
181
|
# File 'lib/neo4j-server/cypher_response.rb', line 172
def self.create_with_no_tx(response)
case response.status
when 200
CypherResponse.new(response).set_data(response.body['data'], response.body['columns'])
when 400
CypherResponse.new(response).set_error(response.body['message'], response.body['exception'], response.body['fullname'])
else
raise "Unknown response code #{response.status} for #{response.env[:url].to_s}"
end
end
|
.create_with_tx(response) ⇒ Object
183
184
185
186
187
188
189
190
191
192
193
194
195
196
|
# File 'lib/neo4j-server/cypher_response.rb', line 183
def self.create_with_tx(response)
raise "Unknown response code #{response.status} for #{response.request_uri}" unless response.status == 200
first_result = response.body['results'][0]
cr = CypherResponse.new(response, true)
if (response.body['errors'].empty?)
cr.set_data(first_result['data'], first_result['columns'])
else
first_error = response.body['errors'].first
cr.set_error(first_error['message'], first_error['status'], first_error['code'])
end
cr
end
|
Instance Method Details
#add_entity_id(data) ⇒ Object
114
115
116
|
# File 'lib/neo4j-server/cypher_response.rb', line 114
def add_entity_id(data)
data.merge!({'id' => data['self'].split('/')[-1].to_i})
end
|
#add_transaction_entity_id ⇒ Object
118
119
120
|
# File 'lib/neo4j-server/cypher_response.rb', line 118
def add_transaction_entity_id
mapped_rest_data.merge!({'id' => mapped_rest_data['self'].split('/').last.to_i})
end
|
#each_data_row ⇒ Object
138
139
140
141
142
143
144
|
# File 'lib/neo4j-server/cypher_response.rb', line 138
def each_data_row
if uncommited?
data.each{|r| yield r['row']}
else
data.each{|r| yield r}
end
end
|
#entity_data(id = nil) ⇒ Object
94
95
96
97
98
99
100
101
102
|
# File 'lib/neo4j-server/cypher_response.rb', line 94
def entity_data(id=nil)
if uncommited?
data = @data.first['row'].first
data.is_a?(Hash) ? {'data' => data, 'id' => id} : data
else
data = @data[0][0]
data.is_a?(Hash) ? add_entity_id(data) : data
end
end
|
#error? ⇒ Boolean
122
123
124
|
# File 'lib/neo4j-server/cypher_response.rb', line 122
def error?
!!@error
end
|
#first_data(id = nil) ⇒ Object
104
105
106
107
108
109
110
111
112
|
# File 'lib/neo4j-server/cypher_response.rb', line 104
def first_data(id = nil)
if uncommited?
data = @data.first['row'].first
else
data = @data[0][0]
data.is_a?(Hash) ? add_entity_id(data) : data
end
end
|
#has_data? ⇒ Boolean
130
131
132
|
# File 'lib/neo4j-server/cypher_response.rb', line 130
def has_data?
!response.body['data'].nil?
end
|
#hash_value_as_object(value, session) ⇒ Object
75
76
77
78
79
80
81
82
83
84
85
|
# File 'lib/neo4j-server/cypher_response.rb', line 75
def hash_value_as_object(value, session)
return value unless value['labels'] || value['type'] || is_transaction_response?
obj_type, data = if is_transaction_response?
add_transaction_entity_id
[(mapped_rest_data['start'] ? CypherRelationship : CypherNode), mapped_rest_data]
else value['labels'] || value['type']
add_entity_id(value)
[(value['labels'] ? CypherNode : CypherRelationship), value]
end
obj_type.new(session, data).wrapper
end
|
#is_transaction_response? ⇒ Boolean
198
199
200
|
# File 'lib/neo4j-server/cypher_response.rb', line 198
def is_transaction_response?
self.response.respond_to?('body') && !self.response.body['commit'].nil?
end
|
#map_row_value(value, session) ⇒ Object
65
66
67
68
69
70
71
72
73
|
# File 'lib/neo4j-server/cypher_response.rb', line 65
def map_row_value(value, session)
if value.is_a?(Hash)
hash_value_as_object(value, session)
elsif value.is_a?(Array)
value.map {|v| map_row_value(v, session) }
else
value
end
end
|
#raise_cypher_error ⇒ Object
166
167
168
169
|
# File 'lib/neo4j-server/cypher_response.rb', line 166
def raise_cypher_error
raise "Tried to raise error without an error" unless @error
raise Neo4j::Session::CypherError.new(@error_msg, @error_code, @error_status)
end
|
#raise_error ⇒ Object
161
162
163
164
|
# File 'lib/neo4j-server/cypher_response.rb', line 161
def raise_error
raise "Tried to raise error without an error" unless @error
raise ResponseError.new(@error_msg, @error_status, @error_code)
end
|
#raise_unless_response_code(code) ⇒ Object
134
135
136
|
# File 'lib/neo4j-server/cypher_response.rb', line 134
def raise_unless_response_code(code)
raise "Response code #{response.code}, expected #{code} for #{response.request.path}, #{response.body}" unless response.status == code
end
|
#rest_data ⇒ Object
202
203
204
205
|
# File 'lib/neo4j-server/cypher_response.rb', line 202
def rest_data
@result_index = @row_index = 0
mapped_rest_data
end
|
#rest_data_with_id ⇒ Object
207
208
209
|
# File 'lib/neo4j-server/cypher_response.rb', line 207
def rest_data_with_id
rest_data.merge!({'id' => mapped_rest_data['self'].split('/').last.to_i})
end
|
#set_data(data, columns) ⇒ Object
146
147
148
149
150
151
|
# File 'lib/neo4j-server/cypher_response.rb', line 146
def set_data(data, columns)
@data = data
@columns = columns
@struct = columns.empty? ? Object.new : Struct.new(*columns.map(&:to_sym))
self
end
|
#set_error(error_msg, error_status, error_core) ⇒ Object
153
154
155
156
157
158
159
|
# File 'lib/neo4j-server/cypher_response.rb', line 153
def set_error(error_msg, error_status, error_core)
@error = true
@error_msg = error_msg
@error_status = error_status
@error_code = error_core
self
end
|
#to_node_enumeration(cypher = '', session = Neo4j::Session.current) ⇒ Object
51
52
53
54
55
56
57
58
59
60
61
62
63
|
# File 'lib/neo4j-server/cypher_response.rb', line 51
def to_node_enumeration(cypher = '', session = Neo4j::Session.current)
Enumerator.new do |yielder|
@result_index = 0
self.to_struct_enumeration(cypher).each do |row|
@row_index = 0
yielder << row.each_pair.each_with_object(@struct.new) do |(column, value), result|
result[column] = map_row_value(value, session)
@row_index += 1
end
@result_index += 1
end
end
end
|
#to_struct_enumeration(cypher = '') ⇒ Object
47
48
49
|
# File 'lib/neo4j-server/cypher_response.rb', line 47
def to_struct_enumeration(cypher = '')
HashEnumeration.new(self, cypher)
end
|
#uncommited? ⇒ Boolean
126
127
128
|
# File 'lib/neo4j-server/cypher_response.rb', line 126
def uncommited?
@uncommited
end
|