lex-tasker 0.3.0 → 0.3.2

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: 0ddb16f43ef1fb3c1ac2861f9c76e02d2b45cede2dbe9eb39029916a5ee70fb7
4
- data.tar.gz: ca05b76ba9b441705bb70c182adcc442c36dea6aea02e5d477db0d872afb282d
3
+ metadata.gz: 31373a9fbcb89fdd2797687de34939fdbf0d14696d5b5ff95d971569cca69ee4
4
+ data.tar.gz: a5193604e940831cc07f70a0e4c1613db9d3cfc01c4025c0c9c683bd5007e837
5
5
  SHA512:
6
- metadata.gz: 8f66556dfc6fdf24c90c688641a477d40b0d31ceb702903e7946bb6d5e0d5ecc8c6a49f3570f600a491b95c32552b75c919f88047d9462327b8ffa4f12bcbbd0
7
- data.tar.gz: 34f3bc487e7ecb93f54f86139d055249560d0abd0563646a2656f73ac84026754a3f79afb3ab562778cecd72ffb02c7397338a079dfc5870e5486b2022c42989
6
+ metadata.gz: b1ef101a904039b82710614be131ebd7317dffdec8ffadd03cef2e954171194673e6b17cb885ca8d7bd80bc59435b6720331d13be4c1199ef82de2774885ad93
7
+ data.tar.gz: e50a59b3c66a86932c21c2229a99b8c8bacc0f9a77a3df252ee41be6a2763406480f3fab466596213cab640de30c04370887001e0c01661c71e8f5a6f4387fc9
data/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.2] - 2026-03-24
4
+
5
+ ### Fixed
6
+ - add self-contained `cache_get`/`cache_set` methods to TaskFinder with graceful fallback when legion-cache is unavailable — fixes `undefined method 'cache_get'` crash in CheckSubtask runner
7
+
8
+ ## [0.3.1] - 2026-03-22
9
+
10
+ ### Changed
11
+ - Add legion-cache, legion-crypt, legion-data, legion-json, legion-logging, legion-settings, legion-transport as runtime dependencies
12
+ - Replace direct Legion::Cache.get/set calls with cache_get/cache_set helper methods in Helpers::TaskFinder
13
+ - Replace direct Legion::JSON.dump call with json_dump helper in Runners::CheckSubtask
14
+ - Update spec_helper with real sub-gem helper stubs and actor base class includes
15
+ - Update specs to stub cache_get/cache_set on instance instead of Legion::Cache class methods
16
+ - Update transport queue specs to use allocate instead of new to bypass real Transport::Queue initialize
17
+
3
18
  ## [0.3.0] - 2026-03-18
4
19
 
5
20
  ### Added
data/CLAUDE.md CHANGED
@@ -30,9 +30,8 @@ Legion::Extensions::Tasker
30
30
  │ ├── Updater # update_status: update task columns in DB
31
31
  │ └── Log # add_log, delete_log, delete_task_logs, delete_node_logs, delete_all
32
32
  ├── Helpers/
33
- ├── Base # Shared helper utilities
34
- ├── FetchDelayed # Delayed task query helpers
35
- │ └── FindSubtask # Subtask relationship lookup helpers
33
+ └── TaskFinder # Subtask relationship lookup and task dispatch helpers
34
+ ├── Client # Standalone client including TaskFinder helper; accepts injected data_model
36
35
  └── Transport/
37
36
  ├── Exchanges/Task # Task exchange
38
37
  ├── Queues/
data/Gemfile CHANGED
@@ -6,6 +6,13 @@ gemspec
6
6
 
7
7
  gem 'bundler', '>= 2'
8
8
  gem 'codecov'
9
+ gem 'legion-cache', '>= 1.3.11'
10
+ gem 'legion-crypt', '>= 1.4.9'
11
+ gem 'legion-data', '>= 1.4.17'
12
+ gem 'legion-json', '>= 1.2.1'
13
+ gem 'legion-logging', '>= 1.3.2'
14
+ gem 'legion-settings', '>= 1.3.14'
15
+ gem 'legion-transport', '>= 1.3.9'
9
16
  gem 'rake'
10
17
  gem 'rspec'
11
18
  gem 'rspec_junit_formatter'
data/README.md CHANGED
@@ -24,6 +24,17 @@ When a task completes, its runner calls `check_subtasks` via the task exchange.
24
24
 
25
25
  Delayed tasks (those with `relationship_delay` or `task_delay`) are stored in the database with status `task.delayed` and dispatched by the `FetchDelayed` runner once their delay period has elapsed.
26
26
 
27
+ ## Standalone Client
28
+
29
+ `Legion::Extensions::Tasker::Client` provides access to the `TaskFinder` helper for programmatic task lookup:
30
+
31
+ ```ruby
32
+ require 'legion/extensions/tasker/client'
33
+ client = Legion::Extensions::Tasker::Client.new
34
+ ```
35
+
36
+ Accepts an optional `data_model:` kwarg to inject a mock data model for testing.
37
+
27
38
  ## Requirements
28
39
 
29
40
  - Ruby >= 3.4
