Class: Kaal::Rails::Installer
- Inherits:
-
Object
- Object
- Kaal::Rails::Installer
- Defined in:
- lib/kaal/rails/installer.rb
Overview
Installs scheduler config and Active Record migrations into a Rails app.
Constant Summary collapse
- SCHEDULER_TEMPLATE =
<<~YAML defaults: jobs: - key: "example:heartbeat" cron: "*/5 * * * *" job_class: "ExampleHeartbeatJob" enabled: true args: - "{{fire_time.iso8601}}" kwargs: idempotency_key: "{{idempotency_key}}" YAML
Instance Method Summary collapse
-
#initialize(root:, backend:, time_source: -> { Time.now.utc }) ⇒ Installer
constructor
A new instance of Installer.
- #install_migrations ⇒ Object
- #install_scheduler_config ⇒ Object
Constructor Details
#initialize(root:, backend:, time_source: -> { Time.now.utc }) ⇒ Installer
Returns a new instance of Installer.
28 29 30 31 32 |
# File 'lib/kaal/rails/installer.rb', line 28 def initialize(root:, backend:, time_source: -> { Time.now.utc }) @root = Pathname(root) @backend = validate_backend(backend.to_s) @time_source = time_source end |
Instance Method Details
#install_migrations ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/kaal/rails/installer.rb', line 42 def install_migrations migrations_dir = root.join('db', 'migrate') FileUtils.mkdir_p(migrations_dir) Kaal::Internal::ActiveRecord::MigrationTemplates.for_backend(backend).map.with_index do |(name, contents), index| slug = name.sub(/^\d+_/, '') existing = Dir[migrations_dir.join("*_#{slug}").to_s].first next({ status: :exists, path: existing.to_s }) if existing = (time_source.call + index).strftime('%Y%m%d%H%M%S') target = migrations_dir.join("#{}_#{slug}") File.write(target, contents) { status: :create, path: target.to_s } end end |
#install_scheduler_config ⇒ Object
34 35 36 37 38 39 40 |
# File 'lib/kaal/rails/installer.rb', line 34 def install_scheduler_config ensure_scheduler_config_dir return { status: :exists, path: scheduler_config_path_string } if scheduler_config_exists? File.write(scheduler_config_path, SCHEDULER_TEMPLATE) { status: :create, path: scheduler_config_path_string } end |