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