lex-scheduler 0.1.3 → 0.2.0

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.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +16 -0
  3. data/.rubocop.yml +36 -12
  4. data/CHANGELOG.md +17 -0
  5. data/CLAUDE.md +88 -0
  6. data/Dockerfile +1 -1
  7. data/Gemfile +9 -0
  8. data/Gemfile.lock +112 -74
  9. data/README.md +43 -3
  10. data/docker_deploy.rb +1 -0
  11. data/lex-scheduler.gemspec +8 -14
  12. data/lib/legion/extensions/scheduler/actors/run_scheduler.rb +24 -16
  13. data/lib/legion/extensions/scheduler/actors/schedule_task.rb +24 -16
  14. data/lib/legion/extensions/scheduler/data/migrations/001_schedule_table.rb +2 -0
  15. data/lib/legion/extensions/scheduler/data/migrations/002_schedule_log.rb +2 -0
  16. data/lib/legion/extensions/scheduler/data/migrations/003_schedule_indexes.rb +2 -0
  17. data/lib/legion/extensions/scheduler/data/migrations/004_schedule_logs_indexes.rb +2 -0
  18. data/lib/legion/extensions/scheduler/data/migrations/005_add_payload_column.rb +2 -0
  19. data/lib/legion/extensions/scheduler/data/migrations/006_add_transform_to_schedule.rb +2 -0
  20. data/lib/legion/extensions/scheduler/data/models/schedule.rb +15 -5
  21. data/lib/legion/extensions/scheduler/data/models/schedule_log.rb +15 -5
  22. data/lib/legion/extensions/scheduler/runners/emergency_promotion.rb +41 -0
  23. data/lib/legion/extensions/scheduler/runners/mode_scheduler.rb +67 -0
  24. data/lib/legion/extensions/scheduler/runners/mode_transition.rb +56 -0
  25. data/lib/legion/extensions/scheduler/runners/schedule.rb +6 -3
  26. data/lib/legion/extensions/scheduler/transport/messages/refresh.rb +37 -27
  27. data/lib/legion/extensions/scheduler/transport/messages/send_task.rb +38 -28
  28. data/lib/legion/extensions/scheduler/transport/queues/schedule.rb +18 -13
  29. data/lib/legion/extensions/scheduler/version.rb +1 -1
  30. data/lib/legion/extensions/scheduler.rb +2 -0
  31. metadata +19 -101
  32. data/CODE_OF_CONDUCT.md +0 -74
  33. data/bitbucket-pipelines.yml +0 -19
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 04eb06cbdfc67f8e33dba90d2f491d067fd72356ebc84de0968fe0ca5dfb1d8b
4
- data.tar.gz: 8943579fcb0855ae53c8f69a96d5647083a9022be81c06906534ce5d77220d5e
3
+ metadata.gz: c30e79b68a5c57ce1c69e7acddcce1bc472d16dfd14dde5bba5ab7c90bc14130
4
+ data.tar.gz: b38c37b9f1822a06a3a970e1aba03ef9c4650488fd6caad4ec733b624ee82c1f
5
5
  SHA512:
6
- metadata.gz: b51b8f0051ecde12d1767cb009a26f5b565dedfbb6ae02c7b073729037c428ead4f0266ad90adcfd46674470c43b6c2e6b6334b6804120ab3c1c31f0b39a85a2
7
- data.tar.gz: 0c3dbf65e28030c66f107f97e78e6becab2f348d7a0b044106bc190f1561b508ad9000461f43ac76ac40bf7579d640caf6b34fd497409c35580339b9a32024f6
6
+ metadata.gz: 19570dc6a5141dbd6f293aa4ff6f1cdcc9e3629986d1c265224322ca1655707d6ede50294c826c8555decf6c42759a7987a2c55f33a1d7dbf29a203137aa7f50
7
+ data.tar.gz: 9239fbc82e2c015af2edc457d00f15611969f1e81726bf027ae769194173186c180a45575e4b2ac178a13b7ac5337ba4117fb05d46365837f2e08625ef283f87
@@ -0,0 +1,16 @@
1
+ name: CI
2
+ on:
3
+ push:
4
+ branches: [main]
5
+ pull_request:
6
+
7
+ jobs:
8
+ ci:
9
+ uses: LegionIO/.github/.github/workflows/ci.yml@main
10
+
11
+ release:
12
+ needs: ci
13
+ if: github.event_name == 'push' && github.ref == 'refs/heads/main'
14
+ uses: LegionIO/.github/.github/workflows/release.yml@main
15
+ secrets:
16
+ rubygems-api-key: ${{ secrets.RUBYGEMS_API_KEY }}
data/.rubocop.yml CHANGED
@@ -1,26 +1,50 @@
1
+ AllCops:
2
+ TargetRubyVersion: 3.4
3
+ NewCops: enable
4
+ SuggestExtensions: false
5
+
1
6
  Layout/LineLength:
