ruby-protocol-buffers 1.2.3.beta2 → 1.3.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.
Files changed (4) hide show
  1. data/README.md +110 -24
  2. data/VERSION +1 -1
  3. data/ruby-protocol-buffers.gemspec +2 -1
  4. metadata +28 -12
data/README.md CHANGED
@@ -6,14 +6,16 @@ RPC protocols and file formats.
6
6
 
7
7
  This library has two components: a compiler to turn `.proto` definitions
8
8
  into Ruby modules (extension `.pb.rb`), and a runtime to use protocol
9
- buffers defined by these modules. The compiler relies on Google's C++ based
10
- compiler (+protoc+) for much of the heavy lifting -- this has huge advantages in
11
- ensuring compatibility and correctness.
9
+ buffers defined by these modules.
12
10
 
13
- This library is heavily optimized for encoding and decoding speed. There is a
14
- small C extension available in the ext/ dir that will improve performance even
15
- further, but it is currently disabled to avoid rubygems having to compile a
16
- native extension. TODO: anybody know if we can make this optional?
11
+ The compiler relies on Google's C++ based compiler (`protoc`) for much
12
+ of the heavy lifting -- this has huge advantages in ensuring
13
+ compatibility and correctness. If you don't need cross-language
14
+ interoperability you can create Message classes directly in ruby,
15
+ in which case `protoc` is not needed. See "Writing Message Classes
16
+ Directly" below.
17
+
18
+ This library is heavily optimized for encoding and decoding speed.
17
19
 
18
20
  Because this is a tool for generating code, the RDoc documentation is a bit
19
21
  unusual. See the text in the ProtocolBuffers::Message class for details on what
@@ -21,15 +23,109 @@ code is generated.
21
23
 
22
24
  ## Installation
23
25
 
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.
26
+ $ gem install ruby-protocol-buffers
27
+
28
+ If you want to compile .proto files to ruby, you'll need `protoc` version >= 2.2 (the Google Protocol Buffer compiler)
29
+ installed in the environment where you will be compiling them.
30
+ You do not need `protoc` installed to use the generated `.pb.rb` files.
31
+
32
+ ## Example
33
+
34
+ Given the file test.proto:
35
+
36
+ ```
37
+ package Test;
38
+
39
+ message MyMessage
40
+ {
41
+ optional string myField = 1;
42
+ }
43
+ ```
44
+
45
+ Compile it to ruby using the command:
46
+
47
+ $ ruby-protoc test.proto
48
+
49
+ Then it can be used from ruby code:
50
+
51
+ ```ruby
52
+ require 'test.pb'
53
+ msg = Test::MyMessage.new(:myField => 'zomgkittenz')
54
+ open("test_msg", "wb") do |f|
55
+ msg.serialize(f)
56
+ end
57
+ encoded = msg.serialize_to_string # or msg.to_s
58
+ Test::MyMessage.parse(encoded) == msg # true
59
+ ```
60
+
61
+ ## Writing Message Classes Directly
62
+
63
+ Protocol Buffer definitions are often shared between applications
64
+ written in different programming languages, and so are normally defined
65
+ in .proto files and translated to ruby using the `ruby-protoc` binary.
66
+
67
+ However, it's quite simple to write ProtocolBuffers::Message classes
68
+ directly when a .proto file isn't needed.
29
69
 
30
- If you use RubyGems, you can install via:
70
+ ```ruby
71
+ require 'protocol_buffers'
31
72
 
32
- $ sudo gem install ruby-protocol-buffers
73
+ class User < ProtocolBuffers::Message
74
+ required :string, :name, 1
75
+ required :string, :email, 2
76
+ optional :int32, :logins, 3
77
+ end
78
+
79
+ class Group < ProtocolBuffers::Message
80
+ repeated User, :users, 1
81
+ repeated Group, :subgroups, 2
82
+
83
+ module GroupType
84
+ include ProtocolBuffers::Enum
85
+ Study = 1
86
+ Play = 2
87
+ end
88
+
89
+ optional GroupType, :group_type, 3
90
+ end
91
+ ```
92
+
93
+ This code is essentially equivalent to the code `ruby-protoc` will
94
+ generate if given this .proto file:
95
+
96
+ ```
97
+ message User
98
+ {
99
+ required string name = 1;
100
+ required string email = 2;
101
+ optional int32 logins = 3;
102
+ }
103
+
104
+ message Group
105
+ {
106
+ repeated User users = 1;
107
+ repeated Group subgroups = 2;
108
+
109
+ enum GroupType {
110
+ Study = 1;
111
+ Play = 2;
112
+ }
113
+
114
+ optional GroupType group_type = 3;
115
+ }
116
+
117
+ ```
118
+
119
+ Using a hand-written Message subclass is the same as using a Message
120
+ class generated by `ruby-protoc`.
121
+
122
+ ```ruby
123
+ group = Group.new(:group_type => Group::GroupType::Play)
124
+ group.users << User.new(:name => 'test user', :email => 'test@example.com')
125
+ open("group1.test", "wb") do |f|
126
+ group.serialize(f)
127
+ end
128
+ ```
33
129
 
