lex-lex 0.3.4 → 0.3.6
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 +4 -4
- data/.github/workflows/ci.yml +3 -3
- data/.rubocop.yml +2 -62
- data/CHANGELOG.md +12 -0
- data/Gemfile +2 -0
- data/lex-lex.gemspec +2 -2
- data/lib/legion/extensions/lex/actors/agent_watcher.rb +1 -1
- data/lib/legion/extensions/lex/actors/sync.rb +2 -2
- data/lib/legion/extensions/lex/runners/extension.rb +22 -2
- data/lib/legion/extensions/lex/runners/function.rb +27 -5
- data/lib/legion/extensions/lex/runners/register.rb +3 -0
- data/lib/legion/extensions/lex/runners/runner.rb +23 -3
- data/lib/legion/extensions/lex/version.rb +1 -1
- data/lib/legion/extensions/lex.rb +3 -3
- metadata +17 -17
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3243ab6be48b9602778598ee63810fa357789ec4419f9899587e70977c1635c4
|
|
4
|
+
data.tar.gz: c8adbc3c6efc21cc6e307aab07403de34a582bfa275d94777b252ffe117375d5
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 938dae527776a91aee1ef16193f9da5517c827a199c5c1babdd7623d5f0365d9860b3c0b864659ee40694f893db80b0c7e44b111ef0acee105094d2d71f4f959
|
|
7
|
+
data.tar.gz: cc4ea57cabf435f6e3bc97eb999310534503f4b1b36d974e187d71b22c22002d6becd140d079cc8fc7c889e9b0907496ba433fe622de700f6fea99e94d8ad9c7
|
data/.github/workflows/ci.yml
CHANGED
|
@@ -10,8 +10,8 @@ jobs:
|
|
|
10
10
|
ci:
|
|
11
11
|
uses: LegionIO/.github/.github/workflows/ci.yml@main
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
uses: LegionIO/.github/.github/workflows/
|
|
13
|
+
excluded-files:
|
|
14
|
+
uses: LegionIO/.github/.github/workflows/excluded-files.yml@main
|
|
15
15
|
|
|
16
16
|
security:
|
|
17
17
|
uses: LegionIO/.github/.github/workflows/security-scan.yml@main
|
|
@@ -27,7 +27,7 @@ jobs:
|
|
|
27
27
|
uses: LegionIO/.github/.github/workflows/stale.yml@main
|
|
28
28
|
|
|
29
29
|
release:
|
|
30
|
-
needs: [ci,
|
|
30
|
+
needs: [ci, excluded-files]
|
|
31
31
|
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
32
32
|
uses: LegionIO/.github/.github/workflows/release.yml@main
|
|
33
33
|
secrets:
|
data/.rubocop.yml
CHANGED
|
@@ -1,65 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
NewCops: enable
|
|
4
|
-
SuggestExtensions: false
|
|
5
|
-
|
|
6
|
-
Layout/LineLength:
|
|
7
|
-
Max: 160
|
|
8
|
-
|
|
9
|
-
Layout/SpaceAroundEqualsInParameterDefault:
|
|
10
|
-
EnforcedStyle: space
|
|
11
|
-
|
|
12
|
-
Layout/HashAlignment:
|
|
13
|
-
EnforcedHashRocketStyle: table
|
|
14
|
-
EnforcedColonStyle: table
|
|
15
|
-
|
|
16
|
-
Metrics/MethodLength:
|
|
17
|
-
Max: 50
|
|
18
|
-
|
|
19
|
-
Metrics/ClassLength:
|
|
20
|
-
Max: 1500
|
|
21
|
-
|
|
22
|
-
Metrics/ModuleLength:
|
|
23
|
-
Max: 1500
|
|
24
|
-
|
|
25
|
-
Metrics/AbcSize:
|
|
26
|
-
Max: 60
|
|
27
|
-
|
|
28
|
-
Metrics/CyclomaticComplexity:
|
|
29
|
-
Max: 15
|
|
30
|
-
|
|
31
|
-
Metrics/PerceivedComplexity:
|
|
32
|
-
Max: 17
|
|
33
|
-
|
|
34
|
-
Style/Documentation:
|
|
35
|
-
Enabled: false
|
|
36
|
-
|
|
37
|
-
Style/SymbolArray:
|
|
38
|
-
Enabled: true
|
|
39
|
-
|
|
40
|
-
Style/FrozenStringLiteralComment:
|
|
41
|
-
Enabled: true
|
|
42
|
-
EnforcedStyle: always
|
|
43
|
-
|
|
44
|
-
Naming/FileName:
|
|
45
|
-
Enabled: false
|
|
46
|
-
|
|
47
|
-
Naming/PredicateMethod:
|
|
48
|
-
Enabled: false
|
|
49
|
-
|
|
50
|
-
Naming/PredicatePrefix:
|
|
51
|
-
Enabled: false
|
|
52
|
-
|
|
53
|
-
Gemspec/DevelopmentDependencies:
|
|
54
|
-
Enabled: false
|
|
55
|
-
|
|
56
|
-
Metrics/ParameterLists:
|
|
57
|
-
Enabled: false
|
|
58
|
-
|
|
59
|
-
Metrics/BlockLength:
|
|
60
|
-
Max: 40
|
|
61
|
-
Exclude:
|
|
62
|
-
- 'spec/**/*'
|
|
1
|
+
inherit_gem:
|
|
2
|
+
rubocop-legion: config/lex.yml
|
|
63
3
|
|
|
64
4
|
Style/OneClassPerFile:
|
|
65
5
|
Exclude:
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.3.6] - 2026-05-27
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
- Use Sequel static_cache for Extension/Runner/Function lookups in Register#save, eliminating per-message PG round-trips for existing records
|
|
7
|
+
- Fall back to `.where` queries when static_cache plugin is not loaded (test environments)
|
|
8
|
+
- Reload static caches after inserts/updates to keep in-memory state fresh
|
|
9
|
+
|
|
10
|
+
## [0.3.5] - 2026-03-30
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
- update to rubocop-legion 0.1.7, resolve all offenses
|
|
14
|
+
|
|
3
15
|
## [0.3.4] - 2026-03-29
|
|
4
16
|
|
|
5
17
|
### Fixed
|
data/Gemfile
CHANGED
data/lex-lex.gemspec
CHANGED
|
@@ -34,10 +34,10 @@ Gem::Specification.new do |spec|
|
|
|
34
34
|
spec.add_dependency 'legion-settings', '>= 1.3.14'
|
|
35
35
|
spec.add_dependency 'legion-transport', '>= 1.3.9'
|
|
36
36
|
|
|
37
|
-
spec.add_development_dependency 'rake'
|
|
38
37
|
spec.add_development_dependency 'rspec', '~> 3.13'
|
|
39
38
|
spec.add_development_dependency 'rspec_junit_formatter'
|
|
40
|
-
spec.add_development_dependency 'rubocop'
|
|
39
|
+
spec.add_development_dependency 'rubocop'
|
|
40
|
+
spec.add_development_dependency 'rubocop-legion'
|
|
41
41
|
spec.add_development_dependency 'rubocop-rspec'
|
|
42
42
|
spec.add_development_dependency 'simplecov'
|
|
43
43
|
end
|
|
@@ -4,7 +4,7 @@ module Legion
|
|
|
4
4
|
module Extensions
|
|
5
5
|
module Lex
|
|
6
6
|
module Actor
|
|
7
|
-
class AgentWatcher < Legion::Extensions::Actors::Every
|
|
7
|
+
class AgentWatcher < Legion::Extensions::Actors::Every # rubocop:disable Legion/Extension/EveryActorRequiresTime
|
|
8
8
|
def runner_class
|
|
9
9
|
self.class
|
|
10
10
|
end
|
|
@@ -27,11 +27,11 @@ module Legion
|
|
|
27
27
|
false
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
def enabled?
|
|
30
|
+
def enabled? # rubocop:disable Legion/Extension/ActorEnabledSideEffects
|
|
31
31
|
return false unless defined?(Legion::Settings)
|
|
32
32
|
|
|
33
33
|
Legion::Settings[:data][:connected] == true
|
|
34
|
-
rescue StandardError
|
|
34
|
+
rescue StandardError => _e
|
|
35
35
|
false
|
|
36
36
|
end
|
|
37
37
|
|
|
@@ -8,13 +8,14 @@ module Legion
|
|
|
8
8
|
include Legion::Extensions::Helpers::Lex if defined?(Legion::Extensions::Helpers::Lex)
|
|
9
9
|
|
|
10
10
|
def create(name:, namespace:, active: true, **opts)
|
|
11
|
-
existing =
|
|
12
|
-
return update(extension_id: existing.values[:id], namespace: namespace, active: active, **opts) if existing
|
|
11
|
+
existing = find_cached_extension(name)
|
|
12
|
+
return update(extension_id: existing.values[:id], namespace: namespace, active: active, **opts) if existing # rubocop:disable Legion/Extension/RunnerReturnHash
|
|
13
13
|
|
|
14
14
|
insert = { name: name, namespace: namespace, active: active }
|
|
15
15
|
insert[:exchange] = opts.fetch(:exchange, name)
|
|
16
16
|
insert[:uri] = opts.fetch(:uri, name)
|
|
17
17
|
id = Legion::Data::Model::Extension.insert(insert)
|
|
18
|
+
reload_static_caches
|
|
18
19
|
{ success: true, extension_id: id }
|
|
19
20
|
end
|
|
20
21
|
|
|
@@ -33,6 +34,7 @@ module Legion
|
|
|
33
34
|
return { success: true, changed: false, extension_id: extension_id } if changes.empty?
|
|
34
35
|
|
|
35
36
|
extension.update(changes)
|
|
37
|
+
reload_static_caches
|
|
36
38
|
{ success: true, changed: true, updates: changes, extension_id: extension_id }
|
|
37
39
|
end
|
|
38
40
|
|
|
@@ -52,8 +54,26 @@ module Legion
|
|
|
52
54
|
return { success: false, reason: 'not found' } if record.nil?
|
|
53
55
|
|
|
54
56
|
record.delete
|
|
57
|
+
reload_static_caches
|
|
55
58
|
{ success: true, extension_id: extension_id }
|
|
56
59
|
end
|
|
60
|
+
|
|
61
|
+
private
|
|
62
|
+
|
|
63
|
+
def find_cached_extension(name)
|
|
64
|
+
model = Legion::Data::Model::Extension
|
|
65
|
+
if model.respond_to?(:cache) && model.respond_to?(:all)
|
|
66
|
+
model.all.find { |e| e.values[:name] == name }
|
|
67
|
+
else
|
|
68
|
+
model.where(name: name).first
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def reload_static_caches
|
|
73
|
+
[Legion::Data::Model::Extension, Legion::Data::Model::Runner, Legion::Data::Model::Function].each do |m|
|
|
74
|
+
m.load_cache if m.respond_to?(:load_cache)
|
|
75
|
+
end
|
|
76
|
+
end
|
|
57
77
|
end
|
|
58
78
|
end
|
|
59
79
|
end
|
|
@@ -7,14 +7,17 @@ module Legion
|
|
|
7
7
|
module Function
|
|
8
8
|
include Legion::Extensions::Helpers::Lex if defined?(Legion::Extensions::Helpers::Lex)
|
|
9
9
|
|
|
10
|
+
RESERVED_ARG_NAMES = %w[opts options].freeze
|
|
11
|
+
|
|
10
12
|
def create(runner_id:, name:, active: true, **opts)
|
|
11
|
-
existing =
|
|
12
|
-
return update(function_id: existing.values[:id], name: name, active: active, **opts) if existing
|
|
13
|
+
existing = find_cached_function(name, runner_id)
|
|
14
|
+
return update(function_id: existing.values[:id], name: name, active: active, **opts) if existing # rubocop:disable Legion/Extension/RunnerReturnHash
|
|
13
15
|
|
|
14
16
|
insert = { runner_id: runner_id, name: name.to_s, active: active }
|
|
15
|
-
insert[:args] =
|
|
17
|
+
insert[:args] = json_dump(opts[:formatted_args]) if opts.key?(:formatted_args)
|
|
16
18
|
|
|
17
19
|
id = Legion::Data::Model::Function.insert(insert)
|
|
20
|
+
reload_static_caches
|
|
18
21
|
{ success: true, function_id: id }
|
|
19
22
|
end
|
|
20
23
|
|
|
@@ -26,13 +29,14 @@ module Legion
|
|
|
26
29
|
changes[:active] = opts[:active] if opts.key?(:active) && function.values[:active] != opts[:active]
|
|
27
30
|
|
|
28
31
|
if opts.key?(:formatted_args)
|
|
29
|
-
args =
|
|
32
|
+
args = json_dump(opts[:formatted_args])
|
|
30
33
|
changes[:args] = args unless args == function.values[:args]
|
|
31
34
|
end
|
|
32
35
|
|
|
33
36
|
return { success: true, changed: false, function_id: function_id } if changes.empty?
|
|
34
37
|
|
|
35
38
|
function.update(changes)
|
|
39
|
+
reload_static_caches
|
|
36
40
|
{ success: true, changed: true, updates: changes, function_id: function_id }
|
|
37
41
|
end
|
|
38
42
|
|
|
@@ -48,16 +52,34 @@ module Legion
|
|
|
48
52
|
return { success: false, reason: 'not found' } if record.nil?
|
|
49
53
|
|
|
50
54
|
record.delete
|
|
55
|
+
reload_static_caches
|
|
51
56
|
{ success: true, function_id: function_id }
|
|
52
57
|
end
|
|
53
58
|
|
|
54
59
|
def build_args(raw_args:, **_opts)
|
|
55
60
|
args = {}
|
|
56
61
|
raw_args.each do |arg|
|
|
57
|
-
args[arg[1]] = arg[0] unless
|
|
62
|
+
args[arg[1]] = arg[0] unless RESERVED_ARG_NAMES.include?(arg[1].to_s)
|
|
58
63
|
end
|
|
59
64
|
{ success: true, formatted_args: args }
|
|
60
65
|
end
|
|
66
|
+
|
|
67
|
+
private
|
|
68
|
+
|
|
69
|
+
def find_cached_function(name, runner_id)
|
|
70
|
+
model = Legion::Data::Model::Function
|
|
71
|
+
if model.respond_to?(:cache) && model.respond_to?(:all)
|
|
72
|
+
model.all.find { |f| f.values[:name] == name.to_s && f.values[:runner_id] == runner_id }
|
|
73
|
+
else
|
|
74
|
+
model.where(name: name.to_s, runner_id: runner_id).first
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def reload_static_caches
|
|
79
|
+
[Legion::Data::Model::Extension, Legion::Data::Model::Runner, Legion::Data::Model::Function].each do |m|
|
|
80
|
+
m.load_cache if m.respond_to?(:load_cache)
|
|
81
|
+
end
|
|
82
|
+
end
|
|
61
83
|
end
|
|
62
84
|
end
|
|
63
85
|
end
|
|
@@ -8,6 +8,9 @@ module Legion
|
|
|
8
8
|
include Legion::Extensions::Helpers::Lex if defined?(Legion::Extensions::Helpers::Lex)
|
|
9
9
|
|
|
10
10
|
def save(opts:, **_options)
|
|
11
|
+
log.unknown "save(opts: #{opts.class}, #{opts.length}, #{opts&.keys}"
|
|
12
|
+
log.unknown "full: #{opts}" if opts.empty?
|
|
13
|
+
|
|
11
14
|
return { success: false, reason: 'no opts provided' } if opts.nil? || opts.empty?
|
|
12
15
|
|
|
13
16
|
extension_id = nil
|
|
@@ -4,12 +4,12 @@ module Legion
|
|
|
4
4
|
module Extensions
|
|
5
5
|
module Lex
|
|
6
6
|
module Runners
|
|
7
|
-
module Runner
|
|
7
|
+
module Runner # rubocop:disable Legion/Extension/RunnerPluralModule
|
|
8
8
|
include Legion::Extensions::Helpers::Lex if defined?(Legion::Extensions::Helpers::Lex)
|
|
9
9
|
|
|
10
10
|
def create(extension_id:, name:, active: true, **opts)
|
|
11
|
-
existing =
|
|
12
|
-
return update(runner_id: existing.values[:id], name: name, active: active, **opts) if existing
|
|
11
|
+
existing = find_cached_runner(name, extension_id)
|
|
12
|
+
return update(runner_id: existing.values[:id], name: name, active: active, **opts) if existing # rubocop:disable Legion/Extension/RunnerReturnHash
|
|
13
13
|
|
|
14
14
|
insert = {
|
|
15
15
|
extension_id: extension_id,
|
|
@@ -20,6 +20,7 @@ module Legion
|
|
|
20
20
|
insert[:queue] = opts.fetch(:queue, name.to_s)
|
|
21
21
|
insert[:uri] = opts.fetch(:uri, name.to_s)
|
|
22
22
|
id = Legion::Data::Model::Runner.insert(insert)
|
|
23
|
+
reload_static_caches
|
|
23
24
|
{ success: true, runner_id: id }
|
|
24
25
|
end
|
|
25
26
|
|
|
@@ -38,6 +39,7 @@ module Legion
|
|
|
38
39
|
return { success: true, changed: false, runner_id: runner_id } if changes.empty?
|
|
39
40
|
|
|
40
41
|
runner.update(changes)
|
|
42
|
+
reload_static_caches
|
|
41
43
|
{ success: true, changed: true, updates: changes, runner_id: runner_id }
|
|
42
44
|
end
|
|
43
45
|
|
|
@@ -53,8 +55,26 @@ module Legion
|
|
|
53
55
|
return { success: false, reason: 'not found' } if record.nil?
|
|
54
56
|
|
|
55
57
|
record.delete
|
|
58
|
+
reload_static_caches
|
|
56
59
|
{ success: true, runner_id: runner_id }
|
|
57
60
|
end
|
|
61
|
+
|
|
62
|
+
private
|
|
63
|
+
|
|
64
|
+
def find_cached_runner(name, extension_id)
|
|
65
|
+
model = Legion::Data::Model::Runner
|
|
66
|
+
if model.respond_to?(:cache) && model.respond_to?(:all)
|
|
67
|
+
model.all.find { |r| r.values[:name] == name.to_s && r.values[:extension_id] == extension_id }
|
|
68
|
+
else
|
|
69
|
+
model.where(name: name.to_s, extension_id: extension_id).first
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def reload_static_caches
|
|
74
|
+
[Legion::Data::Model::Extension, Legion::Data::Model::Runner, Legion::Data::Model::Function].each do |m|
|
|
75
|
+
m.load_cache if m.respond_to?(:load_cache)
|
|
76
|
+
end
|
|
77
|
+
end
|
|
58
78
|
end
|
|
59
79
|
end
|
|
60
80
|
end
|
|
@@ -6,14 +6,14 @@ require_relative 'lex/runners/runner'
|
|
|
6
6
|
require_relative 'lex/runners/function'
|
|
7
7
|
require_relative 'lex/runners/register'
|
|
8
8
|
require_relative 'lex/runners/sync'
|
|
9
|
-
require_relative 'lex/actors/agent_watcher'
|
|
9
|
+
require_relative 'lex/actors/agent_watcher'
|
|
10
10
|
|
|
11
11
|
module Legion
|
|
12
12
|
module Extensions
|
|
13
13
|
module Lex
|
|
14
|
-
extend Legion::Extensions::Core if Legion::Extensions.const_defined?(:Core)
|
|
14
|
+
extend Legion::Extensions::Core if Legion::Extensions.const_defined?(:Core, false)
|
|
15
15
|
|
|
16
|
-
def self.data_required?
|
|
16
|
+
def self.data_required? # rubocop:disable Legion/Extension/DataRequiredWithoutMigrations
|
|
17
17
|
true
|
|
18
18
|
end
|
|
19
19
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: lex-lex
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.6
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Esity
|
|
@@ -108,35 +108,35 @@ dependencies:
|
|
|
108
108
|
- !ruby/object:Gem::Version
|
|
109
109
|
version: 1.3.9
|
|
110
110
|
- !ruby/object:Gem::Dependency
|
|
111
|
-
name:
|
|
111
|
+
name: rspec
|
|
112
112
|
requirement: !ruby/object:Gem::Requirement
|
|
113
113
|
requirements:
|
|
114
|
-
- - "
|
|
114
|
+
- - "~>"
|
|
115
115
|
- !ruby/object:Gem::Version
|
|
116
|
-
version: '
|
|
116
|
+
version: '3.13'
|
|
117
117
|
type: :development
|
|
118
118
|
prerelease: false
|
|
119
119
|
version_requirements: !ruby/object:Gem::Requirement
|
|
120
120
|
requirements:
|
|
121
|
-
- - "
|
|
121
|
+
- - "~>"
|
|
122
122
|
- !ruby/object:Gem::Version
|
|
123
|
-
version: '
|
|
123
|
+
version: '3.13'
|
|
124
124
|
- !ruby/object:Gem::Dependency
|
|
125
|
-
name:
|
|
125
|
+
name: rspec_junit_formatter
|
|
126
126
|
requirement: !ruby/object:Gem::Requirement
|
|
127
127
|
requirements:
|
|
128
|
-
- - "
|
|
128
|
+
- - ">="
|
|
129
129
|
- !ruby/object:Gem::Version
|
|
130
|
-
version: '
|
|
130
|
+
version: '0'
|
|
131
131
|
type: :development
|
|
132
132
|
prerelease: false
|
|
133
133
|
version_requirements: !ruby/object:Gem::Requirement
|
|
134
134
|
requirements:
|
|
135
|
-
- - "
|
|
135
|
+
- - ">="
|
|
136
136
|
- !ruby/object:Gem::Version
|
|
137
|
-
version: '
|
|
137
|
+
version: '0'
|
|
138
138
|
- !ruby/object:Gem::Dependency
|
|
139
|
-
name:
|
|
139
|
+
name: rubocop
|
|
140
140
|
requirement: !ruby/object:Gem::Requirement
|
|
141
141
|
requirements:
|
|
142
142
|
- - ">="
|
|
@@ -150,19 +150,19 @@ dependencies:
|
|
|
150
150
|
- !ruby/object:Gem::Version
|
|
151
151
|
version: '0'
|
|
152
152
|
- !ruby/object:Gem::Dependency
|
|
153
|
-
name: rubocop
|
|
153
|
+
name: rubocop-legion
|
|
154
154
|
requirement: !ruby/object:Gem::Requirement
|
|
155
155
|
requirements:
|
|
156
|
-
- - "
|
|
156
|
+
- - ">="
|
|
157
157
|
- !ruby/object:Gem::Version
|
|
158
|
-
version: '
|
|
158
|
+
version: '0'
|
|
159
159
|
type: :development
|
|
160
160
|
prerelease: false
|
|
161
161
|
version_requirements: !ruby/object:Gem::Requirement
|
|
162
162
|
requirements:
|
|
163
|
-
- - "
|
|
163
|
+
- - ">="
|
|
164
164
|
- !ruby/object:Gem::Version
|
|
165
|
-
version: '
|
|
165
|
+
version: '0'
|
|
166
166
|
- !ruby/object:Gem::Dependency
|
|
167
167
|
name: rubocop-rspec
|
|
168
168
|
requirement: !ruby/object:Gem::Requirement
|