schemata-router 0.0.1.beta9 → 0.0.1.beta10

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,42 @@
1
+ require 'schemata/helpers/decamelize'
2
+
3
+ module Schemata
4
+ module ComponentBase
5
+
6
+ def message_types
7
+ self.constants.select { |x| x != :VERSION }
8
+ end
9
+
10
+ def component_name
11
+ self.name.split("::")[1]
12
+ end
13
+
14
+ def eigenclass
15
+ class << self; self; end
16
+ end
17
+
18
+ def register_mock_methods
19
+ message_types.each do |type|
20
+ message_type = self::const_get(type)
21
+ mock_method_name = "mock_#{Schemata::Helpers.decamelize(type.to_s)}"
22
+ eigenclass.send(:define_method, mock_method_name) do |*args|
23
+ version = args[0] || message_type.current_version
24
+ message_type::const_get("V#{version}").mock
25
+ end
26
+ end
27
+ end
28
+
29
+ def require_message_classes
30
+ path = "./lib/schemata/"
31
+ path << Schemata::Helpers.decamelize(component_name)
32
+ path << "/*.rb"
33
+ Dir.glob(path, &method(:require))
34
+ end
35
+
36
+ def self.extended(klass)
37
+ klass.require_message_classes
38
+ klass.register_mock_methods
39
+ end
40
+
41
+ end
42
+ end
@@ -14,7 +14,7 @@ module Schemata
14
14
  @contents = {}
15
15
 
16
16
  data.each do |key, field_value|
17
- key = Schemata::HashCopyHelpers.stringify(key)
17
+ key = Schemata::Helpers.stringify(key)
18
18
  field_schema = @schema.schemas[key]
19
19
  next unless field_schema
20
20
 
@@ -27,7 +27,7 @@ module Schemata
27
27
  # symbols, but on the decoding side, it should expect strings. To allow
28
28
  # for this in the schema definition, Schemata stringifies all symbols during
29
29
  # construction of Schemata objects.
30
- field_value = Schemata::HashCopyHelpers.stringify(field_value)
30
+ field_value = Schemata::Helpers.stringify(field_value)
31
31
 
32
32
  begin
33
33
  field_schema.validate(field_value)
@@ -35,7 +35,7 @@ module Schemata
35
35
  raise Schemata::UpdateAttributeError.new(key, e.message)
36
36
  end
37
37
 
38
- @contents[key] = Schemata::HashCopyHelpers.deep_copy(field_value)
38
+ @contents[key] = Schemata::Helpers.deep_copy(field_value)
39
39
  end
40
40
  end
41
41
 
@@ -45,7 +45,7 @@ module Schemata
45
45
  schema.schemas.each do |key, field_schema|
46
46
  vc_klass.send(:define_method, key) do
47
47
  unless @contents[key].nil?
48
- return Schemata::HashCopyHelpers.deep_copy(@contents[key])
48
+ return Schemata::Helpers.deep_copy(@contents[key])
49
49
  end
50
50
  nil
51
51
  end
@@ -53,13 +53,15 @@ module Schemata
53
53
  # TODO This call to stringify should be removed when cc/dea stops using
54
54
  # symbols. See comment above for a better description.
55
55
  vc_klass.send(:define_method, "#{key}=") do |field_value|
56
- field_value = Schemata::HashCopyHelpers.stringify(field_value)
57
- begin
58
- field_schema.validate(field_value)
59
- rescue Membrane::SchemaValidationError => e
60
- raise Schemata::UpdateAttributeError.new(key, e.message)
56
+ field_value = Schemata::Helpers.stringify(field_value)
57
+ unless schema.optional_keys.include?(key) && field_value == nil
58
+ begin
59
+ field_schema.validate(field_value)
60
+ rescue Membrane::SchemaValidationError => e
61
+ raise Schemata::UpdateAttributeError.new(key, e.message)
62
+ end
61
63
  end
62
- @contents[key] = Schemata::HashCopyHelpers.deep_copy(field_value)
64
+ @contents[key] = Schemata::Helpers.deep_copy(field_value)
63
65
  field_value
64
66
  end
65
67
  end
@@ -67,7 +69,7 @@ module Schemata
67
69
  end
68
70
 
69
71
  def contents
70
- Schemata::HashCopyHelpers.deep_copy(@contents)
72
+ Schemata::Helpers.deep_copy(@contents)
71
73
  end
