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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c5d9c5160149403734400da2038d9727436d3a6f246d05eedffb6e616c0aa306
4
- data.tar.gz: d3ffd4a4805e732fe9b2077b730d415507e48cc61238490e7cbcbee81081be07
3
+ metadata.gz: 3243ab6be48b9602778598ee63810fa357789ec4419f9899587e70977c1635c4
4
+ data.tar.gz: c8adbc3c6efc21cc6e307aab07403de34a582bfa275d94777b252ffe117375d5
5
5
  SHA512:
6
- metadata.gz: 6184fe999951056a0dc0694473cfe9c6b42f7cecb44c19a9a9971c3f4fc5dd420262cf033bdf9b483844a4e0ab3e214d51981ba23c82477ab171fbed15d871f4
7
- data.tar.gz: 21e6529ec284218b6dc1d9d53ad2143245e77607242a77764cc8a9730f0962bd420f8baf28d920ed95b1bde5d966dd1f91359dc6a0f81cfad788d2ba7a469bec
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
@@ -3,3 +3,5 @@
3
3
  source 'https://rubygems.org'
4
4
 
5
5
  gemspec
6
+
7
+ gem 'rubocop-legion'
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', '~> 1.75'
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 = Legion::Data::Model::Extension.where(name: name).first
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 = Legion::Data::Model::Function.where(name: name.to_s, runner_id: runner_id).first
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 = Legion::Data::Model::Runner.where(name: name.to_s, extension_id: extension_id).first
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
@@ -3,7 +3,7 @@
3
3
  module Legion
4
4
  module Extensions
5
5
  module Lex
6
- VERSION = '0.3.5'
6
+ VERSION = '0.3.6'
7
7
  end
8
8
  end
9
9
  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.5
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: '1.75'
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: '1.75'
151
+ version: '0'
166
152
  - !ruby/object:Gem::Dependency
167
153
  name: rubocop-legion
168
154
  requirement: !ruby/object:Gem::Requirement