40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/super/configuration.rb', line 40
def configure(attr, wrap: nil, enum: nil, **kwargs)
if kwargs.key?(:default)
defaults[attr] = kwargs[:default]
end
define_method(attr) do
if !configured?(attr)
raise Error::UnconfiguredConfiguration, "unconfigured: #{attr}"
end
result = instance_variable_get("@#{attr}")
if wrap.nil?
result
else
wrap.call(result)
end
end
define_method("#{attr}=") do |value|
if enum.is_a?(Array)
if !enum.include?(value)
raise Error::InvalidConfiguration,
"tried to set `#{attr}` to `#{value.inspect}`, " \
"expected: #{enum.join(", ")}"
end
end
instance_variable_set("@#{attr}", value)
value
end
end
|