ruby-protocol-buffers 1.2.2 → 1.2.3.beta1
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/VERSION +1 -1
- data/lib/protocol_buffers/compiler/file_descriptor_to_ruby.rb +0 -3
- data/lib/protocol_buffers/runtime/field.rb +44 -8
- data/lib/protocol_buffers/runtime/message.rb +24 -27
- data/spec/fields_spec.rb +4 -0
- data/spec/runtime_spec.rb +57 -7
- metadata +63 -95
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.2.
|
1
|
+
1.2.3.beta1
|
@@ -120,22 +120,40 @@ module ProtocolBuffers
|
|
120
120
|
@opts = opts.dup
|
121
121
|
end
|
122
122
|
|
123
|
-
def
|
124
|
-
|
125
|
-
|
126
|
-
|
123
|
+
def add_reader_to(klass)
|
124
|
+
if repeated?
|
125
|
+
klass.class_eval <<-EOF, __FILE__, __LINE__+1
|
126
|
+
def #{name}
|
127
|
+
unless @#{name}
|
128
|
+
@#{name} = RepeatedField.new(fields[#{tag}])
|
129
|
+
end
|
130
|
+
@#{name}
|
131
|
+
end
|
132
|
+
EOF
|
133
|
+
else
|
134
|
+
klass.class_eval <<-EOF, __FILE__, __LINE__+1
|
135
|
+
def #{name}
|
136
|
+
if @set_fields[#{tag}] == nil
|
137
|
+
# first access of this field, generate it
|
138
|
+
initialize_field(#{tag})
|
139
|
+
end
|
140
|
+
@#{name}
|
141
|
+
end
|
142
|
+
EOF
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
def add_writer_to(klass)
|
127
147
|
if repeated?
|
128
148
|
klass.class_eval <<-EOF, __FILE__, __LINE__+1
|
129
149
|
def #{name}=(value)
|
130
150
|
if value.nil?
|
131
|
-
|
151
|
+
#{name}.clear
|
132
152
|
else
|
133
|
-
|
153
|
+
#{name}.clear
|
134
154
|
value.each { |i| @#{name}.push i }
|
135
155
|
end
|
136
156
|
end
|
137
|
-
|
138
|
-
def has_#{name}?; true; end
|
139
157
|
EOF
|
140
158
|
else
|
141
159
|
klass.class_eval <<-EOF, __FILE__, __LINE__+1
|
@@ -154,7 +172,23 @@ module ProtocolBuffers
|
|
154
172
|
end
|
155
173
|
end
|
156
174
|
end
|
175
|
+
EOF
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
def add_methods_to(klass)
|
180
|
+
add_reader_to(klass)
|
181
|
+
add_writer_to(klass)
|
157
182
|
|
183
|
+
if repeated?
|
184
|
+
# repeated fields are always "set"
|
185
|
+
klass.initial_set_fields[tag] = true
|
186
|
+
|
187
|
+
klass.class_eval <<-EOF, __FILE__, __LINE__+1
|
188
|
+
def has_#{name}?; true; end
|
189
|
+
EOF
|
190
|
+
else
|
191
|
+
klass.class_eval <<-EOF, __FILE__, __LINE__+1
|
158
192
|
def has_#{name}?
|
159
193
|
value_for_tag?(#{tag})
|
160
194
|
end
|
@@ -533,6 +567,8 @@ module ProtocolBuffers
|
|
533
567
|
|
534
568
|
class MessageField < Field
|
535
569
|
include WireFormats::LENGTH_DELIMITED
|
570
|
+
|
571
|
+
attr_reader :proxy_class
|
536
572
|
|
537
573
|
def initialize(proxy_class, otype, name, tag, opts = {})
|
538
574
|
super(otype, name, tag, opts)
|
@@ -232,22 +232,7 @@ module ProtocolBuffers
|
|
232
232
|
# message = MyMessageClass.new
|
233
233
|
# message.attributes = attributes
|
234
234
|
def initialize(attributes = {})
|
235
|
-
@set_fields =
|
236
|
-
|
237
|
-
fields.each do |tag, field|
|
238
|
-
if field.repeated?
|
239
|
-
self.instance_variable_set("@#{field.name}", RepeatedField.new(field))
|
240
|
-
@set_fields[tag] = true # repeated fields are always "set"
|
241
|
-
else
|
242
|
-
value = field.default_value
|
243
|
-
self.__send__("#{field.name}=", value)
|
244
|
-
@set_fields[tag] = false
|
245
|
-
if field.class == Field::MessageField
|
246
|
-
value.notify_on_change(self, tag)
|
247
|
-
end
|
248
|
-
end
|
249
|
-
end
|
250
|
-
|
235
|
+
@set_fields = self.class.initial_set_fields.dup
|
251
236
|
self.attributes = attributes
|
252
237
|
end
|
253
238
|
|
@@ -354,6 +339,10 @@ module ProtocolBuffers
|
|
354
339
|
@fields || @fields = {}
|
355
340
|
end
|
356
341
|
|
342
|
+
def self.initial_set_fields
|
343
|
+
@set_fields ||= []
|
344
|
+
end
|
345
|
+
|
357
346
|
# Returns a hash of { tag => ProtocolBuffers::Field }
|
358
347
|
def fields
|
359
348
|
self.class.fields
|
@@ -418,7 +407,6 @@ module ProtocolBuffers
|
|
418
407
|
end
|
419
408
|
|
420
409
|
def self.define_field(otype, type, name, tag, opts = {}) # :NODOC:
|
421
|
-
raise("gen_methods! already called, cannot add more fields") if @methods_generated
|
422
410
|
type = type.is_a?(Module) ? type : type.to_sym
|
423
411
|
name = name.to_sym
|
424
412
|
tag = tag.to_i
|
@@ -462,11 +450,13 @@ module ProtocolBuffers
|
|
462
450
|
return true unless @has_required_field
|
463
451
|
|
464
452
|
fields.each do |tag, field|
|
465
|
-
if field.otype
|
466
|
-
|
467
|
-
|
468
|
-
|
453
|
+
next if field.otype != :required
|
454
|
+
next if message.value_for_tag?(tag) && (field.class != Field::MessageField || message.value_for_tag(tag).valid?)
|
455
|
+
return false unless raise_exception
|
456
|
+
raise(ProtocolBuffers::EncodeError.new(field), "Required field '#{field.name}' is invalid")
|
469
457
|
end
|
458
|
+
|
459
|
+
true
|
470
460
|
end
|
471
461
|
|
472
462
|
def validate!
|
@@ -492,14 +482,21 @@ module ProtocolBuffers
|
|
492
482
|
(@unknown_fields || []).size
|
493
483
|
end
|
494
484
|
|
495
|
-
#
|
496
|
-
# called by the generated .pb.rb code, it's not necessary to call this
|
497
|
-
# method directly.
|
485
|
+
# left in for compatibility with previously created .pb.rb files -- no longer used
|
498
486
|
def self.gen_methods! # :NODOC:
|
499
487
|
@methods_generated = true
|
500
|
-
|
501
|
-
|
502
|
-
|
488
|
+
end
|
489
|
+
|
490
|
+
protected
|
491
|
+
|
492
|
+
def initialize_field(tag)
|
493
|
+
field = fields[tag]
|
494
|
+
new_value = field.default_value
|
495
|
+
self.instance_variable_set("@#{field.name}", new_value)
|
496
|
+
if field.class == Field::MessageField
|
497
|
+
new_value.notify_on_change(self, tag)
|
498
|
+
end
|
499
|
+
@set_fields[tag] = false
|
503
500
|
end
|
504
501
|
|
505
502
|
end
|
data/spec/fields_spec.rb
CHANGED
@@ -46,4 +46,8 @@ describe ProtocolBuffers, "fields" do
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
+
it "provides a reader for proxy_class on message fields" do
|
50
|
+
ProtocolBuffers::Field::MessageField.new(nil, :optional, :fake_name, 1).should respond_to(:proxy_class)
|
51
|
+
ProtocolBuffers::Field::MessageField.new(Class, :optional, :fake_name, 1).proxy_class.should == Class
|
52
|
+
end
|
49
53
|
end
|
data/spec/runtime_spec.rb
CHANGED
@@ -81,6 +81,45 @@ describe ProtocolBuffers, "runtime" do
|
|
81
81
|
a1.sub2.has_subsub1?.should == true
|
82
82
|
end
|
83
83
|
|
84
|
+
it "allows directly recursive sub-messages" do
|
85
|
+
ProtocolBuffers::Compiler.compile_and_load_string <<-EOS
|
86
|
+
package foo;
|
87
|
+
message Foo {
|
88
|
+
optional int32 payload = 1;
|
89
|
+
optional Foo foo = 2;
|
90
|
+
}
|
91
|
+
EOS
|
92
|
+
|
93
|
+
foo = Foo::Foo.new
|
94
|
+
foo.has_foo?.should == false
|
95
|
+
foo.foo.payload = 17
|
96
|
+
foo.has_foo?.should == true
|
97
|
+
foo.foo.has_foo?.should == false
|
98
|
+
end
|
99
|
+
|
100
|
+
it "allows indirectly recursive sub-messages" do
|
101
|
+
ProtocolBuffers::Compiler.compile_and_load_string <<-EOS
|
102
|
+
package foo;
|
103
|
+
message Foo {
|
104
|
+
optional int32 payload = 1;
|
105
|
+
optional Bar bar = 2;
|
106
|
+
}
|
107
|
+
|
108
|
+
message Bar {
|
109
|
+
optional Foo foo = 1;
|
110
|
+
optional int32 payload = 2;
|
111
|
+
}
|
112
|
+
EOS
|
113
|
+
|
114
|
+
foo = Foo::Foo.new
|
115
|
+
foo.has_bar?.should == false
|
116
|
+
foo.bar.payload = 17
|
117
|
+
foo.has_bar?.should == true
|
118
|
+
foo.bar.has_foo?.should == false
|
119
|
+
foo.bar.foo.payload = 23
|
120
|
+
foo.bar.has_foo?.should == true
|
121
|
+
end
|
122
|
+
|
84
123
|
it "pretends that repeated fields are arrays" do
|
85
124
|
# make sure our RepeatedField class acts like a normal Array
|
86
125
|
ProtocolBuffers::Compiler.compile_and_load_string <<-EOS
|
@@ -239,10 +278,8 @@ describe ProtocolBuffers, "runtime" do
|
|
239
278
|
sub.payload.should == ""
|
240
279
|
end
|
241
280
|
|
242
|
-
it "
|
243
|
-
|
244
|
-
A.define_field(:optional, :string, "newfield", 15)
|
245
|
-
end.should raise_error()
|
281
|
+
it "responds to gen_methods! for backwards compat" do
|
282
|
+
A.gen_methods!
|
246
283
|
end
|
247
284
|
|
248
285
|
def filled_in_bit
|
@@ -496,16 +533,29 @@ describe ProtocolBuffers, "runtime" do
|
|
496
533
|
res3 = TehUnknown3::MyResult.parse(serialized2)
|
497
534
|
res3.field_1.should == 2
|
498
535
|
end
|
499
|
-
|
536
|
+
|
500
537
|
it "can compile and instantiate a message in a package with under_scores" do
|
501
538
|
Object.send(:remove_const, :UnderScore) if defined?(UnderScore)
|
502
|
-
|
539
|
+
|
503
540
|
ProtocolBuffers::Compiler.compile_and_load(
|
504
541
|
File.join(File.dirname(__FILE__), "proto_files", "under_score_package.proto"))
|
505
|
-
|
542
|
+
|
506
543
|
proc do
|
507
544
|
under_test = UnderScore::UnderTest.new
|
508
545
|
end.should_not raise_error()
|
509
546
|
end
|
510
547
|
|
548
|
+
describe "Message#valid?" do
|
549
|
+
it "should validate sub-messages" do
|
550
|
+
f = Featureful::A.new
|
551
|
+
f.i3 = 1
|
552
|
+
f.sub3 = Featureful::A::Sub.new
|
553
|
+
f.valid?.should == false
|
554
|
+
f.sub3.valid?.should == false
|
555
|
+
f.sub3.payload_type = Featureful::A::Sub::Payloads::P1
|
556
|
+
f.valid?.should == true
|
557
|
+
f.sub3.valid?.should == true
|
558
|
+
end
|
559
|
+
end
|
560
|
+
|
511
561
|
end
|
metadata
CHANGED
@@ -1,105 +1,82 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-protocol-buffers
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 2
|
9
|
-
- 2
|
10
|
-
version: 1.2.2
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.2.3.beta1
|
5
|
+
prerelease: 6
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Brian Palmer
|
14
9
|
- Rob Marable
|
15
10
|
- Paulo Luis Franchini Casaretto
|
16
11
|
autorequire:
|
17
12
|
bindir: bin
|
18
13
|
cert_chain: []
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
- !ruby/object:Gem::Dependency
|
14
|
+
date: 2012-04-25 00:00:00.000000000Z
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
23
17
|
name: rspec
|
24
|
-
|
25
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
18
|
+
requirement: &70124285265220 !ruby/object:Gem::Requirement
|
26
19
|
none: false
|
27
|
-
requirements:
|
20
|
+
requirements:
|
28
21
|
- - ~>
|
29
|
-
- !ruby/object:Gem::Version
|
30
|
-
|
31
|
-
segments:
|
32
|
-
- 2
|
33
|
-
- 5
|
34
|
-
version: "2.5"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: '2.5'
|
35
24
|
type: :development
|
36
|
-
version_requirements: *id001
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: autotest-standalone
|
39
25
|
prerelease: false
|
40
|
-
|
26
|
+
version_requirements: *70124285265220
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: autotest-standalone
|
29
|
+
requirement: &70124285264800 !ruby/object:Gem::Requirement
|
41
30
|
none: false
|
42
|
-
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
|
46
|
-
segments:
|
47
|
-
- 0
|
48
|
-
version: "0"
|
31
|
+
requirements:
|
32
|
+
- - ! '>='
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
49
35
|
type: :development
|
50
|
-
version_requirements: *id002
|
51
|
-
- !ruby/object:Gem::Dependency
|
52
|
-
name: autotest-growl
|
53
36
|
prerelease: false
|
54
|
-
|
37
|
+
version_requirements: *70124285264800
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: autotest-growl
|
40
|
+
requirement: &70124285264340 !ruby/object:Gem::Requirement
|
55
41
|
none: false
|
56
|
-
requirements:
|
57
|
-
- -
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
|
60
|
-
segments:
|
61
|
-
- 0
|
62
|
-
version: "0"
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
63
46
|
type: :development
|
64
|
-
version_requirements: *id003
|
65
|
-
- !ruby/object:Gem::Dependency
|
66
|
-
name: rcov
|
67
47
|
prerelease: false
|
68
|
-
|
48
|
+
version_requirements: *70124285264340
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: rcov
|
51
|
+
requirement: &70124285263920 !ruby/object:Gem::Requirement
|
69
52
|
none: false
|
70
|
-
requirements:
|
71
|
-
- -
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
|
74
|
-
segments:
|
75
|
-
- 0
|
76
|
-
version: "0"
|
53
|
+
requirements:
|
54
|
+
- - ! '>='
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
77
57
|
type: :development
|
78
|
-
version_requirements: *id004
|
79
|
-
- !ruby/object:Gem::Dependency
|
80
|
-
name: yard
|
81
58
|
prerelease: false
|
82
|
-
|
59
|
+
version_requirements: *70124285263920
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: yard
|
62
|
+
requirement: &70124285263480 !ruby/object:Gem::Requirement
|
83
63
|
none: false
|
84
|
-
requirements:
|
85
|
-
- -
|
86
|
-
- !ruby/object:Gem::Version
|
87
|
-
|
88
|
-
segments:
|
89
|
-
- 0
|
90
|
-
version: "0"
|
64
|
+
requirements:
|
65
|
+
- - ! '>='
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
91
68
|
type: :development
|
92
|
-
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: *70124285263480
|
93
71
|
description:
|
94
|
-
email:
|
72
|
+
email:
|
95
73
|
- brian@codekitchen.net
|
96
|
-
executables:
|
74
|
+
executables:
|
97
75
|
- ruby-protoc
|
98
76
|
extensions: []
|
99
|
-
|
100
|
-
extra_rdoc_files:
|
77
|
+
extra_rdoc_files:
|
101
78
|
- Changelog.md
|
102
|
-
files:
|
79
|
+
files:
|
103
80
|
- .document
|
104
81
|
- .gitignore
|
105
82
|
- Changelog.md
|
@@ -151,38 +128,29 @@ files:
|
|
151
128
|
- spec/unicode_string_spec.rb
|
152
129
|
homepage: https://github.com/mozy/ruby-protocol-buffers
|
153
130
|
licenses: []
|
154
|
-
|
155
131
|
post_install_message:
|
156
132
|
rdoc_options: []
|
157
|
-
|
158
|
-
require_paths:
|
133
|
+
require_paths:
|
159
134
|
- lib
|
160
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
135
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
161
136
|
none: false
|
162
|
-
requirements:
|
163
|
-
- -
|
164
|
-
- !ruby/object:Gem::Version
|
165
|
-
|
166
|
-
|
167
|
-
- 0
|
168
|
-
version: "0"
|
169
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
|
+
requirements:
|
138
|
+
- - ! '>='
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
version: '0'
|
141
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
170
142
|
none: false
|
171
|
-
requirements:
|
172
|
-
- -
|
173
|
-
- !ruby/object:Gem::Version
|
174
|
-
|
175
|
-
segments:
|
176
|
-
- 0
|
177
|
-
version: "0"
|
143
|
+
requirements:
|
144
|
+
- - ! '>'
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: 1.3.1
|
178
147
|
requirements: []
|
179
|
-
|
180
148
|
rubyforge_project:
|
181
|
-
rubygems_version: 1.8.
|
149
|
+
rubygems_version: 1.8.10
|
182
150
|
signing_key:
|
183
151
|
specification_version: 3
|
184
152
|
summary: Ruby compiler and runtime for the google protocol buffers library.
|
185
|
-
test_files:
|
153
|
+
test_files:
|
186
154
|
- spec/compiler_spec.rb
|
187
155
|
- spec/fields_spec.rb
|
188
156
|
- spec/negative_int32_spec.rb
|