2
- Max: 120
7
+ Max: 160
8
+
9
+ Layout/SpaceAroundEqualsInParameterDefault:
10
+ EnforcedStyle: space
11
+
12
+ Layout/HashAlignment:
13
+ EnforcedHashRocketStyle: table
14
+ EnforcedColonStyle: table
15
+
3
16
  Metrics/MethodLength:
4
- Max: 30
17
+ Max: 50
18
+
5
19
  Metrics/ClassLength:
6
20
  Max: 1500
21
+
22
+ Metrics/ModuleLength:
23
+ Max: 1500
24
+
7
25
  Metrics/BlockLength:
8
- Max: 50
26
+ Max: 40
27
+ Exclude:
28
+ - 'spec/**/*'
29
+
9
30
  Metrics/AbcSize:
10
- Max: 100
31
+ Max: 60
32
+
11
33
  Metrics/CyclomaticComplexity:
12
34
  Max: 15
35
+
13
36
  Metrics/PerceivedComplexity:
14
- Max: 20
37
+ Max: 17
38
+
15
39
  Style/Documentation:
16
40
  Enabled: false
17
- AllCops:
18
- TargetRubyVersion: 2.5
19
- NewCops: enable
20
- SuggestExtensions: false
41
+
42
+ Style/SymbolArray:
43
+ Enabled: true
44
+
21
45
  Style/FrozenStringLiteralComment:
22
- Enabled: false
46
+ Enabled: true
47
+ EnforcedStyle: always
48
+
23
49
  Naming/FileName:
24
50
  Enabled: false
