protobuf 2.0.0.rc4 → 2.0.0.rc5

Sign up to get free protection for your applications and to get access to all the features.
@@ -48,6 +48,22 @@ module Protobuf
48
48
  self.error = error_klass.new(message)
49
49
  end
50
50
 
51
+ # Prod the object to see if we can produce a proto object as a response
52
+ # candidate. Either way, return the candidate for validation.
53
+ def coerced_response
54
+ candidate = service.response
55
+
56
+ if candidate.is_a?(Hash)
57
+ candidate = definition.response_type.new(candidate)
58
+ elsif candidate.respond_to?(:to_hash)
59
+ candidate = definition.response_type.new(candidate.to_hash)
60
+ elsif candidate.respond_to?(:to_proto)
61
+ candidate = candidate.to_proto
62
+ end
63
+
64
+ candidate
65
+ end
66
+
51
67
  # Get the method for the current request.
52
68
  #
53
69
  def init_method
@@ -92,19 +108,14 @@ module Protobuf
92
108
  # we expect so that deserialization on the client side works.
93
109
  #
94
110
  def validate_response
111
+ candidate = coerced_response
95
112
  expected = definition.response_type
96
-
97
- candidate = service.response
98
- candidate = expected.new(candidate) if candidate.is_a?(Hash)
99
-
100
113
  actual = candidate.class
101
- log_debug { sign_message("response (should/actual): #{expected.name}/#{actual.name}") }
102
114
 
103
- # Determine if the service tried to change response types on us
104
- if expected != actual
105
- assign_error(BadResponseProto, "Response proto changed from #{expected.name} to #{actual.name}")
106
- else
115
+ if expected == actual
107
116
  self.response = candidate
117
+ else
118
+ assign_error(BadResponseProto, "Response proto changed from #{expected.name} to #{actual.name}")
108
119
  end
109
120
  end
110
121
 
@@ -1,4 +1,4 @@
1
1
  module Protobuf
2
- VERSION = '2.0.0.rc4'
2
+ VERSION = '2.0.0.rc5'
3
3
  PROTOC_VERSION = '2.4.1'
4
4
  end
@@ -65,6 +65,28 @@ describe Protobuf::Rpc::ServiceDispatcher do
65
65
  its(:response) { should eq Test::Resource.new(:name => 'returned') }
66
66
  end
67
67
 
68
+ context 'an object that responds to to_hash but is not a hash' do
69
+ let(:hashable) do
70
+ mock('hashable', :to_hash => { :name => 'hashable' })
71
+ end
72
+ before { subject.callable_method.should_receive(:call) }
73
+ before { subject.service.stub(:response).and_return(hashable) }
74
+ before { subject.invoke! }
75
+ its(:success?) { should be_true }
76
+ its(:response) { should eq Test::Resource.new(:name => 'hashable') }
77
+ end
78
+
79
+ context 'an object that responds to to_proto' do
80
+ let(:protoable) do
81
+ mock('protoable', :to_proto => Test::Resource.new(:name => 'protoable'))
82
+ end
83
+ before { subject.callable_method.should_receive(:call) }
84
+ before { subject.service.stub(:response).and_return(protoable) }
85
+ before { subject.invoke! }
86
+ its(:success?) { should be_true }
87
+ its(:response) { should eq Test::Resource.new(:name => 'protoable') }
88
+ end
89
+
68
90
  context 'a type not identified by the rpc definition' do
69
91
  before { subject.callable_method.should_receive(:call) }
70
92
  before { subject.service.stub(:response).and_return("I'm not a valid response") }
@@ -129,7 +129,6 @@ describe Protobuf::Rpc::Service do
129
129
  Test::Resource.new
130
130
  end
131
131
 
132
-
133
132
  context 'when calling the rpc method' do
134
133
  context 'when response is implied' do
135
134
  subject { NewTestService.new(:find_with_implied_response, request.serialize_to_string) }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: protobuf
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.rc4
4
+ version: 2.0.0.rc5
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -14,7 +14,7 @@ date: 2012-10-15 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
17
- requirement: &2152091060 !ruby/object:Gem::Requirement
17
+ requirement: &2156517120 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *2152091060
25
+ version_requirements: *2156517120
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: ffi
28
- requirement: &2152089400 !ruby/object:Gem::Requirement
28
+ requirement: &2156516700 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *2152089400
36
+ version_requirements: *2156516700
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: multi_json
39
- requirement: &2152088440 !ruby/object:Gem::Requirement
39
+ requirement: &2156516280 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: '0'
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *2152088440
47
+ version_requirements: *2156516280
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: thor
50
- requirement: &2152086720 !ruby/object:Gem::Requirement
50
+ requirement: &2156515860 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: '0'
56
56
  type: :runtime
