simple-websocket-vcr 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.coveralls.yml +1 -0
- data/README.md +4 -1
- data/Rakefile +6 -2
- data/lib/simple-websocket-vcr/recordable_websocket_client.rb +38 -18
- data/lib/simple-websocket-vcr/version.rb +1 -1
- data/lib/simple-websocket-vcr.rb +5 -1
- data/simple-websocket-vcr.gemspec +8 -3
- data/spec/spec_helper.rb +4 -0
- data/spec/vcr_spec.rb +21 -8
- metadata +73 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 371d7113b96864c18d52a21a6023e6359951d11b
|
4
|
+
data.tar.gz: f34d0a2637eb22f57feebb07c082d8f923c4d034
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 31c13008d6bd19de06d4babb02ce090e7dd12ff16587513cb44edd5103cbf56a0639bfbb0da5f5080730786a2a8e42bb0fb16c969046ad3b59ddac0c0eb9fb98
|
7
|
+
data.tar.gz: 6f824eabaff644eff905a0b46bf47fd945f1fc0568f270a14ac37cf5344e604bc4f4db1e4aa58fa5f63bd02f05c79520c0060590fe3085dd05e9882e0f0ddb31
|
data/.coveralls.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
service_name: travis-ci
|
data/README.md
CHANGED
@@ -2,4 +2,7 @@
|
|
2
2
|
|
3
3
|
[](https://travis-ci.org/Jiri-Kremser/simple-websocket-vcr)
|
4
4
|
|
5
|
-
|
5
|
+
[](https://coveralls.io/github/Jiri-Kremser/simple-websocket-vcr?branch=master)
|
6
|
+
|
7
|
+
|
8
|
+
TODO: this
|
data/Rakefile
CHANGED
@@ -11,7 +11,7 @@ module VCR
|
|
11
11
|
include EventEmitter
|
12
12
|
|
13
13
|
attr_reader :live, :client
|
14
|
-
attr_accessor :recording, :open
|
14
|
+
attr_accessor :recording, :open, :thread
|
15
15
|
|
16
16
|
def initialize(cassette, real_client)
|
17
17
|
raise NoCassetteError 'specify the cassette' unless cassette
|
@@ -32,18 +32,18 @@ module VCR
|
|
32
32
|
_write(:send, data, opt)
|
33
33
|
end
|
34
34
|
|
35
|
-
# or on
|
36
35
|
def on(event, params = {}, &block)
|
36
|
+
super(event, params, &block) unless @live
|
37
37
|
_read(:add_listener, event, params, &block)
|
38
38
|
end
|
39
39
|
|
40
40
|
def emit(event, *data)
|
41
|
-
@recording << { operation: 'read', data: data } if live
|
41
|
+
@recording << { operation: 'read', data: data } if @live
|
42
42
|
super(event, *data)
|
43
43
|
end
|
44
44
|
|
45
45
|
def open?
|
46
|
-
if live
|
46
|
+
if @live
|
47
47
|
@client.open?
|
48
48
|
else
|
49
49
|
@open
|
@@ -51,12 +51,14 @@ module VCR
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def close
|
54
|
-
if live
|
54
|
+
if @live
|
55
55
|
@recording << { operation: 'close' }
|
56
56
|
@client.close
|
57
57
|
else
|
58
|
+
sleep 0.5 if @recording.first['operation'] != 'close'
|
58
59
|
record = @recording.shift
|
59
60
|
_ensure_operation('close', record['operation'])
|
61
|
+
Thread.kill @thread if @thread
|
60
62
|
@open = false
|
61
63
|
end
|
62
64
|
end
|
@@ -64,10 +66,11 @@ module VCR
|
|
64
66
|
private
|
65
67
|
|
66
68
|
def _write(method, data, opt)
|
67
|
-
if live
|
69
|
+
if @live
|
68
70
|
@client.__send__(method, data, opt)
|
69
71
|
@recording << { operation: 'write', data: data }
|
70
72
|
else
|
73
|
+
sleep 0.5 if @recording.first['operation'] != 'write'
|
71
74
|
record = @recording.shift
|
72
75
|
_ensure_operation('write', record['operation'])
|
73
76
|
_ensure_data(data, record['data'])
|
@@ -75,7 +78,7 @@ module VCR
|
|
75
78
|
end
|
76
79
|
|
77
80
|
def _read(method, event, params, &block)
|
78
|
-
if live
|
81
|
+
if @live
|
79
82
|
rec = @recording
|
80
83
|
@client.on(event, params) do |msg|
|
81
84
|
msg = Base64.decode64(msg) if msg.type != :text
|
@@ -84,13 +87,30 @@ module VCR
|
|
84
87
|
end
|
85
88
|
@client.__send__(method, event, params, &block)
|
86
89
|
else
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
90
|
+
wait_for_reads(event, params[:once])
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def wait_for_reads(event, once = false)
|
95
|
+
@thread = Thread.new do
|
96
|
+
# if the next recorded operation is a 'read', take all the reads until next write
|
97
|
+
# and translate them to the events
|
98
|
+
while @open && !@recording.empty? do
|
99
|
+
begin
|
100
|
+
if @recording.first['operation'] == 'read'
|
101
|
+
record = @recording.shift
|
102
|
+
data = record['data']
|
103
|
+
data = Base64.decode64(msg) if record['type'] != 'text'
|
104
|
+
data = ::WebSocket::Frame::Data.new(data)
|
105
|
+
def data.data
|
106
|
+
self
|
107
|
+
end
|
108
|
+
emit(event, data)
|
109
|
+
else
|
110
|
+
sleep 0.1 # TODO config
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
94
114
|
end
|
95
115
|
end
|
96
116
|
|
@@ -99,13 +119,13 @@ module VCR
|
|
99
119
|
end
|
100
120
|
|
101
121
|
def _ensure_operation(desired, actual)
|
102
|
-
string = "Expected to '#{desired}' but next in recording was '#{actual}'"
|
103
|
-
raise
|
122
|
+
string = "Expected to '#{desired}' but the next operation in recording was '#{actual}'"
|
123
|
+
raise string unless desired == actual
|
104
124
|
end
|
105
125
|
|
106
126
|
def _ensure_data(desired, actual)
|
107
|
-
string = "Expected data to be '#{desired}' but next in recording was '#{actual}'"
|
108
|
-
raise
|
127
|
+
string = "Expected data to be '#{desired}' but next data in recording was '#{actual}'"
|
128
|
+
raise string unless desired == actual
|
109
129
|
end
|
110
130
|
end
|
111
131
|
end
|
data/lib/simple-websocket-vcr.rb
CHANGED
@@ -54,13 +54,17 @@ module VCR
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def turned_on?
|
57
|
-
|
57
|
+
!@cassette.nil?
|
58
58
|
end
|
59
59
|
|
60
60
|
def turn_on!
|
61
61
|
# TODO: impl
|
62
62
|
end
|
63
63
|
|
64
|
+
def live?
|
65
|
+
@cassette && @cassette.recording?
|
66
|
+
end
|
67
|
+
|
64
68
|
private
|
65
69
|
|
66
70
|
def filename_helper(example, context)
|
@@ -19,7 +19,12 @@ Gem::Specification.new do |gem|
|
|
19
19
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
20
20
|
gem.require_paths = ['lib']
|
21
21
|
|
22
|
-
gem.add_development_dependency
|
23
|
-
gem.add_development_dependency
|
24
|
-
gem.add_development_dependency
|
22
|
+
gem.add_development_dependency 'shoulda'
|
23
|
+
gem.add_development_dependency 'rspec-rails', '~> 3.0'
|
24
|
+
gem.add_development_dependency 'rake', '~> 11'
|
25
|
+
gem.add_development_dependency 'vcr'
|
26
|
+
gem.add_development_dependency 'webmock', '~> 1.7'
|
27
|
+
gem.add_development_dependency 'rubocop', '= 0.34.2'
|
28
|
+
gem.add_development_dependency 'websocket-client-simple', '~> 0.3'
|
29
|
+
gem.add_development_dependency 'coveralls'
|
25
30
|
end
|
data/spec/spec_helper.rb
CHANGED
data/spec/vcr_spec.rb
CHANGED
@@ -3,6 +3,15 @@ require 'thread'
|
|
3
3
|
require 'websocket-client-simple'
|
4
4
|
require 'json'
|
5
5
|
|
6
|
+
|
7
|
+
# class Object
|
8
|
+
# alias real_sleep sleep
|
9
|
+
#
|
10
|
+
# def sleep(*args)
|
11
|
+
# real_sleep(*args) if !VCR::WebSocket.cassette || VCR::WebSocket.cassette.recording?
|
12
|
+
# end
|
13
|
+
# end
|
14
|
+
|
6
15
|
describe 'VCR for WS' do
|
7
16
|
HOST = 'localhost:8080'.freeze
|
8
17
|
|
@@ -10,6 +19,10 @@ describe 'VCR for WS' do
|
|
10
19
|
e
|
11
20
|
end
|
12
21
|
|
22
|
+
let(:should_sleep) do |_|
|
23
|
+
!VCR::WebSocket.cassette || VCR::WebSocket.cassette.recording?
|
24
|
+
end
|
25
|
+
|
13
26
|
before(:each) do
|
14
27
|
VCR::WebSocket.configuration.reset_defaults!
|
15
28
|
end
|
@@ -23,7 +36,7 @@ describe 'VCR for WS' do
|
|
23
36
|
c = WebSocket::Client::Simple.connect url do |client|
|
24
37
|
client.on(:message, once: true, &:data)
|
25
38
|
end
|
26
|
-
sleep 1
|
39
|
+
sleep 1 if should_sleep
|
27
40
|
|
28
41
|
expect(c).not_to be nil
|
29
42
|
expect(c.open?).to be true
|
@@ -39,7 +52,7 @@ describe 'VCR for WS' do
|
|
39
52
|
c = WebSocket::Client::Simple.connect url do |client|
|
40
53
|
client.on(:message, once: true, &:data)
|
41
54
|
end
|
42
|
-
sleep 1
|
55
|
+
sleep 1 if should_sleep
|
43
56
|
c.send('something 1')
|
44
57
|
c.send('something 2')
|
45
58
|
c.send('something 3')
|
@@ -58,11 +71,11 @@ describe 'VCR for WS' do
|
|
58
71
|
c = WebSocket::Client::Simple.connect url do |client|
|
59
72
|
client.on(:message, once: true, &:data)
|
60
73
|
end
|
61
|
-
sleep 1
|
74
|
+
sleep 1 if should_sleep
|
62
75
|
|
63
76
|
expect(c).not_to be nil
|
64
77
|
expect(c.open?).to be true
|
65
|
-
sleep 1
|
78
|
+
sleep 1 if should_sleep
|
66
79
|
c.close
|
67
80
|
expect(c.open?).to be false
|
68
81
|
end
|
@@ -78,20 +91,20 @@ describe 'VCR for WS' do
|
|
78
91
|
c = WebSocket::Client::Simple.connect url do |client|
|
79
92
|
client.on(:message, once: true, &:data)
|
80
93
|
end
|
81
|
-
sleep 1
|
94
|
+
sleep 1 if should_sleep
|
82
95
|
c.send('something_1')
|
83
96
|
c.on(:message, once: true, &:data)
|
84
|
-
sleep 1
|
97
|
+
sleep 1 if should_sleep
|
85
98
|
|
86
99
|
c.send('something_2')
|
87
100
|
c.on(:message, once: true, &:data)
|
88
|
-
sleep 1
|
101
|
+
sleep 1 if should_sleep
|
89
102
|
|
90
103
|
expect(c).not_to be nil
|
91
104
|
expect(c.open?).to be true
|
92
105
|
c.close
|
93
106
|
expect(c.open?).to be false
|
94
|
-
sleep 1
|
107
|
+
sleep 1 if should_sleep
|
95
108
|
end
|
96
109
|
|
97
110
|
# check that everything was recorded in the json file
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple-websocket-vcr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jirka Kremser
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: shoulda
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: rspec-rails
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,6 +52,48 @@ dependencies:
|
|
38
52
|
- - "~>"
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '11'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: vcr
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: webmock
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.7'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.7'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rubocop
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.34.2
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.34.2
|
41
97
|
- !ruby/object:Gem::Dependency
|
42
98
|
name: websocket-client-simple
|
43
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,6 +108,20 @@ dependencies:
|
|
52
108
|
- - "~>"
|
53
109
|
- !ruby/object:Gem::Version
|
54
110
|
version: '0.3'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: coveralls
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
55
125
|
description: Websocket VCR add-on
|
56
126
|
email:
|
57
127
|
- jkremser@redhat.com
|
@@ -59,6 +129,7 @@ executables: []
|
|
59
129
|
extensions: []
|
60
130
|
extra_rdoc_files: []
|
61
131
|
files:
|
132
|
+
- ".coveralls.yml"
|
62
133
|
- ".gitignore"
|
63
134
|
- ".rspec"
|
64
135
|
- ".rubocop.yml"
|