Method: Xqsr3::Containers::MultiMap#fetch

Defined in:
lib/xqsr3/containers/multi_map.rb

#fetch(key, default = (default_parameter_defaulted_ = true; nil), &block) ⇒ Object

Returns the values associated with the given key

  • Parameters:

    • key The key

    • default The default value



324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
# File 'lib/xqsr3/containers/multi_map.rb', line 324

def fetch key, default = (default_parameter_defaulted_ = true; nil), &block

	unless default_parameter_defaulted_

		case	default
		when	::NilClass, ::Array
			;
		else
			raise TypeError, "default parameter ('#{default}') must be of type #{::Array}, but was of type #{default.class}"
		end
	end

	unless @inner.has_key? key

		return default unless default_parameter_defaulted_

		if block_given?

			r = nil

			case	block.arity
			when	0
				r = yield
			when	1
				r = yield key
			else
				raise ArgumentError, "given block must take a single parameter - #{block.arity} given"
			end

			case	r
			when	::Array
				;
			else
				raise ArgumentError, "given block must return a value of type #{::Array} or one convertible implicitly to such" unless r.respond_to? :to_ary

				r = r.to_ary
			end

			return r
		end

		raise KeyError, "given key '#{key}' (#{key.class}) does not exist"
	end

	@inner.fetch key
end