qcmd 0.1.16.pre → 0.1.16.pre2

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.
data/lib/qcmd.rb CHANGED
@@ -11,8 +11,7 @@ require 'qcmd/commands'
11
11
  require 'qcmd/input_completer'
12
12
  require 'qcmd/core_ext/array'
13
13
  require 'qcmd/core_ext/string'
14
- require 'qcmd/core_ext/osc/message'
15
- require 'qcmd/core_ext/osc/tcp_client'
14
+ require 'qcmd/core_ext/osc'
16
15
 
17
16
  module Qcmd
18
17
  autoload :Configuration, 'qcmd/configuration'
data/lib/qcmd/context.rb CHANGED
@@ -50,7 +50,7 @@ module Qcmd
50
50
  def connect_to_qlab handler=nil
51
51
  # get an open connection with the default handler
52
52
  handler ||= Qcmd::Handler
53
- self.qlab = OSC::TCPClient.new(machine.address, machine.port, handler)
53
+ self.qlab = OSC::TCP::Client.new(machine.address, machine.port, handler)
54
54
  end
55
55
  end
56
56
  end
@@ -0,0 +1,6 @@
1
+ require 'qcmd/core_ext/osc/tcp'
2
+ require 'qcmd/core_ext/osc/sending_socket'
3
+ require 'qcmd/core_ext/osc/tcp_client'
4
+ require 'qcmd/core_ext/osc/tcp_server'
5
+ require 'qcmd/core_ext/osc/message'
6
+
@@ -3,5 +3,14 @@ module OSC
3
3
  def has_arguments?
4
4
  to_a.size > 0
5
5
  end
6
+
7
+ # attachable responder, for use with TCP::Server
8
+ def responder
9
+ @responder
10
+ end
11
+
12
+ def responder=(val)
13
+ @responder = val
14
+ end
6
15
  end
7
16
  end
@@ -0,0 +1,47 @@
1
+ module OSC
2
+ module TCP
3
+ class SendingSocket
4
+ def initialize socket
5
+ @socket = socket
6
+ end
7
+
8
+ def send msg
9
+ @socket_buffer = []
10
+
11
+ enc_msg = msg.encode
12
+
13
+ send_char CHAR_END
14
+
15
+ enc_msg.bytes.each do |b|
16
+ case b
17
+ when CHAR_END
18
+ send_char CHAR_ESC
19
+ send_char CHAR_ESC_END
20
+ when CHAR_ESC
21
+ send_char CHAR_ESC
22
+ send_char CHAR_ESC_ESC
23
+ else
24
+ send_char b
25
+ end
26
+ end
27
+
28
+ send_char CHAR_END
29
+
30
+ flush
31
+
32
+ # puts "[TCP::SendingSocket] sent message: #{ enc_msg.inspect }"
33
+ end
34
+
35
+ private
36
+
37
+ def flush
38
+ @socket.send @socket_buffer.join, 0
39
+ end
40
+
41
+ def send_char c
42
+ @socket_buffer << [c].pack('C')
43
+ # @socket.send [c].pack('C'), 0
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,14 @@
1
+ module OSC
2
+ module TCP
3
+ CHAR_END = 0300 # indicates end of packet
4
+ CHAR_ESC = 0333 # indicates byte stuffing
5
+ CHAR_ESC_END = 0334 # ESC ESC_END means END data byte
6
+ CHAR_ESC_ESC = 0335 # ESC ESC_ESC means ESC data byte
7
+
8
+ CHAR_END_ENC = [0300].pack('C') # indicates end of packet
9
+ CHAR_ESC_ENC = [0333].pack('C') # indicates byte stuffing
10
+ CHAR_ESC_END_ENC = [0334].pack('C') # ESC ESC_END means END data byte
11
+ CHAR_ESC_ESC_ENC = [0335].pack('C') # ESC ESC_ESC means ESC data byte
12
+ end
13
+ end
14
+
@@ -4,155 +4,125 @@
4
4
  # http://www.ietf.org/rfc/rfc1055.txt
