📚
rbs-inlineの書き方お勉強
この記事について
rbs-inlineの書き方をお勉強したときのメモ
rbsファイルを触らなくても良いというのはすごく助かります🙏
rbs-inlineで書いてみる
ありそうなModelを例に
class A < ActiveRecord::Base
# attr_xxxは末尾に型宣言が可能
attr_reader :attr_a #! Integer
attr_accessor :attr_b #! String
# attributeは直定義できないので、!@rbsで仮想Attrを宣言する必要がある
attribute :attr_c
# !@rbs
# attr_accessor attr_c (): String
FOO = [1,2,3].sample #: Integer
validates :validate_a
class << self
# @rbs value: String
# @rbs kwd_a: String
# @rbs kwd_b: String?
# @rbs **: untyped
# @rbs return: String
def convert_value(value, kwd_a:, kwd_b: nil, **)
value.gsub(kwd_a, kwd_b.to_s)
end
# @rbs ids: [Integer]
# @rbs return: A::ActiveRecord::Relation
def find_aaa(ids)
where(id: ids)
end
# @rbs ids: [Integer] | nil
# @rbs return: [A]
def find_aaa_to_a(ids: nil)
where(id: ids).to_a
end
end
# nilになる可能性があるので、末尾は?になる
# @rbs return: Integer?
def xxx_id
xxx&.id
end
private
# リレーションが空でnilになる可能性があるので、末尾は?になる
# @rbs return: User?
def xxx
@xxx ||= users.first
end
# インスタンス変数は外で定義する(外から見る変数ではないので定義してもしなくても良いと思う)
# @rbs @xxx: User?
# 戻り値はないので、void
# @rbs return: void
def validate_a
return if a.present?
errors.add(:a, :invalid)
end
end
Discussion