Sha256: 84178c61a2b02d34e51c5fa1f867d249f4b0dc89f4b5e9de310fa41bd641a8e1

Contents?: true

Size: 1.45 KB

Versions: 67

Compression:

Stored size: 1.45 KB

Contents

class Jets::Commands::Db::Tasks
  # Ugly but it loads ActiveRecord database tasks
  def self.load!
    # Lazy require rails so Rails const is only defined in jets db:* tasks
    require "rails"
    require "active_record"
    require "recursive-open-struct"

    # Jets.boot # Jets.boot here screws up jets -h, the db_config doesnt seem to match exactly
    # but seems to be working anyway.
    db_configs = Jets.application.config.database
    ActiveRecord::Tasks::DatabaseTasks.database_configuration = db_configs
    ActiveRecord::Tasks::DatabaseTasks.migrations_paths = ["db/migrate"]
    ActiveRecord::Tasks::DatabaseTasks.seed_loader = Seeder.new("#{Jets.root}/db/seeds.rb")

    # Need to mock out the usage of Rails.application in:
    # activerecord-5.1.4/lib/active_record/tasks/database_tasks.rb
    Rails.application = RecursiveOpenStruct.new(
      config: {
        paths: {
          db: ["db"],
        }
      },
      paths: {
        "db/migrate": ["db/migrate"]
      }
    )
    load "active_record/railties/databases.rake"

    load File.expand_path("../environment-task.rake", __FILE__)
  end

  # Thanks: https://stackoverflow.com/questions/19206764/how-can-i-load-activerecord-database-tasks-on-a-ruby-project-outside-rails/24840749
  class Seeder
    def initialize(seed_file)
      @seed_file = seed_file
    end

    def load_seed
      raise "Seed file '#{@seed_file}' does not exist" unless File.file?(@seed_file)
      load @seed_file
    end
  end
end

Version data entries

67 entries across 67 versions & 3 rubygems

Version Path
jets-1.6.8 lib/jets/commands/db/tasks.rb
jets-1.6.7 lib/jets/commands/db/tasks.rb
jets-1.6.6 lib/jets/commands/db/tasks.rb
jets-1.6.5 lib/jets/commands/db/tasks.rb
jets-1.6.4 lib/jets/commands/db/tasks.rb
jets-1.6.3 lib/jets/commands/db/tasks.rb
jets-1.6.2 lib/jets/commands/db/tasks.rb