Class: Literal::Success

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

Defined Under Namespace

Classes: Generic

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Result

#handle

Constructor Details

#initialize(value, success_type:, failure_type:) ⇒ Success

Returns a new instance of Success.



25
26
27
28
29
30
31
32
33
34
# File 'lib/literal/success.rb', line 25

def initialize(value, success_type:, failure_type:)
	@value = value

	@success_type = success_type
	@failure_type = failure_type

	Literal.check(@value, success_type)

	freeze
end

Instance Attribute Details

#failure_typeObject (readonly)

Returns the value of attribute failure_type.



36
37
38
# File 'lib/literal/success.rb', line 36

def failure_type
  @failure_type
end

#success_typeObject (readonly)

Returns the value of attribute success_type.



36
37
38
# File 'lib/literal/success.rb', line 36

def success_type
  @success_type
end

Instance Method Details

#deconstructObject



50
51
52
# File 'lib/literal/success.rb', line 50

def deconstruct
	[@value]
end

#deconstruct_keys(keys) ⇒ Object



54
55
56
57
58
59
60
# File 'lib/literal/success.rb', line 54

def deconstruct_keys(keys)
	if @value.respond_to?(:deconstruct_keys)
		@value.deconstruct_keys(keys)
	else
		{}
	end
end

#error!Object



62
63
64
# File 'lib/literal/success.rb', line 62

def error!
	raise Literal::ArgumentError.new("Success has no error")
end

#failure?Boolean

Returns:

  • (Boolean)


42
43
44
# File 'lib/literal/success.rb', line 42

def failure?
	false
end

#map(type) ⇒ Object

Raises:



66
67
68
69
70
71
72
73
74
75
# File 'lib/literal/success.rb', line 66

def map(type)
	raise ArgumentError unless block_given?
	result = yield(@value)

	Literal::Success.new(
		result,
		success_type: type,
		failure_type: @failure_type
	)
end

#success?Boolean

Returns:

  • (Boolean)


38
39
40
# File 'lib/literal/success.rb', line 38

def success?
	true
end

#thenObject

Raises:



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/literal/success.rb', line 77

def then
	raise ArgumentError unless block_given?
	result = yield(@value)

	case result
	when Literal::Failure
		Literal::Failure.new(
			result.error!,
			success_type: result.success_type,
			failure_type: Literal::Types::_Union(@failure_type, result.failure_type)
		)
	when Literal::Success
		Literal::Success.new(
			result.value!,
			success_type: result.success_type,
			failure_type: Literal::Types::_Union(@failure_type, result.failure_type)
		)
	else
		raise Literal::ArgumentError.new("Expected block to return a Literal::Result, got #{result.class.inspect}")
	end
end

#value!Object



46
47
48
# File 'lib/literal/success.rb', line 46

def value!
	@value
end

#value_orObject

Raises:



99
100
101
102
# File 'lib/literal/success.rb', line 99

def value_or
	raise ArgumentError unless block_given?
	@value
end