sanford-protocol 0.11.0 → 0.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +0 -2
- data/{LICENSE.txt → LICENSE} +0 -0
- data/README.md +6 -5
- data/lib/sanford-protocol/connection.rb +2 -2
- data/lib/sanford-protocol/fake_socket.rb +3 -3
- data/lib/sanford-protocol/msg_data.rb +2 -2
- data/lib/sanford-protocol/response.rb +7 -7
- data/lib/sanford-protocol/response_status.rb +10 -14
- data/lib/sanford-protocol/version.rb +1 -1
- data/sanford-protocol.gemspec +3 -2
- data/test/helper.rb +9 -0
- data/test/unit/connection_tests.rb +1 -1
- data/test/unit/response_status_tests.rb +31 -22
- data/test/unit/response_tests.rb +54 -52
- metadata +21 -50
- data/Rakefile +0 -1
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
data.tar.gz: afef8536266febd04c1c5bc749538e769482724f
|
4
|
+
metadata.gz: d29e43e064234aaae4527b789973a954214b87c5
|
5
|
+
SHA512:
|
6
|
+
data.tar.gz: 1e27916f51b006431fae39664ce62e40fccf99ca320573b365d78b717b943370be5b326ba947f74bc6044092284ef6b63171f1371805f4a6dcad691091b33551
|
7
|
+
metadata.gz: dbc5915a634bd1313d5ed58334fce8ce38f1c409dc46e5ce043ed3f091a90fc415ca7cd3f32cf6e073b2ec9f2db548c4f8bd4195bec8b207eb51ed86e3174c27
|
data/Gemfile
CHANGED
data/{LICENSE.txt → LICENSE}
RENAMED
File without changes
|
data/README.md
CHANGED
@@ -76,11 +76,12 @@ response.data #=> true
|
|
76
76
|
|
77
77
|
This is the list of defined status codes.
|
78
78
|
|
79
|
-
* `200` - `
|
80
|
-
* `400` - `
|
81
|
-
* `404` - `
|
82
|
-
* `408` - `
|
83
|
-
* `
|
79
|
+
* `200` - `OK`- The request was successful.
|
80
|
+
* `400` - `BAD REQUEST` - The request couldn't be read. This is usually because it was not formed correctly.
|
81
|
+
* `404` - `NOT FOUND` - The server couldn't find something requested.
|
82
|
+
* `408` - `TIMEOUT` - A client connected but didn't write a request before the server timeod out waiting for one.
|
83
|
+
* `422` - `INVALID` - The request was sent with invalid params.
|
84
|
+
* `500` - `ERROR` - The server errored responding to the request.
|
84
85
|
|
85
86
|
In addition to these, a service can return custom status codes, but they should use a number greater than or equal to `600` to avoid collisions with Sanford's defined status codes.
|
86
87
|
|
@@ -21,7 +21,7 @@ module Sanford::Protocol
|
|
21
21
|
# | msg version | msg body size | msg body |
|
22
22
|
# |-----------------|-----------------|----------------------|
|
23
23
|
|
24
|
-
def read(timeout=nil)
|
24
|
+
def read(timeout = nil)
|
25
25
|
wait_for_data(timeout) if timeout
|
26
26
|
MsgVersion.new{ @socket.read msg_version.bytesize }.validate!
|
27
27
|
size = MsgSize.new{ @socket.decode msg_size, msg_size.bytes }.validate!.value
|
@@ -35,7 +35,7 @@ module Sanford::Protocol
|
|
35
35
|
@socket.write(msg_version, size, body)
|
36
36
|
end
|
37
37
|
|
38
|
-
def peek(timeout=nil)
|
38
|
+
def peek(timeout = nil)
|
39
39
|
wait_for_data(timeout) if timeout
|
40
40
|
@socket.peek
|
41
41
|
end
|
@@ -15,13 +15,13 @@ module Sanford::Protocol
|
|
15
15
|
self.with_msg_body(request.to_hash)
|
16
16
|
end
|
17
17
|
|
18
|
-
def self.with_msg_body(body, size=nil, encoded_version=nil)
|
18
|
+
def self.with_msg_body(body, size = nil, encoded_version = nil)
|
19
19
|
encoded_body = Sanford::Protocol.msg_body.encode(body)
|
20
20
|
self.with_encoded_msg_body(encoded_body, size, encoded_version)
|
21
21
|
end
|
22
22
|
|
23
|
-
def self.with_encoded_msg_body(encoded_body, size=nil, encoded_version=nil)
|
24
|
-
encoded_size
|
23
|
+
def self.with_encoded_msg_body(encoded_body, size = nil, encoded_version = nil)
|
24
|
+
encoded_size = Sanford::Protocol.msg_size.encode(size || encoded_body.bytesize)
|
25
25
|
encoded_version ||= Sanford::Protocol.msg_version
|
26
26
|
self.new(encoded_version, encoded_size, encoded_body)
|
27
27
|
end
|
@@ -2,7 +2,7 @@ module Sanford; end
|
|
2
2
|
module Sanford::Protocol
|
3
3
|
|
4
4
|
class BadMessageError < RuntimeError
|
5
|
-
def initialize(message, bt=nil)
|
5
|
+
def initialize(message, bt = nil)
|
6
6
|
super(message)
|
7
7
|
set_backtrace(bt || caller)
|
8
8
|
end
|
@@ -11,7 +11,7 @@ module Sanford::Protocol
|
|
11
11
|
class MsgData
|
12
12
|
attr_reader :value
|
13
13
|
|
14
|
-
def initialize(called_from=nil, &get_value)
|
14
|
+
def initialize(called_from = nil, &get_value)
|
15
15
|
|
16
16
|
# By default, any exceptions from getting the value are "hidden" behind a
|
17
17
|
# more general `BadMessageError`. In non-debug scenarios this is ideal and
|
@@ -13,18 +13,18 @@ module Sanford::Protocol
|
|
13
13
|
self.new(hash['status'], hash['data'])
|
14
14
|
end
|
15
15
|
|
16
|
-
def initialize(status, data=nil)
|
16
|
+
def initialize(status, data = nil)
|
17
17
|
super(build_status(status), data)
|
18
18
|
end
|
19
19
|
|
20
|
-
def code;
|
21
|
-
def code=(
|
22
|
-
def message;
|
23
|
-
def message=(
|
24
|
-
def to_s;
|
20
|
+
def code; status.code; end
|
21
|
+
def code=(value); status.code = value; end
|
22
|
+
def message; status.message; end
|
23
|
+
def message=(value); status.message = value; end
|
24
|
+
def to_s; status.to_s; end
|
25
25
|
|
26
26
|
def to_hash
|
27
|
-
{ 'status' => [
|
27
|
+
{ 'status' => [status.code, status.message],
|
28
28
|
'data' => data
|
29
29
|
}
|
30
30
|
end
|
@@ -26,25 +26,21 @@ module Sanford::Protocol
|
|
26
26
|
end
|
27
27
|
|
28
28
|
class Code < Struct.new(:number, :name)
|
29
|
-
|
30
|
-
'
|
31
|
-
|
32
|
-
'
|
33
|
-
'
|
34
|
-
'
|
29
|
+
NAMES = {
|
30
|
+
200 => 'OK',
|
31
|
+
400 => 'BAD REQUEST',
|
32
|
+
404 => 'NOT FOUND',
|
33
|
+
408 => 'TIMEOUT',
|
34
|
+
422 => 'INVALID',
|
35
|
+
500 => 'ERROR'
|
35
36
|
}.freeze
|
36
37
|
|
37
|
-
def initialize(
|
38
|
-
|
39
|
-
|
40
|
-
super(num, name.upcase)
|
38
|
+
def initialize(number)
|
39
|
+
n = number.to_i
|
40
|
+
super(n, NAMES[n])
|
41
41
|
end
|
42
42
|
|
43
43
|
def to_s; "[#{[number, name].compact.join(', ')}]"; end
|
44
|
-
|
45
|
-
class NoName
|
46
|
-
def self.upcase; nil; end
|
47
|
-
end
|
48
44
|
end
|
49
45
|
|
50
46
|
end
|
data/sanford-protocol.gemspec
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |gem|
|
|
8
8
|
gem.version = Sanford::Protocol::GEM_VERSION
|
9
9
|
gem.authors = ["Collin Redding", "Kelly Redding"]
|
10
10
|
gem.email = ["collin.redding@me.com", "kelly@kellyredding.com"]
|
11
|
-
gem.description = "Ruby implementation of the Sanford TCP communication protocol."
|
12
11
|
gem.summary = "Ruby implementation of the Sanford TCP communication protocol."
|
12
|
+
gem.description = "Ruby implementation of the Sanford TCP communication protocol."
|
13
13
|
gem.homepage = "https://github.com/redding/sanford-protocol"
|
14
14
|
|
15
15
|
gem.files = `git ls-files`.split($/)
|
@@ -17,7 +17,8 @@ Gem::Specification.new do |gem|
|
|
17
17
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
18
|
gem.require_paths = ["lib"]
|
19
19
|
|
20
|
+
gem.add_development_dependency("assert", ["~> 2.16.1"])
|
21
|
+
|
20
22
|
gem.add_dependency("bson", ["~> 1.7", "< 1.10.0"])
|
21
23
|
|
22
|
-
gem.add_development_dependency("assert", ["~> 2.11"])
|
23
24
|
end
|
data/test/helper.rb
CHANGED
@@ -14,6 +14,15 @@ FakeSocket = Sanford::Protocol::FakeSocket
|
|
14
14
|
|
15
15
|
require 'test/support/factory'
|
16
16
|
|
17
|
+
# 1.8.7 backfills
|
18
|
+
|
19
|
+
# Array#sample
|
20
|
+
if !(a = Array.new).respond_to?(:sample) && a.respond_to?(:choice)
|
21
|
+
class Array
|
22
|
+
alias_method :sample, :choice
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
17
26
|
class Assert::Context
|
18
27
|
|
19
28
|
def setup_some_msg_data(data = nil)
|
@@ -44,7 +44,7 @@ class Sanford::Protocol::Connection
|
|
44
44
|
def start_server(options, &block)
|
45
45
|
begin
|
46
46
|
# this `fork` is a separate process, so it runs parallel to the code
|
47
|
-
# after
|
47
|
+
# after its block
|
48
48
|
pid = fork do
|
49
49
|
tcp_server = TCPServer.open 'localhost', 12000
|
50
50
|
trap("TERM"){ tcp_server.close }
|
@@ -6,46 +6,55 @@ class Sanford::Protocol::ResponseStatus
|
|
6
6
|
class UnitTests < Assert::Context
|
7
7
|
desc "Sanford::Protocol::ResponseStatus"
|
8
8
|
setup do
|
9
|
-
@
|
9
|
+
@status_class = Sanford::Protocol::ResponseStatus
|
10
|
+
@code = Factory.integer
|
11
|
+
@msg = Factory.string
|
12
|
+
@status = @status_class.new(@code, @msg)
|
10
13
|
end
|
11
14
|
subject{ @status }
|
12
15
|
|
13
16
|
should have_readers :code_obj, :message
|
14
17
|
should have_imeths :code, :code=, :name, :to_i
|
15
18
|
|
16
|
-
should "know
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
assert_equal "OK", named.name
|
21
|
-
assert_equal nil, unamed.name
|
19
|
+
should "know its code obj and message" do
|
20
|
+
assert_kind_of Code, subject.code_obj
|
21
|
+
assert_equal @code, subject.code_obj.number
|
22
|
+
assert_equal @msg, subject.message
|
22
23
|
end
|
23
24
|
|
24
|
-
should "know
|
25
|
-
|
26
|
-
|
27
|
-
assert_equal value, status.code
|
28
|
-
end
|
25
|
+
should "know its code numbers" do
|
26
|
+
assert_equal subject.code_obj.number, subject.code
|
27
|
+
assert_equal subject.code, subject.to_i
|
29
28
|
|
30
|
-
|
31
|
-
assert_equal 0, unamed.code
|
29
|
+
assert_equal 0, @status_class.new(Factory.string).code
|
32
30
|
end
|
33
31
|
|
34
|
-
should "
|
35
|
-
assert_equal subject.
|
32
|
+
should "know its code names" do
|
33
|
+
assert_equal subject.code_obj.name, subject.name
|
34
|
+
|
35
|
+
assert_equal 'OK', @status_class.new(200).name
|
36
|
+
assert_equal 'BAD REQUEST', @status_class.new(400).name
|
37
|
+
assert_equal 'NOT FOUND', @status_class.new(404).name
|
38
|
+
assert_equal 'TIMEOUT', @status_class.new(408).name
|
39
|
+
assert_equal 'INVALID', @status_class.new(422).name
|
40
|
+
assert_equal 'ERROR', @status_class.new(500).name
|
41
|
+
assert_equal nil, @status_class.new(Factory.integer+500).name
|
36
42
|
end
|
37
43
|
|
38
44
|
should "allow setting its code" do
|
39
|
-
number =
|
45
|
+
number = [200, 400, 404, 408, 422, 500].sample
|
40
46
|
subject.code = number
|
41
|
-
assert_equal number, subject.code
|
42
|
-
end
|
43
47
|
|
44
|
-
|
45
|
-
|
46
|
-
|
48
|
+
exp_status = @status_class.new(number)
|
49
|
+
assert_equal exp_status.code, subject.code
|
50
|
+
assert_equal exp_status.name, subject.name
|
51
|
+
end
|
47
52
|
|
53
|
+
should "return its code number and code name with #to_s" do
|
54
|
+
named = @status_class.new([200, 400, 404, 408, 422, 500].sample)
|
48
55
|
assert_equal "[#{named.code}, #{named.name}]", named.to_s
|
56
|
+
|
57
|
+
unamed = @status_class.new(Factory.integer+500)
|
49
58
|
assert_equal "[#{unamed.code}]", unamed.to_s
|
50
59
|
end
|
51
60
|
|
data/test/unit/response_tests.rb
CHANGED
@@ -6,95 +6,97 @@ class Sanford::Protocol::Response
|
|
6
6
|
class UnitTests < Assert::Context
|
7
7
|
desc "Sanford::Protocol::Response"
|
8
8
|
setup do
|
9
|
-
@
|
9
|
+
@num = Factory.integer+500
|
10
|
+
@msg = Factory.string
|
11
|
+
@data = { Factory.string => Factory.string }
|
12
|
+
|
13
|
+
@response_class = Sanford::Protocol::Response
|
14
|
+
@response = @response_class.new([@num, @msg], @data)
|
10
15
|
end
|
11
16
|
subject{ @response }
|
12
17
|
|
13
|
-
should have_imeths :status, :data, :to_hash
|
14
|
-
should have_imeths :code, :code=, :message, :message=, :to_s
|
15
18
|
should have_cmeths :parse
|
19
|
+
should have_imeths :status, :data
|
20
|
+
should have_imeths :code, :code=, :message, :message=
|
21
|
+
should have_imeths :to_s, :to_hash
|
22
|
+
|
23
|
+
should "know its status and data" do
|
24
|
+
assert_equal @num, subject.status.code
|
25
|
+
assert_equal @msg, subject.status.message
|
26
|
+
assert_equal @data, subject.data
|
27
|
+
end
|
16
28
|
|
17
29
|
should "demeter its status" do
|
18
|
-
assert_equal subject.status.code,
|
30
|
+
assert_equal subject.status.code, subject.code
|
19
31
|
assert_equal subject.status.message, subject.message
|
20
|
-
assert_equal subject.status.to_s,
|
32
|
+
assert_equal subject.status.to_s, subject.to_s
|
21
33
|
|
22
|
-
new_code = Factory.integer
|
23
|
-
|
24
|
-
subject.code = new_code
|
25
|
-
subject.message = new_message
|
34
|
+
subject.code = new_code = Factory.integer
|
35
|
+
subject.message = new_msg = Factory.string
|
26
36
|
assert_equal new_code, subject.code
|
27
|
-
assert_equal
|
37
|
+
assert_equal new_msg, subject.message
|
28
38
|
end
|
29
39
|
|
30
|
-
should "
|
31
|
-
#
|
32
|
-
|
33
|
-
'status' => [
|
34
|
-
'data' =>
|
40
|
+
should "know its hash representation" do
|
41
|
+
# BSON messages are hashes
|
42
|
+
exp = {
|
43
|
+
'status' => [@num, @msg],
|
44
|
+
'data' => @data
|
35
45
|
}
|
36
|
-
|
37
|
-
|
38
|
-
assert_instance_of Sanford::Protocol::Response, request
|
39
|
-
assert_equal hash['status'].first, request.status.code
|
40
|
-
assert_equal hash['status'].last, request.status.message
|
41
|
-
assert_equal hash['data'], request.data
|
46
|
+
assert_equal exp, subject.to_hash
|
42
47
|
end
|
43
48
|
|
44
|
-
should "
|
45
|
-
#
|
46
|
-
|
47
|
-
'status' => [
|
48
|
-
'data' =>
|
49
|
+
should "should parse hash representations into objects" do
|
50
|
+
# BSON messages are hashes
|
51
|
+
hash = {
|
52
|
+
'status' => [Factory.integer, Factory.string],
|
53
|
+
'data' => Factory.string
|
49
54
|
}
|
55
|
+
response = @response_class.parse(hash)
|
50
56
|
|
51
|
-
|
57
|
+
assert_instance_of @response_class, response
|
58
|
+
assert_equal hash['status'].first, response.status.code
|
59
|
+
assert_equal hash['status'].last, response.status.message
|
60
|
+
assert_equal hash['data'], response.data
|
52
61
|
end
|
53
62
|
|
54
|
-
should "
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
)
|
59
|
-
|
63
|
+
should "know if it is equal to another response" do
|
64
|
+
equal = @response_class.new(subject.status.dup, subject.data.dup)
|
65
|
+
assert_equal equal, subject
|
66
|
+
|
67
|
+
not_equal = @response_class.new(Factory.integer, subject.data.dup)
|
68
|
+
assert_not_equal not_equal, subject
|
60
69
|
|
61
|
-
|
62
|
-
assert_not_equal
|
70
|
+
not_equal = @response_class.new(subject.status.dup, {})
|
71
|
+
assert_not_equal not_equal, subject
|
63
72
|
end
|
64
73
|
|
65
74
|
end
|
66
75
|
|
67
76
|
# Somewhat of a system test, want to make sure if Response is passed some
|
68
|
-
# "fuzzy" args that it will build
|
77
|
+
# "fuzzy" args that it will build its status object as expected
|
69
78
|
class StatusBuildingTests < UnitTests
|
70
79
|
|
71
|
-
should "build a status with
|
72
|
-
response = Sanford::Protocol::Response.new(
|
80
|
+
should "build a status with its code set if given an integer" do
|
81
|
+
response = Sanford::Protocol::Response.new(@num)
|
73
82
|
|
74
|
-
assert_equal
|
75
|
-
assert_equal nil,
|
76
|
-
end
|
77
|
-
|
78
|
-
should "build a status with it's code set, given a name" do
|
79
|
-
response = Sanford::Protocol::Response.new('ok')
|
80
|
-
|
81
|
-
assert_equal 200, response.status.code
|
82
|
-
assert_equal nil, response.status.message
|
83
|
+
assert_equal @num, response.status.code
|
84
|
+
assert_equal nil, response.status.message
|
83
85
|
end
|
84
86
|
|
85
87
|
should "use a status object, if given one" do
|
86
|
-
status
|
88
|
+
status = Sanford::Protocol::ResponseStatus.new(@num, @msg)
|
87
89
|
response = Sanford::Protocol::Response.new(status)
|
88
|
-
|
89
90
|
assert_same status, response.status
|
90
91
|
end
|
91
92
|
|
92
93
|
should "build a status with a code and message set, when given both" do
|
93
|
-
response = Sanford::Protocol::Response.new([
|
94
|
+
response = Sanford::Protocol::Response.new([@num, @msg])
|
94
95
|
|
95
|
-
assert_equal
|
96
|
-
assert_equal
|
96
|
+
assert_equal @num, response.status.code
|
97
|
+
assert_equal @msg, response.status.message
|
97
98
|
end
|
99
|
+
|
98
100
|
end
|
99
101
|
|
100
102
|
end
|
metadata
CHANGED
@@ -1,13 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sanford-protocol
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 11
|
9
|
-
- 0
|
10
|
-
version: 0.11.0
|
4
|
+
version: 0.12.0
|
11
5
|
platform: ruby
|
12
6
|
authors:
|
13
7
|
- Collin Redding
|
@@ -16,46 +10,31 @@ autorequire:
|
|
16
10
|
bindir: bin
|
17
11
|
cert_chain: []
|
18
12
|
|
19
|
-
date:
|
13
|
+
date: 2016-06-09 00:00:00 Z
|
20
14
|
dependencies:
|
21
15
|
- !ruby/object:Gem::Dependency
|
16
|
+
name: assert
|
17
|
+
prerelease: false
|
22
18
|
requirement: &id001 !ruby/object:Gem::Requirement
|
23
|
-
none: false
|
24
19
|
requirements:
|
25
20
|
- - ~>
|
26
21
|
- !ruby/object:Gem::Version
|
27
|
-
|
28
|
-
|
29
|
-
- 1
|
30
|
-
- 7
|
31
|
-
version: "1.7"
|
32
|
-
- - <
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
hash: 63
|
35
|
-
segments:
|
36
|
-
- 1
|
37
|
-
- 10
|
38
|
-
- 0
|
39
|
-
version: 1.10.0
|
40
|
-
type: :runtime
|
41
|
-
name: bson
|
22
|
+
version: 2.16.1
|
23
|
+
type: :development
|
42
24
|
version_requirements: *id001
|
43
|
-
prerelease: false
|
44
25
|
- !ruby/object:Gem::Dependency
|
26
|
+
name: bson
|
27
|
+
prerelease: false
|
45
28
|
requirement: &id002 !ruby/object:Gem::Requirement
|
46
|
-
none: false
|
47
29
|
requirements:
|
48
30
|
- - ~>
|
49
31
|
- !ruby/object:Gem::Version
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
type: :development
|
56
|
-
name: assert
|
32
|
+
version: "1.7"
|
33
|
+
- - <
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: 1.10.0
|
36
|
+
type: :runtime
|
57
37
|
version_requirements: *id002
|
58
|
-
prerelease: false
|
59
38
|
description: Ruby implementation of the Sanford TCP communication protocol.
|
60
39
|
email:
|
61
40
|
- collin.redding@me.com
|
@@ -69,9 +48,8 @@ extra_rdoc_files: []
|
|
69
48
|
files:
|
70
49
|
- .gitignore
|
71
50
|
- Gemfile
|
72
|
-
- LICENSE
|
51
|
+
- LICENSE
|
73
52
|
- README.md
|
74
|
-
- Rakefile
|
75
53
|
- lib/sanford-protocol.rb
|
76
54
|
- lib/sanford-protocol/connection.rb
|
77
55
|
- lib/sanford-protocol/fake_connection.rb
|
@@ -97,35 +75,28 @@ files:
|
|
97
75
|
homepage: https://github.com/redding/sanford-protocol
|
98
76
|
licenses: []
|
99
77
|
|
78
|
+
metadata: {}
|
79
|
+
|
100
80
|
post_install_message:
|
101
81
|
rdoc_options: []
|
102
82
|
|
103
83
|
require_paths:
|
104
84
|
- lib
|
105
85
|
required_ruby_version: !ruby/object:Gem::Requirement
|
106
|
-
none: false
|
107
86
|
requirements:
|
108
|
-
-
|
87
|
+
- &id003
|
88
|
+
- ">="
|
109
89
|
- !ruby/object:Gem::Version
|
110
|
-
hash: 3
|
111
|
-
segments:
|
112
|
-
- 0
|
113
90
|
version: "0"
|
114
91
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
115
|
-
none: false
|
116
92
|
requirements:
|
117
|
-
-
|
118
|
-
- !ruby/object:Gem::Version
|
119
|
-
hash: 3
|
120
|
-
segments:
|
121
|
-
- 0
|
122
|
-
version: "0"
|
93
|
+
- *id003
|
123
94
|
requirements: []
|
124
95
|
|
125
96
|
rubyforge_project:
|
126
|
-
rubygems_version:
|
97
|
+
rubygems_version: 2.6.4
|
127
98
|
signing_key:
|
128
|
-
specification_version:
|
99
|
+
specification_version: 4
|
129
100
|
summary: Ruby implementation of the Sanford TCP communication protocol.
|
130
101
|
test_files:
|
131
102
|
- test/helper.rb
|
data/Rakefile
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require "bundler/gem_tasks"
|