72
74
 
73
75
  def empty?
@@ -1,5 +1,6 @@
1
1
  require 'schemata/common/msgbase'
2
2
  require 'schemata/common/parsed_msg'
3
+ require 'schemata/helpers/decamelize'
3
4
 
4
5
  module Schemata
5
6
  module MessageTypeBase
@@ -70,8 +71,27 @@ module Schemata
70
71
  Schemata::const_get(component)
71
72
  end
72
73
 
74
+ def component_name
75
+ self.name.split("::")[1]
76
+ end
77
+
78
+ def message_type_name
79
+ self.name.split("::")[2]
80
+ end
81
+
82
+ def require_message_versions
83
+ path = "./lib/schemata/"
84
+ path << Schemata::Helpers.decamelize(component_name)
85
+ path << "/"
86
+ path << Schemata::Helpers.decamelize(message_type_name)
87
+ path << "/*.rb"
88
+
89
+ Dir.glob(path, &method(:require))
90
+ end
91
+
73
92
  def self.extended(o)
74
93
  o.extend Dsl
94
+ o.require_message_versions
75
95
  end
76
96
 
77
97
  module Dsl
@@ -37,7 +37,7 @@ module Schemata
37
37
  end
38
38
 
39
39
  def contents
40
- Schemata::HashCopyHelpers.deep_copy(@contents)
40
+ Schemata::Helpers.deep_copy(@contents)
41
41
  end
42
42
  end
43
43
  end
@@ -0,0 +1,23 @@
1
+ module Schemata
2
+ module Helpers
3
+ def self.decamelize(str)
4
+ words = []
5
+ curr_word = ""
6
+ 0.upto(str.length - 1) do |i|
7
+ ch = str[i]
8
+ if ch =~ /[A-Z]/
9
+ words.push(curr_word)
10
+ curr_word = ""
11
+ end
12
+ curr_word += ch
13
+ end
14
+ words.push(curr_word)
15
+ words.map! { |x| x.downcase }
16
+
17
+ # If the first letter is capitalized, then the first word here is empty
18
+ words.shift if words[0] == ""
19
+
20
+ words.join('_')
21
+ end
22
+ end
23
+ end
@@ -1,5 +1,5 @@
1
1
  module Schemata
2
- module HashCopyHelpers
2
+ module Helpers
3
3
  class CopyError < StandardError; end
4
4
 
5
5
  def self.deep_copy(node)
@@ -1,5 +1,5 @@
1
1
  module Schemata
2
- module HashCopyHelpers
2
+ module Helpers
3
3
 
4
4
  def self.stringify(node)
5
5
  case node
@@ -1,14 +1,7 @@
1
- require 'schemata/router/register_request'
2
- require 'schemata/router/start_message'
1
+ require 'schemata/common/componentbase'
3
2
 
4
3
  module Schemata
5
4
  module Router
6
- def self.mock_register_request(version=RegisterRequest.current_version)
7
- RegisterRequest::const_get("V#{version}").mock
8
- end
9
-
10
- def self.mock_start_message(version=StartMessage.current_version)
11
- StartMessage::const_get("V#{version}").mock
12
- end
5
+ extend Schemata::ComponentBase
13
6
  end
14
7
  end
@@ -7,7 +7,3 @@ module Schemata
7
7
  end
8
8
  end
9
9
  end
10
-
11
- Dir[File.dirname(__FILE__) + '/register_request/*.rb'].each do |file|
12
- require file
13
- end
@@ -7,7 +7,3 @@ module Schemata
7
7
  end
8
8
  end
9
9
  end
10
-
11
- Dir[File.dirname(__FILE__) + '/start_message/*.rb'].each do |file|
12
- require file
13
- end
@@ -1,5 +1,5 @@
1
1
  module Schemata
2
2
  module Router
3
- VERSION = "0.0.1.beta9"
3
+ VERSION = "0.0.1.beta10"
4
4
  end
5
5
  end
@@ -1,49 +1,49 @@
1
1
  require 'schemata/helpers/hash_copy'
2
2
  require 'schemata/helpers/stringify'
3
3
 
4
- describe Schemata::HashCopyHelpers do
4
+ describe Schemata::Helpers do
5
5
  describe "#deep_copy" do
6
6
  it "should deep copy nil" do
