Class: VcrWs::ClientRecorderMiddleware

Inherits:
Object
  • Object
show all
Defined in:
lib/vcr_ws/client_recorder_middleware.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client, recorder) ⇒ ClientRecorderMiddleware

Returns a new instance of ClientRecorderMiddleware.



29
30
31
32
# File 'lib/vcr_ws/client_recorder_middleware.rb', line 29

def initialize(client, recorder)
  @client = client
  @recorder = recorder
end

Class Method Details

.enable_recorder!(recorder_file) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/vcr_ws/client_recorder_middleware.rb', line 5

def self.enable_recorder!(recorder_file)
  VcrWs::Config.instance.current_file_path = recorder_file

  Faye::WebSocket::Client.prepend(
    Module.new do
      def initialize(url, protocols = nil, options = {})
        @recorder = VcrWs::Recorder.new(VcrWs::Config.instance.current_file_path)
        super
        @middleware = VcrWs::ClientRecorderMiddleware.new(self, @recorder)
      end

      def on(event, &block)
        # Call the original method using `super` and pass through the middleware
        @middleware.on(event, block)
      end

      def send(message)
        # Call the original method using `super` and pass through the middleware
        @middleware.send_message(message)
      end
    end
  )
end

Instance Method Details

#on(event, block) ⇒ Object



34
35
36
37
38
39
40
41
# File 'lib/vcr_ws/client_recorder_middleware.rb', line 34

def on(event, block)
  @client.method(:on).super_method.call(event) do |data|
    value = nil
    value = data.data if data.respond_to?(:data)
    @recorder.record(event, value)
    block&.call(data)
  end
end

#send_message(message) ⇒ Object



43
44
45
46
# File 'lib/vcr_ws/client_recorder_middleware.rb', line 43

def send_message(message)
  @recorder.record("client_send", message)
  @client.method(:send).super_method.call(message)
end