ちなみに

火曜日の空は僕を押しつぶした。

久しぶりに Gem を作った

github.com

リハビリも兼ねてちょっと欲しかった Gem を作ってみました。

作り始める前に調べていたつもりだったのだけれど モロかぶりしているGem がすでに存在して名前もまったく一緒だったので諦めて simple みたいな無意味な名前になってしまった。

やりたかったことは Rails のアクションにアノテートしておいて一律でチェック出来るようにするという感じのこと。

class HogeController < ApplicationController
  include SimpleAnnotation::Annotatable

  def index
  end

  annotates :premium
  def show
    # 課金ユーザーだけ見られる何か
  end
end

こういう感じで書いておいてフィルターなどでチェックする想定です。 #annotate ってメソッド名に出来なかったのは ActiveRecord::QueryMethods#annotate があるから。

class PremiumFilter
  def self.filter(controller, current_user)
    action = controller.action_name
    return unless controller.class.annotated?(action, with: :premium)

    controller.redirect_to plans_path unless current_user.premium?
  end
end

class ApplicationController
  before_action -> { PremiumFilter.filter(self, current_user) }
end

こんなことしなくても実現は出来そう。

まあ、メタプログラミング完全に忘れていていたのでいい復習になりました。