勉強がてら、Controllerを拡張するRailtieを作ってみたので備忘録。基本的な作り方はこちらの記事と記事内の参考URLを参考にすると良いです。
プラグイン用にスケルトン作成
$ rails plugin new try_railtie --skip-bundle
lib/try_railtie.rb で拡張用のモジュールと独自Railtieへのrequireを定義
module TryRailtie
extend ::ActiveSupport::Concern
def hello
"Hello Railtie"
end
module ClassMethods
def define_param(name)
define_method name do
params[name]
end
end
end
end
require 'try_railtie/railtie' if defined?(Rails)
lib/try_railtie/railtie.rb で独自Railtieを定義。ActiveSupport.on_load :action_controllerでモジュールをインクルード
module TryRailtie
class Railtie < Rails::Railtie
initializer "try_railtie.include_module" do
ActiveSupport.on_load :action_controller do
ActionController::Base.include ::TryRailtie
end
end
end
end
テスト用アプリのディレクトリに移動してコントローラ一式を作成
$ cd test/dummy
$ bin/rails g controller home index
test/dummy/app/controllers/home_controller.rb
class HomeController < ApplicationController
define_param :foo
def index
@hello = hello
@foo = foo
end
end
test/dummy/app/views/home/index.html.erb
<h1>Home#index</h1>
<p>Find me in app/views/home/index.html.erb</p>
<p>hello = <%= @hello %></p>
<p>foo = <%= @foo %></p>
ダミーアプリを起動してプラグインの挙動をテスト
$ cd test/dummy
$ bin/rails s -b 0.0.0.0