25
- Style/ClassAndModuleChildren:
26
- Enabled: false
data/CHANGELOG.md ADDED
@@ -0,0 +1,17 @@
1
+ # Changelog
2
+
3
+ ## [0.2.0] - 2026-03-17
4
+
5
+ ### Added
6
+ - `Runners::ModeScheduler`: time-based operating mode evaluation (active/idle/dream/maintenance)
7
+ - `Runners::ModeTransition`: orchestrated mode transitions with critical task blocking and force override
8
+ - `Runners::EmergencyPromotion`: immediate active mode promotion on critical events (extinction, consent violation)
9
+ - Configurable schedules, emergency patterns, and transition settings
10
+
11
+ ### Fixed
12
+ - Emergency promotion logging uses safe method dispatch for private `Legion::Logging.warn`
13
+
14
+ ## [0.1.4] - 2026-03-13
15
+
16
+ ### Added
17
+ - Initial release
data/CLAUDE.md ADDED
@@ -0,0 +1,88 @@
1
+ # lex-scheduler: Cron and Interval Task Scheduling for LegionIO
2
+
3
+ **Repository Level 3 Documentation**
4
+ - **Parent**: `/Users/miverso2/rubymine/legion/extensions-core/CLAUDE.md`
5
+ - **Grandparent**: `/Users/miverso2/rubymine/legion/CLAUDE.md`
6
+
7
+ ## Purpose
8
+
9
+ Core Legion Extension that manages scheduled, delayed, and cron-style task execution. Reads schedule definitions from the database (interval seconds or cron expressions via `fugit`), determines which tasks are due, and publishes them to the message bus. Uses a distributed lock via `Legion::Cache` to ensure only one node runs the scheduler at a time. Requires `legion-data` (`data_required? true`).
10
+
11
+ **GitHub**: https://github.com/LegionIO/lex-scheduler
12
+ **License**: MIT
13
+ **Version**: 0.1.3
14
+
15
+ ## Architecture
16
+
17
+ ```
18
+ Legion::Extensions::Scheduler
19
+ ├── Actors/
20
+ │ ├── RunScheduler # Every-type actor: periodically calls schedule_tasks
21
+ │ └── ScheduleTask # Every-type actor: periodically publishes refresh messages
22
+ ├── Runners/
23
+ │ └── Schedule # Core scheduling logic
24
+ │ ├── schedule_tasks # Queries DB for due schedules, publishes task messages
25
+ │ ├── send_task # Routes to Dynamic or SendTask (transformation path)
26
+ │ ├── refresh # Acquires distributed scheduler lock via cache (2s TTL)
27
+ │ └── push_refresh # Broadcasts refresh message to cluster
28
+ ├── Data/
29
+ │ ├── Models/
30
+ │ │ ├── Schedule # Sequel model: function_id, interval, cron, active, last_run,
31
+ │ │ │ # task_ttl, payload (JSON), transformation (ERB)
32
+ │ │ └── ScheduleLog # Execution history
33
+ │ └── Migrations/
34
+ │ ├── 001_schedule_table
35
+ │ ├── 002_schedule_log
36
+ │ ├── 003_schedule_indexes
37
+ │ ├── 004_schedule_logs_indexes
38
+ │ ├── 005_add_payload_column
39
+ │ └── 006_add_transform_to_schedule
40
+ └── Transport/
41
+ ├── Queues/Schedule # Schedule queue
42
+ └── Messages/
43
+ ├── Refresh # Cluster-wide refresh notification
44
+ └── SendTask # Task execution message (transformation path)
45
+ ```
46
+
47
+ ## Key Design Patterns
48
+
49
+ ### Distributed Lock
50
+
51
+ Uses `Legion::Cache.set('scheduler_schedule_lock', node_name, 2)` to ensure only one node in the cluster runs `schedule_tasks` at a time. The lock has a 2-second TTL, refreshed each cycle via `refresh`.
52
+
53
+ ### Dual Schedule Types
54
+
55
+ - **Interval**: Integer seconds since last run (`row.interval > 0`)
56
+ - **Cron**: Cron expression string parsed by `Fugit.parse`. Supports both duration strings (`Fugit::Duration`, responds to `to_sec`) and standard cron expressions (`Fugit::Cron`, responds to `previous_time`)
57
+
58
+ ### Transformation Support
59
+
60
+ Scheduled tasks can include an ERB `transformation` column. If present, `send_task` routes through `task.subtask.transform` (via `lex-transformer`) instead of `Legion::Transport::Messages::Dynamic`.
61
+
62
+ ## Dependencies
63
+
64
+ | Gem | Purpose |
65
+ |-----|---------|
66
+ | `fugit` (>= 1.9) | Cron expression parsing (supports duration and cron syntax) |
67
+ | `legion-data` | Required - schedule persistence |
68
+ | `legion-cache` | Required - distributed scheduler lock |
69
+
70
+ ## Database Schema
71
+
72
+ **schedules**: `id`, `function_id`, `interval`, `cron`, `active`, `last_run`, `task_ttl`, `payload` (JSON), `transformation` (ERB template)
73
+
74
+ **schedule_logs**: Execution history linked to schedules
75
+
76
+ ## Testing
77
+
78
+ ```bash
79
+ bundle install
80
+ bundle exec rspec
81
+ bundle exec rubocop
82
+ ```
83
+
84
+ Spec files include `fugit_spec.rb` for cron expression parsing.
85
+
86
+ ---
87
+
88
+ **Maintained By**: Matthew Iverson (@Esity)
data/Dockerfile CHANGED
@@ -6,4 +6,4 @@ RUN apk update && apk add build-base tzdata postgresql-dev mysql-client mariadb-
6
6
 
7
7
  COPY . ./
8
8
  RUN gem install lex-scheduler legion-data --no-document --no-prerelease