7
- copy = Schemata::HashCopyHelpers.deep_copy(nil)
7
+ copy = Schemata::Helpers.deep_copy(nil)
8
8
  copy.should == nil
9
9
  end
10
10
 
11
11
  it "should deep copy a given string" do
12
12
  original = "foo"
13
- copy = Schemata::HashCopyHelpers.deep_copy(original)
13
+ copy = Schemata::Helpers.deep_copy(original)
14
14
  copy.should be_instance_of String
15
15
  copy.should == original
16
16
  copy.object_id.should_not == original.object_id
17
17
  end
18
18
 
19
19
  it "should deep copy a given boolean" do
20
- Schemata::HashCopyHelpers.deep_copy(true).
20
+ Schemata::Helpers.deep_copy(true).
21
21
  should be_an_instance_of TrueClass
22
- Schemata::HashCopyHelpers.deep_copy(false).
22
+ Schemata::Helpers.deep_copy(false).
23
23
  should be_an_instance_of FalseClass
24
24
  end
25
25
 
26
26
  it "should deep copy a given numeric type" do
27
27
  original = 0
28
- copy = Schemata::HashCopyHelpers.deep_copy(original)
28
+ copy = Schemata::Helpers.deep_copy(original)
29
29
  copy.should == original
30
30
  copy.should be_an_instance_of Fixnum
31
31
 
32
32
  # set original to be max fixnum + 1
33
33
  original = 2**(0.size * 8 - 2)
34
- copy = Schemata::HashCopyHelpers.deep_copy(original)
34
+ copy = Schemata::Helpers.deep_copy(original)
35
35
  copy.should == original
36
36
  copy.should be_an_instance_of Bignum
37
37
 
38
38
  original = 0.0
39
- copy = Schemata::HashCopyHelpers.deep_copy(original)
39
+ copy = Schemata::Helpers.deep_copy(original)
40
40
  copy.should == original
41
41
  copy.should be_an_instance_of Float
42
42
  end
43
43
 
44
44
  it "should deep copy a given hash" do
45
45
  original = {"foo" => "bar"}
46
- copy = Schemata::HashCopyHelpers.deep_copy(original)
46
+ copy = Schemata::Helpers.deep_copy(original)
47
47
  copy.should be_instance_of Hash
48
48
  copy.should == original
49
49
 
@@ -53,7 +53,7 @@ describe Schemata::HashCopyHelpers do
53
53
 
54
54
  it "should deep copy a given array" do
55
55
  original = [1, 2, "hello"]
56
- copy = Schemata::HashCopyHelpers.deep_copy(original)
56
+ copy = Schemata::Helpers.deep_copy(original)
57
57
  copy.should be_instance_of Array
58
58
  copy.should == original
59
59
 
@@ -69,7 +69,7 @@ describe Schemata::HashCopyHelpers do
69
69
  "hello" => "goodbye",
70
70
  },
71
71
  }
72
- copy = Schemata::HashCopyHelpers.deep_copy(original)
72
+ copy = Schemata::Helpers.deep_copy(original)
73
73
  copy.should be_instance_of Hash
74
74
  copy.should == original
75
75
 
@@ -83,32 +83,32 @@ describe Schemata::HashCopyHelpers do
83
83
  it "should raise error for unknown type" do
84
84
  klass = Class.new
85
85
  expect do
86
- Schemata::HashCopyHelpers.deep_copy(klass.new)
86
+ Schemata::Helpers.deep_copy(klass.new)
87
87
  end.to raise_error(described_class::CopyError, /Unexpected class: /)
88
88
  end
89
89
  end
90
90
 
91
91
  describe "#stringify" do
92
92
  it "should stringify nil" do
93
- str = Schemata::HashCopyHelpers.stringify(nil)
93
+ str = Schemata::Helpers.stringify(nil)
94
94
  str.should == nil
95
95
  end
96
96
 
97
97
  it "should stringify a string" do
98
98
  original = "foo"
99
- str = Schemata::HashCopyHelpers.stringify(original)
99
+ str = Schemata::Helpers.stringify(original)
100
100
  str.should == "foo"
101
101
  end
102
102
 
103
103
  it "should stringify a symbol" do
104
104
  original = :foo
105
- str = Schemata::HashCopyHelpers.stringify(original)
105
+ str = Schemata::Helpers.stringify(original)
106
106
  str.should == "foo"
