neo4j-core 8.1.4 → 9.0.0.alpha.1
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.
- checksums.yaml +5 -5
- data/README.md +71 -8
- data/lib/neo4j-core.rb +3 -49
- data/lib/neo4j/core.rb +4 -0
- data/lib/neo4j/core/config.rb +13 -0
- data/lib/neo4j/core/cypher_session/adaptors.rb +15 -15
- data/lib/neo4j/core/cypher_session/adaptors/bolt.rb +39 -48
- data/lib/neo4j/core/cypher_session/adaptors/bolt/chunk_writer_io.rb +0 -4
- data/lib/neo4j/core/cypher_session/adaptors/bolt/pack_stream.rb +7 -3
- data/lib/neo4j/core/cypher_session/adaptors/embedded.rb +1 -2
- data/lib/neo4j/core/cypher_session/adaptors/has_uri.rb +4 -0
- data/lib/neo4j/core/cypher_session/adaptors/http.rb +1 -3
- data/lib/neo4j/core/cypher_session/responses.rb +1 -1
- data/lib/neo4j/core/cypher_session/responses/bolt.rb +0 -17
- data/lib/neo4j/core/cypher_session/responses/embedded.rb +9 -7
- data/lib/neo4j/core/cypher_session/responses/http.rb +3 -4
- data/lib/neo4j/core/cypher_session/transactions.rb +2 -0
- data/lib/{neo4j-core → neo4j/core}/helpers.rb +1 -14
- data/lib/neo4j/core/logging.rb +44 -0
- data/lib/{neo4j-core → neo4j/core}/query.rb +7 -6
- data/lib/{neo4j-core → neo4j/core}/query_clauses.rb +9 -16
- data/lib/{neo4j-core → neo4j/core}/query_find_in_batches.rb +3 -5
- data/lib/{neo4j-core → neo4j/core}/version.rb +1 -1
- data/lib/neo4j/transaction.rb +6 -8
- data/neo4j-core.gemspec +13 -11
- metadata +46 -50
- data/lib/ext/kernel.rb +0 -9
- data/lib/neo4j-core/active_entity.rb +0 -11
- data/lib/neo4j-core/label.rb +0 -9
- data/lib/neo4j-embedded.rb +0 -16
- data/lib/neo4j-embedded/cypher_response.rb +0 -71
- data/lib/neo4j-embedded/embedded_database.rb +0 -26
- data/lib/neo4j-embedded/embedded_ha_session.rb +0 -30
- data/lib/neo4j-embedded/embedded_impermanent_session.rb +0 -17
- data/lib/neo4j-embedded/embedded_label.rb +0 -88
- data/lib/neo4j-embedded/embedded_node.rb +0 -206
- data/lib/neo4j-embedded/embedded_relationship.rb +0 -77
- data/lib/neo4j-embedded/embedded_session.rb +0 -203
- data/lib/neo4j-embedded/embedded_transaction.rb +0 -30
- data/lib/neo4j-embedded/label.rb +0 -66
- data/lib/neo4j-embedded/property.rb +0 -106
- data/lib/neo4j-embedded/to_java.rb +0 -44
- data/lib/neo4j-server.rb +0 -12
- data/lib/neo4j-server/cypher_label.rb +0 -35
- data/lib/neo4j-server/cypher_node.rb +0 -221
- data/lib/neo4j-server/cypher_relationship.rb +0 -142
- data/lib/neo4j-server/cypher_response.rb +0 -248
- data/lib/neo4j-server/cypher_session.rb +0 -263
- data/lib/neo4j-server/cypher_transaction.rb +0 -100
- data/lib/neo4j-server/label.rb +0 -40
- data/lib/neo4j-server/resource.rb +0 -57
- data/lib/neo4j/entity_equality.rb +0 -8
- data/lib/neo4j/entity_marshal.rb +0 -20
- data/lib/neo4j/label.rb +0 -90
- data/lib/neo4j/node.rb +0 -216
- data/lib/neo4j/property_container.rb +0 -17
- data/lib/neo4j/property_validator.rb +0 -22
- data/lib/neo4j/relationship.rb +0 -161
- data/lib/neo4j/session.rb +0 -222
@@ -13,7 +13,6 @@ class ChunkWriterIO < StringIO
|
|
13
13
|
|
14
14
|
# Write some bytes, splitting into chunks if necessary.
|
15
15
|
def write_with_chunking(string)
|
16
|
-
# Kernel.puts "Write!"
|
17
16
|
until string.empty?
|
18
17
|
future_size = @output_size + string.size
|
19
18
|
if future_size >= MAX_CHUNK_SIZE
|
@@ -56,15 +55,12 @@ class ChunkWriterIO < StringIO
|
|
56
55
|
def buffer_result(zero_chunk = false)
|
57
56
|
result = ''
|
58
57
|
|
59
|
-
# Kernel.puts 'result1', result.inspect
|
60
58
|
if !@output_buffer.empty?
|
61
59
|
result << [@output_size].pack('s>*')
|
62
60
|
result.concat(@output_buffer.join)
|
63
61
|
end
|
64
62
|
|
65
|
-
# Kernel.puts 'result2', result.inspect
|
66
63
|
result << "\x00\x00" if zero_chunk
|
67
|
-
# Kernel.puts 'result3', result.inspect
|
68
64
|
|
69
65
|
result
|
70
66
|
end
|
@@ -31,8 +31,10 @@ module Neo4j
|
|
31
31
|
DE: [:struct, 32]
|
32
32
|
}
|
33
33
|
# For efficiency. Translates directly from bytes to types
|
34
|
+
# Disabling because this needs to be able to change the hash inside the blocks
|
35
|
+
# There's probably a better way
|
34
36
|
MARKER_TYPES.keys.each do |key|
|
35
|
-
ord =
|
37
|
+
ord = key.to_s.to_i(16)
|
36
38
|
MARKER_TYPES[ord] = MARKER_TYPES.delete(key)
|
37
39
|
end
|
38
40
|
|
@@ -42,6 +44,7 @@ module Neo4j
|
|
42
44
|
MARKER_BYTES.delete(key) if key.is_a?(Array)
|
43
45
|
end
|
44
46
|
|
47
|
+
|
45
48
|
MARKER_HEADERS = MARKER_TYPES.each_with_object({}) do |(byte, (type, size)), headers|
|
46
49
|
headers[type] ||= {}
|
47
50
|
headers[type][size] = [byte].pack('C')
|
@@ -64,7 +67,7 @@ module Neo4j
|
|
64
67
|
else
|
65
68
|
case @object
|
66
69
|
when Date, Time, DateTime then string_stream
|
67
|
-
when Integer, Float, String, Symbol, Array, Structure, Hash
|
70
|
+
when Integer, Float, String, Symbol, Array, Set, Structure, Hash
|
68
71
|
send(@object.class.name.split('::').last.downcase + '_stream')
|
69
72
|
end
|
70
73
|
end
|
@@ -125,6 +128,8 @@ module Neo4j
|
|
125
128
|
end.join
|
126
129
|
end
|
127
130
|
|
131
|
+
alias set_stream array_stream
|
132
|
+
|
128
133
|
def structure_stream
|
129
134
|
fail 'Structure too big' if @object.list.size > 65_535
|
130
135
|
marker_string(0xB0, 0xDC, @object.list.size) + [@object.signature].pack('C') + @object.list.map do |e|
|
@@ -252,7 +257,6 @@ module Neo4j
|
|
252
257
|
Structure.new(shift_byte!, value_for_list!(size))
|
253
258
|
end
|
254
259
|
|
255
|
-
|
256
260
|
def shift_byte!
|
257
261
|
shift_bytes!(1).first unless depleted?
|
258
262
|
end
|
@@ -49,6 +49,10 @@ module Neo4j
|
|
49
49
|
@uri = self.class.uri_from_url!(url)
|
50
50
|
end
|
51
51
|
|
52
|
+
def url_without_password
|
53
|
+
@url_without_password ||= "#{scheme}://#{user + ':...@' if user}#{host}:#{port}"
|
54
|
+
end
|
55
|
+
|
52
56
|
included do
|
53
57
|
%w[scheme user password host port].each do |method|
|
54
58
|
define_method(method) do
|
@@ -177,9 +177,7 @@ module Neo4j
|
|
177
177
|
body_is_query_array = body.is_a?(Array) && body.all? { |o| o.respond_to?(:cypher) }
|
178
178
|
case body
|
179
179
|
when Hash, Array
|
180
|
-
if body_is_query_array
|
181
|
-
return {statements: body.map(&self.class.method(:statement_from_query))}
|
182
|
-
end
|
180
|
+
return {statements: body.map(&self.class.method(:statement_from_query))} if body_is_query_array
|
183
181
|
|
184
182
|
body
|
185
183
|
else
|
@@ -81,23 +81,6 @@ module Neo4j
|
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
84
|
-
def wrap_by_level(none_value)
|
85
|
-
case @wrap_level
|
86
|
-
when :none
|
87
|
-
if none_value.is_a?(Array)
|
88
|
-
none_value.map(&:symbolize_keys)
|
89
|
-
else
|
90
|
-
none_value.symbolize_keys
|
91
|
-
end
|
92
|
-
when :core_entity
|
93
|
-
yield
|
94
|
-
when :proc
|
95
|
-
yield.wrap
|
96
|
-
else
|
97
|
-
fail ArgumentError, "Invalid wrap_level: #{@wrap_level.inspect}"
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
84
|
def wrap_node(id, labels, properties)
|
102
85
|
wrap_by_level(properties) { ::Neo4j::Core::Node.new(id, labels, properties) }
|
103
86
|
end
|
@@ -83,16 +83,18 @@ module Neo4j
|
|
83
83
|
end
|
84
84
|
|
85
85
|
def wrap_value(entity)
|
86
|
-
|
86
|
+
case entity
|
87
|
+
when Java::ScalaCollectionConvert::Wrappers::MapWrapper
|
87
88
|
entity.each_with_object({}) { |(k, v), r| r[k.to_sym] = _wrap_entity(v) }
|
88
|
-
|
89
|
-
entity.is_a?(Java::OrgNeo4jKernelImplCore::RelationshipProxy)
|
89
|
+
when Java::OrgNeo4jKernelImplCore::NodeProxy, Java::OrgNeo4jKernelImplCore::RelationshipProxy
|
90
90
|
entity.property_keys.each_with_object({}) { |key, hash| hash[key.to_sym] = entity.get_property(key) }
|
91
|
-
elsif entity.respond_to?(:path_entities) || entity.is_a?(Java::ScalaCollectionConvert::Wrappers::SeqWrapper)
|
92
|
-
entity.to_a.map(&method(:_wrap_entity))
|
93
91
|
else
|
94
|
-
|
95
|
-
|
92
|
+
if entity.respond_to?(:path_entities) || entity.is_a?(Java::ScalaCollectionConvert::Wrappers::SeqWrapper)
|
93
|
+
entity.to_a.map(&method(:_wrap_entity))
|
94
|
+
else
|
95
|
+
# Convert from Java?
|
96
|
+
entity.is_a?(Hash) ? entity.symbolize_keys : entity
|
97
|
+
end
|
96
98
|
end
|
97
99
|
end
|
98
100
|
|
@@ -29,12 +29,11 @@ module Neo4j
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def wrap_entity(row_datum, rest_datum)
|
32
|
-
|
33
|
-
when rest_datum.is_a?(Array)
|
32
|
+
if rest_datum.is_a?(Array)
|
34
33
|
row_datum.zip(rest_datum).map { |row, rest| wrap_entity(row, rest) }
|
35
|
-
|
34
|
+
elsif ident = identify_entity(rest_datum)
|
36
35
|
send("wrap_#{ident}", rest_datum, row_datum)
|
37
|
-
|
36
|
+
elsif rest_datum.is_a?(Hash)
|
38
37
|
rest_datum.each_with_object({}) do |(k, v), result|
|
39
38
|
result[k.to_sym] = wrap_entity(row_datum[k], v)
|
40
39
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# TODO: Needed?
|
1
2
|
module Neo4j
|
2
3
|
module Core
|
3
4
|
module TxMethods
|
@@ -13,19 +14,5 @@ module Neo4j
|
|
13
14
|
end
|
14
15
|
end
|
15
16
|
end
|
16
|
-
|
17
|
-
module Config
|
18
|
-
def self.using_new_session?
|
19
|
-
ENV.key?('NEW_NEO4J_SESSIONS')
|
20
|
-
end
|
21
|
-
|
22
|
-
def self.wrapping_level(level = nil)
|
23
|
-
if level.nil?
|
24
|
-
@wrapping_level || :core_entity
|
25
|
-
else
|
26
|
-
@wrapping_level = level
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
17
|
end
|
31
18
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# Copied largely from activerecord/lib/active_record/log_subscriber.rb
|
2
|
+
module Neo4j
|
3
|
+
module Core
|
4
|
+
module Logging
|
5
|
+
class << self
|
6
|
+
def first_external_path_and_line(callstack)
|
7
|
+
line = callstack.find do |frame|
|
8
|
+
frame.absolute_path && !ignored_callstack(frame.absolute_path)
|
9
|
+
end
|
10
|
+
|
11
|
+
offending_line = line || callstack.first
|
12
|
+
|
13
|
+
[offending_line.path,
|
14
|
+
offending_line.lineno]
|
15
|
+
end
|
16
|
+
|
17
|
+
NEO4J_CORE_GEM_ROOT = File.expand_path('../../..', __dir__) + '/'
|
18
|
+
|
19
|
+
def ignored_callstack(path)
|
20
|
+
paths_to_ignore.any?(&path.method(:start_with?))
|
21
|
+
end
|
22
|
+
|
23
|
+
def paths_to_ignore
|
24
|
+
@paths_to_ignore ||= [NEO4J_CORE_GEM_ROOT,
|
25
|
+
RbConfig::CONFIG['rubylibdir'],
|
26
|
+
neo4j_gem_path,
|
27
|
+
active_support_gem_path].compact
|
28
|
+
end
|
29
|
+
|
30
|
+
def neo4j_gem_path
|
31
|
+
return if !defined?(::Rails.root)
|
32
|
+
|
33
|
+
@neo4j_gem_path ||= File.expand_path('../../..', Neo4j::ActiveBase.method(:current_session).source_location[0])
|
34
|
+
end
|
35
|
+
|
36
|
+
def active_support_gem_path
|
37
|
+
return if !defined?(::ActiveSupport::Notifications)
|
38
|
+
|
39
|
+
@active_support_gem_path ||= File.expand_path('../../..', ActiveSupport::Notifications.method(:subscribe).source_location[0])
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
|
-
require 'neo4j
|
1
|
+
require 'neo4j/core/query_clauses'
|
2
|
+
require 'neo4j/core/query_find_in_batches'
|
2
3
|
require 'active_support/notifications'
|
3
4
|
|
4
5
|
module Neo4j
|
@@ -67,7 +68,7 @@ module Neo4j
|
|
67
68
|
end
|
68
69
|
|
69
70
|
def initialize(options = {})
|
70
|
-
@session = options
|
71
|
+
@session = options[:session]
|
71
72
|
|
72
73
|
@options = options
|
73
74
|
@clauses = []
|
@@ -174,9 +175,9 @@ module Neo4j
|
|
174
175
|
|
175
176
|
DEFINED_CLAUSES[clause.to_sym] = clause_class
|
176
177
|
define_method(clause) do |*args|
|
177
|
-
build_deeper_query(clause_class, args)
|
178
|
-
|
179
|
-
|
178
|
+
result = build_deeper_query(clause_class, args)
|
179
|
+
|
180
|
+
BREAK_METHODS.include?(clause) ? result.break : result
|
180
181
|
end
|
181
182
|
end
|
182
183
|
|
@@ -201,7 +202,7 @@ module Neo4j
|
|
201
202
|
# @example
|
202
203
|
# # Creates a query representing the cypher: MATCH (n:Person) SET n.age = 19
|
203
204
|
# Query.new.match(n: :Person).set_props(n: {age: 19})
|
204
|
-
def set_props(*args)
|
205
|
+
def set_props(*args) # rubocop:disable Naming/AccessorMethodName
|
205
206
|
build_deeper_query(SetClause, args, set_props: true)
|
206
207
|
end
|
207
208
|
|
@@ -30,7 +30,7 @@ module Neo4j
|
|
30
30
|
|
31
31
|
[String, Symbol, Integer, Hash, NilClass].each do |arg_class|
|
32
32
|
from_method = "from_#{arg_class.name.downcase}"
|
33
|
-
return @value = send(from_method, @arg) if @arg.is_a?(arg_class) &&
|
33
|
+
return @value = send(from_method, @arg) if @arg.is_a?(arg_class) && respond_to?(from_method)
|
34
34
|
end
|
35
35
|
|
36
36
|
fail ArgError
|
@@ -42,12 +42,10 @@ module Neo4j
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def from_hash(value)
|
45
|
-
if
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
else
|
50
|
-
fail ArgError
|
45
|
+
fail ArgError if !respond_to?(:from_key_and_value)
|
46
|
+
|
47
|
+
value.map do |k, v|
|
48
|
+
from_key_and_value k, v
|
51
49
|
end
|
52
50
|
end
|
53
51
|
|
@@ -64,9 +62,7 @@ module Neo4j
|
|
64
62
|
|
65
63
|
prefix_value = value
|
66
64
|
if value.is_a?(Hash)
|
67
|
-
prefix_value = if value.values.any? { |v| v.is_a?(Hash) }
|
68
|
-
value.keys.join(UNDERSCORE)
|
69
|
-
end
|
65
|
+
prefix_value = (value.keys.join(UNDERSCORE) if value.values.any? { |v| v.is_a?(Hash) })
|
70
66
|
end
|
71
67
|
|
72
68
|
prefix_array = [key, prefix_value].tap(&:compact!).join(UNDERSCORE)
|
@@ -107,7 +103,6 @@ module Neo4j
|
|
107
103
|
value.values.any? { |v| v.is_a?(Hash) }
|
108
104
|
end
|
109
105
|
|
110
|
-
|
111
106
|
def attributes_from_key_and_value(_key, value)
|
112
107
|
return nil unless value.is_a?(Hash)
|
113
108
|
|
@@ -150,7 +145,7 @@ module Neo4j
|
|
150
145
|
strings = clause_strings(clauses)
|
151
146
|
stripped_string = strings.join(join_string)
|
152
147
|
stripped_string.strip!
|
153
|
-
|
148
|
+
pretty && strings.size > 1 ? PRETTY_NEW_LINE + stripped_string : stripped_string
|
154
149
|
end
|
155
150
|
|
156
151
|
def clause_join
|
@@ -208,9 +203,7 @@ module Neo4j
|
|
208
203
|
end
|
209
204
|
|
210
205
|
def format_label(label_arg)
|
211
|
-
if label_arg.is_a?(Array)
|
212
|
-
return label_arg.map { |arg| format_label(arg) }.join
|
213
|
-
end
|
206
|
+
return label_arg.map { |arg| format_label(arg) }.join if label_arg.is_a?(Array)
|
214
207
|
|
215
208
|
label_arg = label_arg.to_s
|
216
209
|
label_arg.strip!
|
@@ -552,7 +545,7 @@ module Neo4j
|
|
552
545
|
from_string(value)
|
553
546
|
end
|
554
547
|
|
555
|
-
def from_nilclass(
|
548
|
+
def from_nilclass(_value)
|
556
549
|
''
|
557
550
|
end
|
558
551
|
|
@@ -24,10 +24,8 @@ module Neo4j
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
def find_each(*args)
|
28
|
-
find_in_batches(*args)
|
29
|
-
batch.each { |result| yield result }
|
30
|
-
end
|
27
|
+
def find_each(*args, &block)
|
28
|
+
find_in_batches(*args) { |batch| batch.each(&block) }
|
31
29
|
end
|
32
30
|
|
33
31
|
private
|
@@ -41,7 +39,7 @@ module Neo4j
|
|
41
39
|
last_record.send(node_var).send(prop_var)
|
42
40
|
rescue NoMethodError
|
43
41
|
begin
|
44
|
-
last_record.send(node_var)[prop_var.to_sym]
|
42
|
+
last_record.send(node_var).properties[prop_var.to_sym]
|
45
43
|
rescue NoMethodError
|
46
44
|
last_record.send("#{node_var}.#{prop_var}") # In case we're explicitly returning it
|
47
45
|
end
|
data/lib/neo4j/transaction.rb
CHANGED
@@ -145,17 +145,15 @@ module Neo4j
|
|
145
145
|
# To support old syntax of providing run_in_tx first
|
146
146
|
# But session first is ideal
|
147
147
|
def session_and_run_in_tx_from_args(args)
|
148
|
+
fail ArgumentError, 'Too few arguments' if args.empty?
|
148
149
|
fail ArgumentError, 'Too many arguments' if args.size > 2
|
149
150
|
|
150
|
-
if args.
|
151
|
-
|
152
|
-
else
|
153
|
-
result = args.dup
|
154
|
-
if result.size == 1
|
155
|
-
result << ([true, false].include?(args[0]) ? Session.current! : true)
|
156
|
-
end
|
151
|
+
if args.size == 1
|
152
|
+
fail ArgumentError, 'Session must be specified' if !args[0].is_a?(Neo4j::Core::CypherSession)
|
157
153
|
|
158
|
-
[
|
154
|
+
[args[0], true]
|
155
|
+
else
|
156
|
+
[true, false].include?(args[0]) ? args.reverse : args.dup
|
159
157
|
end
|
160
158
|
end
|
161
159
|
|
data/neo4j-core.gemspec
CHANGED
@@ -1,12 +1,12 @@
|
|
1
|
-
lib = File.expand_path('
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
2
2
|
$LOAD_PATH.unshift lib unless $LOAD_PATH.include?(lib)
|
3
3
|
|
4
|
-
require 'neo4j
|
4
|
+
require 'neo4j/core/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = 'neo4j-core'
|
8
8
|
s.version = Neo4j::Core::VERSION
|
9
|
-
s.required_ruby_version = '>= 1.
|
9
|
+
s.required_ruby_version = '>= 2.1.0'
|
10
10
|
|
11
11
|
s.authors = 'Andreas Ronge, Chris Grigg, Brian Underwood'
|
12
12
|
s.email = 'andreas.ronge@gmail.com, chris@subvertallmedia.com, brian@brian-underwood.codes'
|
@@ -14,9 +14,9 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.summary = 'A basic library to work with the graph database Neo4j.'
|
15
15
|
s.license = 'MIT'
|
16
16
|
|
17
|
-
s.description = <<-
|
18
|
-
Neo4j-core provides classes and methods to work with the graph database Neo4j.
|
19
|
-
|
17
|
+
s.description = <<-DESCRIPTION
|
18
|
+
Neo4j-core provides classes and methods to work with the graph database Neo4j.
|
19
|
+
DESCRIPTION
|
20
20
|
|
21
21
|
s.require_path = 'lib'
|
22
22
|
s.files = Dir.glob('{bin,lib,config}/**/*') + %w[README.md Gemfile neo4j-core.gemspec]
|
@@ -38,19 +38,21 @@ Neo4j-core provides classes and methods to work with the graph database Neo4j.
|
|
38
38
|
s.add_dependency('httpclient')
|
39
39
|
s.add_dependency('json')
|
40
40
|
s.add_dependency('multi_json')
|
41
|
+
s.add_dependency('net_tcp_client', '>= 2.0.1')
|
41
42
|
s.add_dependency('typhoeus', '>= 1.1.2')
|
42
43
|
|
44
|
+
s.add_development_dependency('dryspec')
|
43
45
|
s.add_development_dependency('neo4j-rake_tasks', '>= 0.3.0')
|
44
46
|
s.add_development_dependency('pry')
|
45
47
|
s.add_development_dependency('simplecov')
|
46
48
|
s.add_development_dependency('yard')
|
47
49
|
|
48
50
|
if RUBY_PLATFORM == 'java'
|
49
|
-
s.
|
51
|
+
s.add_development_dependency('neo4j-community', '>= 2.1.1')
|
50
52
|
s.add_development_dependency 'ruby-debug'
|
51
|
-
else
|
52
|
-
s.add_development_dependency('guard')
|
53
|
-
s.add_development_dependency('guard-rubocop')
|
54
|
-
s.add_development_dependency('rubocop', '~> 0.49.1')
|
55
53
|
end
|
54
|
+
|
55
|
+
s.add_development_dependency('guard')
|
56
|
+
s.add_development_dependency('guard-rubocop')
|
57
|
+
s.add_development_dependency('rubocop', '~> 0.56.0')
|
56
58
|
end
|