Ardb
Tools for using ActiveRecord with or without Rails.
Usage
Given configured database connection parameters, Ardb provides a CLI and assorted tools for working with an ActiveRecord database. Ardb is designed to be used with or without Rails.
Configuration
By default, Ardb looks for database configuration in the config/db.rb file. You can override this using the ENV["ARDB_DB_FILE"] env var.
The configuration includes typical database configuration parameters:
# in config/db.rb
require "ardb"
Ardb.configure do |c|
  c.logger Logger.new($stdout)
  c.root_path File.expand_path("../..", __FILE__)
  c.db.adapter      "postgresql"
  c.db.encoding     "unicode"
  c.db.min_messages "WARNING"
  c.db.url          "localhost:5432"
  c.db.username     "testuser"
  c.db.password     "secret"
  c.db.database     "testdb"
endRails configuration
If using Ardb with Rails, add a config/db.rb file to have Ardb use Rails's configuration settings:
# in config/db.rb
require_relative "./environment"
require "ardb"
# This Ardb configuration matches Rails's settings.
Ardb.configure do |c|
  rails_db_config    = Rails.application.config_for("database")
  c.root_path        = Rails.root
  c.logger           = Rails.logger
  c.schema_format    = Rails.application.config.active_record.schema_format || :ruby
  c.default_timezone = :utc
  c.adapter          = rails_db_config["adapter"]
  c.host             = rails_db_config["host"]
  c.port             = rails_db_config["port"]
  c.username         = rails_db_config["username"]
  c.password         = rails_db_config["password"]
  c.database         = rails_db_config["database"]
  c.encoding         = rails_db_config["encoding"]
  c.min_messages     = rails_db_config["min_messages"]
  c.migrations_path = "db/migrate"
  c.schema_path = "db/schema"
endCLI
$ ardb --help
Usage: ardb [COMMAND] [options]
Options:
        --version
        --help
Commands:
  connect            Connect to the configured DB
  create             Create the configured DB
  drop               Drop the configured DB
  generate-migration Generate a MIGRATION-NAME migration file
  migrate            Migrate the configured DB
  migrate-up         Migrate the configured DB up
  migrate-down       Migrate the configured DB down
  migrate-forward    Migrate the configured DB forward
  migrate-backward   Migrate the configured DB backward
connect command
$ ardb connect --help
Usage: ardb connect [options]
Options:
        --version
        --help
Description:
  Connect to the configured DB
$ ardb connect
error: database "some_database" does not exist
$ ardb create
created postgresql db "some_database"
$ ardb connect
connected to postgresql db "some_database"
Use this command to verify the connection parameter configuration is correct.
create command
$ ardb create --help
Usage: ardb create [options]
Options:
        --version
        --help
Description:
  Create the configured DB
$ ardb create
created postgresql db "some_database"
$ ardb create
error: database "some_database" already exists
drop command
$ ardb drop --help
Usage: ardb drop [options]
Options:
        --version
        --help
Description:
  Drop the configured DB
$ ardb drop
dropped postgresql db "some_database"
$ ardb drop
error: database "some_database" does not exist
generate-migration command
$ ardb generate-migration add_projects --help
Usage: ardb generate-migration MIGRATION-NAME [options]
Options:
        --version
        --help
Description:
  Generate a MIGRATION-NAME migration file
$ ardb generate-migration add_projects
generated /path/to/app/db/migrate/20191222074043_add_projects.rb
migrate command
$ ardb migrate --help
Usage: ardb migrate [options]
Options:
        --version
        --help
Description:
  Migrate the configured DB
$ ardb migrate
== 20191222074043 AddProjects: migrating ======================================
-- create_table(:projects)
   -> 0.0276s
== 20191222074043 AddProjects: migrated (0.0277s) =============================
migrate-up command
$ ardb migrate-up --help
Usage: ardb migrate-up [options]
Options:
    -t, --target-version VALUE       version to migrate to
        --version
        --help
Description:
  Migrate the configured DB up
$ ardb migrate-up
== 20191222074043 AddProjects: migrating ======================================
-- create_table(:projects)
   -> 0.0510s
== 20191222074043 AddProjects: migrated (0.0511s) =============================
migrate-down command
$ ardb migrate-down --help
Usage: ardb migrate-down [options]
Options:
    -t, --target-version VALUE       version to migrate to
        --version
        --help
Description:
  Migrate the configured DB down
$ ardb migrate-down
== 20191222074043 AddProjects: reverting ======================================
-- drop_table(:projects)
   -> 0.0092s
== 20191222074043 AddProjects: reverted (0.0132s) =============================
migrate-forward command
$ ardb migrate-forward --help
Usage: ardb migrate-forward [options]
Options:
    -s, --steps VALUE                number of migrations to migrate
        --version
        --help
Description:
  Migrate the configured DB forward
$ ardb migrate-forward
== 20191222074043 AddProjects: migrating ======================================
-- create_table(:projects)
   -> 0.0510s
== 20191222074043 AddProjects: migrated (0.0511s) =============================
migrate-backward command
$ ardb migrate-backward --help
Usage: ardb migrate-backward [options]
Options:
    -s, --steps VALUE                number of migrations to migrate
        --version
        --help
Description:
  Migrate the configured DB backward
$ ardb migrate-backward
== 20191222074043 AddProjects: reverting ======================================
-- drop_table(:projects)
   -> 0.0092s
== 20191222074043 AddProjects: reverted (0.0132s) =============================
Installation
Add this line to your application's Gemfile:
gem "ardb"
And then execute:
$ bundle
Or install it yourself as:
$ gem install ardb
Contributing
- Fork it
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Added some feature')
- Push to the branch (git push origin my-new-feature)
- Create new Pull Request