9
- CMD ruby --jit $(which legionio)
9
+ CMD ruby --yjit $(which legionio)
data/Gemfile CHANGED
@@ -1,3 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  gemspec
6
+
7
+ gem 'bundler', '>= 2'
8
+ gem 'legionio'
9
+ gem 'rake'
10
+ gem 'rspec'
11
+ gem 'rubocop'
12
+ gem 'simplecov'
data/Gemfile.lock CHANGED
@@ -1,118 +1,156 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- lex-scheduler (0.1.2)
5
- fugit (>= 1.3.9)
4
+ lex-scheduler (0.2.0)
5
+ fugit (>= 1.9)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- amq-protocol (2.3.2)
11
- ast (2.4.2)
12
- aws-eventstream (1.1.0)
13
- aws-sigv4 (1.2.2)
10
+ addressable (2.8.9)
11
+ public_suffix (>= 2.0.2, < 8.0)
12
+ amq-protocol (2.5.1)
13
+ ast (2.4.3)
14
+ aws-eventstream (1.4.0)
15
+ aws-sigv4 (1.12.1)
14
16
  aws-eventstream (~> 1, >= 1.0.2)
15
- bunny (2.17.0)
16
- amq-protocol (~> 2.3, >= 2.3.1)
17
- concurrent-ruby (1.1.8)
18
- concurrent-ruby-ext (1.1.8)
19
- concurrent-ruby (= 1.1.8)
20
- connection_pool (2.2.3)
21
- daemons (1.3.1)
22
- dalli (2.7.11)
23
- diff-lcs (1.4.4)
24
- docile (1.3.5)
25
- et-orbi (1.2.4)
17
+ base64 (0.3.0)
18
+ bigdecimal (4.0.1)
19
+ bunny (2.24.0)
20
+ amq-protocol (~> 2.3)
21
+ sorted_set (~> 1, >= 1.0.2)
22
+ concurrent-ruby (1.3.6)
23
+ concurrent-ruby-ext (1.3.6)
24
+ concurrent-ruby (= 1.3.6)
25
+ connection_pool (2.5.5)
26
+ daemons (1.4.1)
27
+ dalli (5.0.2)
28
+ logger
29
+ diff-lcs (1.6.2)
30
+ docile (1.4.1)
31
+ et-orbi (1.4.0)
26
32
  tzinfo
27
- fugit (1.4.2)
28
- et-orbi (~> 1.1, >= 1.1.8)
33
+ fugit (1.12.1)
34
+ et-orbi (~> 1.4)
29
35
  raabro (~> 1.4)
30
- json_pure (2.5.1)
31
- legion-cache (1.1.1)
36
+ json (2.19.1)
37
+ json-schema (6.2.0)
38
+ addressable (~> 2.8)
39
+ bigdecimal (>= 3.1, < 5)
40
+ json_pure (2.8.1)
41
+ language_server-protocol (3.17.0.5)
42
+ legion-cache (1.2.0)
32
43
  connection_pool (>= 2.2.3)
33
44
  dalli (>= 2.7)
45
+ legion-logging
46
+ legion-settings
34
47
  redis (>= 4.2)
35
- legion-crypt (0.3.0)
48
+ legion-crypt (1.2.0)
36
49
  vault (>= 0.15.0)
37
- legion-exceptions (1.1.5)
38
- legion-json (1.1.4)
50
+ legion-json (1.2.0)
39
51
  json_pure
40
- legion-exceptions (>= 1.1.5)
41
52
  multi_json
42
- legion-logging (1.1.4)
53
+ legion-logging (1.2.0)
43
54
  rainbow (~> 3)
44
- legion-settings (1.1.3)
45
- legion-json
46
- legion-logging
47
- legion-transport (1.1.9)
55
+ legion-settings (1.2.0)
56
+ legion-json (>= 1.2)
57
+ legion-transport (1.2.0)
48
58
  bunny (>= 2.17.0)
49
59
  concurrent-ruby (>= 1.1.7)
50
60
  legion-json
51
- legionio (0.4.3)
61
+ legion-settings
62
+ legionio (1.2.1)
52
63
  concurrent-ruby (>= 1.1.7)
53
64
  concurrent-ruby-ext (>= 1.1.7)
54
65
  daemons (>= 1.3.1)
55
- legion-cache
66
+ legion-cache (>= 0.2.0)
56
67
  legion-crypt (>= 0.2.0)
57
- legion-exceptions
58
- legion-json
59
- legion-logging
60
- legion-settings
68
+ legion-json (>= 0.2.0)
69
+ legion-logging (>= 0.2.0)
70
+ legion-settings (>= 0.2.0)
61
71
  legion-transport (>= 1.1.9)
