IkumaTadokoro / quitcost

「無職になったらいくらかかる?」を簡単に計算できるサービス
https://quitcost.herokuapp.com/
25 stars 2 forks source link

privateメソッド隠蔽のために定義しているメソッドをaliasで定義する #311

Closed IkumaTadokoro closed 2 years ago

IkumaTadokoro commented 2 years ago

https://github.com/IkumaTadokoro/quitcost/blob/main/app/models/simulation/insurance/base.rb#L16

aliasやalias_methodでいいかも?

IkumaTadokoro commented 2 years ago

以下試してみたが、かえって複雑になってしまうかも?


  1. alias対象のvisibilityが違うので、まずSimulation::Insurance::Baseクラスの方でaliasを追加した後でpublicにする
  # 削除
  # def calc
  #   calculate
  # end

  private

  attr_reader :rate, :age

  def calculate
    return 0 if age >= 75

    limit = rate.send("#{name}_limit")
    calculate_result = income_basis + capita_basis + household_basis
    calculate_result <= limit ? calculate_result : limit
  end

  # 追加
  alias_method :calc :calculate
  public :calc
  1. Baseクラスを継承しているSimulation::Insurance::Careクラスの方でも、aliaspublicの再定義を行なう(こうしないと親のcalcが呼び出されてしまい、差分実装が無視されるため)
class Simulation::Insurance::Care < Simulation::Insurance::Base
  private

  def calculate
    return 0 if age < 40 || age >= 65

    super
  end

  alias_method :calc :calculate
  public :calc
end
IkumaTadokoro commented 2 years ago

2022/04/13 質問タイムで相談した結果