argsやreturnsには、チェックの対象としてさまざまな値を渡すことができます。
# 基本的な値のチェック
args "foo", :bar # StringやSymbolを渡した場合は、その値と完全一致するかどうかによって判定
args ["yes", "no"] # 配列を渡した場合はOR条件で判定。この場合は "yes" か "no"のどちらかであればOK
args [true, false] # trueかfalseのどちらかのみを受け付ける
args nil # nilのみを受け付ける
# returns :selfで「selfを返すこと」という表現になる
returns :self
# 正規表現を渡すと、対象の正規表現にマッチする文字列であるかどうかを判定
args /.md$/
# 範囲 (Rangeオブジェクト) を渡すと、対象の範囲に含まれる値であるかどうかを判定
# 内部的には Range#include? を使うことで判定している
args 0..100 # 0以上100以下の値であればtrue
args 0...100 # 0以上100未満の値であればtrue
# any: どんな値でもよい (nilも含む)
args any
# except: 対象の値以外であれば何でもよい
args except(nil) # nil以外であればどんな値でもOK
args except(String) # 文字列以外であればどんな値でもOK
# respondable: 指定された名前のメソッドが定義されているかどうかを判定 (Duck Typing向け)
args respondable(:to_s) # to_sが定義されているオブジェクトであればOK。内部的には respond_to?(:to_s) で判定している
args respondable(:read, :write) # read, writeが定義されているオブジェクトであればOK
# array_of: 指定した値の配列であることを判定
args array_of(String) # 文字列の配列であればOK。["a", "b"]ならOKで「"a", nil」はエラー
args array_of([String, nil]) # 文字列かnilのみを含む配列であればOK
# hash_of: 指定したキーと値を持つHashであることを判定
args hash_of(Symbol, String) # キーがSymbol、値がStringのHashであればOK。{:foo => 'bar'}など
# block: [Proc, nil]と同じ。ブロック引数(&proc のような形式の引数)を受け取りたいときに使用する
args block
def block_receive_method(&callback)
...
end