Module: Kaal::Sequel
- Defined in:
- lib/kaal/sequel_support.rb
Overview
Sequel migration/install support for SQL-backed Kaal backends.
Class Method Summary collapse
- .default_migration_name_for(backend) ⇒ Object
- .digit?(char) ⇒ Boolean
- .install_migrations(target_dir:, backend:, migration_name: nil) ⇒ Object
- .install_mysql_migration(target_dir:, migration_name: 'create_kaal_mysql_backend') ⇒ Object
- .install_postgres_migration(target_dir:, migration_name: 'create_kaal_postgres_backend') ⇒ Object
- .install_sqlite_migration(target_dir:, migration_name: 'create_kaal_sqlite_backend') ⇒ Object
- .letter?(char) ⇒ Boolean
- .migration_suffixes_for(backend) ⇒ Object
- .normalize_migration_name(name, fallback:) ⇒ Object
- .require_sequel! ⇒ Object
- .timestamp(offset = 0) ⇒ Object
Class Method Details
.default_migration_name_for(backend) ⇒ Object
60 61 62 |
# File 'lib/kaal/sequel_support.rb', line 60 def default_migration_name_for(backend) "create_kaal_#{backend}_backend" end |
.digit?(char) ⇒ Boolean
78 79 80 |
# File 'lib/kaal/sequel_support.rb', line 78 def digit?(char) char.between?('0', '9') end |
.install_migrations(target_dir:, backend:, migration_name: nil) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/kaal/sequel_support.rb', line 26 def install_migrations(target_dir:, backend:, migration_name: nil) require_sequel! normalized_name = normalize_migration_name(migration_name, fallback: default_migration_name_for(backend)) base_path = File.(target_dir) FileUtils.mkdir_p(base_path) Kaal::Persistence::MigrationTemplates.for_backend(backend).map.with_index do |(_name, contents), index| suffix = migration_suffixes_for(backend).fetch(index) path = File.("#{(index)}_#{normalized_name}_#{suffix}.rb", base_path) File.write(path, contents) path end end |
.install_mysql_migration(target_dir:, migration_name: 'create_kaal_mysql_backend') ⇒ Object
18 19 20 |
# File 'lib/kaal/sequel_support.rb', line 18 def install_mysql_migration(target_dir:, migration_name: 'create_kaal_mysql_backend') install_migrations(target_dir:, backend: 'mysql', migration_name:) end |
.install_postgres_migration(target_dir:, migration_name: 'create_kaal_postgres_backend') ⇒ Object
14 15 16 |
# File 'lib/kaal/sequel_support.rb', line 14 def install_postgres_migration(target_dir:, migration_name: 'create_kaal_postgres_backend') install_migrations(target_dir:, backend: 'postgres', migration_name:) end |
.install_sqlite_migration(target_dir:, migration_name: 'create_kaal_sqlite_backend') ⇒ Object
22 23 24 |
# File 'lib/kaal/sequel_support.rb', line 22 def install_sqlite_migration(target_dir:, migration_name: 'create_kaal_sqlite_backend') install_migrations(target_dir:, backend: 'sqlite', migration_name:) end |
.letter?(char) ⇒ Boolean
74 75 76 |
# File 'lib/kaal/sequel_support.rb', line 74 def letter?(char) char.between?('a', 'z') || char.between?('A', 'Z') end |
.migration_suffixes_for(backend) ⇒ Object
64 65 66 67 68 |
# File 'lib/kaal/sequel_support.rb', line 64 def migration_suffixes_for(backend) return %w[dispatches locks definitions delayed_jobs] if backend.to_s == 'sqlite' %w[dispatches definitions delayed_jobs] end |
.normalize_migration_name(name, fallback:) ⇒ Object
49 50 51 52 53 54 55 56 57 58 |
# File 'lib/kaal/sequel_support.rb', line 49 def normalize_migration_name(name, fallback:) normalized = name.to_s.each_char.with_object(+'') do |char, buffer| if letter?(char) || digit?(char) buffer << char.downcase elsif !buffer.empty? && !buffer.end_with?('_') buffer << '_' end end.delete_suffix('_') normalized.empty? ? fallback : normalized end |
.require_sequel! ⇒ Object
41 42 43 44 45 46 47 |
# File 'lib/kaal/sequel_support.rb', line 41 def require_sequel! require 'sequel' rescue LoadError => e raise LoadError, "#{e.}. Add `gem 'sequel'` to your Gemfile to use Sequel-backed Kaal SQL support.", cause: e end |
.timestamp(offset = 0) ⇒ Object
70 71 72 |
# File 'lib/kaal/sequel_support.rb', line 70 def (offset = 0) (Time.now.utc + offset).strftime('%Y%m%d%H%M%S') end |