data/lex-tasker.gemspec CHANGED
@@ -26,4 +26,12 @@ Gem::Specification.new do |spec|
26
26
  spec.metadata['bug_tracker_uri'] = 'https://github.com/LegionIO/lex-tasker/issues'
27
27
  spec.metadata['rubygems_mfa_required'] = 'true'
28
28
  spec.require_paths = ['lib']
29
+
30
+ spec.add_dependency 'legion-cache', '>= 1.3.11'
31
+ spec.add_dependency 'legion-crypt', '>= 1.4.9'
32
+ spec.add_dependency 'legion-data', '>= 1.4.17'
33
+ spec.add_dependency 'legion-json', '>= 1.2.1'
34
+ spec.add_dependency 'legion-logging', '>= 1.3.2'
35
+ spec.add_dependency 'legion-settings', '>= 1.3.14'
36
+ spec.add_dependency 'legion-transport', '>= 1.3.9'
29
37
  end
@@ -5,9 +5,25 @@ module Legion
5
5
  module Tasker
6
6
  module Helpers
7
7
  module TaskFinder
8
+ def cache_get(key)
9
+ return nil unless defined?(Legion::Cache) && Legion::Cache.respond_to?(:connected?) && Legion::Cache.connected?
10
+
11
+ Legion::Cache.get("tasker:#{key}")
12
+ rescue StandardError
13
+ nil
14
+ end
15
+
16
+ def cache_set(key, value, ttl: 60)
17
+ return unless defined?(Legion::Cache) && Legion::Cache.respond_to?(:connected?) && Legion::Cache.connected?
18
+
19
+ Legion::Cache.set("tasker:#{key}", value, ttl)
20
+ rescue StandardError
21
+ nil
22
+ end
23
+
8
24
  def find_trigger(runner_class:, function:, **)
9
- cache_key = "tasker:find_trigger:#{runner_class}:#{function}"
10
- cached = Legion::Cache.get(cache_key)
25
+ cache_key = "find_trigger:#{runner_class}:#{function}"
26
+ cached = cache_get(cache_key)
11
27
  return cached unless cached.nil?
12
28
 
13
29
  result = Legion::Data::Model::Function
@@ -19,13 +35,13 @@ module Legion
19
35
  Sequel[:runners][:namespace])
20
36
  .first
21
37
 
22
- Legion::Cache.set(cache_key, result) if result
38
+ cache_set(cache_key, result) if result
23
39
  result
24
40
  end
25
41
 
26
42
  def find_subtasks(trigger_id:, **)
27
- cache_key = "tasker:find_subtasks:#{trigger_id}"
28
- cached = Legion::Cache.get(cache_key)
43
+ cache_key = "find_subtasks:#{trigger_id}"
44
+ cached = cache_get(cache_key)
29
45
  return cached unless cached.nil?
30
46
 
31
47
  results = subtask_query(trigger_id).all.map do |row|
@@ -33,7 +49,7 @@ module Legion
33
49
  row
34
50
  end
35
51
 
36
- Legion::Cache.set(cache_key, results, 5) if results.is_a?(Array) && results.any?
52
+ cache_set(cache_key, results, ttl: 5) if results.is_a?(Array) && results.any?
37
53
  results
38
54
  end
39
55
 
@@ -99,7 +99,7 @@ module Legion
99
99
  insert_hash = { relationship_id: relationship_id, function_id: function_id, status: status }
100
100
  insert_hash[:master_id] = master_id.is_a?(Integer) ? master_id : (parent_id if parent_id.is_a?(Integer))
101
101
  insert_hash[:parent_id] = parent_id if parent_id.is_a?(Integer)
102
- insert_hash[:payload] = Legion::JSON.dump(opts)
102
+ insert_hash[:payload] = json_dump(opts)
103
103
  Legion::Data::Model::Task.insert(insert_hash)
104
104
  end
105
105
  end
@@ -3,7 +3,7 @@
3
3
  module Legion
4
4
  module Extensions
5
5
  module Tasker
6
- VERSION = '0.3.0'
6
+ VERSION = '0.3.2'
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,14 +1,112 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lex-tasker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity
8
8
  bindir: bin
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
- dependencies: []
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: legion-cache
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: 1.3.11
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: 1.3.11
26
+ - !ruby/object:Gem::Dependency
27
+ name: legion-crypt
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.4.9
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 1.4.9
40
+ - !ruby/object:Gem::Dependency
41
+ name: legion-data
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 1.4.17
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 1.4.17
54
+ - !ruby/object:Gem::Dependency
55
+ name: legion-json
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 1.2.1
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: 1.2.1
68
+ - !ruby/object:Gem::Dependency
69
+ name: legion-logging
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 1.3.2
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: 1.3.2
82
+ - !ruby/object:Gem::Dependency
83
+ name: legion-settings
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 1.3.14
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: 1.3.14
96
+ - !ruby/object:Gem::Dependency
97
+ name: legion-transport
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 1.3.9
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: 1.3.9
12
110
  description: This LEX keeps track of tasks and their status
13
111
  email:
14
112
  - matthewdiverson@gmail.com