5
5
 
6
6
  module OSC
7
- class TCPClient
8
-
9
- CHAR_END = 0300 # indicates end of packet
10
- CHAR_ESC = 0333 # indicates byte stuffing
11
- CHAR_ESC_END = 0334 # ESC ESC_END means END data byte
12
- CHAR_ESC_ESC = 0335 # ESC ESC_ESC means ESC data byte
13
-
14
- CHAR_END_ENC = [0300].pack('C') # indicates end of packet
15
- CHAR_ESC_ENC = [0333].pack('C') # indicates byte stuffing
16
- CHAR_ESC_END_ENC = [0334].pack('C') # ESC ESC_END means END data byte
17
- CHAR_ESC_ESC_ENC = [0335].pack('C') # ESC ESC_ESC means ESC data byte
18
-
19
- def initialize host, port, handler=nil
20
- @host = host
21
- @port = port
22
- @handler = handler
23
- @so = TCPSocket.new host, port
24
- end
25
-
26
- def close
27
- @so.close unless closed?
28
- end
29
-
30
- def closed?
31
- @so.closed?
32
- end
33
-
34
- # send an OSC::Message
35
- def send msg
36
- enc_msg = msg.encode
37
-
38
- send_char CHAR_END
39
-
40
- enc_msg.bytes.each do |b|
41
- case b
42
- when CHAR_END
43
- send_char CHAR_ESC
44
- send_char CHAR_ESC_END
45
- when CHAR_ESC
46
- send_char CHAR_ESC
47
- send_char CHAR_ESC_ESC
48
- else
49
- send_char b
50
- end
7
+ module TCP
8
+ class Client
9
+ def initialize host, port, handler=nil
10
+ @host = host
11
+ @port = port
12
+ @handler = handler
13
+ @socket = TCPSocket.new host, port
14
+ @sending_socket = SendingSocket.new @socket
51
15
  end
52
16
 
53
- send_char CHAR_END
17
+ def close
18
+ @socket.close unless closed?
19
+ end
54
20
 
55
- # puts "[TCPClient] sent message: #{ enc_msg.inspect }"
21
+ def closed?
22
+ @socket.closed?
23
+ end
56
24
 
57
- if block_given? || @handler
58
- messages = response
59
- if !messages.nil?
60
- messages.each do |message|
61
- # puts "[TCPClient] got message #{ message }"
62
- if block_given?
63
- yield message
64
- else
65
- @handler.handle message
25
+ # send an OSC::Message
26
+ def send msg
27
+ @sending_socket.send msg
28
+
29
+
30
+ if block_given? || @handler
31
+ messages = response
32
+ if !messages.nil?
33
+ messages.each do |message|
34
+ # puts "[TCP::Client] got message #{ message }"
35
+ if block_given?
36
+ yield message
37
+ else
38
+ @handler.handle message
39
+ end
66
40
  end
41
+ else
42
+ # puts "[TCP::Client] response is nil"
67
43
  end
44
+ end
45
+ end
46
+
47
+ def response
48
+ if received_messages = receive_raw
49
+ received_messages.map do |message|
50
+ OSCPacket.messages_from_network(message)
51
+ end.flatten
68
52
  else
69
- # puts "[TCPClient] response is nil"
53
+ nil
70
54
  end
71
55
  end
72
- end
73
56
 
74
- def response
75
- if received_messages = receive_raw
76
- received_messages.map do |message|
77
- OSCPacket.messages_from_network(message)
78
- end.flatten
79
- else
80
- nil
57
+ def to_s
58
+ "#<OSC::TCP::Client:#{ object_id } @host:#{ @host.inspect }, @port:#{ @port.inspect }, @handler:#{ @handler.to_s }>"
81
59
  end
82
- end
83
60
 
84
- def to_s
85
- "#<OSC::TCPClient:#{ object_id } @host:#{ @host.inspect }, @port:#{ @port.inspect }, @handler:#{ @handler.to_s }>"
86
- end
61
+ private
87
62
 
