sanford-protocol 0.5.6 → 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.
data/README.md CHANGED
@@ -4,7 +4,7 @@ Ruby implementation of Sanford TCP communication protocol.
4
4
 
5
5
  ## The Protocol
6
6
 
7
- **Version**: `1`
7
+ **Version**: `2`
8
8
 
9
9
  Sanford communicates using binary encoded messages. Sanford messages are two headers and a body:
10
10
 
@@ -29,25 +29,22 @@ The Body is the content of the message. It is a [BSON](http://bsonspec.org/) en
29
29
 
30
30
  ## Request
31
31
 
32
- A request is made up of 3 required parts: the version, the name, and the params.
32
+ A request is made up of 2 required parts: the name, and the params.
33
33
 
34
- * **version** - (string) version of the requested API.
35
- * **name** - (string) name of the requested API service.
36
- * **params** - (document) data for the service call - must be a BSON document (ruby Hash, python dict, Javascript Object).
34
+ * **name** - (string) name of the requested API service.
35
+ * **params** - (document) data for the service call - must be a BSON document (ruby Hash, python dict, Javascript Object).
37
36
 
38
37
  Requests are encoded as BSON hashes when transmitted in messages.
39
38
 
40
39
  ```ruby
41
- { 'version' => 'v1',
42
- 'name' => 'some_service',
43
- 'params' => { 'key' => 'value' }
40
+ { 'name' => 'some_service',
41
+ 'params' => { 'key' => 'value' }
44
42
  }
45
43
 
46
44
  request = Sanford::Protocol::Request.parse(a_bson_request_hash)
47
- request.version #=> "v1"
48
45
  request.name #=> "some_service"
49
46
  request.params #=> { 'key' => 'value' }
50
- request.to_s #=> "[v1] some_service"
47
+ request.to_s #=> "some_service"
51
48
  ```
52
49
 
53
50
  ## Response
@@ -138,7 +135,7 @@ server_connection.write(outgoing_response.to_hash)
138
135
 
139
136
  # For a client...
140
137
  # use Request#to_hash to send a request
141
- outgoing_request = Sanford::Protocol::Request.new(name, version, params)
138
+ outgoing_request = Sanford::Protocol::Request.new(name, params)
142
139
  client_connection.write(outgoing_request.to_hash)
143
140
  # use Response#parse to build an incoming response
144
141
  data_hash = client_connection.read
@@ -1,6 +1,6 @@
1
1
  # The Request class models a specific type of Sanford message body and provides
2
2
  # a defined structure for it. A request requires a message body to contain a
3
- # version, name and params.
3
+ # name and params.
4
4
 
5
5
  module Sanford; end
6
6
  module Sanford::Protocol
@@ -10,39 +10,35 @@ module Sanford::Protocol
10
10
  class Request
11
11
 
12
12
  def self.parse(body)
13
- self.new(body['version'], body['name'], body['params'])
13
+ self.new(body['name'], body['params'])
14
14
  end
15
15
 
16
- attr_reader :version, :name, :params
16
+ attr_reader :name, :params
17
17
 
18
- def initialize(version, name, params)
19
- self.validate!(version, name, params)
20
- @version, @name, @params = version, name, params
18
+ def initialize(name, params)
19
+ self.validate!(name, params)
20
+ @name, @params = name, params
21
21
  end
22
22
 
23
23
  def to_hash
24
- { 'version' => version,
25
- 'name' => name,
26
- 'params' => self.stringify(params)
24
+ { 'name' => name,
25
+ 'params' => self.stringify(params)
27
26
  }
28
27
  end
29
28
 
30
- def to_s; "[#{version}] #{name}"; end
29
+ def to_s; name; end
31
30
 
32
31
  def inspect
33
32
  reference = '0x0%x' % (self.object_id << 1)
34
33
  "#<#{self.class}:#{reference}"\
35
- " @version=#{version.inspect}"\
36
34
  " @name=#{name.inspect}"\
37
35
  " @params=#{params.inspect}>"
38
36
  end
39
37
 
40
38
  protected
41
39
 
42
- def validate!(version, name, params)
43
- problem = if !version
44
- "The request doesn't contain a version."
45
- elsif !name
40
+ def validate!(name, params)
41
+ problem = if !name
46
42
  "The request doesn't contain a name."
47
43
  elsif !params.kind_of?(Hash)
48
44
  "The request's params are not a valid BSON document."
@@ -1,5 +1,5 @@
1
1
  module Sanford
2
2
  module Protocol
3
- GEM_VERSION = "0.5.6"
3
+ GEM_VERSION = "0.6.0"
4
4
  end
5
5
  end
@@ -14,7 +14,7 @@ module Sanford
14
14
  # README needs to be updated to display the current version and needs to
15
15
  # describe everything in this file.
16
16
 
17
- VERSION = 1
17
+ VERSION = 2
18
18
 
19
19
  # The message version is the 1B encoding of the `VERSION` above. It is
20
20
  # encoded using Array#pack 'C' (8-bit unsigned integer). The max value it
@@ -19,6 +19,6 @@ Gem::Specification.new do |gem|
19
19
 
20
20
  gem.add_dependency("bson", ["~> 1.7"])
21
21
 
22
- gem.add_development_dependency("assert", ["~> 2.0"])
22
+ gem.add_development_dependency("assert", ["~> 2.3"])
23
23
  gem.add_development_dependency("assert-mocha", ["~> 1.0"])
24
24
  end
data/test/helper.rb CHANGED
@@ -25,7 +25,7 @@ class Assert::Context
25
25
  end
26
26
 
27
27
  def setup_some_request_data
28
- @request_params = ['1', 'a_service', {:some => 'data'}]
28
+ @request_params = ['a_service', {:some => 'data'}]
29
29
  @request = Sanford::Protocol::Request.new(*@request_params)
30
30
  setup_some_msg_data(@request.to_hash)
31
31
  end
@@ -13,7 +13,7 @@ module Sanford::Protocol
13
13
  should have_instance_methods :msg_version, :msg_size, :msg_body
14
14
 
15
15
  should "define the protocol version" do
16
- assert_equal 1, subject::VERSION
16
+ assert_equal 2, subject::VERSION
17
17
  end
18
18
 
19
19
  should "encode the protocol version to a 1B binary string" do
@@ -6,44 +6,40 @@ class Sanford::Protocol::Request
6
6
  class BaseTests < Assert::Context
7
7
  desc "Sanford::Protocol::Request"
8
8
  setup do
9
- @request = Sanford::Protocol::Request.new('v1', 'some_service', { 'key' => 'value' })
9
+ @request = Sanford::Protocol::Request.new('some_service', { 'key' => 'value' })
10
10
  end
11
11
  subject{ @request }
12
12
 
13
- should have_instance_methods :version, :name, :params, :to_hash
13
+ should have_instance_methods :name, :params, :to_hash
14
14
  should have_class_methods :parse
15
15
 
16
- should "return it's version and name with #to_s" do
17
- assert_equal "[#{subject.version}] #{subject.name}", subject.to_s
16
+ should "return it's name with #to_s" do
17
+ assert_equal subject.name, subject.to_s
18
18
  end
19
19
 
20
20
  should "return an instance of a Sanford::Protocol::Request given a hash using #parse" do
21
21
  # using BSON messages are hashes
22
22
  hash = {
23
- 'name' => 'service_name',
24
- 'version' => 'service_version',
25
- 'params' => { 'service_params' => 'yes' }
23
+ 'name' => 'service_name',
24
+ 'params' => { 'service_params' => 'yes' }
26
25
  }
27
26
  request = Sanford::Protocol::Request.parse(hash)
28
27
 
29
28
  assert_instance_of Sanford::Protocol::Request, request
30
- assert_equal hash['name'], request.name
31
- assert_equal hash['version'], request.version
32
- assert_equal hash['params'], request.params
29
+ assert_equal hash['name'], request.name
30
+ assert_equal hash['params'], request.params
33
31
  end
34
32
 
35
33
  should "return the request as a hash with stringified params with #to_hash" do
36
34
  # using BSON, messages are hashes
37
- request = Sanford::Protocol::Request.new('v1', 'service', {
35
+ request = Sanford::Protocol::Request.new('service', {
38
36
  1 => 1,
39
37
  :symbol => :symbol
40
38
  })
41
39
  expected = {
42
- 'version' => 'v1',
43
- 'name' => 'service',
44
- 'params' => { '1' => 1, 'symbol' => :symbol }
40
+ 'name' => 'service',
41
+ 'params' => { '1' => 1, 'symbol' => :symbol }
45
42
  }
46
-
47
43
  assert_equal expected, request.to_hash
48
44
  end
49
45
 
@@ -53,25 +49,19 @@ class Sanford::Protocol::Request
53
49
 
54
50
  should "not raise an exception with valid request args" do
55
51
  assert_nothing_raised do
56
- Sanford::Protocol::Request.new('v1', 'name', {})
52
+ Sanford::Protocol::Request.new('name', {})
57
53
  end
58
54
  end
59
55
 
60
56
  should "raise an exception when there isn't a name arg" do
61
57
  assert_raises(Sanford::Protocol::BadRequestError) do
62
- Sanford::Protocol::Request.new('v1', nil, {})
63
- end
64
- end
65
-
66
- should "return false and a message when there isn't a version" do
67
- assert_raises(Sanford::Protocol::BadRequestError) do
68
- Sanford::Protocol::Request.new(nil, 'name', {})
58
+ Sanford::Protocol::Request.new(nil, {})
69
59
  end
70
60
  end
71
61
 
72
62
  should "return false and a message when the params are not a Hash" do
73
63
  assert_raises(Sanford::Protocol::BadRequestError) do
74
- Sanford::Protocol::Request.new('v1', 'name', true)
64
+ Sanford::Protocol::Request.new('name', true)
75
65
  end
76
66
  end
77
67
  end
metadata CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 5
9
8
  - 6
10
- version: 0.5.6
9
+ - 0
10
+ version: 0.6.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Collin Redding
@@ -16,10 +16,9 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2013-03-25 00:00:00 Z
19
+ date: 2013-10-14 00:00:00 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- prerelease: false
23
22
  version_requirements: &id001 !ruby/object:Gem::Requirement
24
23
  none: false
25
24
  requirements:
@@ -30,26 +29,26 @@ dependencies:
30
29
  - 1
31
30
  - 7
32
31
  version: "1.7"
32
+ type: :runtime
33
33
  requirement: *id001
34
+ prerelease: false
34
35
  name: bson
35
- type: :runtime
36
36
  - !ruby/object:Gem::Dependency
37
- prerelease: false
38
37
  version_requirements: &id002 !ruby/object:Gem::Requirement
39
38
  none: false
40
39
  requirements:
41
40
  - - ~>
42
41
  - !ruby/object:Gem::Version
43
- hash: 3
42
+ hash: 5
44
43
  segments:
45
44
  - 2
46
- - 0
47
- version: "2.0"
45
+ - 3
46
+ version: "2.3"
47
+ type: :development
48
48
  requirement: *id002
49
+ prerelease: false
49
50
  name: assert
50
- type: :development
51
51
  - !ruby/object:Gem::Dependency
52
- prerelease: false
53
52
  version_requirements: &id003 !ruby/object:Gem::Requirement
54
53
  none: false
55
54
  requirements:
@@ -60,9 +59,10 @@ dependencies:
60
59
  - 1
61
60
  - 0
62
61
  version: "1.0"
62
+ type: :development
63
63
  requirement: *id003
64
+ prerelease: false
64
65
  name: assert-mocha
65
- type: :development
66
66
  description: Ruby implementation of the Sanford TCP communication protocol.
67
67
  email:
68
68
  - collin.redding@me.com