62
72
  lex-node
63
73
  oj (>= 3.10)
64
74
  thor (>= 1)
65
- lex-node (0.1.7)
66
- multi_json (1.15.0)
67
- oj (3.11.2)
68
- parallel (1.20.1)
69
- parser (3.0.0.0)
75
+ lex-node (0.2.0)
76
+ lint_roller (1.1.0)
77
+ logger (1.7.0)
78
+ mcp (0.8.0)
79
+ json-schema (>= 4.1)
80
+ multi_json (1.19.1)
81
+ net-http-persistent (4.0.8)
82
+ connection_pool (>= 2.2.4, < 4)
83
+ oj (3.16.16)
84
+ bigdecimal (>= 3.0)
85
+ ostruct (>= 0.2)
86
+ ostruct (0.6.3)
87
+ parallel (1.27.0)
88
+ parser (3.3.10.2)
70
89
  ast (~> 2.4.1)
90
+ racc
91
+ prism (1.9.0)
92
+ public_suffix (7.0.5)
71
93
  raabro (1.4.0)
72
- rainbow (3.0.0)
73
- rake (13.0.3)
74
- redis (4.2.5)
75
- regexp_parser (2.1.1)
76
- rexml (3.2.4)
77
- rspec (3.10.0)
78
- rspec-core (~> 3.10.0)
79
- rspec-expectations (~> 3.10.0)
80
- rspec-mocks (~> 3.10.0)
81
- rspec-core (3.10.1)
82
- rspec-support (~> 3.10.0)
83
- rspec-expectations (3.10.1)
94
+ racc (1.8.1)
95
+ rainbow (3.1.1)
96
+ rake (13.3.1)
97
+ rbtree (0.4.6)
98
+ redis (5.4.1)
99
+ redis-client (>= 0.22.0)
100
+ redis-client (0.27.0)
101
+ connection_pool
102
+ regexp_parser (2.11.3)
103
+ rspec (3.13.2)
104
+ rspec-core (~> 3.13.0)
105
+ rspec-expectations (~> 3.13.0)
106
+ rspec-mocks (~> 3.13.0)
107
+ rspec-core (3.13.6)
108
+ rspec-support (~> 3.13.0)
109
+ rspec-expectations (3.13.5)
84
110
  diff-lcs (>= 1.2.0, < 2.0)
85
- rspec-support (~> 3.10.0)
86
- rspec-mocks (3.10.2)
111
+ rspec-support (~> 3.13.0)
112
+ rspec-mocks (3.13.8)
87
113
  diff-lcs (>= 1.2.0, < 2.0)
88
- rspec-support (~> 3.10.0)
89
- rspec-support (3.10.2)
90
- rubocop (1.11.0)
114
+ rspec-support (~> 3.13.0)
115
+ rspec-support (3.13.7)
116
+ rubocop (1.85.1)
117
+ json (~> 2.3)
118
+ language_server-protocol (~> 3.17.0.2)
119
+ lint_roller (~> 1.1.0)
120
+ mcp (~> 0.6)
91
121
  parallel (~> 1.10)
92
- parser (>= 3.0.0.0)
122
+ parser (>= 3.3.0.2)
93
123
  rainbow (>= 2.2.2, < 4.0)
94
- regexp_parser (>= 1.8, < 3.0)
95
- rexml
96
- rubocop-ast (>= 1.2.0, < 2.0)
124
+ regexp_parser (>= 2.9.3, < 3.0)
125
+ rubocop-ast (>= 1.49.0, < 2.0)
97
126
  ruby-progressbar (~> 1.7)
98
- unicode-display_width (>= 1.4.0, < 3.0)
99
- rubocop-ast (1.4.1)
100
- parser (>= 2.7.1.5)
101
- ruby-progressbar (1.11.0)
102
- simplecov (0.21.2)
127
+ unicode-display_width (>= 2.4.0, < 4.0)
128
+ rubocop-ast (1.49.1)
129
+ parser (>= 3.3.7.2)
130
+ prism (~> 1.7)
131
+ ruby-progressbar (1.13.0)
132
+ simplecov (0.22.0)
103
133
  docile (~> 1.1)
