7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
# File 'lib/anycable/rails/channel_state.rb', line 7
def state_attr_accessor(*names)
names.each do |name|
channel_state_attributes << name
class_eval <<~RUBY, __FILE__, __LINE__ + 1
def #{name}
return @#{name} if instance_variable_defined?(:@#{name})
return unless anycabled?
raw_val = __istate__["#{name}"]
val = raw_val.present? ? AnyCable::Serializer.deserialize(JSON.parse(raw_val)) : nil
@#{name} = val.try(:with_indifferent_access) || val
end
def #{name}=(val)
__istate__["#{name}"] = AnyCable::Serializer.serialize(val).to_json if anycabled?
instance_variable_set(:@#{name}, val)
end
RUBY
end
end
|