sanford-protocol 0.11.0 → 0.12.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 +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"
|