ruby-protocol-buffers 0.8.4 → 0.8.5

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/Changelog.md ADDED
@@ -0,0 +1,8 @@
1
+ # ruby-protocol-buffers 0.8.5
2
+
3
+ * Add support for Microsoft Windows (tested on Windows 7)
4
+ * Fix StringIO encoding issues on Ruby 1.9.2 by explicitly setting binary encoding
5
+
6
+ # ruby-protocol-buffers 0.8.4
7
+
8
+ * First gem release
data/LICENSE CHANGED
@@ -1,22 +1,24 @@
1
- Copyright (c) 2009 Mozy, Inc.
1
+ Copyright (c) 2009, Decho Corporation
2
+ All rights reserved.
2
3
 
3
- Permission is hereby granted, free of charge, to any person
4
- obtaining a copy of this software and associated documentation
5
- files (the "Software"), to deal in the Software without
6
- restriction, including without limitation the rights to use,
7
- copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- copies of the Software, and to permit persons to whom the
9
- Software is furnished to do so, subject to the following
10
- conditions:
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are met:
6
+ * Redistributions of source code must retain the above copyright
7
+ notice, this list of conditions and the following disclaimer.
8
+ * Redistributions in binary form must reproduce the above copyright
9
+ notice, this list of conditions and the following disclaimer in the
10
+ documentation and/or other materials provided with the distribution.
11
+ * Neither the name of Decho Corporation nor the names of its contributors
12
+ may be used to endorse or promote products derived from this software
13
+ without specific prior written permission.
11
14
 
12
- The above copyright notice and this permission notice shall be
13
- included in all copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17
- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
- OTHER DEALINGS IN THE SOFTWARE.
15
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18
+ DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
19
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -1,11 +1,11 @@
1
- = Ruby Protocol Buffers
1
+ # Ruby Protocol Buffers
2
2
 
3
3
  Protocol Buffers are a way of encoding structured data in an efficient yet
4
4
  extensible format. Google uses Protocol Buffers for almost all of its internal
5
5
  RPC protocols and file formats.
6
6
 
7
- This library has two components: a compiler to turn <tt>.proto</tt> definitions
8
- into Ruby modules (extension <tt>.pb.rb</tt>), and a runtime to use protocol
7
+ This library has two components: a compiler to turn `.proto` definitions
8
+ into Ruby modules (extension `.pb.rb`), and a runtime to use protocol
9
9
  buffers defined by these modules. The compiler relies on Google's C++ based
10
10
  compiler (+protoc+) for much of the heavy lifting -- this has huge advantages in
11
11
  ensuring compatibility and correctness.
@@ -19,9 +19,21 @@ Because this is a tool for generating code, the RDoc documentation is a bit
19
19
  unusual. See the text in the ProtocolBuffers::Message class for details on what
20
20
  code is generated.
21
21
 
22
- == Features
22
+ ## Installation
23
23
 
24
- === Supported Features
24
+ You'll need protoc version >= 2.2 (the Google Protocol Buffer compiler)
25
+ installed in the environment where you will be compiling protocol buffers. This
26
+ is only needed for compiling, you don't need it installed to use the generated
27
+ `.pb.rb` files. You do need this Ruby library installed to use the
28
+ `.pb.rb` files, for the runtime support.
29
+
30
+ If you use RubyGems, you can install via:
31
+
32
+ $ sudo gem install ruby-protocol-buffers
33
+
34
+ ## Features
35
+
36
+ ### Supported Features
25
37
 
26
38
  * messages, enums, field types, all basic protobuf features
27
39
  * packages
@@ -29,54 +41,37 @@ code is generated.
29
41
  * nested types
30
42
  * passing on unknown fields when re-serializing a message
31
43
 
32
- === Unsupported Features
44
+ ### Unsupported Features
33
45
 
34
46
  * extensions
35
47
  * packed option (could be useful)
36
48
  * accessing custom options
37
49
 
38
- === Probably Never to be Supported
50
+ ### Probably Never to be Supported
39
51
 
40
52
  * RPC stubbing
41
53
  * deprecated protocol features (e.g. groups)
42
54
  * the unsupported options (java_*, optimize_for, message_set_wire_format, deprecated)
43
55
 
44
- === Known Issues
45
-
46
- * not tested on Windows
47
- * lots of polish still needed in APIs, docs, calling out to +protoc+, etc
56
+ ## Simple Usage Example
48
57
 