107
107
  end
108
108
 
109
109
  it "should stringify a hash" do
110
110
  original = { "foo" => :foo }
111
- str = Schemata::HashCopyHelpers.stringify(original)
111
+ str = Schemata::Helpers.stringify(original)
112
112
  str.should == { "foo" => "foo" }
113
113
  end
114
114
  end
@@ -1,9 +1,10 @@
1
1
  require 'support/helpers'
2
+ require 'schemata/helpers/decamelize'
2
3
 
3
4
  shared_examples "a schemata component" do
4
5
 
5
6
  described_class.constants.select { |x| x != :VERSION }.each do |msg_type|
6
- describe ".mock_#{decamelize(msg_type.to_s)}" do
7
+ describe ".mock_#{Schemata::Helpers.decamelize(msg_type.to_s)}" do
7
8
  versions = described_class::const_get(msg_type).constants.select { |x| x =~ /V[0-9]+/ }
8
9
  versions.map { |x| x = x.to_s[1..-1].to_i }.each do |version|
9
10
  it_behaves_like "a mocking method", version do
@@ -12,11 +13,24 @@ shared_examples "a schemata component" do
12
13
  let(:component) { described_class }
13
14
  let(:component_name) { component.name.split("::")[1] }
14
15
 
15
- let(:mock_method) { "mock_#{decamelize(msg_type)}"}
16
+ let(:mock_method) { "mock_#{Schemata::Helpers.decamelize(msg_type)}"}
16
17
  end
17
18
  end
18
19
  end
20
+
21
+ describe msg_type do
22
+ message_type = described_class::const_get(msg_type)
23
+ it_behaves_like "a message type", message_type do
24
+ let (:message_type) { described_class::const_get(msg_type) }
25
+ let (:message_type_name) { msg_type.to_s }
26
+ let (:component) { described_class }
27
+ let (:component_name) { component.name.split("::")[1] }
28
+
29
+ let (:mock_method) { "mock_#{Schemata::Helpers.decamelize(msg_type)}" }
30
+ end
31
+ end
19
32
  end
33
+
20
34
  end
21
35
 
22
36
  shared_examples "a mocking method" do |version|
@@ -26,26 +26,6 @@ def greater_version?(version, benchmark)
26
26
  version > benchmark
27
27
  end
28
28
 
29
- def decamelize(str)
30
- words = []
31
- curr_word = ""
32
- 0.upto(str.length - 1) do |i|
33
- ch = str[i]
34
- if ch =~ /[A-Z]/
35
- words.push(curr_word)
36
- curr_word = ""
37
- end
38
- curr_word += ch
39
- end
40
- words.push(curr_word)
41
- words.map! { |x| x.downcase }
42
-
43
- # If the first letter is capitalized, then the first word here is empty
44
- words.shift if words[0] == ""
45
-
46
- words.join('_')
47
- end
48
-
49
29
  def num_mandatory_fields(msg_obj)
50
30
  optional = msg_obj.class.schema.optional_keys
51
31
  mandatory = Set.new(msg_obj.class.schema.schemas.keys)
@@ -1,16 +1,5 @@
1
- shared_examples "a message" do
2
-
3
- version = described_class.version
4
-
5
- let(:component_name) { described_class.name.split("::")[1] }
6
- let(:message_type_name) { described_class.name.split("::")[2] }
7
- let(:message_name) { described_class.name.split("::")[3] }
8
-
9
- let(:component) { Schemata::const_get(component_name) }
10
- let(:message_type) { component::const_get(message_type_name) }
11
- let(:message) { described_class }
12
-
13
- let(:mock_method) { "mock_#{decamelize(message_type_name)}" }
1
+ shared_examples "a message" do |msg|
2
+ version = msg.version
14
3
 
15
4
  before :each do
16
5
  set_current_version(message_type, version)
@@ -21,7 +10,7 @@ shared_examples "a message" do
21
10
  end
22
11
 
23
12
  describe "#new" do
24
- it "should create a #{described_class} object with an incomplete hash" do
13
+ it "should create a #{msg} object with an incomplete hash" do
25
14
  mock_hash = component.send(mock_method, 1).contents
26
15
  first_key = mock_hash.keys[0]
27
16
  first_value = mock_hash[first_key]