88
- private
63
+ def receive_raw
64
+ received = 0
65
+ messages = []
66
+ buffer = []
67
+ failed = false
68
+ received_any = false
89
69
 
90
- def send_char c
91
- @so.send [c].pack('C'), 0
92
- end
70
+ loop do
71
+ begin
72
+ # get a character from the socket, fail if nothing is available
73
+ c = @socket.recv_nonblock(1)
74
+
75
+ received_any = true
93
76
 
94
- def receive_raw
95
- received = 0
96
- messages = []
97
- buffer = []
98
- failed = false
99
- received_any = false
100
-
101
- loop do
102
- begin
103
- # get a character from the socket, fail if nothing is available
104
- c = @so.recv_nonblock(1)
105
-
106
- received_any = true
107
-
108
- case c
109
- when CHAR_END_ENC
110
- if received > 0
111
- # add SLIP encoded message to list
112
- messages << buffer.join
113
-
114
- # reset state and keep reading from the port until there's
115
- # nothing left
116
- buffer.clear
117
- received = 0
118
- failed = false
119
- end
120
- when CHAR_ESC_ENC
121
- # get next character, blocking is okay
122
- c = @so.recv(1)
123
77
  case c
124
- when CHAR_ESC_END_ENC
125
- c = CHAR_END_ENC
126
- when CHAR_ESC_ESC_ENC
127
- c = CHAR_ESC_ENC
78
+ when CHAR_END_ENC
79
+ if received > 0
80
+ # add SLIP encoded message to list
81
+ messages << buffer.join
82
+
83
+ # reset state and keep reading from the port until there's
84
+ # nothing left
85
+ buffer.clear
86
+ received = 0
87
+ failed = false
88
+ end
89
+ when CHAR_ESC_ENC
90
+ # get next character, blocking is okay
91
+ c = @socket.recv(1)
92
+ case c
93
+ when CHAR_ESC_END_ENC
94
+ c = CHAR_END_ENC
95
+ when CHAR_ESC_ESC_ENC
96
+ c = CHAR_ESC_ENC
97
+ else
98
+ received += 1
99
+ buffer << c
100
+ end
128
101
  else
129
102
  received += 1
130
103
  buffer << c
131
104
  end
132
- else
133
- received += 1
134
- buffer << c
135
- end
136
- rescue Errno::EAGAIN, Errno::EWOULDBLOCK
137
- # If any messages have been received, assume sender is done sending.
138
- if failed || received_any
139
- break
140
- end
105
+ rescue Errno::EAGAIN, Errno::EWOULDBLOCK
106
+ # If any messages have been received, assume sender is done sending.
107
+ if failed || received_any
108
+ break
109
+ end
141
110
 
142
- # wait one second to see if the socket might become readable (and a
143
- # response forthcoming). normal usage is send + wait for response,
144
- # we have to give QLab a reasonable amount of time in which to respond.
111
+ # wait one second to see if the socket might become readable (and a
112
+ # response forthcoming). normal usage is send + wait for response,
113
+ # we have to give QLab a reasonable amount of time in which to respond.
145
114
 
146
- IO.select([@so], [], [], 1)
147
- failed = true
148
- retry
115
+ IO.select([@socket], [], [], 1)
116
+ failed = true
117
+ retry
118
+ end
149
119
  end
150
- end
151
120
 
152
- if messages.size > 0
153
- messages
154
- else
155
- nil
121
+ if messages.size > 0
122
+ messages
123
+ else
124
+ nil
125
+ end
156
126
  end
157
127
  end
158
128
  end
