beefcake 0.5.0 → 1.0.0.pre2
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +4 -4
- data/Gemfile +1 -1
- data/README.md +1 -1
- data/Rakefile +1 -1
- data/beefcake.gemspec +4 -3
- data/bench/simple.rb +30 -4
- data/lib/beefcake.rb +16 -7
- data/lib/beefcake/buffer/base.rb +41 -29
- data/lib/beefcake/buffer/decode.rb +1 -6
- data/lib/beefcake/buffer/encode.rb +1 -5
- data/lib/beefcake/version.rb +1 -1
- data/test/benchmark_test.rb +42 -0
- data/test/buffer_decode_test.rb +2 -2
- data/test/buffer_encode_test.rb +10 -5
- data/test/buffer_test.rb +2 -2
- data/test/generator_test.rb +2 -6
- data/test/message_test.rb +43 -4
- metadata +28 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9b7cab784e70b3c3800d45d9d109687848a2d429
|
4
|
+
data.tar.gz: e00c7156ab112921ec2ad56e412a4121e9106f52
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3c4c02406d0afc4bf7cd3788c7387bae133264167371ff530eee11d4b9565ef1595824247a9556e4409354cbc1e741829e99e216bc175804afc3285498f60447
|
7
|
+
data.tar.gz: 3219554a0b7023643d795ebd5cd21cb3c89da8669b7d5a5d1eb1920a4ba8904c1291be1ba120be01852679f8ebcfa9b1253e10350d430305aa6827f1f30335e2
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -141,7 +141,7 @@ http://code.google.com/apis/protocolbuffers/docs/encoding.html
|
|
141
141
|
rake test
|
142
142
|
|
143
143
|
Beefcake conducts continuous integration on [Travis CI](http://travis-ci.org).
|
144
|
-
The current build status for HEAD is [](https://travis-ci.org/protobuf-ruby/beefcake).
|
144
|
+
The current build status for HEAD is [](https://travis-ci.org/protobuf-ruby/beefcake).
|
145
145
|
|
146
146
|
All pull requests automatically trigger a build request. Please ensure that
|
147
147
|
tests succeed.
|
data/Rakefile
CHANGED
data/beefcake.gemspec
CHANGED
@@ -13,12 +13,13 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.description = %q{A sane protobuf library for Ruby}
|
14
14
|
s.license = 'MIT'
|
15
15
|
|
16
|
-
s.rubyforge_project = "beefcake"
|
17
|
-
|
18
16
|
s.files = `git ls-files`.split("\n")
|
19
17
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
20
18
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
21
19
|
s.require_paths = ["lib"]
|
22
20
|
|
23
|
-
s.
|
21
|
+
s.required_ruby_version = '>= 1.9.3'
|
22
|
+
|
23
|
+
s.add_development_dependency('rake', '~> 10.1.0')
|
24
|
+
s.add_development_dependency('minitest', '~> 5.3')
|
24
25
|
end
|
data/bench/simple.rb
CHANGED
@@ -10,7 +10,10 @@ class MyMessage
|
|
10
10
|
required :float, :float, 5
|
11
11
|
end
|
12
12
|
|
13
|
-
|
13
|
+
ITERS = 100_000
|
14
|
+
|
15
|
+
case ARGV[0]
|
16
|
+
when 'pprof'
|
14
17
|
# profile message creation/encoding/decoding w/ perftools.rb
|
15
18
|
# works on 1.8 and 1.9
|
16
19
|
# ruby bench/simple.rb pprof
|
@@ -20,7 +23,7 @@ if ARGV[0] == 'pprof'
|
|
20
23
|
require 'rubygems'
|
21
24
|
require 'perftools'
|
22
25
|
PerfTools::CpuProfiler.start(File.expand_path("../beefcake.prof", __FILE__)) do
|
23
|
-
|
26
|
+
ITERS.times do
|
24
27
|
str = MyMessage.new(
|
25
28
|
:number => 12345,
|
26
29
|
:chars => 'hello',
|
@@ -35,6 +38,31 @@ if ARGV[0] == 'pprof'
|
|
35
38
|
`pprof.rb beefcake.prof --gif > beefcake.prof.gif`
|
36
39
|
end
|
37
40
|
|
41
|
+
when 'ruby-prof'
|
42
|
+
# profile message creation/encoding/decoding w/ ruby-prof
|
43
|
+
# works on 1.8 and 1.9
|
44
|
+
# ruby bench/simple.rb ruby-prof
|
45
|
+
# open bench/beefcake.prof.html
|
46
|
+
|
47
|
+
require 'ruby-prof'
|
48
|
+
result = RubyProf.profile do
|
49
|
+
ITERS.times do
|
50
|
+
str = MyMessage.new(
|
51
|
+
:number => 12345,
|
52
|
+
:chars => 'hello',
|
53
|
+
:raw => 'world',
|
54
|
+
:bool => true,
|
55
|
+
:float => 1.2345
|
56
|
+
).encode
|
57
|
+
MyMessage.decode(str)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
filename = File.expand_path('beefcake.prof.html', File.dirname(__FILE__))
|
62
|
+
File.open(filename, 'w') do |file|
|
63
|
+
RubyProf::GraphHtmlPrinter.new(result).print(file)
|
64
|
+
end
|
65
|
+
|
38
66
|
else
|
39
67
|
# benchmark message creation/encoding/decoding
|
40
68
|
# rvm install 1.8.7 1.9.2 jruby rbx
|
@@ -42,8 +70,6 @@ else
|
|
42
70
|
|
43
71
|
require 'benchmark'
|
44
72
|
|
45
|
-
ITERS = 100_000
|
46
|
-
|
47
73
|
Benchmark.bmbm do |x|
|
48
74
|
x.report 'object creation' do
|
49
75
|
ITERS.times do
|
data/lib/beefcake.rb
CHANGED
@@ -23,6 +23,11 @@ module Beefcake
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
+
class DuplicateFieldNumber < StandardError
|
27
|
+
def initialize(num, name)
|
28
|
+
super("Field number #{num} (#{name}) was already used")
|
29
|
+
end
|
30
|
+
end
|
26
31
|
|
27
32
|
class Field < Struct.new(:rule, :name, :type, :fn, :opts)
|
28
33
|
def <=>(o)
|
@@ -45,6 +50,9 @@ module Beefcake
|
|
45
50
|
end
|
46
51
|
|
47
52
|
def field(rule, name, type, fn, opts)
|
53
|
+
if fields.include?(fn)
|
54
|
+
raise DuplicateFieldNumber.new(fn, name)
|
55
|
+
end
|
48
56
|
fields[fn] = Field.new(rule, name, type, fn, opts)
|
49
57
|
attr_accessor name
|
50
58
|
end
|
@@ -69,7 +77,7 @@ module Beefcake
|
|
69
77
|
|
70
78
|
# TODO: Error if any required fields at nil
|
71
79
|
|
72
|
-
|
80
|
+
__beefcake_fields__.values.sort.each do |fld|
|
73
81
|
if fld.opts[:packed]
|
74
82
|
bytes = encode!(Buffer.new, fld, 0)
|
75
83
|
buf.append_info(fld.fn, Buffer.wire_for(fld.type))
|
@@ -134,7 +142,7 @@ module Beefcake
|
|
134
142
|
end
|
135
143
|
|
136
144
|
def validate!
|
137
|
-
|
145
|
+
__beefcake_fields__.values.each do |fld|
|
138
146
|
if fld.rule == :required && self[fld.name].nil?
|
139
147
|
raise RequiredFieldNotSetError, fld.name
|
140
148
|
end
|
@@ -217,12 +225,12 @@ module Beefcake
|
|
217
225
|
end
|
218
226
|
|
219
227
|
def initialize(attrs={})
|
220
|
-
|
228
|
+
__beefcake_fields__.values.each do |fld|
|
221
229
|
self[fld.name] = attrs[fld.name]
|
222
230
|
end
|
223
231
|
end
|
224
232
|
|
225
|
-
def
|
233
|
+
def __beefcake_fields__
|
226
234
|
self.class.fields
|
227
235
|
end
|
228
236
|
|
@@ -236,11 +244,12 @@ module Beefcake
|
|
236
244
|
|
237
245
|
def ==(o)
|
238
246
|
return false if (o == nil) || (o == false)
|
239
|
-
|
247
|
+
return false unless o.is_a? self.class
|
248
|
+
__beefcake_fields__.values.all? {|fld| self[fld.name] == o[fld.name] }
|
240
249
|
end
|
241
250
|
|
242
251
|
def inspect
|
243
|
-
set =
|
252
|
+
set = __beefcake_fields__.values.select {|fld| self[fld.name] != nil }
|
244
253
|
|
245
254
|
flds = set.map do |fld|
|
246
255
|
val = self[fld.name]
|
@@ -260,7 +269,7 @@ module Beefcake
|
|
260
269
|
end
|
261
270
|
|
262
271
|
def to_hash
|
263
|
-
|
272
|
+
__beefcake_fields__.values.inject({}) do |h, fld|
|
264
273
|
value = self[fld.name]
|
265
274
|
unless value.nil?
|
266
275
|
h[fld.name] = value
|
data/lib/beefcake/buffer/base.rb
CHANGED
@@ -3,31 +3,42 @@ module Beefcake
|
|
3
3
|
class Buffer
|
4
4
|
|
5
5
|
MinUint32 = 0
|
6
|
-
MaxUint32 = (1<<32)-1
|
7
|
-
MinInt32 = -(1<<31)
|
8
|
-
MaxInt32 = (1<<31)-1
|
6
|
+
MaxUint32 = (1 << 32)-1
|
7
|
+
MinInt32 = -(1 << 31)
|
8
|
+
MaxInt32 = (1 << 31)-1
|
9
9
|
|
10
10
|
MinUint64 = 0
|
11
|
-
MaxUint64 = (1<<64)-1
|
12
|
-
MinInt64 = -(1<<63)
|
13
|
-
MaxInt64 = (1<<63)-1
|
11
|
+
MaxUint64 = (1 << 64)-1
|
12
|
+
MinInt64 = -(1 << 63)
|
13
|
+
MaxInt64 = (1 << 63)-1
|
14
|
+
|
15
|
+
WIRES = {
|
16
|
+
:int32 => 0,
|
17
|
+
:uint32 => 0,
|
18
|
+
:sint32 => 0,
|
19
|
+
:int64 => 0,
|
20
|
+
:uint64 => 0,
|
21
|
+
:sint64 => 0,
|
22
|
+
:bool => 0,
|
23
|
+
:fixed64 => 1,
|
24
|
+
:sfixed64 => 1,
|
25
|
+
:double => 1,
|
26
|
+
:string => 2,
|
27
|
+
:bytes => 2,
|
28
|
+
:fixed32 => 5,
|
29
|
+
:sfixed32 => 5,
|
30
|
+
:float => 5,
|
31
|
+
}
|
14
32
|
|
15
33
|
def self.wire_for(type)
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
raise UnknownType, type
|
22
|
-
end
|
23
|
-
when :int32, :uint32, :sint32, :int64, :uint64, :sint64, :bool, Module
|
24
|
-
0
|
25
|
-
when :fixed64, :sfixed64, :double
|
26
|
-
1
|
27
|
-
when :string, :bytes
|
34
|
+
wire = WIRES[type]
|
35
|
+
|
36
|
+
if wire
|
37
|
+
wire
|
38
|
+
elsif Class === type && encodable?(type)
|
28
39
|
2
|
29
|
-
|
30
|
-
|
40
|
+
elsif Module === type
|
41
|
+
0
|
31
42
|
else
|
32
43
|
raise UnknownType, type
|
33
44
|
end
|
@@ -35,11 +46,10 @@ module Beefcake
|
|
35
46
|
|
36
47
|
def self.encodable?(type)
|
37
48
|
return false if ! type.is_a?(Class)
|
38
|
-
|
39
|
-
pims.include?(:encode) || pims.include?("encode")
|
49
|
+
type.public_method_defined?(:encode)
|
40
50
|
end
|
41
51
|
|
42
|
-
|
52
|
+
attr_reader :buf
|
43
53
|
|
44
54
|
alias :to_s :buf
|
45
55
|
alias :to_str :buf
|
@@ -66,14 +76,14 @@ module Beefcake
|
|
66
76
|
self.buf = buf
|
67
77
|
end
|
68
78
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
end
|
79
|
+
def buf=(new_buf)
|
80
|
+
@buf = new_buf.force_encoding('BINARY')
|
81
|
+
@cursor = 0
|
73
82
|
end
|
74
83
|
|
75
84
|
def length
|
76
|
-
|
85
|
+
remain = buf.slice(@cursor..-1)
|
86
|
+
remain.bytesize
|
77
87
|
end
|
78
88
|
|
79
89
|
def <<(bytes)
|
@@ -90,7 +100,9 @@ module Beefcake
|
|
90
100
|
when Module
|
91
101
|
read_uint64
|
92
102
|
else
|
93
|
-
buf.
|
103
|
+
read_slice = buf.byteslice(@cursor, n)
|
104
|
+
@cursor += n
|
105
|
+
return read_slice
|
94
106
|
end
|
95
107
|
end
|
96
108
|
|
@@ -106,11 +106,7 @@ module Beefcake
|
|
106
106
|
|
107
107
|
def append_string(s)
|
108
108
|
actual_string = thaw_string s
|
109
|
-
|
110
|
-
encoded = actual_string.force_encoding 'binary'
|
111
|
-
else
|
112
|
-
encoded = actual_string
|
113
|
-
end
|
109
|
+
encoded = actual_string.force_encoding 'binary'
|
114
110
|
append_uint64(encoded.length)
|
115
111
|
self << encoded
|
116
112
|
end
|
data/lib/beefcake/version.rb
CHANGED
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'minitest/benchmark'
|
3
|
+
require 'beefcake'
|
4
|
+
|
5
|
+
class Inner
|
6
|
+
include Beefcake::Message
|
7
|
+
|
8
|
+
required :content, :string, 1
|
9
|
+
end
|
10
|
+
|
11
|
+
class Outer
|
12
|
+
include Beefcake::Message
|
13
|
+
|
14
|
+
repeated :inner, Inner, 1
|
15
|
+
end
|
16
|
+
|
17
|
+
class BenchmarkTest < Minitest::Benchmark
|
18
|
+
def setup
|
19
|
+
@buf = Beefcake::Buffer.new
|
20
|
+
end
|
21
|
+
|
22
|
+
def bench_read_string
|
23
|
+
assert_performance_linear 0.75 do |n|
|
24
|
+
candidate = 'x' * (n * 1_000)
|
25
|
+
@buf.append_string candidate
|
26
|
+
assert_equal candidate, @buf.read_string
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def bench_decode
|
31
|
+
assert_performance_linear 0.75 do |n|
|
32
|
+
inners = n.times.map{ Inner.new :content => 'x' * 100 }
|
33
|
+
outer = Outer.new :inner => inners
|
34
|
+
|
35
|
+
encoded = outer.encode.to_s
|
36
|
+
|
37
|
+
decoded = Outer.decode encoded
|
38
|
+
|
39
|
+
assert_equal n, decoded.inner.length
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/test/buffer_decode_test.rb
CHANGED
data/test/buffer_encode_test.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# encoding: ASCII-8BIT
|
2
|
-
require '
|
2
|
+
require 'minitest/autorun'
|
3
3
|
require 'beefcake/buffer/encode'
|
4
4
|
|
5
|
-
class BufferEncodeTest < Test
|
5
|
+
class BufferEncodeTest < Minitest::Test
|
6
6
|
|
7
7
|
B = Beefcake::Buffer
|
8
8
|
|
@@ -211,9 +211,14 @@ class BufferEncodeTest < Test::Unit::TestCase
|
|
211
211
|
assert_equal "\376\377\377\377\377\377\377\377", @buf.to_s
|
212
212
|
end
|
213
213
|
|
214
|
-
def
|
215
|
-
|
216
|
-
assert_equal
|
214
|
+
def test_append_unicode_string
|
215
|
+
ingest = "\u{1f63a}" * 5
|
216
|
+
assert_equal 5, ingest.chars.to_a.length
|
217
|
+
expected = ingest.bytes.to_a.length.chr + ingest
|
218
|
+
@buf.append_string(ingest)
|
219
|
+
actual = @buf.to_s
|
220
|
+
assert_equal expected.bytes.to_a.length, actual.bytes.to_a.length
|
221
|
+
assert_equal expected.bytes.to_a, actual.bytes.to_a
|
217
222
|
end
|
218
223
|
|
219
224
|
def test_append_bytes
|
data/test/buffer_test.rb
CHANGED
data/test/generator_test.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
require '
|
1
|
+
require 'minitest/autorun'
|
2
2
|
require 'beefcake/generator'
|
3
3
|
|
4
|
-
class GeneratorTest < Test
|
4
|
+
class GeneratorTest < Minitest::Test
|
5
5
|
|
6
6
|
def setup
|
7
7
|
# Load up the generator request for the addressbook.proto example
|
@@ -39,11 +39,7 @@ class GeneratorTest < Test::Unit::TestCase
|
|
39
39
|
# Encoding::CompatibilityError: incompatible character encodings: ASCII-8BIT and US-ASCII
|
40
40
|
def test_encode_decode_generated_response
|
41
41
|
@res = Beefcake::Generator.compile([], @req)
|
42
|
-
assert_nothing_raised { @res.encode }
|
43
|
-
end
|
44
42
|
|
45
|
-
def test_encode_decode_generated_response
|
46
|
-
@res = Beefcake::Generator.compile([], @req)
|
47
43
|
assert_equal(CodeGeneratorResponse, @res.class)
|
48
44
|
|
49
45
|
round_trip = CodeGeneratorResponse.decode(@res.encode)
|
data/test/message_test.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'minitest/autorun'
|
2
2
|
require 'beefcake'
|
3
3
|
|
4
4
|
class NumericsMessage
|
@@ -96,7 +96,13 @@ class LargeFieldNumberMessage
|
|
96
96
|
required :field_2, :string, 100
|
97
97
|
end
|
98
98
|
|
99
|
-
class
|
99
|
+
class FieldsMessage
|
100
|
+
include Beefcake::Message
|
101
|
+
|
102
|
+
repeated :fields, :string, 1
|
103
|
+
end
|
104
|
+
|
105
|
+
class MessageTest < Minitest::Test
|
100
106
|
B = Beefcake::Buffer
|
101
107
|
|
102
108
|
## Encoding
|
@@ -258,6 +264,11 @@ class MessageTest < Test::Unit::TestCase
|
|
258
264
|
assert_equal buf.to_s, msg.encode.to_s
|
259
265
|
end
|
260
266
|
|
267
|
+
def test_encode_unknown_field
|
268
|
+
msg = SimpleMessage.new :mystery_field => 'asdf'
|
269
|
+
msg.encode.to_s
|
270
|
+
end
|
271
|
+
|
261
272
|
## Decoding
|
262
273
|
def test_decode_numerics
|
263
274
|
msg = NumericsMessage.new({
|
@@ -276,7 +287,7 @@ class MessageTest < Test::Unit::TestCase
|
|
276
287
|
|
277
288
|
got = NumericsMessage.decode(msg.encode)
|
278
289
|
|
279
|
-
msg.
|
290
|
+
msg.__beefcake_fields__.values.each do |fld|
|
280
291
|
assert_equal msg[fld.name], got[fld.name], fld.name
|
281
292
|
end
|
282
293
|
end
|
@@ -357,7 +368,14 @@ class MessageTest < Test::Unit::TestCase
|
|
357
368
|
b = SimpleMessage.new :a => 1
|
358
369
|
assert_equal a, b
|
359
370
|
c = SimpleMessage.new :a => 2
|
360
|
-
|
371
|
+
refute_equal b, c
|
372
|
+
|
373
|
+
d = EnumsMessage.new :a => 5
|
374
|
+
e = EnumsDefaultMessage.new :a => 5
|
375
|
+
|
376
|
+
refute_equal d, e
|
377
|
+
refute_equal d, :symbol
|
378
|
+
refute_equal :symbol, d
|
361
379
|
end
|
362
380
|
|
363
381
|
def test_inspect
|
@@ -394,6 +412,17 @@ class MessageTest < Test::Unit::TestCase
|
|
394
412
|
assert_equal(exp, msg.to_hash)
|
395
413
|
end
|
396
414
|
|
415
|
+
def test_duplicate_index
|
416
|
+
assert_raises Beefcake::Message::DuplicateFieldNumber do
|
417
|
+
Class.new do
|
418
|
+
include Beefcake::Message
|
419
|
+
|
420
|
+
required :clever_name, :int32, 1
|
421
|
+
required :naughty_field, :string, 1
|
422
|
+
end
|
423
|
+
end
|
424
|
+
end
|
425
|
+
|
397
426
|
def test_bool_to_hash
|
398
427
|
true_message = BoolMessage.new :bool => true
|
399
428
|
true_expectation = { :bool => true }
|
@@ -404,4 +433,14 @@ class MessageTest < Test::Unit::TestCase
|
|
404
433
|
assert_equal false_expectation, false_message.to_hash
|
405
434
|
end
|
406
435
|
|
436
|
+
def test_fields_named_fields
|
437
|
+
contents = %w{fields named fields}
|
438
|
+
msg = FieldsMessage.new fields: contents
|
439
|
+
assert_equal 1, msg.__beefcake_fields__.length
|
440
|
+
assert_equal contents, msg.fields
|
441
|
+
|
442
|
+
assert_equal msg, FieldsMessage.decode(msg.encode)
|
443
|
+
|
444
|
+
assert_equal "<FieldsMessage fields: [\"fields\", \"named\", \"fields\"]>", msg.inspect
|
445
|
+
end
|
407
446
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: beefcake
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0.pre2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Blake Mizerany
|
@@ -10,22 +10,36 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2014-06-16 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rake
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - "~>"
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: 10.1.0
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
|
-
- -
|
26
|
+
- - "~>"
|
27
27
|
- !ruby/object:Gem::Version
|
28
28
|
version: 10.1.0
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: minitest
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - "~>"
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '5.3'
|
36
|
+
type: :development
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '5.3'
|
29
43
|
description: A sane protobuf library for Ruby
|
30
44
|
email:
|
31
45
|
- blake.mizerany@gmail.com
|
@@ -36,8 +50,8 @@ executables:
|
|
36
50
|
extensions: []
|
37
51
|
extra_rdoc_files: []
|
38
52
|
files:
|
39
|
-
- .gitignore
|
40
|
-
- .travis.yml
|
53
|
+
- ".gitignore"
|
54
|
+
- ".travis.yml"
|
41
55
|
- Gemfile
|
42
56
|
- LICENSE
|
43
57
|
- README.md
|
@@ -54,6 +68,7 @@ files:
|
|
54
68
|
- lib/beefcake/buffer/encode.rb
|
55
69
|
- lib/beefcake/generator.rb
|
56
70
|
- lib/beefcake/version.rb
|
71
|
+
- test/benchmark_test.rb
|
57
72
|
- test/buffer_decode_test.rb
|
58
73
|
- test/buffer_encode_test.rb
|
59
74
|
- test/buffer_test.rb
|
@@ -69,21 +84,22 @@ require_paths:
|
|
69
84
|
- lib
|
70
85
|
required_ruby_version: !ruby/object:Gem::Requirement
|
71
86
|
requirements:
|
72
|
-
- -
|
87
|
+
- - ">="
|
73
88
|
- !ruby/object:Gem::Version
|
74
|
-
version:
|
89
|
+
version: 1.9.3
|
75
90
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
91
|
requirements:
|
77
|
-
- -
|
92
|
+
- - ">"
|
78
93
|
- !ruby/object:Gem::Version
|
79
|
-
version:
|
94
|
+
version: 1.3.1
|
80
95
|
requirements: []
|
81
|
-
rubyforge_project:
|
82
|
-
rubygems_version: 2.
|
96
|
+
rubyforge_project:
|
97
|
+
rubygems_version: 2.2.2
|
83
98
|
signing_key:
|
84
99
|
specification_version: 4
|
85
100
|
summary: A sane protobuf library for Ruby
|
86
101
|
test_files:
|
102
|
+
- test/benchmark_test.rb
|
87
103
|
- test/buffer_decode_test.rb
|
88
104
|
- test/buffer_encode_test.rb
|
89
105
|
- test/buffer_test.rb
|