@@ -68,7 +57,7 @@ shared_examples "a message" do
68
57
  json_hash.should have_key "V1"
69
58
  json_hash.should have_key "min_version"
70
59
 
71
- data = Schemata::HashCopyHelpers.deep_copy(json_hash["V1"])
60
+ data = Schemata::Helpers.deep_copy(json_hash["V1"])
72
61
 
73
62
  json_hash.delete("V1")
74
63
  json_hash.delete("min_version")
@@ -86,7 +75,7 @@ shared_examples "a message" do
86
75
  end
87
76
  json_hash.should have_key "min_version"
88
77
 
89
- data = Schemata::HashCopyHelpers.deep_copy(json_hash["V#{version}"])
78
+ data = Schemata::Helpers.deep_copy(json_hash["V#{version}"])
90
79
  1.upto(version) do |i|
91
80
  json_hash.delete("V#{i}")
92
81
  end
@@ -97,9 +86,9 @@ shared_examples "a message" do
97
86
  end
98
87
  end
99
88
 
100
- described_class.schema.schemas.keys.each do |attr|
89
+ msg.schema.schemas.keys.each do |attr|
101
90
  describe "##{attr}" do
102
- it "should the attribute if it was specified at instantiation" do
91
+ it "should return the attribute if it was specified at instantiation" do
103
92
  mock_value = component.send(mock_method, version).contents[attr]
104
93
  msg_obj = message.new({ attr => mock_value })
105
94
  msg_obj.send(attr).should == mock_value
@@ -116,6 +105,21 @@ shared_examples "a message" do
116
105
  msg_obj = message.new
117
106
  msg_obj.send(attr).should be_nil
118
107
  end
108
+
109
+ if msg.schema.optional_keys.include? attr
110
+ context "the attribute is optional" do
111
+ it "should allow nil values during instantiation" do
112
+ mock_value = component.send(mock_method, version).contents[attr]
113
+ hash = { attr => mock_value }
114
+ msg_obj = message.new(hash)
115
+ end
116
+
117
+ it "should be able to set the attribute to nil" do
118
+ msg_obj = message.new
119
+ msg_obj.send("#{attr}=", nil)
120
+ end
121
+ end
122
+ end
119
123
  end
120
124
 
121
125
  describe "##{attr}=" do
@@ -127,7 +131,7 @@ shared_examples "a message" do
127
131
  ret.should == mock_value
128
132
  end
129
133
 
130
- unless described_class.schema.schemas[attr].kind_of? Membrane::Schema::Any
134
+ unless msg.schema.schemas[attr].kind_of? Membrane::Schema::Any
131
135
  it "should raise an error if the wrong type is written" do
132
136
  mock_value = component.send(mock_method, version).contents[attr]
133
137
 
@@ -1,15 +1,8 @@
1
- shared_examples "a message type" do
1
+ shared_examples "a message type" do |msg_type|
2
2
 
3
- versions = described_class.constants.select {|x| x =~ /V[0-9]+/ }
3
+ versions = msg_type.constants.select {|x| x =~ /V[0-9]+/ }
4
4
  .map {|x| x.to_s[1..-1].to_i}
5
5
 
6
- let(:message_type_name) { described_class.name.split("::")[2] }
7
- let(:message_type) { described_class }
8
- let(:component_name) { described_class.name.split("::")[1] }
9
- let(:component) { Schemata::const_get(component_name) }
10
-
11
- let(:mock_method) { "mock_#{decamelize(message_type_name)}" }
12
-
13
6
  describe ".decode" do
14
7
  context "when the current version is 1" do
15
8
  before :each do
@@ -50,7 +43,7 @@ shared_examples "a message type" do
50
43
  msg_hash = {
51
44
  "V1" => data,
52
45
  "min_version" => 1
53
- }.merge(Schemata::HashCopyHelpers.deep_copy(data))
46
+ }.merge(Schemata::Helpers.deep_copy(data))
54
47
  json = Yajl::Encoder.encode(msg_hash)
55
48
 
56
49
  msg_obj = message_type.decode(json)
@@ -96,68 +89,68 @@ structure or a complete flash hash" do
96
89
  }.to raise_error(Schemata::DecodeError)
97
90
  end
98
91
  end
99
- end
100
92
 
