ruby-protocol-buffers 1.3.3 → 1.4.0

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.
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env ruby
2
+ require 'protocol_buffers/compiler/file_descriptor_to_ruby'
3
+ require 'protocol_buffers/compiler/plugin.pb'
4
+ require 'stringio'
5
+
6
+ response = CodeGeneratorResponse.new
7
+ begin
8
+ request = CodeGeneratorRequest.parse($stdin)
9
+
10
+ request.proto_file.each do |file_descriptor|
11
+ next unless request.file_to_generate.include? file_descriptor.name
12
+ dumper = FileDescriptorToRuby.new(file_descriptor)
13
+ io = StringIO.new
14
+ dumper.write(io)
15
+ filename = File.join(File.dirname(file_descriptor.name),
16
+ File.basename(file_descriptor.name, '.proto') + '.pb.rb')
17
+ file = CodeGeneratorResponse::File.new(:name => filename, :content => io.string)
18
+ response.file << file
19
+ end
20
+ rescue => error
21
+ response.file.clear
22
+ response.error = "%s\n%s\n\nBacktrace:\n%s" % [
23
+ "Failed to generate a Ruby file",
24
+ error.message,
25
+ error.backtrace.join("\n")
26
+ ]
27
+ $stderr.puts response.error
28
+ else
29
+ print response.to_s
30
+ end
@@ -24,7 +24,13 @@ require 'protocol_buffers'
24
24
  HEADER
25
25
 
26
26
  descriptor.dependency.each do |dep|
27
- path = File.basename(dep, ".proto") + ".pb"
27
+ dir = File.dirname(dep)
28
+ filename = File.basename(dep, ".proto") + ".pb"
29
+ path = if dir == '.'
30
+ filename
31
+ else
32
+ File.join(dir, filename)
33
+ end
28
34
  @io.write("begin; require '#{path}'; rescue LoadError; end\n")
29
35
  end
30
36
  @io.write("\n") unless descriptor.dependency.empty?
@@ -123,6 +129,9 @@ HEADER
123
129
  message.field.each do |field|
124
130
  typename = field_typename(field)
