module AnyCable::Rails::ChannelState::ClassMethods

Public Instance Methods

channel_state_attributes() click to toggle source
# File lib/anycable/rails/channel_state.rb, line 24
def channel_state_attributes
  return @channel_state_attributes if instance_variable_defined?(:@channel_state_attributes)

  @channel_state_attributes =
    if superclass.respond_to?(:channel_state_attributes)
      superclass.channel_state_attributes.dup
    else
      []
    end
end
state_attr_accessor(*names) click to toggle source
# 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})
                @#{name} = AnyCable::Rails.deserialize(__istate__["#{name}"], json: true) if connection.anycable_socket
              end

              def #{name}=(val)
                __istate__["#{name}"] = AnyCable::Rails.serialize(val, json: true) if connection.anycable_socket
                instance_variable_set(:@#{name}, val)
              end
            RUBY
          end
        end