simple-websocket-vcr 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e4e3bd4ad497538c5854e17f3ec76a2a7f8026d6
4
- data.tar.gz: 7d0c14cf83177b9eb994feba28316a58f2661d3d
3
+ metadata.gz: 371d7113b96864c18d52a21a6023e6359951d11b
4
+ data.tar.gz: f34d0a2637eb22f57feebb07c082d8f923c4d034
5
5
  SHA512:
6
- metadata.gz: 5db4b3ba2fec4cfa2378dedd34812533aeac4f520d7c14f6dec58c67d9e1f73ac7104b243765d00b7202171295e2b8ca77bf90e17f041c6f4c2561e2b90a68c6
7
- data.tar.gz: 15b87a93f9049c09fbd93ea294c5d4e2d4810a9c859232fba14f68cf38b2267f167ae78448c9cea4fa62141fab6674b07aec4bc8604d03b62a39c07bbbf30904
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
  [![Build Status](https://travis-ci.org/Jiri-Kremser/simple-websocket-vcr.png?branch=master)](https://travis-ci.org/Jiri-Kremser/simple-websocket-vcr)
4
4
 
5
- TODO: this
5
+ [![Coverage](https://coveralls.io/repos/github/Jiri-Kremser/simple-websocket-vcr/badge.svg?branch=master)](https://coveralls.io/github/Jiri-Kremser/simple-websocket-vcr?branch=master)
6
+
7
+
8
+ TODO: this
data/Rakefile CHANGED
@@ -1,4 +1,8 @@
1
1
  require 'bundler/gem_tasks'
2
2
  require 'rspec/core/rake_task'
3
- RSpec::Core::RakeTask.new('spec')
4
- task default: :spec
3
+ require 'rubocop/rake_task'
4
+
5
+ RSpec::Core::RakeTask.new(:spec)
6
+ RuboCop::RakeTask.new
7
+
8
+ task default: [:rubocop, :spec]
@@ -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
- raise EOFError if @recording.empty?
88
- record = _take_first_read
89
- return if record.nil?
90
- _ensure_operation('read', record['operation'])
91
- data = record['data']
92
- data = Base64.decode64(msg) if record['type'] != 'text'
93
- emit(event, data)
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 OperationMismatchError string unless desired == actual
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 DataMismatchError string unless desired == actual
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
@@ -1,5 +1,5 @@
1
1
  module VCR
2
2
  module WebSocket
3
- VERSION = '0.0.2'.freeze
3
+ VERSION = '0.0.3'.freeze
4
4
  end
5
5
  end
@@ -54,13 +54,17 @@ module VCR
54
54
  end
55
55
 
56
56
  def turned_on?
57
- # TODO: impl
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('rspec-rails', '~> 3.0')
23
- gem.add_development_dependency('rake', '~> 11')
24
- gem.add_development_dependency('websocket-client-simple', '~> 0.3')
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
@@ -1,3 +1,7 @@
1
+ # This needs to go before all requires to be able to record full coverage
2
+ require 'coveralls'
3
+ Coveralls.wear!
4
+
1
5
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
2
6
  RSpec.configure do |config|
3
7
  config.order = 'random'
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.2
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-21 00:00:00.000000000 Z
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"