Module: AnyCable::Rails::ConnectionState::ClassMethods

Defined in:
lib/anycable/rails/channel_state.rb

Instance Method Summary collapse

Instance Method Details

#connection_state_attributesObject



75
76
77
78
79
80
81
82
83
84
# File 'lib/anycable/rails/channel_state.rb', line 75

def connection_state_attributes
  return @connection_state_attributes if instance_variable_defined?(:@connection_state_attributes)

  @connection_state_attributes =
    if superclass.respond_to?(:connection_state_attributes)
      superclass.connection_state_attributes.dup
    else
      []
    end
end

#state_attr_accessor(*names) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/anycable/rails/channel_state.rb', line 55

def state_attr_accessor(*names)
  names.each do |name|
    connection_state_attributes << name
    class_eval <<~RUBY, __FILE__, __LINE__ + 1
      def #{name}
        return @#{name} if instance_variable_defined?(:@#{name})
        return unless anycabled?

        val = __cstate__["#{name}"]
        @#{name} = val.present? ? AnyCable::Serializer.deserialize(JSON.parse(val)) : nil
      end

      def #{name}=(val)
        __cstate__["#{name}"] = AnyCable::Serializer.serialize(val).to_json if anycabled?
        instance_variable_set(:@#{name}, val)
      end
    RUBY
  end
end