101
- if versions.include?(2)
102
- context "when current version is 2" do
103
- before :each do
104
- set_current_version(message_type, 2)
105
- end
93
+ if versions.include?(2)
94
+ context "when the current version is 2" do
95
+ before :each do
96
+ set_current_version(message_type, 2)
97
+ end
106
98
 
107
- after :each do
108
- reset_version(message_type)
109
- end
99
+ after :each do
100
+ reset_version(message_type)
101
+ end
110
102
 
111
- it "should raise an error given a flat hash" do
112
- data = component.send(mock_method, 2).contents
113
- json = Yajl::Encoder.encode(data)
114
- expect {
115
- msg_obj = message_type.decode(json)
116
- }.to raise_error(Schemata::DecodeError)
117
- end
103
+ it "should raise an error given a flat hash" do
104
+ data = component.send(mock_method, 2).contents
105
+ json = Yajl::Encoder.encode(data)
106
+ expect {
107
+ msg_obj = message_type.decode(json)
108
+ }.to raise_error(Schemata::DecodeError)
109
+ end
118
110
 
119
- it "should return a V2 object a given a mixed (flat hash + V1-encoded) json" do
120
- msg_hash = component.send(mock_method, 2).contents
121
- v1_hash = Schemata::HashCopyHelpers.deep_copy(msg_hash)
122
- msg_hash["V1"] = v1_hash
123
- msg_hash["min_version"] = 1
111
+ it "should return a V2 object a given a mixed (flat hash + V1-encoded) json" do
112
+ msg_hash = component.send(mock_method, 2).contents
113
+ v1_hash = Schemata::Helpers.deep_copy(msg_hash)
114
+ msg_hash["V1"] = v1_hash
115
+ msg_hash["min_version"] = 1
124
116
 
125
- json = Yajl::Encoder.encode(msg_hash)
117
+ json = Yajl::Encoder.encode(msg_hash)
126
118
 
127
- msg_obj = message_type.decode(json)
128
- msg_obj.class.should == message_type::V2
119
+ msg_obj = message_type.decode(json)
120
+ msg_obj.class.should == message_type::V2
129
121
 
130
- message_type::V2.schema.schemas.keys.each do |key|
131
- msg_obj.send(key).should == v1_hash[key]
122
+ message_type::V2.schema.schemas.keys.each do |key|
123
+ msg_obj.send(key).should == v1_hash[key]
124
+ end
132
125
  end
133
- end
134
126
 
135
- it "should return a V2 object given a V1-encoded json" do
136
- v1_hash = component.send(mock_method, 1).contents
137
- msg_hash = {"V1" => v1_hash, 'min_version' => 1}
127
+ it "should return a V2 object given a V1-encoded json" do
128
+ v1_hash = component.send(mock_method, 1).contents
129
+ msg_hash = {"V1" => v1_hash, 'min_version' => 1}
138
130
 
139
- json = Yajl::Encoder.encode(msg_hash)
131
+ json = Yajl::Encoder.encode(msg_hash)
140
132
 
141
- msg_obj = message_type.decode(json)
142
- msg_obj.class.should == message_type::V2
133
+ msg_obj = message_type.decode(json)
134
+ msg_obj.class.should == message_type::V2
143
135
 
144
- message_type::V2.schema.schemas.keys.each do |key|
145
- msg_obj.send(key).should == v1_hash[key]
136
+ message_type::V2.schema.schemas.keys.each do |key|
137
+ msg_obj.send(key).should == v1_hash[key]
138
+ end
146
139
  end
147
- end
148
140
 
149
- it "should return a V2 object given a V2-encoded object" do
150
- data = component.send(mock_method, 2).contents
151
- v2_hash = Schemata::HashCopyHelpers.deep_copy(data)
152
- msg_hash = {"V2" => v2_hash, "V1" => {}, "min_version" => 1}
141
+ it "should return a V2 object given a V2-encoded object" do
142
+ data = component.send(mock_method, 2).contents
143
+ v2_hash = Schemata::Helpers.deep_copy(data)
144
+ msg_hash = {"V2" => v2_hash, "V1" => {}, "min_version" => 1}
153
145
 
154
- json = Yajl::Encoder.encode(msg_hash)
146
+ json = Yajl::Encoder.encode(msg_hash)
155
147
 
156
- msg_obj = message_type.decode(json)
157
- msg_obj.class.should == message_type::V2
148
+ msg_obj = message_type.decode(json)
149
+ msg_obj.class.should == message_type::V2
158
150
 
