activegraph 11.3.0 → 11.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2a34cf88985a4d6f6d73da937abb94f5adbf429fd9a0c06e175600b04cf49863
4
- data.tar.gz: e43528c6888cca7ac127ed33b972cc15e0a2f75dc291f187e7a2e5158e2b5f35
3
+ metadata.gz: f068da2126bbed4301cf9fb15c34a708ef7f7a152afbfe42af5482237a041f0d
4
+ data.tar.gz: 0c87c4c2082a2e999ac8e0ff165e0cdbffe875f7f2eae407ea31f3f119d46a5f
5
5
  SHA512:
6
- metadata.gz: 853b4a12d5d2fb72acf05e747d4d77612ee35f3746883091c56786c16abbd6041e551eda8d8edea64659922569431e1469c239a04905301d600526822db162cc
7
- data.tar.gz: a9940abfa130c32b50b5d1c6b730b5a2e2e3534a1c53b95983850075fc3da3736af018f7d0d3cb6e7612f4b49f5ab4751e3dd9332bc8c41bc647e0cfc73e540e
6
+ metadata.gz: 5c12b0fc53c6bb04d661ec6c1669843e3c59d2ce00a9c7ea909d49b87ba7ef7b4c58ba2196d2c880c70da4ed727d14851fa27a15cf948125e91ee7670a23ff9d
7
+ data.tar.gz: e0dda99c677170338a7a470d00660fa20528e272452ee81a58722d055af969f0951e3344e0961e3b5ec49b6e0e316527dc0deab5f0ce01fe3dda0c029310ee01
data/CHANGELOG.md CHANGED
@@ -3,6 +3,18 @@ All notable changes to this project will be documented in this file.
3
3
  This file should follow the standards specified on [http://keepachangelog.com/]
4
4
  This project adheres to [Semantic Versioning](http://semver.org/).
5
5
 
6
+ ## [11.4.0] 2023-02-12
7
+
8
+ ## Fixed
9
+
10
+ - Added support for cypher UNION
11
+
12
+ ## [11.3.1] 2023-02-12
13
+
14
+ ## Fixed
15
+
16
+ - Fixed an issue with keyword arguments on jruby-9.3 when none were passed
17
+
6
18
  ## [11.3.0] 2023-02-10
7
19
 
8
20
  ## Added
@@ -162,8 +162,8 @@ module ActiveGraph
162
162
  # DETACH DELETE clause
163
163
  # @return [Query]
164
164
 
165
- METHODS = %w[start match optional_match call using where create create_unique merge set on_create_set on_match_set remove unwind delete detach_delete with with_distinct return order skip limit] # rubocop:disable Metrics/LineLength
166
- BREAK_METHODS = %(with with_distinct call)
165
+ METHODS = %w[start match optional_match call using where create create_unique merge set on_create_set on_match_set remove unwind delete detach_delete with with_distinct return order skip limit union call_subquery_start call_subquery_end] # rubocop:disable Layout/LineLength
166
+ BREAK_METHODS = %w(with with_distinct call call_subquery_start call_subquery_end)
167
167
 
168
168
  CLAUSIFY_CLAUSE = proc { |method| const_get(method.to_s.split('_').map(&:capitalize).join + 'Clause') }
169
169
  CLAUSES = METHODS.map(&CLAUSIFY_CLAUSE)
@@ -28,7 +28,7 @@ module ActiveGraph
28
28
  def value
29
29
  return @value if @value
30
30
 
31
- [String, Symbol, Integer, Hash, NilClass].each do |arg_class|
31
+ [String, Symbol, Integer, Hash, NilClass, Array].each do |arg_class|
32
32
  from_method = "from_#{arg_class.name.downcase}"
33
33
  return @value = send(from_method, @arg) if @arg.is_a?(arg_class) && respond_to?(from_method)
34
34
  end
@@ -130,13 +130,15 @@ module ActiveGraph
130
130
  def to_cypher(clauses, pretty = false)
131
131
  string = clause_string(clauses, pretty)
132
132
 
133
- final_keyword = if pretty
134
- "#{clause_color}#{keyword}#{ANSI::CLEAR}"
135
- else
136
- keyword
137
- end
133
+ "#{final_keyword(pretty)} #{string}" if !string.empty?
134
+ end
138
135
 
139
- "#{final_keyword} #{string}" if !string.empty?
136
+ def final_keyword(pretty)
137
+ if pretty
138
+ "#{clause_color}#{keyword}#{ANSI::CLEAR}"
139
+ else
140
+ keyword
141
+ end
140
142
  end
141
143
 
142
144
  def clause_string(clauses, pretty)
@@ -256,6 +258,30 @@ module ActiveGraph
256
258
  end
257
259
  end
258
260
 
261
+ class UnionClause < Clause
262
+ KEYWORD = ''
263
+
264
+ def from_array(args)
265
+ "#{args[1]} RETURN #{args[0]} AS #{args.last}"
266
+ end
267
+
268
+ class << self
269
+ def from_args(args, params, options = {})
270
+ params.add_params(args[2])
271
+
272
+ [from_arg(args, params, options)]
273
+ end
274
+
275
+ def clause_strings(clauses)
276
+ clauses.map!(&:value)
277
+ end
278
+
279
+ def clause_join
280
+ ' UNION '
281
+ end
282
+ end
283
+ end
284
+
259
285
  class WhereClause < Clause
260
286
  KEYWORD = 'WHERE'
261
287
 
@@ -349,6 +375,38 @@ module ActiveGraph
349
375
  end
350
376
  end
351
377
 
378
+ class CallSubqueryStartClause < Clause
379
+ KEYWORD = 'CALL {'
380
+
381
+ def from_nilclass(_value)
382
+ ' '
383
+ end
384
+
385
+ def from_string(value)
386
+ value
387
+ end
388
+
389
+ class << self
390
+ def to_cypher(clauses, pretty = false)
391
+ super || final_keyword(pretty)
392
+ end
393
+
394
+ def clause_strings(clauses)
395
+ clauses.map!(&:value)
396
+ end
397
+ end
398
+ end
399
+
400
+ class CallSubqueryEndClause < Clause
401
+ KEYWORD = '}'
402
+
403
+ class << self
404
+ def to_cypher(_clauses, pretty = false)
405
+ final_keyword(pretty)
406
+ end
407
+ end
408
+ end
409
+
352
410
  class MatchClause < Clause
353
411
  KEYWORD = 'MATCH'
354
412
 
@@ -155,14 +155,18 @@ module ActiveGraph::Node
155
155
 
156
156
  CACHED_RESULT_METHODS = []
157
157
 
158
- def method_missing(method_name, *args, &block)
158
+ def method_missing(method_name, *args, **kwargs, &block)
159
159
  target = target_for_missing_method(method_name)
160
160
  super if target.nil?
161
161
 
162
162
  cache_query_proxy_result if !cached? && !target.is_a?(ActiveGraph::Node::Query::QueryProxy)
163
163
  clear_cache_result if target.is_a?(ActiveGraph::Node::Query::QueryProxy)
164
164
 
165
- target.public_send(method_name, *args, &block)
165
+ if RUBY_VERSION < '3' && kwargs.empty?
166
+ target.public_send(method_name, *args, &block)
167
+ else
168
+ target.public_send(method_name, *args, **kwargs, &block)
169
+ end
166
170
  end
167
171
 
168
172
  def serializable_hash(options = {})
@@ -94,13 +94,25 @@ module ActiveGraph
94
94
  #
95
95
  # student.lessons.query_as(:l).with('your cypher here...')
96
96
  def query_as(var, with_labels = true)
97
- query_from_chain(chain, base_query(var, with_labels).params(@params), var)
98
- .tap { |query| query.proxy_chain_level = _chain_level }
97
+ init_outer_query_var(var)
98
+ var_name = @outer_query_var || var
99
+ query_obj = if chain.first&.start_of_subquery? && !@association && !starting_query
100
+ _query
101
+ else
102
+ base_query(var_name, with_labels).params(@params)
103
+ end
104
+
105
+ query_from_chain(chain, query_obj, var_name).tap { |query| query.proxy_chain_level = _chain_level }
106
+ end
107
+
108
+ def init_outer_query_var(var)
109
+ chain.find(&:start_of_subquery?)&.tap { |link| @outer_query_var = link.subquery_var(var) }
99
110
  end
100
111
 
101
112
  def query_from_chain(chain, base_query, var)
102
113
  chain.inject(base_query) do |query, link|
103
114
  args = link.args(var, rel_var)
115
+ var = link.update_outer_query_var(var)
104
116
 
105
117
  args.is_a?(Array) ? query.send(link.clause, *args) : query.send(link.clause, args)
106
118
  end
@@ -143,11 +155,16 @@ module ActiveGraph
143
155
  @model.current_scope = previous
144
156
  end
145
157
 
146
- METHODS = %w(where where_not rel_where rel_where_not rel_order order skip limit)
158
+ METHODS = %w(where where_not rel_where rel_where_not rel_order order skip limit union)
147
159
 
148
160
  METHODS.each do |method|
149
161
  define_method(method) { |*args| build_deeper_query_proxy(method.to_sym, args) }
150
162
  end
163
+
164
+ def union(*args)
165
+ hash_args = {proxy: self, subquery_parts: args, first_clause: @chain.blank?}
166
+ build_deeper_query_proxy(:union, hash_args)
167
+ end
151
168
  # Since there are rel_where and rel_order methods, it seems only natural for there to be node_where and node_order
152
169
  alias node_where where
153
170
  alias node_order order
@@ -243,9 +260,15 @@ module ActiveGraph
243
260
 
244
261
  # QueryProxy objects act as a representation of a model at the class level so we pass through calls
245
262
  # This allows us to define class functions for reusable query chaining or for end-of-query aggregation/summarizing
246
- def method_missing(method_name, *args, &block)
263
+ def method_missing(method_name, *args, **kwargs, &block)
247
264
  if @model && @model.respond_to?(method_name)
248
- scoping { @model.public_send(method_name, *args, &block) }
265
+ scoping do
266
+ if RUBY_VERSION < '3' && kwargs.empty?
267
+ @model.public_send(method_name, *args, &block)
268
+ else
269
+ @model.public_send(method_name, *args, **kwargs, &block)
270
+ end
271
+ end
249
272
  else
250
273
  super
251
274
  end
@@ -3,6 +3,7 @@ module ActiveGraph
3
3
  module Query
4
4
  class QueryProxy
5
5
  class Link
6
+ OUTER_SUBQUERY_PREFIX = 'outer_'.freeze
6
7
  attr_reader :clause
7
8
 
8
9
  def initialize(clause, arg, args = [])
@@ -19,6 +20,26 @@ module ActiveGraph
19
20
  end
20
21
  end
21
22
 
23
+ def start_of_subquery?
24
+ clause == :call_subquery_start
25
+ end
26
+
27
+ def end_of_subquery?
28
+ clause == :call_subquery_end
29
+ end
30
+
31
+ def subquery_var(original_var)
32
+ return unless start_of_subquery?
33
+
34
+ "#{OUTER_SUBQUERY_PREFIX}#{original_var}"
35
+ end
36
+
37
+ def update_outer_query_var(original_var)
38
+ return original_var unless end_of_subquery?
39
+
40
+ original_var.delete_prefix(OUTER_SUBQUERY_PREFIX)
41
+ end
42
+
22
43
  class << self
23
44
  def for_clause(clause, arg, model, *args)
24
45
  method_to_call = "for_#{clause}_clause"
@@ -27,6 +48,75 @@ module ActiveGraph
27
48
  send(method_to_call, arg, model, *args)
28
49
  end
29
50
 
51
+ def for_union_clause(arg, model, *args)
52
+ links = []
53
+ links << new(:call_subquery_start, nil, *args)
54
+ arg[:subquery_parts].each_with_index do |subquery_part, loop_index|
55
+ links << init_union_link(arg[:proxy], model, subquery_part, loop_index, args)
56
+ end
57
+ links << new(:call_subquery_end, nil, *args)
58
+ links << post_subquery_with_clause(arg[:first_clause], args)
59
+ end
60
+
61
+ def post_subquery_with_clause(first_clause, args)
62
+ clause_arg_lambda = lambda do |v, _|
63
+ if first_clause
64
+ [v]
65
+ else
66
+ [v, "#{OUTER_SUBQUERY_PREFIX}#{v}"]
67
+ end
68
+ end
69
+
70
+ new(:with, clause_arg_lambda, *args)
71
+ end
72
+
73
+ def init_union_link(proxy, model, subquery_part, loop_index, args)
74
+ union_proc = if subquery_proxy_part = subquery_part.call rescue nil # rubocop:disable Style/RescueModifier
75
+ independent_union_subquery_proc(subquery_proxy_part, loop_index)
76
+ else
77
+ continuation_union_subquery_proc(proxy, model, subquery_part, loop_index)
78
+ end
79
+ new(:union, union_proc, *args)
80
+ end
81
+
82
+ def independent_union_subquery_proc(proxy, loop_index)
83
+ proxy_params = proxy.query.parameters
84
+ proxy_cypher = proxy.to_cypher
85
+ subquery_identity = proxy.identity
86
+ uniq_param_generator = uniq_param_generator_lambda
87
+
88
+ lambda do |identity, _|
89
+ proxy_params = uniq_param_generator.call(proxy_params, proxy_cypher, identity, loop_index) if proxy_params.present?
90
+ [subquery_identity, proxy_cypher, proxy_params, identity.delete_prefix(OUTER_SUBQUERY_PREFIX)]
91
+ end
92
+ end
93
+
94
+ def continuation_union_subquery_proc(outer_proxy, model, subquery_part, loop_index) # rubocop:disable Metrics/AbcSize
95
+ lambda do |identity, _|
96
+ proxy = outer_proxy.as(identity)
97
+ proxy_with_clause = proxy.query.with(proxy.identity).with(proxy.identity).proxy_as(model, proxy.identity)
98
+ complete_query = proxy_with_clause.instance_exec(&subquery_part) || proxy_with_clause
99
+ subquery_cypher = complete_query.to_cypher
100
+ subquery_cypher = subquery_cypher.delete_prefix(proxy.to_cypher) if proxy.send(:chain).present? || proxy.starting_query
101
+ subquery_parameters = (complete_query.query.parameters.to_a - proxy.query.parameters.to_a).to_h
102
+
103
+ subquery_parameters = uniq_param_generator_lambda.call(subquery_parameters, subquery_cypher, identity, loop_index) if subquery_parameters.present?
104
+ [complete_query.identity, subquery_cypher, subquery_parameters] + [identity.delete_prefix(OUTER_SUBQUERY_PREFIX)]
105
+ end
106
+ end
107
+
108
+ def uniq_param_generator_lambda
109
+ lambda do |proxy_params, proxy_cypher, identity, counter|
110
+ prefix = "#{identity}_UNION#{counter}_"
111
+ proxy_params.each_with_object({}) do |(param_name, param_val), new_params|
112
+ new_params_key = "#{prefix}#{param_name}".to_sym
113
+ new_params[new_params_key] = param_val
114
+ proxy_cypher.gsub!(/\$#{param_name}(?=([^`'"]|'(\\.|[^'])*'|"(\\.|[^"])*"|`(\\.|[^`])*`)*\z)/, "$#{new_params_key}")
115
+ new_params
116
+ end
117
+ end
118
+ end
119
+
30
120
  def for_where_clause(arg, model, *args)
31
121
  node_num = 1
32
122
  result = []
@@ -104,6 +194,8 @@ module ActiveGraph
104
194
  [for_arg(model, clause, args[0], *args[1..-1])]
105
195
  elsif [:rel_where, :rel_where_not].include?(clause)
106
196
  args.map { |arg| for_arg(model, clause, arg, association) }
197
+ elsif clause == :union
198
+ [for_arg(model, clause, args)]
107
199
  else
108
200
  args.map { |arg| for_arg(model, clause, arg) }
109
201
  end
@@ -79,7 +79,7 @@ module ActiveGraph::Node
79
79
  def _call_scope_context(eval_context, *query_params, **kwargs, &proc)
80
80
  last_vararg_index = proc.arity - (kwargs.empty? ? 1 : 2)
81
81
  query_params.fill(nil, query_params.length..last_vararg_index)
82
- if kwargs.empty? # for jruby-9.3 compatibility
82
+ if RUBY_VERSION < '3' && kwargs.empty?
83
83
  eval_context.instance_exec(*query_params, &proc)
84
84
  else
85
85
  eval_context.instance_exec(*query_params, **kwargs, &proc)
@@ -125,7 +125,7 @@ module ActiveGraph::Node
125
125
  # method_missing is not delegated to super class but to aggregated class
126
126
  # rubocop:disable Style/MethodMissingSuper
127
127
  def method_missing(name, *params, **kwargs, &block)
128
- if kwargs.empty? # for jruby-9.3 compatibility
128
+ if RUBY_VERSION < '3' && kwargs.empty?
129
129
  query_proxy_or_target.public_send(name, *params, &block)
130
130
  else
131
131
  query_proxy_or_target.public_send(name, *params, **kwargs, &block)
@@ -61,8 +61,12 @@ module ActiveGraph::Relationship
61
61
  !@node.nil?
62
62
  end
63
63
 
64
- def method_missing(*args, &block)
65
- loaded.send(*args, &block)
64
+ def method_missing(*args, **kwargs, &block)
65
+ if RUBY_VERSION < '3' && kwargs.empty?
66
+ loaded.send(*args, &block)
67
+ else
68
+ loaded.send(*args, **kwargs, &block)
69
+ end
66
70
  end
67
71
 
68
72
  def respond_to_missing?(method_name, include_private = false)
@@ -1,3 +1,3 @@
1
1
  module ActiveGraph
2
- VERSION = '11.3.0'
2
+ VERSION = '11.4.0'
3
3
  end
metadata CHANGED
@@ -1,262 +1,262 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activegraph
3
3
  version: !ruby/object:Gem::Version
4
- version: 11.3.0
4
+ version: 11.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Ronge, Brian Underwood, Chris Grigg, Heinrich Klobuczek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-12 00:00:00.000000000 Z
11
+ date: 2023-09-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
+ name: activemodel
14
15
  requirement: !ruby/object:Gem::Requirement
15
16
  requirements:
16
17
  - - ">="
17
18
  - !ruby/object:Gem::Version
18
19
  version: '4.0'
19
- name: activemodel
20
- prerelease: false
21
20
  type: :runtime
21
+ prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '4.0'
27
27
  - !ruby/object:Gem::Dependency
28
+ name: activesupport
28
29
  requirement: !ruby/object:Gem::Requirement
29
30
  requirements:
30
31
  - - ">="
31
32
  - !ruby/object:Gem::Version
32
33
  version: '4.0'
33
- name: activesupport
34
- prerelease: false
35
34
  type: :runtime
35
+ prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '4.0'
41
41
  - !ruby/object:Gem::Dependency
42
+ name: i18n
42
43
  requirement: !ruby/object:Gem::Requirement
43
44
  requirements:
44
45
  - - "!="
45
46
  - !ruby/object:Gem::Version
46
47
  version: 1.8.8
47
- name: i18n
48
- prerelease: false
49
48
  type: :runtime
49
+ prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "!="
53
53
  - !ruby/object:Gem::Version
54
54
  version: 1.8.8
55
55
  - !ruby/object:Gem::Dependency
56
+ name: neo4j-ruby-driver
56
57
  requirement: !ruby/object:Gem::Requirement
57
58
  requirements:
58
59
  - - ">="
59
60
  - !ruby/object:Gem::Version
60
61
  version: 4.4.1
61
- name: neo4j-ruby-driver
62
- prerelease: false
63
62
  type: :runtime
63
+ prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: 4.4.1
69
69
  - !ruby/object:Gem::Dependency
70
+ name: orm_adapter
70
71
  requirement: !ruby/object:Gem::Requirement
71
72
  requirements:
72
73
  - - "~>"
73
74
  - !ruby/object:Gem::Version
74
75
  version: 0.5.0
75
- name: orm_adapter
76
- prerelease: false
77
76
  type: :runtime
77
+ prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: 0.5.0
83
83
  - !ruby/object:Gem::Dependency
84
+ name: sorted_set
84
85
  requirement: !ruby/object:Gem::Requirement
85
86
  requirements:
86
87
  - - ">="
87
88
  - !ruby/object:Gem::Version
88
89
  version: '0'
89
- name: sorted_set
90
- prerelease: false
91
90
  type: :runtime
91
+ prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
+ name: guard
98
99
  requirement: !ruby/object:Gem::Requirement
99
100
  requirements:
100
101
  - - ">="
101
102
  - !ruby/object:Gem::Version
102
103
  version: '0'
103
- name: guard
104
- prerelease: false
105
104
  type: :development
105
+ prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
+ name: guard-rspec
112
113
  requirement: !ruby/object:Gem::Requirement
113
114
  requirements:
114
115
  - - ">="
115
116
  - !ruby/object:Gem::Version
116
117
  version: '0'
117
- name: guard-rspec
118
- prerelease: false
119
118
  type: :development
119
+ prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
+ name: guard-rubocop
126
127
  requirement: !ruby/object:Gem::Requirement
127
128
  requirements:
128
129
  - - ">="
129
130
  - !ruby/object:Gem::Version
130
131
  version: '0'
131
- name: guard-rubocop
132
- prerelease: false
133
132
  type: :development
133
+ prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
+ name: neo4j-rake_tasks
140
141
  requirement: !ruby/object:Gem::Requirement
141
142
  requirements:
142
143
  - - ">="
143
144
  - !ruby/object:Gem::Version
144
145
  version: 0.3.0
145
- name: neo4j-rake_tasks
146
- prerelease: false
147
146
  type: :development
147
+ prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: 0.3.0
153
153
  - !ruby/object:Gem::Dependency
154
+ name: os
154
155
  requirement: !ruby/object:Gem::Requirement
155
156
  requirements:
156
157
  - - ">="
157
158
  - !ruby/object:Gem::Version
158
159
  version: '0'
159
- name: os
160
- prerelease: false
161
160
  type: :development
161
+ prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
164
  - - ">="
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
167
  - !ruby/object:Gem::Dependency
168
+ name: pry
168
169
  requirement: !ruby/object:Gem::Requirement
169
170
  requirements:
170
171
  - - ">="
171
172
  - !ruby/object:Gem::Version
172
173
  version: '0'
173
- name: pry
174
- prerelease: false
175
174
  type: :development
175
+ prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
178
  - - ">="
179
179
  - !ruby/object:Gem::Version
180
180
  version: '0'
181
181
  - !ruby/object:Gem::Dependency
182
+ name: railties
182
183
  requirement: !ruby/object:Gem::Requirement
183
184
  requirements:
184
185
  - - ">="
185
186
  - !ruby/object:Gem::Version
186
187
  version: '4.0'
187
- name: railties
188
- prerelease: false
189
188
  type: :development
189
+ prerelease: false
190
190
  version_requirements: !ruby/object:Gem::Requirement
191
191
  requirements:
192
192
  - - ">="
193
193
  - !ruby/object:Gem::Version
194
194
  version: '4.0'
195
195
  - !ruby/object:Gem::Dependency
196
+ name: rake
196
197
  requirement: !ruby/object:Gem::Requirement
197
198
  requirements:
198
199
  - - ">="
199
200
  - !ruby/object:Gem::Version
200
201
  version: '0'
201
- name: rake
202
- prerelease: false
203
202
  type: :development
203
+ prerelease: false
204
204
  version_requirements: !ruby/object:Gem::Requirement
205
205
  requirements:
206
206
  - - ">="
207
207
  - !ruby/object:Gem::Version
208
208
  version: '0'
209
209
  - !ruby/object:Gem::Dependency
210
+ name: rubocop
210
211
  requirement: !ruby/object:Gem::Requirement
211
212
  requirements:
212
213
  - - ">="
213
214
  - !ruby/object:Gem::Version
214
215
  version: 0.56.0
215
- name: rubocop
216
- prerelease: false
217
216
  type: :development
217
+ prerelease: false
218
218
  version_requirements: !ruby/object:Gem::Requirement
219
219
  requirements:
220
220
  - - ">="
221
221
  - !ruby/object:Gem::Version
222
222
  version: 0.56.0
223
223
  - !ruby/object:Gem::Dependency
224
+ name: yard
224
225
  requirement: !ruby/object:Gem::Requirement
225
226
  requirements:
226
227
  - - ">="
227
228
  - !ruby/object:Gem::Version
228
229
  version: '0'
229
- name: yard
230
- prerelease: false
231
230
  type: :development
231
+ prerelease: false
232
232
  version_requirements: !ruby/object:Gem::Requirement
233
233
  requirements:
234
234
  - - ">="
235
235
  - !ruby/object:Gem::Version
236
236
  version: '0'
237
237
  - !ruby/object:Gem::Dependency
238
+ name: dryspec
238
239
  requirement: !ruby/object:Gem::Requirement
239
240
  requirements:
240
241
  - - ">="
241
242
  - !ruby/object:Gem::Version
242
243
  version: '0'
243
- name: dryspec
244
- prerelease: false
245
244
  type: :development
245
+ prerelease: false
246
246
  version_requirements: !ruby/object:Gem::Requirement
247
247
  requirements:
248
248
  - - ">="
249
249
  - !ruby/object:Gem::Version
250
250
  version: '0'
251
251
  - !ruby/object:Gem::Dependency
252
+ name: rspec
252
253
  requirement: !ruby/object:Gem::Requirement
253
254
  requirements:
254
255
  - - "<"
255
256
  - !ruby/object:Gem::Version
256
257
  version: '3.10'
257
- name: rspec
258
- prerelease: false
259
258
  type: :development
259
+ prerelease: false
260
260
  version_requirements: !ruby/object:Gem::Requirement
261
261
  requirements:
262
262
  - - "<"
@@ -444,7 +444,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
444
444
  - !ruby/object:Gem::Version
445
445
  version: '0'
446
446
  requirements: []
447
- rubygems_version: 3.3.25
447
+ rubygems_version: 3.3.7
448
448
  signing_key:
449
449
  specification_version: 4
450
450
  summary: A graph database for Ruby