Sha256: bbc1e7b392c93fbf4f9401fffba315363e861d829104b98770c7ca7f2dd421b0

Contents?: true

Size: 1.62 KB

Versions: 1

Compression:

Stored size: 1.62 KB

Contents

module ROM
  module Rails

    class Configuration
      attr_reader :config, :setup, :env

      def self.build(app)
        config = rewrite_config(app)

        new(config)
      end

      def self.rewrite_config(app)
        root = app.config.root
        config = app.config.database_configuration[::Rails.env].symbolize_keys

        adapter = config[:adapter]
        database = config[:database]

        adapter = "sqlite" if adapter == "sqlite3"

        { default: "#{adapter}://#{root}/#{database}" }
      end

      def initialize(config)
        @config = config
        @setup = ROM.setup(@config.symbolize_keys)
      end

      def finalize
        @env = setup.finalize
      end
    end

    class Railtie < ::Rails::Railtie

      initializer "rom.configure" do |app|
        config.rom = ROM::Rails::Configuration.build(app)
      end

      initializer "rom.load_schema" do |app|
        require schema_file if schema_file.exist?
      end

      initializer "rom.load_relations" do |app|
        relation_files.each { |file| require file }
      end

      initializer "rom.load_mappers" do |app|
        mapper_files.each { |file| require file }
      end

      config.after_initialize do |app|
        app.config.rom.finalize
        ApplicationController.send(:include, ControllerExtension)
      end

      private

      def schema_file
        root.join('db/rom/schema.rb')
      end

      def relation_files
        Dir[root.join('app/relations/**/*.rb').to_s]
      end

      def mapper_files
        Dir[root.join('app/mappers/**/*.rb').to_s]
      end

      def root
        ::Rails.root
      end

    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rom-rails-0.0.1 lib/rom/rails/railtie.rb