159
- message_type::V2.schema.schemas.keys.each do |key|
160
- msg_obj.send(key).should == data[key]
151
+ message_type::V2.schema.schemas.keys.each do |key|
152
+ msg_obj.send(key).should == data[key]
153
+ end
161
154
  end
162
155
  end
163
156
  end
@@ -168,4 +161,15 @@ structure or a complete flash hash" do
168
161
  versions.select { |x| x > 2 }.each do |version|
169
162
 
170
163
  end
164
+
165
+ # Test message version types
166
+ versions.each do |version|
167
+ msg = msg_type::const_get("V#{version}")
168
+ describe "V#{version}" do
169
+ it_behaves_like "a message", msg do
170
+ let (:message) { message_type::const_get("V#{version}") }
171
+ let (:message_name) { message.to_s }
172
+ end
173
+ end
174
+ end
171
175
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schemata-router
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.beta9
4
+ version: 0.0.1.beta10
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -115,24 +115,23 @@ executables: []
115
115
  extensions: []
116
116
  extra_rdoc_files: []
117
117
  files:
118
+ - lib/schemata/common/componentbase.rb
119
+ - lib/schemata/common/error.rb
120
+ - lib/schemata/common/msgbase.rb
121
+ - lib/schemata/common/msgtypebase.rb
122
+ - lib/schemata/common/parsed_msg.rb
123
+ - lib/schemata/helpers/decamelize.rb
124
+ - lib/schemata/helpers/hash_copy.rb
125
+ - lib/schemata/helpers/stringify.rb
118
126
  - lib/schemata/router/register_directory_server_request/register_directory_server_request_v1.rb
119
- - lib/schemata/router/register_request.rb
120
127
  - lib/schemata/router/register_request/register_request_v1.rb
128
+ - lib/schemata/router/register_request.rb
129
+ - lib/schemata/router/start_message/start_message_v1.rb
121
130
  - lib/schemata/router/start_message.rb
122
131
  - lib/schemata/router/version.rb
123
- - lib/schemata/router/start_message/start_message_v1.rb
124
132
  - lib/schemata/router.rb
125
- - lib/schemata/common/msgtypebase.rb
126
- - lib/schemata/common/parsed_msg.rb
127
- - lib/schemata/common/msgbase.rb
128
- - lib/schemata/common/error.rb
129
- - lib/schemata/helpers/stringify.rb
130
- - lib/schemata/helpers/hash_copy.rb
131
133
  - spec/common/helpers_spec.rb
132
134
  - spec/common/parsed_msg_spec.rb
133
- - spec/router/register_request_spec.rb
134
- - spec/router/router_spec.rb
135
- - spec/router/start_message_spec.rb
136
135
  - spec/spec_helper.rb
137
136
  - spec/support/component_helpers.rb
138
137
  - spec/support/helpers.rb
@@ -165,9 +164,6 @@ summary: validation for cloundfoundry Router messages
165
164
  test_files:
166
165
  - spec/common/helpers_spec.rb
167
166
  - spec/common/parsed_msg_spec.rb
168
- - spec/router/register_request_spec.rb
169
- - spec/router/router_spec.rb
170
- - spec/router/start_message_spec.rb
171
167
  - spec/spec_helper.rb
172
168
  - spec/support/component_helpers.rb
173
169
  - spec/support/helpers.rb
@@ -1,10 +0,0 @@
1
- require 'schemata/router'
2
- require 'spec_helper'
3
-
4
- describe Schemata::Router::RegisterRequest do
5
- it_behaves_like "a message type"
6
- end
7
-
8
- describe Schemata::Router::RegisterRequest::V1 do
9
- it_behaves_like "a message"
10
- end
@@ -1,6 +0,0 @@
1
- require 'schemata/router'
2
- require 'spec_helper'
3
-
4
- describe Schemata::Router do
5
- it_behaves_like "a schemata component"
6
- end
@@ -1,10 +0,0 @@
1
- require 'schemata/router'
2
- require 'spec_helper'
3
-
4
- describe Schemata::Router::StartMessage do
5
- it_behaves_like "a message type"
6
- end
7
-
8
- describe Schemata::Router::StartMessage::V1 do
9
- it_behaves_like "a message"
10
- end