49
- == Simple Usage Example
58
+ $ echo "package Test; message MyMessage { optional string myField = 1; }" > test.proto
59
+ $ bin/ruby-protoc test.proto
60
+ $ irb -I./lib -rtest.pb
61
+ > msg = Test::MyMessage.new(:myField => 'zomgkittenz')
62
+ => #<Test::MyMessage myField="zomgkittenz">
63
+ > Test::MyMessage.parse(msg.to_s) == msg
64
+ => true
50
65
 
51
- $ echo "package Test; message MyMessage { optional string myField = 1; }" > test.proto
52
- $ bin/ruby-protoc test.proto
53
- $ irb -I./lib -rtest.pb
54
- > msg = Test::MyMessage.new(:myField => 'zomgkittenz')
55
- => #<Test::MyMessage myField="zomgkittenz">
56
- > Test::MyMessage.parse(msg.to_s) == msg
57
- => true
58
-
59
- == Authors
66
+ ## Authors
60
67
 
61
68
  Brian Palmer (http://github.com/codekitchen)
62
69
 
63
- == Installation
64
-
65
- You'll need protoc version >= 2.2 (the Google Protocol Buffer compiler)
66
- installed in the environment where you will be compiling protocol buffers. This
67
- is only needed for compiling, you don't need it installed to use the generated
68
- <tt>.pb.rb</tt> files. You do need this Ruby library installed to use the
69
- <tt>.pb.rb</tt> files, for the runtime support.
70
-
71
- If you use RubyGems, you can install via:
72
-
73
- $ sudo gem install ruby-protocol-buffers
74
-
75
- == Source
70
+ ## Source
76
71
 
77
72
  http://github.com/mozy/ruby-protocol-buffers
78
73
 
79
- == License
74
+ ## License
80
75
 
81
76
  See the LICENSE file included with the distribution for licensing and
82
77
  copyright details.
data/Rakefile CHANGED
@@ -18,6 +18,8 @@ begin
18
18
  gem.add_development_dependency "rspec", ">= 1.2.9"
19
19
  gem.required_ruby_version = ">=1.8.6"
20
20
  gem.require_path = 'lib'
21
+ gem.extra_rdoc_files << "Changelog.md"
22
+ gem.files << "Changelog.md"
21
23
  # disabled to avoid needing to compile a C extension just to boost
22
24
  # performance. TODO: is there a way to tell gems to make the extension
23
25
  # optional?
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.8.4
1
+ 0.8.5
data/bin/ruby-protoc CHANGED
@@ -33,6 +33,7 @@ require 'protocol_buffers'
33
33
  require 'protocol_buffers/compiler'
34
34
 
35
35
  protocfile = Tempfile.new("ruby-protoc")
36
+ protocfile.binmode
36
37
  ProtocolBuffers::Compiler.compile(protocfile.path, filenames, :include_dirs => include_dirs)
37
38
  descriptor_set = FileDescriptorSet.parse(protocfile)
38
39
  protocfile.close(true)
@@ -1,5 +1,13 @@
1
1
  module ProtocolBuffers
2
2
  VERSION = File.read(File.join(File.dirname(__FILE__), "..", "VERSION")).chomp
3
+
4
+ require 'stringio'
5
+ # for 1.9.2 compatibility
6
+ def self.bin_sio(*args)
7
+ sio = StringIO.new(*args)
8
+ sio.set_encoding('binary') if sio.respond_to?(:set_encoding)
9
+ sio
10
+ end
3
11
  end
4
12
 
5
13
  require 'protocol_buffers/runtime/message'
@@ -22,12 +22,14 @@ module ProtocolBuffers
22
22
  require 'protocol_buffers/compiler/file_descriptor_to_ruby'
23
23
 
24
24
  tempfile = Tempfile.new("protocol_buffers_spec")
25
+ tempfile.binmode
25
26
  compile(tempfile.path, input_files, opts)
26
27
  descriptor_set = FileDescriptorSet.parse(tempfile)
27
28
  tempfile.close(true)
28
29
  descriptor_set.file.each do |file|
29
30
  parsed = FileDescriptorToRuby.new(file)
30
31
  output = Tempfile.new("protocol_buffers_spec_parsed")
32
+ output.binmode
31
33
  parsed.write(output)
32
34
  output.flush
33
35
  load output.path
@@ -39,6 +41,7 @@ module ProtocolBuffers
39
41
  def self.compile_and_load_string(input, opts = {})
40
42
  require 'tempfile'
41
43
  tempfile = Tempfile.new("protocol_buffers_load_string")
44
+ tempfile.binmode
42
45
  tempfile.write(input)
43
46
  tempfile.flush
44
47
  (opts[:include_dirs] ||= []) << File.dirname(tempfile.path)
@@ -39,10 +39,6 @@ HEADER
39
39
  descriptor.message_type.each do |message|
40
40
  dump_message(message)
41
41
  end
42
-
43
- descriptor.enum_type.each do |enum|
44
- dump_enum(enum)
45
- end
46
42
  end
47
43
 
48
44
  end
@@ -56,10 +52,16 @@ HEADER
56
52
  messages.each do |message|
57
53
  line %{class #{name([@package, message.name])} < ::ProtocolBuffers::Message; end}
58
54
  end
59
- enums.each do |enum|
60
- line %{module #{name([@package, enum.name])}; end}
55
+
56
+ if enums.empty?
57
+ line
58
+ else
59
+ line
60
+ line %{# enums}
61
+ enums.each do |enum|
62
+ dump_enum(enum)
63
+ end
61
64
  end
62
- line
63
65
  end
64
66
 
65
67
  def line(str = nil)
@@ -119,9 +121,6 @@ HEADER
119
121
  line %{# nested messages} unless message.nested_type.empty?
120
122
  message.nested_type.each { |inner| dump_message(inner) }
121
123
 
122
- line %{# nested enums} unless message.enum_type.empty?
123
- message.enum_type.each { |inner| dump_enum(inner) }
124
-
125
124
  message.field.each do |field|
126
125
  typename = field_typename(field)
127
126
  fieldline = %{#{LABEL_MAPPING[field.label]} #{typename}, :#{field.name}, #{field.number}}
@@ -15,7 +15,7 @@ module ProtocolBuffers
15
15
  field = fields[tag]
16
16
 
17
17
  if field && wire_type != field.wire_type
18
- raise(DecodeError, "incorrect wire type for tag: #{field.tag}")
18
+ raise(DecodeError, "incorrect wire type for tag: #{field.tag}, expected #{field.wire_type} but got #{wire_type}\n#{field.inspect}")
19
19
  end
20
20
 
21
21
  # replacing const lookups with hard-coded ints removed an entire 10%
@@ -58,7 +58,7 @@ module ProtocolBuffers
58
58
  #
59
59
  # === Singular Fields
60
60
  #
61
- # If you have a singular (optional or repeated) field +foo+ of any non-message
61
+ # If you have a singular (optional or required) field +foo+ of any non-message
62
62
  # type, you can manipulate the field +foo+ as if it were a regular object
63
63
  # attribute. For example, if +foo+'s type is <tt>int32</tt>, you can say:
64
64
  #
@@ -267,7 +267,7 @@ module ProtocolBuffers
267
267
 
268
268
  # Serialize this Message to a String and return it.
269
269
  def serialize_to_string
270
- sio = StringIO.new
270
+ sio = ProtocolBuffers.bin_sio
271
271
  serialize(sio)
272
272
  return sio.string
273
273
  end
@@ -285,7 +285,7 @@ module ProtocolBuffers
285
285
  def parse(io_or_string)
286
286
  io = io_or_string
287
287
  if io.is_a?(String)
288
- io = StringIO.new(io)
288
+ io = ProtocolBuffers.bin_sio(io)
289
289
  end
290
290
  Decoder.decode(io, self)
291
291
  return self
@@ -396,7 +396,7 @@ module ProtocolBuffers
396
396
  end
397
397
 
398
398
  def inspect
399
- ret = StringIO.new
399
+ ret = ProtocolBuffers.bin_sio
400
400
  ret << "#<#{self.class.name}"
401
401
  fields.each do |tag, field|
402
402
  ret << " #{field.name}=#{field.inspect_value(self.__send__(field.name))}"
data/spec/fields_spec.rb CHANGED
@@ -26,7 +26,7 @@ describe ProtocolBuffers, "fields" do
26
26
  it "properly encodes and decodes negative varints" do
27
27
  val = -2082844800000000
28
28
  str = "\200\300\313\274\236\265\246\374\377\001"
29
- sio = StringIO.new
29
+ sio = ProtocolBuffers.bin_sio
30
30
  ProtocolBuffers::Varint.encode(sio, val)
31
31
  sio.string.should == str
32
32
  sio.rewind
@@ -0,0 +1,10 @@
1
+ package foo;
2
+
3
+ enum Bar {
4
+ A = 1;
5
+ B = 2;
6
+ }
7
+
8
+ message Baz {
9
+ optional Bar bar = 1;
10
+ }
data/spec/runtime_spec.rb CHANGED
@@ -20,7 +20,7 @@ describe ProtocolBuffers, "runtime" do
20
20
 
21
21
  msg1.test_field = "zomgkittenz"
22
22
 
23
- ser = StringIO.new(msg1.to_s)
23
+ ser = ProtocolBuffers.bin_sio(msg1.to_s)
24
24
  msg2 = Simple::Test1.parse(ser)
25
25
  msg2.test_field.should == "zomgkittenz"
26
26
  msg2.should == msg1
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-protocol-buffers
3
3
  version: !ruby/object:Gem::Version
4
- hash: 55
5
4
  prerelease: false
6
5
  segments:
7
6
  - 0
8
7
  - 8
9
- - 4
10
- version: 0.8.4
8
+ - 5
9
+ version: 0.8.5
11
10
  platform: ruby
12
11
  authors:
13
12
  - Brian Palmer
@@ -15,7 +14,7 @@ autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2010-10-20 00:00:00 -06:00
17
+ date: 2010-12-19 00:00:00 -07:00
19
18
  default_executable: ruby-protoc
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
@@ -26,7 +25,6 @@ dependencies:
26
25
  requirements:
27
26
  - - ">="
28
27
  - !ruby/object:Gem::Version
29
- hash: 13
30
28
  segments:
31
29
  - 1
32
30
  - 2
@@ -41,13 +39,14 @@ executables:
41
39
  extensions: []
42
40
 
43
41
  extra_rdoc_files:
42
+ - Changelog.md
44
43
  - LICENSE
45
- - README
44
+ - README.md
46
45
  files:
47
46
  - .document
48
- - .gitignore
47
+ - Changelog.md
49
48
  - LICENSE
50
- - README
49
+ - README.md
51
50
  - Rakefile
52
51
  - VERSION
53
52
  - bin/ruby-protoc
@@ -81,6 +80,7 @@ files:
81
80
  - spec/proto_files/featureful.proto
82
81
  - spec/proto_files/no_package.proto
83
82
  - spec/proto_files/simple.proto
83
+ - spec/proto_files/top_level_enum.proto
84
84
  - spec/runtime_spec.rb
85
85
  - spec/spec.opts
86
86
  - spec/spec_helper.rb
@@ -89,8 +89,8 @@ homepage: http://github.com/mozy/ruby-protocol-buffers
89
89
  licenses: []
90
90
 
91
91
  post_install_message:
92
- rdoc_options:
93
- - --charset=UTF-8
92
+ rdoc_options: []
93
+
94
94
  require_paths:
95
95
  - lib
96
96
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -98,7 +98,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
98
98
  requirements:
99
99
  - - ">="
100
100
  - !ruby/object:Gem::Version
101
- hash: 59
102
101
  segments:
103
102
  - 1
104
103
  - 8
@@ -109,7 +108,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
108
  requirements:
110
109
  - - ">="
111
110
  - !ruby/object:Gem::Version
112
- hash: 3
113
111
  segments:
114
112
  - 0
115
113
  version: "0"
@@ -121,8 +119,8 @@ signing_key:
121
119
  specification_version: 3
122
120
  summary: Ruby compiler and runtime for the google protocol buffers library.
123
121
  test_files:
122
+ - examples/json_protobuf.rb
124
123
  - spec/compiler_spec.rb
125
124
  - spec/fields_spec.rb
126
125
  - spec/runtime_spec.rb
127
126
  - spec/spec_helper.rb
128
- - examples/json_protobuf.rb
data/.gitignore DELETED
@@ -1,11 +0,0 @@
1
- /*.pb.rb
2
- /*.d
3
- /*.proto
4
- coverage
5
- rdoc
6
- pkg
7
- prof
8
- tests
9
- d/*
10
- *.gemspec
11
- tmp