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 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"