Skip to content

Commit 2902d2f

Browse files
committed
Working on reducing complexity of functions
1 parent 7399ec7 commit 2902d2f

File tree

3 files changed

+53
-34
lines changed

3 files changed

+53
-34
lines changed

lib/neo4j-core/query_clauses.rb

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -50,41 +50,53 @@ def from_string(value)
5050
end
5151

5252
def node_from_key_and_value(key, value, options = {})
53-
var, label_string, attributes = parse_node_from_key_and_value(key, value, options)
53+
var = var_from_key_and_value(key, value, options[:prefer] || :var)
54+
label = label_from_key_and_value(key, value, options[:prefer] || :var)
55+
attributes = attributes_from_key_and_value(key, value)
5456

55-
"(#{var}#{format_label(label_string)}#{attributes_string(attributes)})"
57+
"(#{var}#{format_label(label)}#{attributes_string(attributes)})"
5658
end
5759

58-
def parse_node_from_key_and_value(key, value, options = {})
59-
var, label_string, attributes = nil
60-
60+
def var_from_key_and_value(key, value, prefer = :var)
6161
case value
62-
when String, Symbol
63-
var, label_string = [key, value]
64-
when Class, Module
65-
var, label_string = [key, defined?(value::CYPHER_LABEL) ? value::CYPHER_LABEL : value.name]
62+
when String, Symbol, Class, Module
63+
key
6664
when Hash
67-
if !value.values.any? { |v| v.is_a?(Hash) }
68-
case options[:prefer] || :var
69-
when :var
70-
var = key
71-
when :label
72-
label_string = key
73-
end
65+
if value.values.none? { |v| v.is_a?(Hash) }
66+
key if prefer == :var
7467
else
75-
var = key
68+
key
7669
end
70+
else
71+
fail ArgError, value
72+
end
73+
end
7774

78-
if value.size == 1 && value.values.first.is_a?(Hash)
79-
label_string, attributes = value.first
75+
def label_from_key_and_value(key, value, prefer = :var)
76+
case value
77+
when String, Symbol
78+
value
79+
when Class, Module
80+
defined?(value::CYPHER_LABEL) ? value::CYPHER_LABEL : value.name
81+
when Hash
82+
if value.values.map(&:class) == [Hash]
83+
value.first.first
8084
else
81-
attributes = value
85+
key if value.values.none? { |v| v.is_a?(Hash) } && prefer == :label
8286
end
8387
else
8488
fail ArgError, value
8589
end
90+
end
91+
92+
def attributes_from_key_and_value(key, value)
93+
return nil unless value.is_a?(Hash)
8694

87-
[var, label_string, attributes]
95+
if value.values.map(&:class) == [Hash]
96+
value.first[1]
97+
else
98+
value
99+
end
88100
end
89101

90102
class << self

lib/neo4j-embedded/embedded_node.rb

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,13 +149,14 @@ def rel(match = {})
149149
tx_methods :rel
150150

151151
def _rel(match = {})
152-
dir = match[:dir] || :both
152+
dir = ToJava.dir_to_java(match[:dir] || :both)
153153
rel_type = match[:type]
154154

155155
rel = if rel_type
156-
get_single_relationship(ToJava.type_to_java(rel_type), ToJava.dir_to_java(dir))
156+
get_single_relationship(ToJava.type_to_java(rel_type), dir)
157157
else
158-
iter = get_relationships(ToJava.dir_to_java(dir)).iterator
158+
iter = get_relationships(dir).iterator
159+
159160
if iter.has_next
160161
first = iter.next
161162
fail "Expected to only find one relationship from node #{neo_id} matching #{match.inspect}" if iter.has_next
@@ -166,7 +167,7 @@ def _rel(match = {})
166167
between_id = match[:between] && match[:between].neo_id
167168

168169
if rel && between_id
169-
rel.other_node(self).neo_id == between_id ? rel : nil
170+
rel if rel.other_node(self).neo_id == between_id
170171
else
171172
rel
172173
end

lib/neo4j-server/cypher_response.rb

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -76,14 +76,14 @@ def map_row_value(value, session)
7676
def hash_value_as_object(value, session)
7777
return value unless value['labels'] || value['type'] || transaction_response?
7878

79-
obj_type, data = if transaction_response?
80-
add_transaction_entity_id
81-
[(mapped_rest_data['start'] ? CypherRelationship : CypherNode), mapped_rest_data]
82-
elsif value['labels'] || value['type']
83-
add_entity_id(value)
84-
[(value['labels'] ? CypherNode : CypherRelationship), value]
85-
end
86-
obj_type.new(session, data).wrapper
79+
is_node, data = if transaction_response?
80+
add_transaction_entity_id
81+
[!mapped_rest_data['start'], mapped_rest_data]
82+
elsif value['labels'] || value['type']
83+
add_entity_id(value)
84+
[value['labels'], value]
85+
end
86+
(is_node ? CypherNode : CypherRelationship).new(session, data).wrapper
8787
end
8888

8989
attr_reader :struct
@@ -114,7 +114,7 @@ def first_data(id = nil)
114114
end
115115

116116
def add_entity_id(data)
117-
data.merge!('id' => data['self'].split('/')[-1].to_i)
117+
data.merge!('id' => self.class.id_from_url(data['self']))
118118
end
119119

120120
def add_transaction_entity_id
@@ -206,6 +206,12 @@ def rest_data_with_id
206206
rest_data.merge!('id' => mapped_rest_data['self'].split('/').last.to_i)
207207
end
208208

209+
class << self
210+
def id_from_url(url)
211+
url.split('/')[-1].to_i
212+
end
213+
end
214+
209215
private
210216

211217
attr_reader :row_index

0 commit comments

Comments
 (0)