57
57
  prerelease: false
58
- version_requirements: *2152086720
58
+ version_requirements: *2156515860
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: eventmachine
61
- requirement: &2152069860 !ruby/object:Gem::Requirement
61
+ requirement: &2156515440 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: '0'
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *2152069860
69
+ version_requirements: *2156515440
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: ffi-rzmq
72
- requirement: &2152061440 !ruby/object:Gem::Requirement
72
+ requirement: &2156515020 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ! '>='
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: '0'
78
78
  type: :development
79
79
  prerelease: false
80
- version_requirements: *2152061440
80
+ version_requirements: *2156515020
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: perftools.rb
83
- requirement: &2152060500 !ruby/object:Gem::Requirement
83
+ requirement: &2156514600 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ! '>='
@@ -88,10 +88,10 @@ dependencies:
88
88
  version: '0'
89
89
  type: :development
90
90
  prerelease: false
91
- version_requirements: *2152060500
91
+ version_requirements: *2156514600
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: pry
94
- requirement: &2152059780 !ruby/object:Gem::Requirement
94
+ requirement: &2156514180 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ! '>='
@@ -99,10 +99,10 @@ dependencies:
99
99
  version: '0'
100
100
  type: :development
101
101
  prerelease: false
102
- version_requirements: *2152059780
102
+ version_requirements: *2156514180
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: pry-nav
105
- requirement: &2152058860 !ruby/object:Gem::Requirement
105
+ requirement: &2156513760 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ! '>='
@@ -110,10 +110,10 @@ dependencies:
110
110
  version: '0'
111
111
  type: :development
112
112
  prerelease: false
113
- version_requirements: *2152058860
113
+ version_requirements: *2156513760
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: rake
116
- requirement: &2152058080 !ruby/object:Gem::Requirement
116
+ requirement: &2156513340 !ruby/object:Gem::Requirement
117
117
  none: false
118
118
  requirements:
119
119
  - - ! '>='
@@ -121,10 +121,10 @@ dependencies:
121
121
  version: '0'
122
122
  type: :development
123
123
  prerelease: false
124
- version_requirements: *2152058080
124
+ version_requirements: *2156513340
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: rake-compiler
127
- requirement: &2152057180 !ruby/object:Gem::Requirement
127
+ requirement: &2156512920 !ruby/object:Gem::Requirement
128
128
  none: false
129
129
  requirements:
130
130
  - - ! '>='
@@ -132,10 +132,10 @@ dependencies:
132
132
  version: '0'
133
133
  type: :development
134
134
  prerelease: false
135
- version_requirements: *2152057180
135
+ version_requirements: *2156512920
136
136
  - !ruby/object:Gem::Dependency
137
137
  name: rspec
138
- requirement: &2152056580 !ruby/object:Gem::Requirement
138
+ requirement: &2153328100 !ruby/object:Gem::Requirement
139
139
  none: false
140
140
  requirements:
141
141
  - - ! '>='
@@ -143,10 +143,10 @@ dependencies:
143
143
  version: '0'
144
144
  type: :development
145
145
  prerelease: false
146
- version_requirements: *2152056580
146
+ version_requirements: *2153328100
147
147
  - !ruby/object:Gem::Dependency
148
148
  name: simplecov
149
- requirement: &2152055760 !ruby/object:Gem::Requirement
149
+ requirement: &2153327680 !ruby/object:Gem::Requirement
150
150
  none: false
151
151
  requirements:
152
152
  - - ! '>='
@@ -154,10 +154,10 @@ dependencies:
154
154
  version: '0'
155
155
  type: :development
156
156
  prerelease: false
157
- version_requirements: *2152055760
157
+ version_requirements: *2153327680
158
158
  - !ruby/object:Gem::Dependency
159
159
  name: yard
160
- requirement: &2152054480 !ruby/object:Gem::Requirement
160
+ requirement: &2153327260 !ruby/object:Gem::Requirement
161
161
  none: false
162
162
  requirements:
163
163
  - - ! '>='
@@ -165,7 +165,7 @@ dependencies:
165
165
  version: '0'
166
166
  type: :development
167
167
  prerelease: false
168
- version_requirements: *2152054480
168
+ version_requirements: *2153327260
169
169
  description: ! 'Ruby implementation for Protocol Buffers. Works with other protobuf
170
170
  rpc implementations (e.g. Java, Python, C++).
171
171
 
@@ -450,9 +450,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
450
450
  - - ! '>='
451
451
  - !ruby/object:Gem::Version
452
452
  version: '0'
453
- segments:
454
- - 0
455
- hash: -1357637843910363817
456
453
  required_rubygems_version: !ruby/object:Gem::Requirement
457
454
  none: false
458
455
  requirements: