55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
# File 'lib/llm_gateway/utils.rb', line 55
def class_attribute(*names, instance_accessor: true, instance_reader: instance_accessor, instance_writer: instance_accessor, instance_predicate: true, default: nil)
names.each do |name|
ivar = :"@#{name}"
instance_variable_set(ivar, default)
unset = Object.new
define_singleton_method(name) do |value = unset|
unless value.equal?(unset)
instance_variable_set(ivar, value)
next value
end
if instance_variable_defined?(ivar)
instance_variable_get(ivar)
elsif superclass.respond_to?(name)
superclass.public_send(name)
end
end
define_singleton_method("#{name}=") do |value|
instance_variable_set(ivar, value)
end
define_singleton_method("#{name}?") { !!public_send(name) } if instance_predicate
if instance_reader
define_method(name) do
if instance_variable_defined?(ivar)
instance_variable_get(ivar)
else
self.class.public_send(name)
end
end
end
define_method("#{name}=") { |value| instance_variable_set(ivar, value) } if instance_writer
define_method("#{name}?") { !!public_send(name) } if instance_predicate
end
end
|