Sha256: ec1e8d06c3db850e93feca775d8275c7322a1bd62650d3e98a2947fa17fea5d8

Contents?: true

Size: 1.73 KB

Versions: 2

Compression:

Stored size: 1.73 KB

Contents

require 'rails/railtie'

module RailsStuff
  MODULES = {
    nullify_blank_attrs:  :model,
    random_uniq_attr:     :model,
    statusable:           :model,
    resources_controller: [
      :controller,
      -> { ResourcesController.kaminari! if defined?(::Kaminari) },
    ],
    sort_scope: -> { defined?(::HasScope) && :controller },
    strong_parameters: -> { defined?(ActionController::Parameters) && :require },
    url_for_keeping_params: -> { defined?(ActionDispatch::Routing) && :require },
  }

  class << self
    # Set it to array of modules to load.
    #
    #     # config/initializers/rails_stuff.rb
    #     RailsStuff.load_modules = [:statusable, :sort_scope]
    attr_accessor :load_modules
    # Override default base classes for models & controllers.
    attr_writer :base_controller, :base_model

    def base_controller
      @base_controller || ActionController::Base
    end

    def base_model
      @base_model || ActiveRecord::Base
    end

    # Extends base controller and model classes with modules.
    # By default uses all modules. Use load_modules= to override this list.
    def setup_modules!
      modules_to_load = load_modules || MODULES.keys
      MODULES.slice(*modules_to_load).each do |m, (type, init)|
        case type.respond_to?(:call) ? type.call : type
        when :controller
          RailsStuff.base_controller.extend const_get(m.to_s.camelize)
        when :model
          RailsStuff.base_model.extend const_get(m.to_s.camelize)
        when :require
          require "rails_stuff/#{m}"
        end
        init.try!(:call)
      end
    end
  end

  class Engine < Rails::Engine
    initializer :rails_stuff_setup_modules, after: :load_config_initializers do
      RailsStuff.setup_modules!
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rails_stuff-0.4.0 lib/rails_stuff/engine.rb
rails_stuff-0.3.0 lib/rails_stuff/engine.rb