125
131
  fieldline = %{#{LABEL_MAPPING[field.label]} #{typename}, :#{field.name}, #{field.number}}
132
+ if field.type == TYPE_GROUP
133
+ fieldline << %{, :group => true}
134
+ end
126
135
  if field.default_value && field.default_value != ""
127
136
  fieldline << %{, :default => #{default_value(field)}}
128
137
  end
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env ruby
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+
4
+ require 'protocol_buffers'
5
+
6
+ begin; require 'descriptor.pb'; rescue LoadError; end
7
+
8
+ # forward declarations
9
+ class CodeGeneratorRequest < ::ProtocolBuffers::Message; end
10
+ class CodeGeneratorResponse < ::ProtocolBuffers::Message; end
11
+
12
+ class CodeGeneratorRequest < ::ProtocolBuffers::Message
13
+ repeated :string, :file_to_generate, 1
14
+ optional :string, :parameter, 2
15
+ repeated ::FileDescriptorProto, :proto_file, 15
16
+ end
17
+
18
+ class CodeGeneratorResponse < ::ProtocolBuffers::Message
19
+ # forward declarations
20
+ class File < ::ProtocolBuffers::Message; end
21
+
22
+ # nested messages
23
+ class File < ::ProtocolBuffers::Message
24
+ optional :string, :name, 1
25
+ optional :string, :insertion_point, 2
26
+ optional :string, :content, 15
27
+ end
28
+
29
+ optional :string, :error, 1
30
+ repeated ::CodeGeneratorResponse::File, :file, 15
31
+ end
32
+
@@ -0,0 +1,146 @@
1
+ // Protocol Buffers - Google's data interchange format
2
+ // Copyright 2008 Google Inc. All rights reserved.
3
+ // http://code.google.com/p/protobuf/
4
+ //
5
+ // Redistribution and use in source and binary forms, with or without
6
+ // modification, are permitted provided that the following conditions are
7
+ // met:
8
+ //
9
+ // * Redistributions of source code must retain the above copyright
10
+ // notice, this list of conditions and the following disclaimer.
11
+ // * Redistributions in binary form must reproduce the above
12
+ // copyright notice, this list of conditions and the following disclaimer
13
+ // in the documentation and/or other materials provided with the
14
+ // distribution.
15
+ // * Neither the name of Google Inc. nor the names of its
16
+ // contributors may be used to endorse or promote products derived from
17
+ // this software without specific prior written permission.
18
+ //
19
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+
31
+ // Author: kenton@google.com (Kenton Varda)
32
+ //
33
+ // WARNING: The plugin interface is currently EXPERIMENTAL and is subject to
34
+ // change.
35
+ //
36
+ // protoc (aka the Protocol Compiler) can be extended via plugins. A plugin is
37
+ // just a program that reads a CodeGeneratorRequest from stdin and writes a
38
+ // CodeGeneratorResponse to stdout.
39
+ //
40
+ // Plugins written using C++ can use google/protobuf/compiler/plugin.h instead
41
+ // of dealing with the raw protocol defined here.
42
+ //
43
+ // A plugin executable needs only to be placed somewhere in the path. The
44
+ // plugin should be named "protoc-gen-$NAME", and will then be used when the
45
+ // flag "--${NAME}_out" is passed to protoc.
46
+
47
+ //package google.protobuf.compiler;
48
+
49
+ //import "google/protobuf/descriptor.proto";
50
+ import "descriptor.proto";
51
+
52
+ // An encoded CodeGeneratorRequest is written to the plugin's stdin.
53
+ message CodeGeneratorRequest {
54
+ // The .proto files that were explicitly listed on the command-line. The
55
+ // code generator should generate code only for these files. Each file's
56
+ // descriptor will be included in proto_file, below.
57
+ repeated string file_to_generate = 1;
58
+
59
+ // The generator parameter passed on the command-line.
60
+ optional string parameter = 2;
61
+
62
+ // FileDescriptorProtos for all files in files_to_generate and everything
63
+ // they import. The files will appear in topological order, so each file
64
+ // appears before any file that imports it.
65
+ //
66
+ // protoc guarantees that all proto_files will be written after
67
+ // the fields above, even though this is not technically guaranteed by the
68
+ // protobuf wire format. This theoretically could allow a plugin to stream
69
+ // in the FileDescriptorProtos and handle them one by one rather than read
70
+ // the entire set into memory at once. However, as of this writing, this
71
+ // is not similarly optimized on protoc's end -- it will store all fields in
72
+ // memory at once before sending them to the plugin.
73
+ repeated FileDescriptorProto proto_file = 15;
74
+ }
75
+
76
+ // The plugin writes an encoded CodeGeneratorResponse to stdout.
77
+ message CodeGeneratorResponse {
78
+ // Error message. If non-empty, code generation failed. The plugin process
79
+ // should exit with status code zero even if it reports an error in this way.
80
+ //
81
+ // This should be used to indicate errors in .proto files which prevent the
82
+ // code generator from generating correct code. Errors which indicate a
83
+ // problem in protoc itself -- such as the input CodeGeneratorRequest being
84
+ // unparseable -- should be reported by writing a message to stderr and
85
+ // exiting with a non-zero status code.
86
+ optional string error = 1;
87
+
88
+ // Represents a single generated file.
89
+ message File {
90
+ // The file name, relative to the output directory. The name must not
91
+ // contain "." or ".." components and must be relative, not be absolute (so,
92
+ // the file cannot lie outside the output directory). "/" must be used as
93
+ // the path separator, not "\".
94
+ //
95
+ // If the name is omitted, the content will be appended to the previous
96
+ // file. This allows the generator to break large files into small chunks,
97
+ // and allows the generated text to be streamed back to protoc so that large
98
+ // files need not reside completely in memory at one time. Note that as of
99
+ // this writing protoc does not optimize for this -- it will read the entire
100
+ // CodeGeneratorResponse before writing files to disk.
101
+ optional string name = 1;
102
+
103
+ // If non-empty, indicates that the named file should already exist, and the
104
+ // content here is to be inserted into that file at a defined insertion
105
+ // point. This feature allows a code generator to extend the output
106
+ // produced by another code generator. The original generator may provide
107
+ // insertion points by placing special annotations in the file that look
108
+ // like:
109
+ // @@protoc_insertion_point(NAME)
110
+ // The annotation can have arbitrary text before and after it on the line,
111
+ // which allows it to be placed in a comment. NAME should be replaced with
112
+ // an identifier naming the point -- this is what other generators will use
113
+ // as the insertion_point. Code inserted at this point will be placed
114
+ // immediately above the line containing the insertion point (thus multiple
115
+ // insertions to the same point will come out in the order they were added).
116
+ // The double-@ is intended to make it unlikely that the generated code
117
+ // could contain things that look like insertion points by accident.
118
+ //
119
+ // For example, the C++ code generator places the following line in the
120
+ // .pb.h files that it generates:
121
+ // // @@protoc_insertion_point(namespace_scope)
122
+ // This line appears within the scope of the file's package namespace, but
123
+ // outside of any particular class. Another plugin can then specify the
124
+ // insertion_point "namespace_scope" to generate additional classes or
125
+ // other declarations that should be placed in this scope.
126
+ //
127
+ // Note that if the line containing the insertion point begins with
128
+ // whitespace, the same whitespace will be added to every line of the
129
+ // inserted text. This is useful for languages like Python, where
130
+ // indentation matters. In these languages, the insertion point comment
131
+ // should be indented the same amount as any inserted code will need to be
132
+ // in order to work correctly in that context.
133
+ //
134
+ // The code generator that generates the initial file and the one which
135
+ // inserts into it must both run as part of a single invocation of protoc.
136
+ // Code generators are executed in the order in which they appear on the
137
+ // command line.
138
+ //
139
+ // If |insertion_point| is present, |name| must also be present.
140
+ optional string insertion_point = 2;
141
+
142
+ // The file contents.
143
+ optional string content = 15;
144
+ }
145
+ repeated File file = 15;
146
+ }
@@ -12,6 +12,7 @@ module ProtocolBuffers
12
12
  tag_int = Varint.decode(io)
13
13
  tag = tag_int >> 3
14
14
  wire_type = tag_int & 0b111
15
+ break if wire_type == 4
15
16
  field = fields[tag]
16
17
 
17
18
  if field && ( !( field.packed? || wire_type == field.wire_type ) || ( field.packed? && wire_type != 2 ) )
@@ -31,8 +32,10 @@ module ProtocolBuffers
31
32
  value = LimitedIO.new(io, length)
32
33
  when 5 # FIXED32
33
34
  value = io.read(4)
34
- when 3, 4 # deprecated START_GROUP/END_GROUP types
35
- raise(DecodeError, "groups are deprecated and unsupported")
35
+ when 3 # START_GROUP
36
+ value = io
37
+ when 4 # END_GROUP
38
+ break
36
39
  else
37
40
  raise(DecodeError, "unknown wire type: #{wire_type}")
38
41
  end
@@ -49,6 +49,7 @@ module ProtocolBuffers
49
49
  # write the tag
50
50
  Varint.encode(io, tag)
51
51
  self.serialize_field_value(io, wire_type, serialized)
52
+ Varint.encode(io, tag & ~3 | 4) if wire_type == 3
52
53
  end
53
54
 
54
55
  def self.serialize_field_value(io, wire_type, serialized)
@@ -61,8 +62,10 @@ module ProtocolBuffers
61
62
  when 2 # LENGTH_DELIMITED
62
63
  Varint.encode(io, serialized.bytesize)
63
64
  io.write(serialized)
64
- when 3, 4 # deprecated START_GROUP/END_GROUP types
65
- raise(EncodeError, "groups are deprecated and unsupported")
65
+ when 3 # START_GROUP
66
+ io.write(serialized)
67
+ when 4 # END_GROUP: never appear
68
+ raise(EncodeError, "Unexpected wire type END_GROUP")
66
69
  else
67
70
  raise(EncodeError, "unknown wire type: #{wire_type}")
68
71
  end
@@ -107,7 +107,11 @@ module ProtocolBuffers
107
107
  elsif type.ancestors.include?(ProtocolBuffers::Enum)
108
108
  field = Field::EnumField.new(type, otype, name, tag, opts)
109
109
  elsif type.ancestors.include?(ProtocolBuffers::Message)
110
- field = Field::MessageField.new(type, otype, name, tag, opts)
110
+ if opts[:group]
111
+ field = Field::GroupField.new(type, otype, name, tag, opts)
112
+ else
113
+ field = Field::MessageField.new(type, otype, name, tag, opts)
114
+ end
111
115
  else
112
116
  raise("Type not found: #{type}")
113
117
  end
@@ -237,9 +241,11 @@ module ProtocolBuffers
237
241
  def wire_type
238
242
  WireTypes::LENGTH_DELIMITED
239
243
  end
244
+ end
240
245
 
241
- def deserialize(value)
242
- value.read
246
+ module GROUP
247
+ def wire_type
248
+ WireTypes::START_GROUP
243
249
  end
244
250
  end
245
251
 
@@ -288,6 +294,10 @@ module ProtocolBuffers
288
294
  def default_value
289
295
  @default_value || @default_value = (@opts[:default] || "").freeze
290
296
  end
297
+
298
+ def deserialize(value)
299
+ value.read
300
+ end
291
301
  end
292
302
 
293
303
  class StringField < BytesField
@@ -572,9 +582,7 @@ module ProtocolBuffers
572
582
  end
573
583
  end
574
584
 
575
- class MessageField < Field
576
- include WireFormats::LENGTH_DELIMITED
577
-
585
+ class AggregateField < Field
578
586
  attr_reader :proxy_class
579
587
 
580
588
  def initialize(proxy_class, otype, name, tag, opts = {})
@@ -602,5 +610,12 @@ module ProtocolBuffers
602
610
  end
603
611
  end
604
612
 
613
+ class MessageField < AggregateField
614
+ include WireFormats::LENGTH_DELIMITED
615
+ end
616
+
617
+ class GroupField < AggregateField
618
+ include WireFormats::GROUP
619
+ end
605
620
  end
606
621
  end
@@ -498,7 +498,7 @@ module ProtocolBuffers
498
498
  field = fields[tag]
499
499
  new_value = field.default_value
500
500
  self.instance_variable_set("@#{field.name}", new_value)
501
- if field.class == Field::MessageField
501
+ if field.kind_of? Field::AggregateField
502
502
  new_value.notify_on_change(self, tag)
503
503
  end
504
504
  @set_fields[tag] = false
@@ -1,3 +1,3 @@
1
1
  module ProtocolBuffers
2
- VERSION = "1.3.3"
2
+ VERSION = "1.4.0"
3
3
  end
@@ -4,6 +4,10 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
4
4
  require 'protocol_buffers'
5
5
  require 'protocol_buffers/compiler'
6
6
 
7
+ require 'protocol_buffers/compiler/file_descriptor_to_ruby'
8
+
9
+ require 'tmpdir'
10
+ require 'tempfile'
7
11
  describe ProtocolBuffers, "compiler" do
8
12
 
9
13
  test_files = Dir[File.join(File.dirname(__FILE__), "proto_files", "*.proto")]
@@ -13,6 +17,8 @@ describe ProtocolBuffers, "compiler" do
13
17
  end
14
18
 
15
19
  test_files.each do |file|
20
+ next if File.basename(file) == 'depends.proto'
21
+
16
22
  it "can compile #{File.basename(file)}" do
17
23
  proc do
18
24
  ProtocolBuffers::Compiler.compile_and_load(file)
@@ -20,6 +26,35 @@ describe ProtocolBuffers, "compiler" do
20
26
  end
21
27
  end
22
28
 
29
+ it 'can compile and instantiate a proto with nested dependencies' do
30
+ protocfile = Tempfile.new('ruby-protoc')
31
+ protocfile.binmode
32
+
33
+ ProtocolBuffers::Compiler.compile(protocfile.path, %w(
34
+ spec/proto_files/simple.proto
35
+ spec/proto_files/nested/child.proto
36
+ spec/proto_files/depends.proto
37
+ ), :include_dirs => %w(spec/proto_files))
38
+
39
+
40
+ descriptor_set = FileDescriptorSet.parse(protocfile)
41
+ protocfile.close(true)
42
+
43
+ Dir.mktmpdir do |dir|
44
+ descriptor_set.file.each do |file|
45
+ name = file.name
46
+ path = File.join(dir, File.dirname(name), File.basename(name, '.proto') + '.pb.rb')
47
+ FileUtils.mkdir_p File.dirname(path)
48
+ File.open(path, "w") {|f|
49
+ FileDescriptorToRuby.new(file).write(f)
50
+ }
51
+ end
52
+
53
+ $LOAD_PATH << dir
54
+ load File.join(dir, 'depends.pb.rb')
55
+ end
56
+ end
57
+
23
58
  it "can compile and instantiate a message in a package with under_scores" do
24
59
  Object.send(:remove_const, :UnderScore) if defined?(UnderScore)
25
60
 
@@ -1,5 +1,8 @@
1
1
  package depends;
2
2
 
3
3
  import "simple.proto";
4
+ import "nested/child.proto";
4
5
 
5
- message Depends {}
6
+ message Depends {
7
+ optional nested.child.Child child_field = 1;
8
+ }
@@ -20,6 +20,9 @@ module Featureful
20
20
  class A < ::ProtocolBuffers::Message
21
21
  # forward declarations
22
22
  class Sub < ::ProtocolBuffers::Message; end
23
+ class Group1 < ::ProtocolBuffers::Message; end
24
+ class Group2 < ::ProtocolBuffers::Message; end
25
+ class Group3 < ::ProtocolBuffers::Message; end
23
26
 
24
27
  # nested messages
25
28
  class Sub < ::ProtocolBuffers::Message
@@ -43,12 +46,54 @@ module Featureful
43
46
  optional ::Featureful::A::Sub::SubSub, :subsub1, 3
44
47
  end
45
48
 
49
+ class Group1 < ::ProtocolBuffers::Message
50
+ # forward declarations
51
+ class Subgroup < ::ProtocolBuffers::Message; end
52
+
53
+ # nested messages
54
+ class Subgroup < ::ProtocolBuffers::Message
55
+ required :int32, :i1, 1
56
+ end
57
+
58
+ required :int32, :i1, 1
59
+ repeated ::Featureful::A::Group1::Subgroup, :subgroup, 2, :group => true
60
+ end
61
+
62
+ class Group2 < ::ProtocolBuffers::Message
63
+ # forward declarations
64
+ class Subgroup < ::ProtocolBuffers::Message; end
65
+
66
+ # nested messages
67
+ class Subgroup < ::ProtocolBuffers::Message
68
+ required :int32, :i1, 1
69
+ end
70
+
71
+ required :int32, :i1, 1
72
+ repeated ::Featureful::A::Group2::Subgroup, :subgroup, 2, :group => true
73
+ end
74
+
75
+ class Group3 < ::ProtocolBuffers::Message
76
+ # forward declarations
77
+ class Subgroup < ::ProtocolBuffers::Message; end
78
+
79
+ # nested messages
80
+ class Subgroup < ::ProtocolBuffers::Message
81
+ required :int32, :i1, 1
82
+ end
83
+
84
+ required :int32, :i1, 1
85
+ repeated ::Featureful::A::Group3::Subgroup, :subgroup, 2, :group => true
86
+ end
87
+
46
88
  repeated :int32, :i1, 1
47
89
  optional :int32, :i2, 2
48
90
  required :int32, :i3, 3
49
91
  repeated ::Featureful::A::Sub, :sub1, 4
50
92
  optional ::Featureful::A::Sub, :sub2, 5
51
93
  required ::Featureful::A::Sub, :sub3, 6
94
+ repeated ::Featureful::A::Group1, :group1, 7, :group => true
95
+ optional ::Featureful::A::Group2, :group2, 8, :group => true
96
+ required ::Featureful::A::Group3, :group3, 9, :group => true
52
97
  end
53
98
 
54
99
  class B < ::ProtocolBuffers::Message
@@ -25,6 +25,25 @@ message A {
25
25
  repeated Sub sub1 = 4;
26
26
  optional Sub sub2 = 5;
27
27
  required Sub sub3 = 6;
28
+
29
+ repeated group Group1 = 7 {
30
+ required int32 i1 = 1;
31
+ repeated group Subgroup = 2 {
32
+ required int32 i1 = 1;
33
+ }
34
+ }
35
+ optional group Group2 = 8 {
36
+ required int32 i1 = 1;
37
+ repeated group Subgroup = 2 {
38
+ required int32 i1 = 1;
39
+ }
40
+ }
41
+ required group Group3 = 9 {
42
+ required int32 i1 = 1;
43
+ repeated group Subgroup = 2 {
44
+ required int32 i1 = 1;
45
+ }
46
+ }
28
47
  };
29
48
 
30
49
  message B {
@@ -0,0 +1,5 @@
1
+ package nested.child;
2
+
3
+ message Child {
4
+ optional string test_field = 1;
5
+ };
data/spec/runtime_spec.rb CHANGED
@@ -135,6 +135,20 @@ describe ProtocolBuffers, "runtime" do
135
135
  a1.has_sub2?.should == true
136
136
  end
137
137
 
138
+ it "flags group that have been set" do
139
+ a1 = Featureful::A.new
140
+ a1.value_for_tag?(a1.class.field_for_name(:group1).tag).should == true
141
+ a1.value_for_tag?(a1.class.field_for_name(:group2).tag).should == false
142
+ a1.value_for_tag?(a1.class.field_for_name(:group3).tag).should == false
143
+
144
+ a1.has_group1?.should == true
145
+ a1.has_group2?.should == false
146
+ a1.has_group3?.should == false
147
+
148
+ a1.group2 = Featureful::A::Group2.new(:i1 => 1)
149
+ a1.has_group2?.should == true
150
+ end
151
+
138
152
  describe "#inspect" do
139
153
  it "should leave out un-set fields" do
140
154
  b1 = Simple::Bar.new
@@ -149,6 +163,10 @@ describe ProtocolBuffers, "runtime" do
149
163
  a1.has_sub2?.should == false
150
164
  a1.sub2.payload = "ohai"
151
165
  a1.has_sub2?.should == true
166
+
167
+ a1.has_group2?.should == false
168
+ a1.group2.i1 = 1
169
+ a1.has_sub2?.should == true
152
170
  end
153
171
 
154
172
  it "detects changes to a sub-sub-message and flags up the chain" do
@@ -609,6 +627,9 @@ describe ProtocolBuffers, "runtime" do
609
627
  f.valid?.should == false
610
628
  f.sub3.valid?.should == false
611
629
  f.sub3.payload_type = Featureful::A::Sub::Payloads::P1
630
+ f.valid?.should == false
631
+ f.group3.valid?.should == false
632
+ f.group3.i1 = 1
612
633
  f.valid?.should == true
613
634
  f.sub3.valid?.should == true
614
635
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-protocol-buffers
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.3
4
+ version: 1.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2013-03-22 00:00:00.000000000 Z
15
+ date: 2013-06-18 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: autotest-standalone
@@ -131,6 +131,7 @@ email:
131
131
  - brian@codekitchen.net
132
132
  - bb@xnull.de
133
133
  executables:
134
+ - protoc-gen-ruby
134
135
  - ruby-protoc
135
136
  extensions: []
136
137
  extra_rdoc_files:
@@ -145,6 +146,7 @@ files:
145
146
  - LICENSE
146
147
  - README.md
147
148
  - Rakefile
149
+ - bin/protoc-gen-ruby
148
150
  - bin/ruby-protoc
149
151
  - debian/changelog
150
152
  - debian/compatability
@@ -159,6 +161,8 @@ files:
159
161
  - lib/protocol_buffers/compiler/descriptor.proto
160
162
  - lib/protocol_buffers/compiler/file_descriptor_to_d.rb
161
163
  - lib/protocol_buffers/compiler/file_descriptor_to_ruby.rb
164
+ - lib/protocol_buffers/compiler/plugin.pb.rb
165
+ - lib/protocol_buffers/compiler/plugin.proto
162
166
  - lib/protocol_buffers/limited_io.rb
163
167
  - lib/protocol_buffers/runtime/decoder.rb
164
168
  - lib/protocol_buffers/runtime/encoder.rb
@@ -178,6 +182,7 @@ files:
178
182
  - spec/proto_files/dotted_package.proto
179
183
  - spec/proto_files/featureful.pb.rb
180
184
  - spec/proto_files/featureful.proto
185
+ - spec/proto_files/nested/child.proto
181
186
  - spec/proto_files/no_package.proto
182
187
  - spec/proto_files/packed.pb.rb
183
188
  - spec/proto_files/packed.proto
@@ -203,12 +208,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
203
208
  - - ! '>='
204
209
  - !ruby/object:Gem::Version
205
210
  version: '0'
211
+ segments:
212
+ - 0
213
+ hash: 2363751627391486036
206
214
  required_rubygems_version: !ruby/object:Gem::Requirement
207
215
  none: false
208
216
  requirements:
209
217
  - - ! '>='
210
218
  - !ruby/object:Gem::Version
211
219
  version: '0'
220
+ segments:
221
+ - 0
222
+ hash: 2363751627391486036
212
223
  requirements: []
213
224
  rubyforge_project:
214
225
  rubygems_version: 1.8.23
@@ -224,6 +235,7 @@ test_files:
224
235
  - spec/proto_files/dotted_package.proto
225
236
  - spec/proto_files/featureful.pb.rb
226
237
  - spec/proto_files/featureful.proto
238
+ - spec/proto_files/nested/child.proto
227
239
  - spec/proto_files/no_package.proto
228
240
  - spec/proto_files/packed.pb.rb
229
241
  - spec/proto_files/packed.proto