Module: RSpec::Undefined::Matchers

Defined in:
lib/rspec/undefined/matchers.rb

Defined Under Namespace

Classes: BeUndefined

Instance Method Summary collapse

Instance Method Details

#be_undefined(arg1 = nil, category = nil, expected: NO_EXPECTED) ⇒ Object



110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# File 'lib/rspec/undefined/matchers.rb', line 110

def be_undefined(arg1 = nil, category = nil, expected: NO_EXPECTED)
  expected_provided = !expected.equal?(NO_EXPECTED)
  inner_arg = nil
  cat_arg = nil

  if arg1.nil?
    # noop
  elsif arg1.is_a?(Symbol)
    if !category.nil?
      raise ArgumentError,
            "be_undefined: 第1引数がカテゴリ Symbol のとき、第2引数は指定できません"
    end
    cat_arg = arg1
  elsif arg1.respond_to?(:matches?)
    inner_arg = arg1
    cat_arg = category
  else
    raise ArgumentError,
          "be_undefined の第1引数は Symbol カテゴリまたは RSpec Matcher を渡してください(受け取った値: #{arg1.inspect})。" \
          "素値を期待値として渡したい場合は expected: キーワードを使ってください (例: be_undefined(:category, expected: #{arg1.inspect}))"
  end

  if inner_arg && expected_provided
    raise ArgumentError,
          "be_undefined: 内側マッチャと expected: は同時に指定できません(排他)"
  end

  unless cat_arg.nil? || cat_arg.is_a?(Symbol)
    raise ArgumentError,
          "category は Symbol で指定してください(受け取った値: #{cat_arg.inspect})。" \
          "カスタムカテゴリは RSpec::Undefined::Categories.register で事前登録してください。"
  end

  BeUndefined.new(
    inner: inner_arg,
    expected_value: expected_provided ? expected : nil,
    expected_provided: expected_provided,
    category: cat_arg
  )
end