lex-lex 0.3.5 → 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/CHANGELOG.md +7 -0
- data/Gemfile +2 -0
- data/lex-lex.gemspec +1 -2
- data/lib/legion/extensions/lex/runners/extension.rb +21 -1
- data/lib/legion/extensions/lex/runners/function.rb +21 -1
- data/lib/legion/extensions/lex/runners/register.rb +3 -0
- data/lib/legion/extensions/lex/runners/runner.rb +21 -1
- data/lib/legion/extensions/lex/version.rb +1 -1
- metadata +5 -19
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/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
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
|
+
|
|
3
10
|
## [0.3.5] - 2026-03-30
|
|
4
11
|
|
|
5
12
|
### Changed
|
data/Gemfile
CHANGED
data/lex-lex.gemspec
CHANGED
|
@@ -34,10 +34,9 @@ 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'
|
|
41
40
|
spec.add_development_dependency 'rubocop-legion'
|
|
42
41
|
spec.add_development_dependency 'rubocop-rspec'
|
|
43
42
|
spec.add_development_dependency 'simplecov'
|
|
@@ -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 =
|
|
11
|
+
existing = find_cached_extension(name)
|
|
12
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
|
|
@@ -10,13 +10,14 @@ module Legion
|
|
|
10
10
|
RESERVED_ARG_NAMES = %w[opts options].freeze
|
|
11
11
|
|
|
12
12
|
def create(runner_id:, name:, active: true, **opts)
|
|
13
|
-
existing =
|
|
13
|
+
existing = find_cached_function(name, runner_id)
|
|
14
14
|
return update(function_id: existing.values[:id], name: name, active: active, **opts) if existing # rubocop:disable Legion/Extension/RunnerReturnHash
|
|
15
15
|
|
|
16
16
|
insert = { runner_id: runner_id, name: name.to_s, active: active }
|
|
17
17
|
insert[:args] = json_dump(opts[:formatted_args]) if opts.key?(:formatted_args)
|
|
18
18
|
|
|
19
19
|
id = Legion::Data::Model::Function.insert(insert)
|
|
20
|
+
reload_static_caches
|
|
20
21
|
{ success: true, function_id: id }
|
|
21
22
|
end
|
|
22
23
|
|
|
@@ -35,6 +36,7 @@ module Legion
|
|
|
35
36
|
return { success: true, changed: false, function_id: function_id } if changes.empty?
|
|
36
37
|
|
|
37
38
|
function.update(changes)
|
|
39
|
+
reload_static_caches
|
|
38
40
|
{ success: true, changed: true, updates: changes, function_id: function_id }
|
|
39
41
|
end
|
|
40
42
|
|
|
@@ -50,6 +52,7 @@ module Legion
|
|
|
50
52
|
return { success: false, reason: 'not found' } if record.nil?
|
|
51
53
|
|
|
52
54
|
record.delete
|
|
55
|
+
reload_static_caches
|
|
53
56
|
{ success: true, function_id: function_id }
|
|
54
57
|
end
|
|
55
58
|
|
|
@@ -60,6 +63,23 @@ module Legion
|
|
|
60
63
|
end
|
|
61
64
|
{ success: true, formatted_args: args }
|
|
62
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
|
|
63
83
|
end
|
|
64
84
|
end
|
|
65
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
|
|
@@ -8,7 +8,7 @@ module Legion
|
|
|
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 =
|
|
11
|
+
existing = find_cached_runner(name, extension_id)
|
|
12
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 = {
|
|
@@ -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
|
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
|
|
@@ -107,20 +107,6 @@ dependencies:
|
|
|
107
107
|
- - ">="
|
|
108
108
|
- !ruby/object:Gem::Version
|
|
109
109
|
version: 1.3.9
|
|
110
|
-
- !ruby/object:Gem::Dependency
|
|
111
|
-
name: rake
|
|
112
|
-
requirement: !ruby/object:Gem::Requirement
|
|
113
|
-
requirements:
|
|
114
|
-
- - ">="
|
|
115
|
-
- !ruby/object:Gem::Version
|
|
116
|
-
version: '0'
|
|
117
|
-
type: :development
|
|
118
|
-
prerelease: false
|
|
119
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
120
|
-
requirements:
|
|
121
|
-
- - ">="
|
|
122
|
-
- !ruby/object:Gem::Version
|
|
123
|
-
version: '0'
|
|
124
110
|
- !ruby/object:Gem::Dependency
|
|
125
111
|
name: rspec
|
|
126
112
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -153,16 +139,16 @@ dependencies:
|
|
|
153
139
|
name: rubocop
|
|
154
140
|
requirement: !ruby/object:Gem::Requirement
|
|
155
141
|
requirements:
|
|
156
|
-
- - "
|
|
142
|
+
- - ">="
|
|
157
143
|
- !ruby/object:Gem::Version
|
|
158
|
-
version: '
|
|
144
|
+
version: '0'
|
|
159
145
|
type: :development
|
|
160
146
|
prerelease: false
|
|
161
147
|
version_requirements: !ruby/object:Gem::Requirement
|
|
162
148
|
requirements:
|
|
163
|
-
- - "
|
|
149
|
+
- - ">="
|
|
164
150
|
- !ruby/object:Gem::Version
|
|
165
|
-
version: '
|
|
151
|
+
version: '0'
|
|
166
152
|
- !ruby/object:Gem::Dependency
|
|
167
153
|
name: rubocop-legion
|
|
168
154
|
requirement: !ruby/object:Gem::Requirement
|