@@ -0,0 +1,87 @@
1
+ # An OSC TCP server receives and sends on the same socket using the SLIP
2
+ # protocol.
3
+ #
4
+ # http://www.ietf.org/rfc/rfc1055.txt
5
+
6
+ module OSC
7
+ module TCP
8
+ class Server < OSC::Server
9
+ def initialize port
10
+ @server = TCPServer.new port
11
+ @matchers = []
12
+ @queue = Queue.new
13
+ end
14
+
15
+ # run and stop work the same way
16
+
17
+ private
18
+
19
+ def detector
20
+ @server.listen(5)
21
+
22
+ # outer loop manages connections
23
+ loop do
24
+ network = nil
25
+ buffer = []
26
+ skip_char = false
27
+
28
+ # block until a new connection is opened, then get socket and create a
29
+ # responder so we can .send OSC::Message objects in response
30
+ socket = @server.accept
31
+ responder = SendingSocket.new(socket)
32
+
33
+ # fam, port, *addr = socket.getpeername.unpack('nnC4')
34
+
35
+ loop do
36
+ c, _network = socket.recvfrom(1)
37
+ network ||= _network
38
+
39
+ begin
40
+ case c
41
+ when CHAR_END_ENC
42
+ if buffer.size > 0
43
+ osc_data = buffer.join
44
+
45
+ if network.nil?
46
+ # we don't know what port or address the connection is coming from :(
47
+ ip_info = [0, 'localhost']
48
+ else
49
+ ip_info = Array.new
50
+ ip_info << network[1]
51
+ ip_info.concat(network[2].split('.'))
52
+ end
53
+
54
+ # tell listeners that messages have arrived, attach responder
55
+ OSCPacket.messages_from_network(osc_data, ip_info).each do |message|
56
+ message.responder = responder
57
+ @queue.push(message)
58
+ end
59
+
60
+ # clear buffer and keep listening
61
+ buffer.clear
62
+ end
63
+ when CHAR_ESC_ENC
64
+ skip_char = true
65
+ when CHAR_ESC_END_ENC
66
+ if skip_char
67
+ buffer << CHAR_ESC_ENC
68
+ skip_char = false
69
+ end
70
+ when CHAR_ESC_ESC_ENC
71
+ if skip_char
72
+ buffer << CHAR_ESC_ENC
73
+ skip_char = false
74
+ end
75
+ else
76
+ buffer << c
77
+ end
78
+ rescue EOFError
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
86
+
87
+
data/lib/qcmd/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Qcmd
2
- VERSION = "0.1.16.pre"
2
+ VERSION = "0.1.16.pre2"
3
3
 
4
4
  class << self
5
5
  def installed_version
data/sample/dnssd.rb CHANGED
@@ -32,14 +32,14 @@ end
32
32
 
33
33
  browsers = []
34
34
 
