kaal-rails 0.4.0 → 0.6.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eb9975de587d0049dc6d0c600a8d1ae9b475d10ada23dcca56250008f4662915
4
- data.tar.gz: 72cb9b8d049685add808d81a11a7bf5682580857e8973cd5f46b351d67d4c4af
3
+ metadata.gz: 9574f048025ccf1cf2395da1365a7b10c2f831ba2234ae4bcc27f3f5708e0cc9
4
+ data.tar.gz: a599d190ac316df5e2e5bf9937c610f3ebc46f02eba29cce772414e9fff7971b
5
5
  SHA512:
6
- metadata.gz: 6b4d4ac608ba05a69c26ab53cb062026166fd98dbf2c10a35fed393e2e78f56e24018b834fe4c13ecc59e1f0576d03beefc1056cff6010713c6f4e75ee224014
7
- data.tar.gz: a3ef5c9890a13dac180b51a74d11f8e4c35d53a436085fba627677649e3ad541dc2c9a882cd9375baf2d4dd80a40d686a6e1b41a7cdb94bc564eee0b52d2c64d
6
+ metadata.gz: b806c7170acb9e05dfd25abd395afa9d3b9fb4c272cc478920e5c0d6a8f1ffbcd74ccbc91f895511616cdb056193c54e0d209049af87423b03c9c15fb2fcf4ab
7
+ data.tar.gz: 6909cde3ec4e36d3d7cb986c5d72aa4c77288b827504a206da0775a28b9b470baeaea034619ca5114c407034b7aff4386e7199a505f2d82f9497c2b143191ec5
data/README.md CHANGED
@@ -41,12 +41,15 @@ bundle exec rails generate kaal:install --backend=mysql
41
41
  bundle exec rails db:migrate
42
42
  ```
43
43
 
44
+ These migrations install the Kaal persistence tables required by the selected backend.
45
+
44
46
  ## What It Provides
45
47
 
46
48
  - Rails-native setup on top of the Kaal engine
47
49
  - Active Record-backed persistence through the core `kaal` gem
48
50
  - migration templates for the Kaal tables required by the selected backend
49
51
  - automatic backend selection from the Rails database adapter unless the app sets `Kaal.configuration.backend` itself
52
+ - the normal Kaal runtime API in a Rails install surface
50
53
 
51
54
  ## Usage
52
55
 
@@ -54,7 +57,7 @@ Add the gem to your Rails app and configure only if you need overrides:
54
57
 
55
58
  ```ruby
56
59
  Kaal.configure do |config|
57
- config.scheduler_config_path = Rails.root.join('config/scheduler.yml')
60
+ config.scheduler_config_path = Rails.root.join('config/kaal-scheduler.yml')
58
61
  end
