wands 0.5.0 → 0.6.0

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
  SHA256:
3
- metadata.gz: 3403821f90578ef0bf17cbfd5be39249ae53d60cc707e6f8789ef5dafb1cf38e
4
- data.tar.gz: 55bfa363521fc1fd724f692ac1301f21433a609be53cd341bfa61f65ca820dad
3
+ metadata.gz: 4d8ed9c967b476bdcf6b2edbdddb4617a51a98923ae1ed65a012a4f848f278b2
4
+ data.tar.gz: 56ff4b18ae619055971d77dc0363e3a274086822c23ae2e971e0c79736da92e2
5
5
  SHA512:
6
- metadata.gz: 1e71c0ce9e3b1b0c60cec11dd0ed0b4a00760ab107cf02c93f1662b78438280e5e6dc93aa2d1d7f27ea966d73598287f791b85d742a8b2b0142419425f9a171e
7
- data.tar.gz: 11abb373212ae3718f57e11236c14f714ce7ac9bef5dbf4d7db0c0f8a7e10a64e70ec6544cb034b585a9d5be8b36a722dc12de229f0d1c89a08d93cee158ec3b
6
+ metadata.gz: 33e23a8c43c6d38c881cef818e151ddccd1f39ce275e11722c5406e179fce6fe2c23408520cea5a17279fe0c8fbb39aad154b65481f75a5f5af5213d17671d41
7
+ data.tar.gz: 23c9d31c85b3faaf8dcce3f6cd8080df39c56632febd029c9bd36397cf982a0e3d634d7a778d94f9f4cc167d87ecbc5af1f479069dda4f77c73ebc0a6e29dc1b
data/.rubocop.yml CHANGED
@@ -13,6 +13,10 @@ Metrics/BlockLength:
13
13
  Metrics/MethodLength:
14
14
  Max: 17
15
15
 
16
+ Style/ZeroLengthPredicate:
17
+ Exclude:
18
+ - lib/wands/web_socket.rb
19
+
16
20
  Style/StringLiterals:
17
21
  EnforcedStyle: double_quotes
18
22
 
data/lib/wands/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Wands
4
- VERSION = "0.5.0"
4
+ VERSION = "0.6.0"
5
5
  end
@@ -46,7 +46,7 @@ module Wands
46
46
 
47
47
  def initialize(socket)
48
48
  @socket = socket
49
- @buffer = ""
49
+ @binary_message = "".b
50
50
  end
51
51
 
52
52
  def gets
@@ -63,14 +63,40 @@ module Wands
63
63
  end
64
64
  end
65
65
 
66
+ def puts(message)
67
+ frame = Protocol::WebSocket::TextFrame.new(true, message)
68
+ frame.write(@socket)
69
+ end
70
+
66
71
  def read(length)
67
- @buffer = gets if @buffer.empty?
68
- @buffer.slice!(0, length)
72
+ @binary_message = read_next_binary_frame if @binary_message.size.zero?
73
+
74
+ raise "not enough data." if @binary_message.size < length
75
+
76
+ data = @binary_message.byteslice(0, length)
77
+ @binary_message = @binary_message.byteslice(length, @binary_message.size - length)
78
+ data
69
79
  end
70
80
 
71
81
  def write(message)
72
- frame = Protocol::WebSocket::TextFrame.new(true, message)
82
+ frame = Protocol::WebSocket::BinaryFrame.new(true, message)
73
83
  frame.write(@socket)
74
84
  end
85
+
86
+ private
87
+
88
+ def read_next_binary_frame
89
+ framer = Protocol::WebSocket::Framer.new(@socket)
90
+ frame = framer.read_frame
91
+
92
+ case frame
93
+ when Protocol::WebSocket::BinaryFrame
94
+ frame.unpack
95
+ when Protocol::WebSocket::CloseFrame
96
+ Protocol::WebSocket::Message.new
97
+ else
98
+ raise "frame is not a binary"
99
+ end
100
+ end
75
101
  end
76
102
  end
data/sig/wands.rbs CHANGED
@@ -2,6 +2,7 @@ module Wands
2
2
  VERSION: String
3
3
 
4
4
  class WebSocket
5
+ @binary_message: String
5
6
  @socket: TCPSocket
6
7
 
7
8
  def initialize: (TCPSocket) -> void
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wands
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - shigeru.nakajima