.. |
bench |
bin |
dat |
lib |
test |
.gitignore |
Gemfile |
LICENSE |
README.md |
Rakefile |
beefcake.gemspec |
$ gem install beefcake
require 'beefcake'
class Variety
include Beefcake::Message
# Required
required :x, :int32, 1
required :y, :int32, 2
# Optional
optional :tag, :string, 3
# Repeated
repeated :ary, :fixed64, 4
repeated :pary, :fixed64, 5, :packed => true
# Enums - Simply use a Module (NOTE: defaults are optional)
module Foonum
A = 1
B = 2
end
# As per the spec, defaults are only set at the end
# of decoding a message, not on object creation.
optional :foo, Foonum, 6, :default => Foonum::B
end
x = Variety.new :x => 1, :y => 2
# or
x = Variety.new
x.x = 1
x.y = 2
Any object responding to <<
can accept encoding
s = ""
x.encode(s)
p [:s, s]
# or (because encode returns the string/stream)
p [:s, x.encode]
# or
open("x.dat") do |f|
x.encode(f)
end
# decode
encoded = x.encode
decoded = Variety.decode(encoded)
p [:x, decoded]
# decode merge
Variety.decoded(more_data, decoded)
Ruby deserves and needs first-class ProtoBuf support. Other libs didn't feel very "Ruby" to me and were hard to parse.
.proto
file$ protoc --beefcake_out output/path -I path/to/proto/files/dir path/to/proto/file
You can set the BEEFCAKE_NAMESPACE variable to generate the classes under a desired namespace. (i.e. App::Foo::Bar)
This library was built with EventMachine in mind. Not just blocking-IO.
Source:
$ git clone git://github.com/bmizerany/beefcake
$ gem install turn
$ cd /path/to/beefcake
$ turn
Currently Beefcake is tested and working on:
optional :foo, :string, :default => "bar"
)http://code.google.com/apis/protocolbuffers/docs/encoding.html
Keith Rarick (kr) for help with encoding/decoding. Aman Gupta (tmm1) for help with cross VM support and performance enhancements.