Class: Literal::Case

Inherits:
Object
  • Object
show all
Defined in:
lib/literal/case.rb

Instance Method Summary collapse

Constructor Details

#initialize(*required_cases) {|_self| ... } ⇒ Case

Returns a new instance of Case.

Yields:

  • (_self)

Yield Parameters:

  • _self (Literal::Case)

    the object that the method was called on



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/literal/case.rb', line 4

def initialize(*required_cases, &)
	@required_cases = required_cases
	@handled_cases = {}

	yield self

	freeze

	keys = @handled_cases.keys

	excess_cases = keys - @required_cases
	missing_cases = @required_cases - keys

	if excess_cases.any?
		raise ArgumentError, "Excess case(s): #{excess_cases.join(', ')}."
	end

	if missing_cases.any?
		raise ArgumentError, "Missing case(s): #{missing_cases.join(', ')}."
	end
end

Instance Method Details

#[](value) ⇒ Object



45
46
47
48
49
50
51
# File 'lib/literal/case.rb', line 45

def [](value)
	@handled_cases.each do |condition, block|
		return block if condition === value
	end

	nil
end

#call(value) ⇒ Object



36
37
38
39
40
41
42
43
# File 'lib/literal/case.rb', line 36

def call(value, ...)
	block = self[value]
	if block
		block.call(value, ...)
	else
		raise Literal::ArgumentError
	end
end

#to_procObject



32
33
34
# File 'lib/literal/case.rb', line 32

def to_proc
	method(:call).to_proc
end

#when(*conditions, &block) ⇒ Object



26
27
28
29
30
# File 'lib/literal/case.rb', line 26

def when(*conditions, &block)
	conditions.each do |condition|
		@handled_cases[condition] = block || proc { |it| it }
	end
end