104
134
  simplecov-html (~> 0.11)
105
135
  simplecov_json_formatter (~> 0.1)
106
- simplecov-html (0.12.3)
107
- simplecov_json_formatter (0.1.2)
108
- thor (1.1.0)
109
- tzinfo (2.0.4)
136
+ simplecov-html (0.13.2)
137
+ simplecov_json_formatter (0.1.4)
138
+ sorted_set (1.1.0)
139
+ rbtree
140
+ thor (1.5.0)
141
+ tzinfo (2.0.6)
110
142
  concurrent-ruby (~> 1.0)
111
- unicode-display_width (2.0.0)
112
- vault (0.15.0)
143
+ unicode-display_width (3.2.0)
144
+ unicode-emoji (~> 4.1)
145
+ unicode-emoji (4.2.0)
146
+ vault (0.20.0)
113
147
  aws-sigv4
148
+ base64
149
+ connection_pool (~> 2.4)
150
+ net-http-persistent (~> 4.0, >= 4.0.2)
114
151
 
115
152
  PLATFORMS
153
+ arm64-darwin-25
116
154
  ruby
117
155
 
118
156
  DEPENDENCIES
@@ -125,4 +163,4 @@ DEPENDENCIES
125
163
  simplecov
126
164
 
127
165
  BUNDLED WITH