35
- #browsers.push(DNSSD.browse('_qlab._udp.') do |b|
36
- # do_browse_on_service(b)
37
- #end)
38
-
39
- browsers.push(DNSSD.browse('_qlab._tcp.') do |b|
35
+ browsers.push(DNSSD.browse('_qlab._udp.') do |b|
40
36
  do_browse_on_service(b)
41
37
  end)
42
38
 
39
+ # browsers.push(DNSSD.browse('_qlab._tcp.') do |b|
40
+ # do_browse_on_service(b)
41
+ # end)
42
+
43
43
  trap 'INT' do
44
44
  browsers.map(&:stop);
45
45
  exit
@@ -5,7 +5,7 @@ require 'json'
5
5
 
6
6
  # try it out
7
7
 
8
- qlab = OSC::TCPClient.new 'localhost', 53000
8
+ qlab = OSC::TCP::Client.new 'localhost', 53000
9
9
 
10
10
  def receive(rcv)
11
11
  if rcv
@@ -0,0 +1,40 @@
1
+ require 'rubygems'
2
+ require 'qcmd'
3
+ require 'json'
4
+
5
+ puts "setting up server"
6
+
7
+ # server must come first
8
+ server = OSC::TCP::Server.new 52000
9
+ server.add_method(/.*/) do |message|
10
+ ip_address = message.ip_address.sub(/\.\.\./, '')
11
+ ts = Time.now.strftime('%Y-%m-%d %H:%M:%S')
12
+
13
+ types = message.to_a.map(&:class).map(&:to_s).join(', ')
14
+ args = message.to_a
15
+
16
+ puts "[#{ts}] #{message.ip_address}:#{message.ip_port} -- #{message.address} -- [#{ types }] -- #{ args.inspect }"
17
+
18
+ message.responder.send OSC::Message.new("/hello-to-you-too")
19
+ end
20
+
21
+ puts "starting server"
22
+ thread = Thread.new do
23
+ server.run
24
+ end
25
+
26
+ class MyClientHandler
27
+ def handle message
28
+ puts "[MyClientHandler] #{ message.address }"
29
+ end
30
+ end
31
+
32
+ puts "setting up client"
33
+ client = OSC::TCP::Client.new 'localhost', 52000, MyClientHandler.new
34
+
35
+ puts "sending spam"
36
+ client.send OSC::Message.new("/hello", "world")
37
+
38
+ sleep 1
39
+
40
+ # thread.join
metadata CHANGED
@@ -1,127 +1,136 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: qcmd
3
- version: !ruby/object:Gem::Version
4
- prerelease: true
5
- segments:
6
- - 0
7
- - 1
8
- - 16
9
- - pre
10
- version: 0.1.16.pre
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.16.pre2
5
+ prerelease: 7
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Adam Bachman
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2013-06-05 00:00:00 -04:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
12
+ date: 2013-06-20 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
22
15
  name: dnssd
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- requirements:
26
- - - "="
27
- - !ruby/object:Gem::Version
28
- segments:
29
- - 2
30
- - 0
31
- version: "2.0"
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - '='
20
+ - !ruby/object:Gem::Version
21
+ version: '2.0'
32
22
  type: :runtime
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: json
36
23
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
38
- requirements:
39
- - - "="
40
- - !ruby/object:Gem::Version
41
- segments:
42
- - 1
43
- - 7
44
- - 7
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - '='
28
+ - !ruby/object:Gem::Version
29
+ version: '2.0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: json
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - '='
36
+ - !ruby/object:Gem::Version
45
37
  version: 1.7.7
46
38
  type: :runtime
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
49
- name: osc-ruby
50
39
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
52
- requirements:
53
- - - "="
54
- - !ruby/object:Gem::Version
55
- segments:
56
- - 1
57
- - 0
58
- - 0
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - '='
44
+ - !ruby/object:Gem::Version
45
+ version: 1.7.7
46
+ - !ruby/object:Gem::Dependency
47
+ name: osc-ruby
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - '='
52
+ - !ruby/object:Gem::Version
59
53
  version: 1.0.0
60
54
  type: :runtime
61
- version_requirements: *id003
62
- - !ruby/object:Gem::Dependency
63
- name: trollop
64
55
  prerelease: false
65
- requirement: &id004 !ruby/object:Gem::Requirement
66
- requirements:
67
- - - "="
68
- - !ruby/object:Gem::Version
69
- segments:
70
- - 2
71
- - 0
72
- version: "2.0"
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 1.0.0
62
+ - !ruby/object:Gem::Dependency
63
+ name: trollop
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - '='
68
+ - !ruby/object:Gem::Version
69
+ version: '2.0'
73
70
  type: :runtime
74
- version_requirements: *id004
75
- - !ruby/object:Gem::Dependency
76
- name: rspec
77
71
  prerelease: false
78
- requirement: &id005 !ruby/object:Gem::Requirement
79
- requirements:
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - '='
76
+ - !ruby/object:Gem::Version
77
+ version: '2.0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: rspec
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
80
83
  - - ~>
81
- - !ruby/object:Gem::Version
82
- segments:
83
- - 2
84
- - 10
85
- - 0
84
+ - !ruby/object:Gem::Version
86
85
  version: 2.10.0
87
86
  type: :development
88
- version_requirements: *id005
89
- - !ruby/object:Gem::Dependency
90
- name: cucumber
91
87
  prerelease: false
92
- requirement: &id006 !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "="
95
- - !ruby/object:Gem::Version
96
- segments:
97
- - 1
98
- - 2
99
- - 1
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 2.10.0
94
+ - !ruby/object:Gem::Dependency
95
+ name: cucumber
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - '='
100
+ - !ruby/object:Gem::Version
100
101
  version: 1.2.1
101
102
  type: :development
102
- version_requirements: *id006
103
- - !ruby/object:Gem::Dependency
104
- name: aruba
105
103
  prerelease: false
106
- requirement: &id007 !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- segments:
111
- - 0
112
- version: "0"
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - '='
108
+ - !ruby/object:Gem::Version
109
+ version: 1.2.1
110
+ - !ruby/object:Gem::Dependency
111
+ name: aruba
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
113
118
  type: :development
114
- version_requirements: *id007
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
115
126
  description: A simple interactive QLab 3 command line controller
116
- email:
127
+ email:
117
128
  - adam.bachman@gmail.com
118
- executables:
129
+ executables:
119
130
  - qcmd
120
131
  extensions: []
121
-
122
132
  extra_rdoc_files: []
123
-
124
- files:
133
+ files:
125
134
  - .gitignore
126
135
  - CHANGELOG.md
127
136
  - Gemfile
@@ -142,8 +151,12 @@ files:
142
151
  - lib/qcmd/configuration.rb
143
152
  - lib/qcmd/context.rb
144
153
  - lib/qcmd/core_ext/array.rb
154
+ - lib/qcmd/core_ext/osc.rb
145
155
  - lib/qcmd/core_ext/osc/message.rb
156
+ - lib/qcmd/core_ext/osc/sending_socket.rb
157
+ - lib/qcmd/core_ext/osc/tcp.rb
146
158
  - lib/qcmd/core_ext/osc/tcp_client.rb
159
+ - lib/qcmd/core_ext/osc/tcp_server.rb
147
160
  - lib/qcmd/core_ext/string.rb
148
161
  - lib/qcmd/handler.rb
149
162
  - lib/qcmd/history.rb
@@ -168,6 +181,7 @@ files:
168
181
  - sample/fast-rate-change.rb
169
182
  - sample/simple_console.rb
170
183
  - sample/tcp_qlab_connection.rb
184
+ - sample/tcp_server_and_client.rb
171
185
  - spec/spec_helper.rb
172
186
  - spec/unit/action_spec.rb
173
187
  - spec/unit/cli_spec.rb
@@ -175,39 +189,31 @@ files:
175
189
  - spec/unit/parser_spec.rb
176
190
  - spec/unit/qcmd_spec.rb
177
191
  - spec/unit/qlab_spec.rb
178
- has_rdoc: true
179
192
  homepage: https://github.com/Figure53/qcmd
180
193
  licenses: []
181
-
182
194
  post_install_message:
183
195
  rdoc_options: []
184
-
185
- require_paths:
196
+ require_paths:
186
197
  - lib
187
- required_ruby_version: !ruby/object:Gem::Requirement
188
- requirements:
189
- - - ">="
190
- - !ruby/object:Gem::Version
191
- segments:
192
- - 0
193
- version: "0"
194
- required_rubygems_version: !ruby/object:Gem::Requirement
195
- requirements:
196
- - - ">"
197
- - !ruby/object:Gem::Version
198
- segments:
199
- - 1
200
- - 3
201
- - 1
198
+ required_ruby_version: !ruby/object:Gem::Requirement
199
+ none: false
200
+ requirements:
201
+ - - ! '>='
202
+ - !ruby/object:Gem::Version
203
+ version: '0'
204
+ required_rubygems_version: !ruby/object:Gem::Requirement
205
+ none: false
206
+ requirements:
207
+ - - ! '>'
208
+ - !ruby/object:Gem::Version
202
209
  version: 1.3.1
203
210
  requirements: []
204
-
205
211
  rubyforge_project:
206
- rubygems_version: 1.3.6
212
+ rubygems_version: 1.8.24
207
213
  signing_key:
208
214
  specification_version: 3
209
215
  summary: QLab 3 console
210
- test_files:
216
+ test_files:
211
217
  - features/support/setup.rb
212
218
  - spec/spec_helper.rb
213
219
  - spec/unit/action_spec.rb