sanford-protocol 0.5.6 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
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