ruby-protocol-buffers 1.0.0 → 1.0.1
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/.gitignore +3 -0
- data/Changelog.md +4 -0
- data/Gemfile +4 -0
- data/Rakefile +14 -50
- data/VERSION +1 -1
- data/bin/ruby-protoc +4 -3
- data/lib/protocol_buffers/runtime/decoder.rb +15 -4
- data/lib/protocol_buffers/runtime/message.rb +4 -0
- data/ruby-protocol-buffers.gemspec +26 -0
- data/spec/proto_files/featureful.proto +2 -0
- data/spec/runtime_spec.rb +61 -9
- data/spec/spec_helper.rb +3 -5
- metadata +80 -21
data/.gitignore
CHANGED
data/Changelog.md
CHANGED
data/Gemfile
ADDED
data/Rakefile
CHANGED
@@ -1,56 +1,20 @@
|
|
1
|
-
require '
|
2
|
-
|
3
|
-
require 'spec'
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
4
3
|
|
5
|
-
|
6
|
-
require 'metric_fu'
|
7
|
-
rescue LoadError
|
8
|
-
end
|
9
|
-
|
10
|
-
begin
|
11
|
-
require 'jeweler'
|
12
|
-
Jeweler::Tasks.new do |gem|
|
13
|
-
gem.name = "ruby-protocol-buffers"
|
14
|
-
gem.summary = %Q{Ruby compiler and runtime for the google protocol buffers library.}
|
15
|
-
gem.homepage = "http://github.com/mozy/ruby-protocol-buffers"
|
16
|
-
gem.authors = ["Brian Palmer"]
|
17
|
-
gem.version = File.read('VERSION')
|
18
|
-
gem.add_development_dependency "rspec", ">= 1.2.9"
|
19
|
-
gem.required_ruby_version = ">=1.8.6"
|
20
|
-
gem.require_path = 'lib'
|
21
|
-
gem.extra_rdoc_files << "Changelog.md"
|
22
|
-
gem.files << "Changelog.md"
|
23
|
-
# disabled to avoid needing to compile a C extension just to boost
|
24
|
-
# performance. TODO: is there a way to tell gems to make the extension
|
25
|
-
# optional?
|
26
|
-
# s.extensions << 'ext/extconf.rb'
|
27
|
-
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
28
|
-
end
|
29
|
-
Jeweler::GemcutterTasks.new
|
30
|
-
rescue LoadError
|
31
|
-
# You'll need to install Jeweler to build packages
|
32
|
-
end
|
4
|
+
task :default => 'spec'
|
33
5
|
|
34
|
-
require '
|
35
|
-
|
36
|
-
|
37
|
-
spec.pattern = 'spec/**/*_spec.rb'
|
6
|
+
require 'rspec/core/rake_task'
|
7
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
8
|
+
t.rspec_opts = "-c -f d"
|
38
9
|
end
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
spec.rcov = true
|
10
|
+
RSpec::Core::RakeTask.new(:rcov) do |t|
|
11
|
+
t.rspec_opts = "-c -f d"
|
12
|
+
t.rcov = true
|
13
|
+
t.rcov_opts = ["--exclude", "spec,gems/,rubygems/"]
|
44
14
|
end
|
45
15
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
51
|
-
|
52
|
-
rdoc.rdoc_dir = 'rdoc'
|
53
|
-
rdoc.title = "ruby-protocol-buffers #{version}"
|
54
|
-
rdoc.rdoc_files.include('README*', 'LICENSE')
|
55
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
16
|
+
require 'yard'
|
17
|
+
YARD::Rake::YardocTask.new(:doc) do |t|
|
18
|
+
version = ProtocolBuffers::VERSION
|
19
|
+
t.options = ["--title", "ruby protocol buffers #{version}", "--files", "LICENSE,Changelog.md"]
|
56
20
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.1
|
data/bin/ruby-protoc
CHANGED
@@ -11,11 +11,15 @@ require 'tempfile'
|
|
11
11
|
ruby_out = "."
|
12
12
|
include_dirs = []
|
13
13
|
|
14
|
+
require 'protocol_buffers'
|
15
|
+
require 'protocol_buffers/compiler'
|
16
|
+
|
14
17
|
opts = OptionParser.new
|
15
18
|
opts.banner = <<BANNER
|
16
19
|
Usage: #{opts.program_name} [OPTION] PROTO_FILES
|
17
20
|
Parse PROTO_FILES and generate output based on the options given:
|
18
21
|
BANNER
|
22
|
+
opts.version = ProtocolBuffers::VERSION
|
19
23
|
|
20
24
|
opts.on("-o", "--ruby_out", "=OUT_DIR",
|
21
25
|
"generates ruby code in OUT_DIR", "[defaults to pwd]",
|
@@ -29,9 +33,6 @@ filenames = rest
|
|
29
33
|
|
30
34
|
(puts "Missing input file.\n\n"; puts opts; exit) if filenames.empty?
|
31
35
|
|
32
|
-
require 'protocol_buffers'
|
33
|
-
require 'protocol_buffers/compiler'
|
34
|
-
|
35
36
|
protocfile = Tempfile.new("ruby-protoc")
|
36
37
|
protocfile.binmode
|
37
38
|
ProtocolBuffers::Compiler.compile(protocfile.path, filenames, :include_dirs => include_dirs)
|
@@ -38,10 +38,21 @@ module ProtocolBuffers
|
|
38
38
|
end
|
39
39
|
|
40
40
|
if field
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
41
|
+
begin
|
42
|
+
deserialized = field.deserialize(value)
|
43
|
+
# merge_field handles repeated field logic
|
44
|
+
message.merge_field(tag, deserialized, field)
|
45
|
+
rescue ArgumentError
|
46
|
+
# for enum fields, treat bad values as unknown fields
|
47
|
+
if field.is_a?(Field::EnumField)
|
48
|
+
field = nil
|
49
|
+
else
|
50
|
+
raise
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
unless field
|
45
56
|
# ignore unknown fields, pass them on when re-serializing this message
|
46
57
|
|
47
58
|
# special handling -- if it's a LENGTH_DELIMITED field, we need to
|
@@ -480,6 +480,10 @@ module ProtocolBuffers
|
|
480
480
|
@unknown_fields.each { |tag_int, value| yield tag_int, value }
|
481
481
|
end
|
482
482
|
|
483
|
+
def unknown_field_count
|
484
|
+
(@unknown_fields || []).size
|
485
|
+
end
|
486
|
+
|
483
487
|
# Generate the initialize method using reflection, to improve speed. This is
|
484
488
|
# called by the generated .pb.rb code, it's not necessary to call this
|
485
489
|
# method directly.
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "protocol_buffers"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "ruby-protocol-buffers"
|
7
|
+
s.version = ProtocolBuffers::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Brian Palmer"]
|
10
|
+
s.email = ["brian@codekitchen.net"]
|
11
|
+
s.homepage = "https://github.com/mozy/ruby-protocol-buffers"
|
12
|
+
s.summary = %{Ruby compiler and runtime for the google protocol buffers library.}
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
|
19
|
+
s.extra_rdoc_files << "Changelog.md"
|
20
|
+
|
21
|
+
s.add_development_dependency "rspec", "~> 2.5"
|
22
|
+
s.add_development_dependency "autotest-standalone"
|
23
|
+
s.add_development_dependency "autotest-growl"
|
24
|
+
s.add_development_dependency "rcov"
|
25
|
+
s.add_development_dependency "yard"
|
26
|
+
end
|
data/spec/runtime_spec.rb
CHANGED
@@ -6,12 +6,13 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
|
|
6
6
|
require 'protocol_buffers'
|
7
7
|
require 'protocol_buffers/compiler'
|
8
8
|
|
9
|
-
ProtocolBuffers::Compiler.compile_and_load(
|
10
|
-
File.join(File.dirname(__FILE__), "proto_files", "simple.proto"))
|
11
|
-
ProtocolBuffers::Compiler.compile_and_load(
|
12
|
-
File.join(File.dirname(__FILE__), "proto_files", "featureful.proto"))
|
13
|
-
|
14
9
|
describe ProtocolBuffers, "runtime" do
|
10
|
+
before(:each) do
|
11
|
+
ProtocolBuffers::Compiler.compile_and_load(
|
12
|
+
File.join(File.dirname(__FILE__), "proto_files", "simple.proto"))
|
13
|
+
ProtocolBuffers::Compiler.compile_and_load(
|
14
|
+
File.join(File.dirname(__FILE__), "proto_files", "featureful.proto"))
|
15
|
+
end
|
15
16
|
|
16
17
|
it "can handle basic operations" do
|
17
18
|
|
@@ -354,18 +355,17 @@ describe ProtocolBuffers, "runtime" do
|
|
354
355
|
ProtocolBuffers::Compiler.compile_and_load_string <<-EOS
|
355
356
|
package tehUnknown;
|
356
357
|
message MyResult {
|
357
|
-
optional
|
358
|
+
optional int64 field_1 = 1;
|
358
359
|
}
|
359
360
|
EOS
|
360
361
|
|
361
|
-
res1 = TehUnknown::MyResult.new(:field_1 =>
|
362
|
+
res1 = TehUnknown::MyResult.new(:field_1 => (2**33))
|
362
363
|
buf = res1.to_s
|
363
364
|
|
364
365
|
ProtocolBuffers::Compiler.compile_and_load_string <<-EOS
|
365
366
|
package tehUnknown;
|
366
367
|
message MyResult {
|
367
|
-
|
368
|
-
optional E field_1 = 1;
|
368
|
+
optional int32 field_1 = 1;
|
369
369
|
}
|
370
370
|
EOS
|
371
371
|
|
@@ -427,4 +427,56 @@ describe ProtocolBuffers, "runtime" do
|
|
427
427
|
res3.field_4.should == 0xfffc
|
428
428
|
end
|
429
429
|
|
430
|
+
it "ignores and passes on unknown enum values" do
|
431
|
+
ProtocolBuffers::Compiler.compile_and_load_string <<-EOS
|
432
|
+
package tehUnknown;
|
433
|
+
message MyResult {
|
434
|
+
enum E {
|
435
|
+
V1 = 1;
|
436
|
+
V2 = 2;
|
437
|
+
}
|
438
|
+
optional E field_1 = 1;
|
439
|
+
}
|
440
|
+
EOS
|
441
|
+
|
442
|
+
res1 = TehUnknown::MyResult.new(:field_1 => TehUnknown::MyResult::E::V2)
|
443
|
+
serialized = res1.to_s
|
444
|
+
|
445
|
+
# remove field_2 to pretend we never knew about it
|
446
|
+
ProtocolBuffers::Compiler.compile_and_load_string <<-EOS
|
447
|
+
package tehUnknown;
|
448
|
+
message MyResult {
|
449
|
+
enum E {
|
450
|
+
V1 = 1;
|
451
|
+
}
|
452
|
+
optional E field_1 = 1;
|
453
|
+
}
|
454
|
+
EOS
|
455
|
+
|
456
|
+
res2 = nil
|
457
|
+
proc do
|
458
|
+
res2 = TehUnknown::MyResult.parse(serialized)
|
459
|
+
end.should_not raise_error()
|
460
|
+
|
461
|
+
res2.value_for_tag?(1).should be_false
|
462
|
+
res2.unknown_field_count.should == 1
|
463
|
+
|
464
|
+
serialized2 = res2.to_s
|
465
|
+
|
466
|
+
# now we know about field_2 again
|
467
|
+
ProtocolBuffers::Compiler.compile_and_load_string <<-EOS
|
468
|
+
package tehUnknown;
|
469
|
+
message MyResult {
|
470
|
+
enum E {
|
471
|
+
V1 = 1;
|
472
|
+
V2 = 2;
|
473
|
+
}
|
474
|
+
optional E field_1 = 1;
|
475
|
+
}
|
476
|
+
EOS
|
477
|
+
|
478
|
+
res3 = TehUnknown::MyResult.parse(serialized2)
|
479
|
+
res3.field_1.should == 2
|
480
|
+
end
|
481
|
+
|
430
482
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
1
|
require 'protocol_buffers'
|
4
|
-
require 'spec'
|
5
|
-
require 'spec/autorun'
|
6
2
|
|
7
|
-
|
3
|
+
require 'rspec'
|
4
|
+
|
5
|
+
RSpec.configure do |config|
|
8
6
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-protocol-buffers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 1
|
10
|
+
version: 1.0.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Brian Palmer
|
@@ -15,8 +15,8 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-03-
|
19
|
-
default_executable:
|
18
|
+
date: 2011-03-20 00:00:00 -06:00
|
19
|
+
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
name: rspec
|
@@ -24,30 +24,85 @@ dependencies:
|
|
24
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
hash:
|
29
|
+
hash: 9
|
30
30
|
segments:
|
31
|
-
- 1
|
32
31
|
- 2
|
33
|
-
-
|
34
|
-
version:
|
32
|
+
- 5
|
33
|
+
version: "2.5"
|
35
34
|
type: :development
|
36
35
|
version_requirements: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: autotest-standalone
|
38
|
+
prerelease: false
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 3
|
45
|
+
segments:
|
46
|
+
- 0
|
47
|
+
version: "0"
|
48
|
+
type: :development
|
49
|
+
version_requirements: *id002
|
50
|
+
- !ruby/object:Gem::Dependency
|
51
|
+
name: autotest-growl
|
52
|
+
prerelease: false
|
53
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
hash: 3
|
59
|
+
segments:
|
60
|
+
- 0
|
61
|
+
version: "0"
|
62
|
+
type: :development
|
63
|
+
version_requirements: *id003
|
64
|
+
- !ruby/object:Gem::Dependency
|
65
|
+
name: rcov
|
66
|
+
prerelease: false
|
67
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
68
|
+
none: false
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
hash: 3
|
73
|
+
segments:
|
74
|
+
- 0
|
75
|
+
version: "0"
|
76
|
+
type: :development
|
77
|
+
version_requirements: *id004
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: yard
|
80
|
+
prerelease: false
|
81
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
hash: 3
|
87
|
+
segments:
|
88
|
+
- 0
|
89
|
+
version: "0"
|
90
|
+
type: :development
|
91
|
+
version_requirements: *id005
|
37
92
|
description:
|
38
93
|
email:
|
94
|
+
- brian@codekitchen.net
|
39
95
|
executables:
|
40
96
|
- ruby-protoc
|
41
97
|
extensions: []
|
42
98
|
|
43
99
|
extra_rdoc_files:
|
44
100
|
- Changelog.md
|
45
|
-
- LICENSE
|
46
|
-
- README.md
|
47
101
|
files:
|
48
102
|
- .document
|
49
103
|
- .gitignore
|
50
104
|
- Changelog.md
|
105
|
+
- Gemfile
|
51
106
|
- LICENSE
|
52
107
|
- README.md
|
53
108
|
- Rakefile
|
@@ -77,6 +132,7 @@ files:
|
|
77
132
|
- lib/protocol_buffers/runtime/message.rb
|
78
133
|
- lib/protocol_buffers/runtime/service.rb
|
79
134
|
- lib/protocol_buffers/runtime/varint.rb
|
135
|
+
- ruby-protocol-buffers.gemspec
|
80
136
|
- spec/compiler_spec.rb
|
81
137
|
- spec/fields_spec.rb
|
82
138
|
- spec/proto_files/depends.proto
|
@@ -88,12 +144,12 @@ files:
|
|
88
144
|
- spec/spec.opts
|
89
145
|
- spec/spec_helper.rb
|
90
146
|
has_rdoc: true
|
91
|
-
homepage:
|
147
|
+
homepage: https://github.com/mozy/ruby-protocol-buffers
|
92
148
|
licenses: []
|
93
149
|
|
94
150
|
post_install_message:
|
95
|
-
rdoc_options:
|
96
|
-
|
151
|
+
rdoc_options: []
|
152
|
+
|
97
153
|
require_paths:
|
98
154
|
- lib
|
99
155
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -101,12 +157,10 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
101
157
|
requirements:
|
102
158
|
- - ">="
|
103
159
|
- !ruby/object:Gem::Version
|
104
|
-
hash:
|
160
|
+
hash: 3
|
105
161
|
segments:
|
106
|
-
-
|
107
|
-
|
108
|
-
- 6
|
109
|
-
version: 1.8.6
|
162
|
+
- 0
|
163
|
+
version: "0"
|
110
164
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
165
|
none: false
|
112
166
|
requirements:
|
@@ -126,6 +180,11 @@ summary: Ruby compiler and runtime for the google protocol buffers library.
|
|
126
180
|
test_files:
|
127
181
|
- spec/compiler_spec.rb
|
128
182
|
- spec/fields_spec.rb
|
183
|
+
- spec/proto_files/depends.proto
|
184
|
+
- spec/proto_files/featureful.proto
|
185
|
+
- spec/proto_files/no_package.proto
|
186
|
+
- spec/proto_files/simple.proto
|
187
|
+
- spec/proto_files/top_level_enum.proto
|
129
188
|
- spec/runtime_spec.rb
|
189
|
+
- spec/spec.opts
|
130
190
|
- spec/spec_helper.rb
|
131
|
-
- examples/json_protobuf.rb
|