59
62
  ```
60
63
 
@@ -14,6 +14,8 @@ module Kaal
14
14
 
15
15
  def install_kaal
16
16
  results = Kaal::Rails.install!(root: destination_root, backend: selected_backend)
17
+ runtime_config = results.fetch(:runtime_config)
18
+ say_status(runtime_config.fetch(:status), runtime_config.fetch(:path))
17
19
  scheduler_config = results.fetch(:scheduler_config)
18
20
  say_status(scheduler_config.fetch(:status), scheduler_config.fetch(:path))
19
21
  results.fetch(:migrations).each do |migration|
@@ -12,6 +12,20 @@ module Kaal
12
12
  module Rails
13
13
  # Installs scheduler config and Active Record migrations into a Rails app.
14
14
  class Installer
15
+ KAAL_TEMPLATE = <<~YAML
16
+ defaults:
17
+ namespace: kaal
18
+ tick_interval: 5
19
+ window_lookback: 120
20
+ window_lookahead: 0
21
+ lease_ttl: 125
22
+ scheduler_config_path: config/kaal-scheduler.yml
23
+ enable_dispatch_recovery: true
24
+ enable_log_dispatch_registry: false
25
+ delayed_job_allowed_class_prefixes: []
26
+ backend_config: {}
27
+ YAML
28
+
15
29
  SCHEDULER_TEMPLATE = <<~YAML
16
30
  defaults:
17
31
  jobs:
@@ -31,8 +45,16 @@ module Kaal
31
45
  @time_source = time_source
32
46
  end
33
47
 
48
+ def install_runtime_config
49
+ ensure_config_dir
50
+ return { status: :exists, path: runtime_config_path_string } if runtime_config_exists?
51
+
52
+ File.write(runtime_config_path, KAAL_TEMPLATE)
53
+ { status: :create, path: runtime_config_path_string }
54
+ end
55
+
34
56
  def install_scheduler_config
35
- ensure_scheduler_config_dir
57
+ ensure_config_dir
36
58
  return { status: :exists, path: scheduler_config_path_string } if scheduler_config_exists?
37
59
 
38
60
  File.write(scheduler_config_path, SCHEDULER_TEMPLATE)
@@ -71,18 +93,30 @@ module Kaal
71
93
  end
72
94
 
73
95
  def scheduler_config_path
74
- root.join('config', 'scheduler.yml')
96
+ root.join('config', 'kaal-scheduler.yml')
97
+ end
98
+
99
+ def runtime_config_path
100
+ root.join('config', 'kaal.yml')
75
101
  end
76
102
 
77
103
  def scheduler_config_exists?
78
104
  scheduler_config_path.exist?
79
105
  end
80
106
 
107
+ def runtime_config_exists?
108
+ runtime_config_path.exist?
109
+ end
110
+
81
111
  def scheduler_config_path_string
82
112
  scheduler_config_path.to_s
83
113
  end
84
114
 
85
- def ensure_scheduler_config_dir
115
+ def runtime_config_path_string
116
+ runtime_config_path.to_s
117
+ end
118
+
119
+ def ensure_config_dir
86
120
  FileUtils.mkdir_p(scheduler_config_path.dirname)
87
121
  end
88
122
  end
@@ -6,6 +6,6 @@
6
6
  # LICENSE file in the root directory of this source tree.
7
7
  module Kaal
8
8
  module Rails
9
- VERSION = '0.4.0'
9
+ VERSION = '0.6.0'
10
10
  end
11
11
  end
data/lib/kaal/rails.rb CHANGED
@@ -41,16 +41,26 @@ module Kaal
41
41
  end
42
42
 
43
43
  def configure_backend!(configuration: Kaal.configuration, backend: build_backend)
44
+ load_config_file!(configuration:)
45
+ logger = configuration.logger
44
46
  current_backend = configuration.backend
45
- return current_backend if current_backend
46
- return nil unless backend
47
+ selected_backend = current_backend || backend
48
+ return nil unless selected_backend
47
49
 
48
- configuration.backend = backend
50
+ configuration.backend = selected_backend unless current_backend
51
+ Kaal.warn_on_risky_configuration!(configuration:, logger:)
52
+ selected_backend
53
+ end
54
+
55
+ def load_config_file!(configuration: Kaal.configuration, root: ::Rails.root, environment: ::Rails.env)
56
+ runtime_context = Kaal::Runtime::RuntimeContext.new(root_path: root, environment_name: environment.to_s)
57
+ Kaal::Config::FileLoader.new(configuration:, runtime_context:).load
49
58
  end
50
59
 
51
60
  def install!(root: ::Rails.root, backend: detect_backend_name)
52
61
  installer = Installer.new(root:, backend:)
53
62
  {
63
+ runtime_config: installer.install_runtime_config,
54
64
  scheduler_config: installer.install_scheduler_config,
55
65
  migrations: installer.install_migrations
56
66
  }
@@ -10,6 +10,7 @@ namespace :kaal do
10
10
  desc 'Install Kaal scheduler config and Active Record migrations'
11
11
  task all: :environment do
12
12
  results = Kaal::Rails.install!
13
+ puts "#{results.fetch(:runtime_config).fetch(:status)} #{results.fetch(:runtime_config).fetch(:path)}"
13
14
  puts "#{results.fetch(:scheduler_config).fetch(:status)} #{results.fetch(:scheduler_config).fetch(:path)}"
14
15
  results.fetch(:migrations).each do |migration|
15
16
  puts "#{migration.fetch(:status)} #{migration.fetch(:path)}"
data/sig/00_types.rbs ADDED
@@ -0,0 +1,12 @@
1
+ module Kaal
2
+ interface _RBSOpaque
3
+ end
4
+
5
+ interface _RBSCallable
6
+ def call: (*rbs_any args, **rbs_any kwargs) -> rbs_any
7
+ end
8
+
9
+ type rbs_scalar = nil | bool | Integer | Float | Rational | String | Symbol | Time
10
+ type rbs_hash_key = String | Symbol | Integer
11
+ type rbs_any = rbs_scalar | _RBSOpaque | _RBSCallable | Array[rbs_any] | Hash[rbs_hash_key, rbs_any]
12
+ end
@@ -0,0 +1,65 @@
1
+ module Kaal
2
+ module Backend
3
+ class SQLite
4
+ def initialize: (*rbs_any args, **rbs_any kwargs) -> void
5
+ end
6
+
7
+ class Postgres
8
+ def initialize: (*rbs_any args, **rbs_any kwargs) -> void
9
+ end
10
+
11
+ class MySQL
12
+ def initialize: (*rbs_any args, **rbs_any kwargs) -> void
13
+ end
14
+ end
15
+
16
+ def self.configuration: () -> rbs_any
17
+ def self.warn_on_risky_configuration!: (*rbs_any args, **rbs_any kwargs) -> rbs_any
18
+
19
+ class RuntimeContext
20
+ def self.new: (*rbs_any args, **rbs_any kwargs) -> RuntimeContext
21
+ end
22
+
23
+ module Config
24
+ class FileLoader
25
+ def initialize: (*rbs_any args, **rbs_any kwargs) -> void
26
+ def load: (*rbs_any args, **rbs_any kwargs) -> rbs_any
27
+ end
28
+ end
29
+
30
+ module Internal
31
+ module ActiveRecord
32
+ module MigrationTemplates
33
+ def self.for_backend: (rbs_any backend) -> Array[[String, String]]
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ module ActiveRecord
40
+ class ConnectionNotEstablished < StandardError
41
+ end
42
+
43
+ class Base
44
+ def self.connection_db_config: () -> ::Kaal::rbs_any
45
+ end
46
+ end
47
+
48
+ module Rails
49
+ def self.root: () -> ::Kaal::rbs_any
50
+ def self.env: () -> String
51
+
52
+ module Generators
53
+ class Base
54
+ def self.argument: (*::Kaal::rbs_any args, **::Kaal::rbs_any kwargs) -> void
55
+ def self.class_option: (*::Kaal::rbs_any args, **::Kaal::rbs_any kwargs) -> void
56
+ def self.desc: (*::Kaal::rbs_any args, **::Kaal::rbs_any kwargs) -> void
57
+ def self.namespace: (*::Kaal::rbs_any args, **::Kaal::rbs_any kwargs) -> void
58
+ end
59
+ end
60
+
61
+ class Railtie
62
+ def self.initializer: (*::Kaal::rbs_any args, **::Kaal::rbs_any kwargs) { () -> ::Kaal::rbs_any } -> void
63
+ def self.rake_tasks: () { () -> ::Kaal::rbs_any } -> void
64
+ end
65
+ end
@@ -0,0 +1,11 @@
1
+ module Kaal
2
+ module Generators
3
+ class InstallGenerator < ::Rails::Generators::Base
4
+ def install_kaal: () -> ::Kaal::rbs_any
5
+
6
+ private
7
+
8
+ def selected_backend: () -> ::Kaal::rbs_any
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,47 @@
1
+ module Kaal
2
+ module Rails
3
+ class Installer
4
+ @root: ::Kaal::rbs_any
5
+
6
+ @backend: ::Kaal::rbs_any
7
+
8
+ @time_source: ::Kaal::rbs_any
9
+
10
+ KAAL_TEMPLATE: "defaults:\n namespace: kaal\n tick_interval: 5\n window_lookback: 120\n window_lookahead: 0\n lease_ttl: 125\n scheduler_config_path: config/kaal-scheduler.yml\n enable_dispatch_recovery: true\n enable_log_dispatch_registry: false\n delayed_job_allowed_class_prefixes: []\n backend_config: {}\n"
11
+
12
+ SCHEDULER_TEMPLATE: "defaults:\n jobs:\n - key: \"example:heartbeat\"\n cron: \"*/5 * * * *\"\n job_class: \"ExampleHeartbeatJob\"\n enabled: true\n args:\n - \"{{fire_time.iso8601}}\"\n kwargs:\n idempotency_key: \"{{idempotency_key}}\"\n"
13
+
14
+ def initialize: (root: ::Kaal::rbs_any, backend: ::Kaal::rbs_any, ?time_source: ::Kaal::rbs_any) -> void
15
+
16
+ def install_runtime_config: () -> ({ status: :exists, path: ::Kaal::rbs_any } | { status: :create, path: ::Kaal::rbs_any })
17
+
18
+ def install_scheduler_config: () -> ({ status: :exists, path: ::Kaal::rbs_any } | { status: :create, path: ::Kaal::rbs_any })
19
+
20
+ def install_migrations: () -> ::Kaal::rbs_any
21
+
22
+ private
23
+
24
+ attr_reader backend: ::Kaal::rbs_any
25
+
26
+ attr_reader root: ::Kaal::rbs_any
27
+
28
+ attr_reader time_source: ::Kaal::rbs_any
29
+
30
+ def validate_backend: (::Kaal::rbs_any backend_name) -> ::Kaal::rbs_any
31
+
32
+ def scheduler_config_path: () -> ::Kaal::rbs_any
33
+
34
+ def runtime_config_path: () -> ::Kaal::rbs_any
35
+
36
+ def scheduler_config_exists?: () -> ::Kaal::rbs_any
37
+
38
+ def runtime_config_exists?: () -> ::Kaal::rbs_any
39
+
40
+ def scheduler_config_path_string: () -> ::Kaal::rbs_any
41
+
42
+ def runtime_config_path_string: () -> ::Kaal::rbs_any
43
+
44
+ def ensure_config_dir: () -> ::Kaal::rbs_any
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,6 @@
1
+ module Kaal
2
+ module Rails
3
+ class Railtie < ::Rails::Railtie
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ module Kaal
2
+ module Rails
3
+ VERSION: String
4
+ end
5
+ end
@@ -0,0 +1,15 @@
1
+ module Kaal
2
+ module Rails
3
+ DETECT_BACKEND_DEFAULT: ::Kaal::rbs_any
4
+
5
+ def self.detect_backend_name: (?::Kaal::rbs_any db_config) -> ::Kaal::rbs_any
6
+
7
+ def self.build_backend: (?::Kaal::rbs_any backend_name) -> ::Kaal::rbs_any
8
+
9
+ def self.configure_backend!: (?configuration: ::Kaal::rbs_any, ?backend: ::Kaal::rbs_any) -> (nil | ::Kaal::rbs_any)
10
+
11
+ def self.load_config_file!: (?configuration: ::Kaal::rbs_any, ?root: ::Kaal::rbs_any, ?environment: ::Kaal::rbs_any) -> ::Kaal::rbs_any
12
+
13
+ def self.install!: (?root: ::Kaal::rbs_any, ?backend: ::Kaal::rbs_any) -> { runtime_config: ::Kaal::rbs_any, scheduler_config: ::Kaal::rbs_any, migrations: ::Kaal::rbs_any }
14
+ end
15
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kaal-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nitesh Purohit
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.4.0
19
+ version: 0.6.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 0.4.0
26
+ version: 0.6.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rails
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -88,6 +88,13 @@ files:
88
88
  - lib/kaal/rails/railtie.rb
89
89
  - lib/kaal/rails/version.rb
90
90
  - lib/tasks/kaal/rails_tasks.rake
91
+ - sig/00_types.rbs
92
+ - sig/dependencies.rbs
93
+ - sig/generators/kaal/install_generator.rbs
94
+ - sig/kaal/rails.rbs
95
+ - sig/kaal/rails/installer.rbs
96
+ - sig/kaal/rails/railtie.rbs
97
+ - sig/kaal/rails/version.rbs
91
98
  homepage: https://github.com/Code-Vedas/kaal
92
99
  licenses:
93
100
  - MIT