34
130
  ## Features
35
131
 
@@ -53,16 +149,6 @@ If you use RubyGems, you can install via:
53
149
  * deprecated protocol features (e.g. groups)
54
150
  * the unsupported options (java_*, optimize_for, message_set_wire_format, deprecated)
55
151
 
56
- ## Simple Usage Example
57
-
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
65
-
66
152
  ## Authors
67
153
 
68
154
  Brian Palmer (http://github.com/codekitchen)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.2.3.beta2
1
+ 1.3.0
@@ -18,9 +18,10 @@ Gem::Specification.new do |s|
18
18
 
19
19
  s.extra_rdoc_files << "Changelog.md"
20
20
 
21
- s.add_development_dependency "rspec", "~> 2.5"
22
21
  s.add_development_dependency "autotest-standalone"
23
22
  s.add_development_dependency "autotest-growl"
23
+ s.add_development_dependency "rake"
24
24
  s.add_development_dependency "rcov"
25
+ s.add_development_dependency "rspec", "~> 2.5"
25
26
  s.add_development_dependency "yard"
26
27
  end
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-protocol-buffers
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.3.beta2
5
- prerelease: 6
4
+ version: 1.3.0
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Brian Palmer
@@ -11,26 +11,26 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2012-12-19 00:00:00.000000000 Z
14
+ date: 2013-01-18 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
- name: rspec
17
+ name: autotest-standalone
18
18
  requirement: !ruby/object:Gem::Requirement
19
19
  none: false
20
20
  requirements:
21
- - - ~>
21
+ - - ! '>='
22
22
  - !ruby/object:Gem::Version
23
- version: '2.5'
23
+ version: '0'
24
24
  type: :development
25
25
  prerelease: false
26
26
  version_requirements: !ruby/object:Gem::Requirement
27
27
  none: false
28
28
  requirements:
29
- - - ~>
29
+ - - ! '>='
30
30
  - !ruby/object:Gem::Version
31
- version: '2.5'
31
+ version: '0'
32
32
  - !ruby/object:Gem::Dependency
33
- name: autotest-standalone
33
+ name: autotest-growl
34
34
  requirement: !ruby/object:Gem::Requirement
35
35
  none: false
36
36
  requirements:
@@ -46,7 +46,7 @@ dependencies:
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  - !ruby/object:Gem::Dependency
49
- name: autotest-growl
49
+ name: rake
50
50
  requirement: !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
@@ -77,6 +77,22 @@ dependencies:
77
77
  - - ! '>='
78
78
  - !ruby/object:Gem::Version
79
79
  version: '0'
80
+ - !ruby/object:Gem::Dependency
81
+ name: rspec
82
+ requirement: !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ~>
86
+ - !ruby/object:Gem::Version
87
+ version: '2.5'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ none: false
92
+ requirements:
93
+ - - ~>
94
+ - !ruby/object:Gem::Version
95
+ version: '2.5'
80
96
  - !ruby/object:Gem::Dependency
81
97
  name: yard
82
98
  requirement: !ruby/object:Gem::Requirement
@@ -166,9 +182,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
166
182
  required_rubygems_version: !ruby/object:Gem::Requirement
167
183
  none: false
168
184
  requirements:
169
- - - ! '>'
185
+ - - ! '>='
170
186
  - !ruby/object:Gem::Version
171
- version: 1.3.1
187
+ version: '0'
172
188
  requirements: []
173
189
  rubyforge_project:
174
190
  rubygems_version: 1.8.23