128
- 2.1.4
166
+ 2.6.9
data/README.md CHANGED
@@ -1,6 +1,46 @@
1
- # Legion::Extensions::Scheduler
2
- Used to schedule tasks cron style inside Legion
1
+ # lex-scheduler
2
+
3
+ Cron and interval task scheduling for [LegionIO](https://github.com/LegionIO/LegionIO). Reads schedule definitions from the database, determines which tasks are due, and publishes them to the message bus. Uses a distributed lock via `legion-cache` to ensure only one node runs the scheduler at a time.
4
+
5
+ This is a core LEX required for scheduled task execution.
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ gem install lex-scheduler
11
+ ```
12
+
13
+ ## Usage
14
+
15
+ Schedules are stored in the database with either a cron expression or an interval:
16
+
17
+ - **Interval**: Run every N seconds since the last completion (integer)
18
+ - **Cron**: Run at specific times using standard cron syntax (`*/5 * * * *`) or human-readable expressions (`every day at noon`) parsed by `fugit`
19
+
20
+ Schedules can also carry a `transformation` ERB template. If present, the scheduled task is routed through `lex-transformer` before execution.
21
+
22
+ ### Adding Schedules
23
+
24
+ Insert records into the `schedules` table via `legion-data`:
25
+
26
+ ```ruby
27
+ Legion::Extensions::Scheduler::Data::Models::Schedule.insert(
28
+ function_id: 42,
29
+ interval: 300, # run every 5 minutes
30
+ active: 1,
31
+ last_run: Time.now,
32
+ payload: '{}'
33
+ )
34
+ ```
35
+
36
+ ## Requirements
37
+
38
+ - Ruby >= 3.4
39
+ - [LegionIO](https://github.com/LegionIO/LegionIO) framework
40
+ - `legion-data` (schedule persistence)
41
+ - `legion-cache` (distributed scheduler lock)
42
+ - `fugit` >= 1.9 (cron expression parsing)
3
43
 
4
44
  ## License
5
45
 
6
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
46
+ MIT
data/docker_deploy.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  name = 'scheduler'
4
5
  require "./lib/legion/extensions/#{name}/version"
@@ -10,27 +10,21 @@ Gem::Specification.new do |spec|
10
10
 
11
11
  spec.summary = 'LEX::Scheduler'
12
12
  spec.description = 'Schedules and manages delayed, async and cron style tasks'
13
- spec.homepage = 'https://bitbucket.org/legion-io/lex-scheduler'
13
+ spec.homepage = 'https://github.com/LegionIO/lex-scheduler'
14
14
  spec.license = 'MIT'
15
- spec.required_ruby_version = Gem::Requirement.new('>= 2.5.0')
15
+ spec.required_ruby_version = '>= 3.4'
16
16
 
17
17
  spec.metadata['homepage_uri'] = spec.homepage
18
- spec.metadata['source_code_uri'] = 'https://bitbucket.org/legion-io/lex-scheduler'
19
- spec.metadata['documentation_uri'] = 'https://legionio.atlassian.net/wiki/spaces/LEX/pages/612139049'
20
- spec.metadata['changelog_uri'] = 'https://legionio.atlassian.net/wiki/spaces/LEX/pages/612171789'
21
- spec.metadata['bug_tracker_uri'] = 'https://bitbucket.org/legion-io/lex-scheduler/issues'
18
+ spec.metadata['source_code_uri'] = 'https://github.com/LegionIO/lex-scheduler'
19
+ spec.metadata['documentation_uri'] = 'https://github.com/LegionIO/lex-scheduler'
20
+ spec.metadata['changelog_uri'] = 'https://github.com/LegionIO/lex-scheduler'
21
+ spec.metadata['bug_tracker_uri'] = 'https://github.com/LegionIO/lex-scheduler/issues'
22
+ spec.metadata['rubygems_mfa_required'] = 'true'
22
23
 
23
24
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
24
25
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
25
26
  end
26
27
  spec.require_paths = ['lib']
27
28
 
28
- spec.add_dependency 'fugit', '>= 1.3.9'
29
-
30
- spec.add_development_dependency 'bundler', '>= 2'
31
- spec.add_development_dependency 'legionio'
32
- spec.add_development_dependency 'rake'
33
- spec.add_development_dependency 'rspec'
34
- spec.add_development_dependency 'rubocop'
35
- spec.add_development_dependency 'simplecov'
29
+ spec.add_dependency 'fugit', '>= 1.9'
36
30
  end
@@ -1,23 +1,31 @@
1
- module Legion::Extensions::Scheduler::Actor
2
- class RunScheduler < Legion::Extensions::Actors::Every
3
- def runner_function
4
- 'schedule_tasks'
5
- end
1
+ # frozen_string_literal: true
6
2
 
7
- def runner_class
8
- Legion::Extensions::Scheduler::Runners::Schedule
9
- end
3
+ module Legion
4
+ module Extensions
5
+ module Scheduler
6
+ module Actor
7
+ class RunScheduler < Legion::Extensions::Actors::Every
8
+ def runner_function
9
+ 'schedule_tasks'
10
+ end
10
11
 
11
- def use_runner?
12
- false
13
- end
12
+ def runner_class
13
+ Legion::Extensions::Scheduler::Runners::Schedule
14
+ end
14
15
 
15
- def check_subtask?
16
- false
17
- end
16
+ def use_runner?
17
+ false
18
+ end
19
+
20
+ def check_subtask?
21
+ false
22
+ end
18
23
 
19
- def generate_task?
20
- false
24
+ def generate_task?
25
+ false
26
+ end
27
+ end
28
+ end
21
29
  end
22
30
  end
23
31
  end
@@ -1,23 +1,31 @@
1
- module Legion::Extensions::Scheduler::Actor
2
- class ScheduleTask < Legion::Extensions::Actors::Every
3
- def runner_function
4
- 'push_refresh'
5
- end
1
+ # frozen_string_literal: true
6
2
 
7
- def runner_class
8
- Legion::Extensions::Scheduler::Runners::Schedule
9
- end
3
+ module Legion
4
+ module Extensions
5
+ module Scheduler
6
+ module Actor
7
+ class ScheduleTask < Legion::Extensions::Actors::Every
8
+ def runner_function
9
+ 'push_refresh'
10
+ end
10
11
 
11
- def use_runner?
12
- false
13
- end
12
+ def runner_class
13
+ Legion::Extensions::Scheduler::Runners::Schedule
14
+ end
14
15
 
15
- def check_subtask?
16
- false
17
- end
16
+ def use_runner?
17
+ false
18
+ end
19
+
20
+ def check_subtask?
21
+ false
22
+ end
18
23
 
19
- def generate_task?
20
- false
24
+ def generate_task?
25
+ false
26
+ end
27
+ end
28
+ end
21
29
  end
22
30
  end
23
31
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Sequel.migration do
2
4
  up do
3
5
  run '
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Sequel.migration do
2
4
  up do
3
5
  run '
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Sequel.migration do
2
4
  change do
3
5
  add_index :schedules, :last_run, name: 'schedules_last_run_index'