chrisk-protopuffs 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,4 @@
1
+ .DS_Store
2
+ /coverage/
3
+ /pkg/
4
+ /rdoc/
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: protopuffs
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.1
5
+ platform: ruby
6
+ authors:
7
+ - Chris Kampmeier
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-03-19 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: treetop
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: mocha
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: shoulda
37
+ type: :development
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "0"
44
+ version:
45
+ description: A new implementation of Protocol Buffers in Ruby
46
+ email: chris@kampers.net
47
+ executables: []
48
+
49
+ extensions: []
50
+
51
+ extra_rdoc_files:
52
+ - README.rdoc
53
+ - LICENSE.txt
54
+ files:
55
+ - LICENSE.txt
56
+ - README.rdoc
57
+ - VERSION.yml
58
+ - lib/protopuffs
59
+ - lib/protopuffs/message
60
+ - lib/protopuffs/message/base.rb
61
+ - lib/protopuffs/message/field.rb
62
+ - lib/protopuffs/message/wire_type.rb
63
+ - lib/protopuffs/parser
64
+ - lib/protopuffs/parser/parser.rb
65
+ - lib/protopuffs/parser/protocol_buffer.treetop
66
+ - lib/protopuffs.rb
67
+ - test/abstract_syntax_tree_test.rb
68
+ - test/fixtures
69
+ - test/fixtures/proto
70
+ - test/fixtures/proto/person.proto
71
+ - test/message_base_test.rb
72
+ - test/message_field_test.rb
73
+ - test/parse_tree_test.rb
74
+ - test/protopuffs_test.rb
75
+ - test/test_helper.rb
76
+ - test/text_format_test.rb
77
+ - test/wire_format_test.rb
78
+ has_rdoc: true
79
+ homepage: http://github.com/chrisk/protopuffs
80
+ licenses: []
81
+
82
+ post_install_message:
83
+ rdoc_options:
84
+ - --inline-source
85
+ - --charset=UTF-8
86
+ require_paths:
87
+ - lib
88
+ required_ruby_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: "0"
93
+ version:
94
+ required_rubygems_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: "0"
99
+ version:
100
+ requirements: []
101
+
102
+ rubyforge_project:
103
+ rubygems_version: 1.3.4
104
+ signing_key:
105
+ specification_version: 2
106
+ summary: Sex, drugs, and protocol buffers
107
+ test_files: []
108
+
@@ -59,7 +59,7 @@ or hashes, as well as <tt>#attributes=</tt>
59
59
  Protopuffs currently only supports a base set of the <tt>.proto</tt> file
60
60
  syntax. Here's what's missing:
61
61
 
62
- * sfixed32 and sfixed64 types
62
+ * the sfixed64 type
63
63
  * sint32 and sint64 types (due to lack of support for ZigZag encoding)
64
64
  * packed repeated fields (the <tt>[packed=true]</tt> option)
65
65
  * enumerations
@@ -0,0 +1,48 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'rake'
4
+ require 'rake/testtask'
5
+ require 'rake/rdoctask'
6
+ require 'rcov/rcovtask'
7
+ begin require 'metric_fu'; rescue LoadError; end
8
+
9
+ begin
10
+ require 'jeweler'
11
+ Jeweler::Tasks.new do |s|
12
+ s.name = "protopuffs"
13
+ s.summary = %Q{Sex, drugs, and protocol buffers}
14
+ s.email = "chris@kampers.net"
15
+ s.homepage = "http://github.com/chrisk/protopuffs"
16
+ s.description = "A new implementation of Protocol Buffers in Ruby"
17
+ s.authors = ["Chris Kampmeier"]
18
+ s.add_dependency "treetop"
19
+ s.add_development_dependency "mocha"
20
+ s.add_development_dependency "shoulda"
21
+ end
22
+ rescue LoadError
23
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
24
+ end
25
+
26
+ Rake::TestTask.new do |t|
27
+ t.libs << 'lib'
28
+ t.pattern = 'test/**/*_test.rb'
29
+ t.verbose = false
30
+ end
31
+
32
+ Rake::RDocTask.new do |rdoc|
33
+ rdoc.rdoc_dir = 'rdoc'
34
+ rdoc.title = 'Protopuffs'
35
+ rdoc.options << '--line-numbers' << '--inline-source'
36
+ rdoc.rdoc_files.include('README*')
37
+ rdoc.rdoc_files.include('LICENSE*')
38
+ rdoc.rdoc_files.include('lib/**/*.rb')
39
+ end
40
+
41
+ Rcov::RcovTask.new do |t|
42
+ t.libs << 'test'
43
+ t.rcov_opts << '--exclude "gems/*"'
44
+ t.test_files = FileList['test/**/*_test.rb']
45
+ t.verbose = true
46
+ end
47
+
48
+ task :default => :test
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :major: 0
3
- :minor: 2
4
- :patch: 1
3
+ :minor: 3
4
+ :patch: 0
@@ -81,7 +81,7 @@ module Protopuffs
81
81
 
82
82
  until @buffer.eof?
83
83
  tag = MessageField.shift_tag(@buffer)
84
- field = self.class.fields.find { |field| field.tag == tag }
84
+ field = self.class.fields.find { |f| f.tag == tag }
85
85
  next if field.nil?
86
86
  value_bytes = field.class.shift(@buffer)
87
87
 
@@ -18,6 +18,7 @@ module Protopuffs
18
18
  when "bytes" then Bytes.new(*args)
19
19
  when "float" then Float.new(*args)
20
20
  when "fixed32" then Fixed32.new(*args)
21
+ when "sfixed32" then SFixed32.new(*args)
21
22
  else Embedded.new(type, *args)
22
23
  end
23
24
  end
@@ -139,6 +140,14 @@ module Protopuffs
139
140
  def self.encode(value); [value].pack('V') end
140
141
  end
141
142
 
143
+ class SFixed32 < Fixed32Base
144
+ def decode(bytes)
145
+ value = bytes.unpack('V').first
146
+ value >= 2**31 ? value -= 2**32 : value
147
+ end
148
+ def self.encode(value); [value].pack('V') end
149
+ end
150
+
142
151
  class Float < Fixed32Base
143
152
  def decode(bytes); bytes.unpack('e').first end
144
153
  def self.encode(value); [value].pack('e') end
@@ -0,0 +1,77 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{protopuffs}
8
+ s.version = "0.3.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Chris Kampmeier"]
12
+ s.date = %q{2009-09-21}
13
+ s.description = %q{A new implementation of Protocol Buffers in Ruby}
14
+ s.email = %q{chris@kampers.net}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".gitignore",
21
+ ".specification",
22
+ "LICENSE.txt",
23
+ "README.rdoc",
24
+ "Rakefile",
25
+ "VERSION.yml",
26
+ "lib/protopuffs.rb",
27
+ "lib/protopuffs/message/base.rb",
28
+ "lib/protopuffs/message/field.rb",
29
+ "lib/protopuffs/message/wire_type.rb",
30
+ "lib/protopuffs/parser/parser.rb",
31
+ "lib/protopuffs/parser/protocol_buffer.treetop",
32
+ "protopuffs.gemspec",
33
+ "test/abstract_syntax_tree_test.rb",
34
+ "test/fixtures/proto/person.proto",
35
+ "test/message_base_test.rb",
36
+ "test/message_field_test.rb",
37
+ "test/parse_tree_test.rb",
38
+ "test/protopuffs_test.rb",
39
+ "test/test_helper.rb",
40
+ "test/text_format_test.rb",
41
+ "test/wire_format_test.rb"
42
+ ]
43
+ s.homepage = %q{http://github.com/chrisk/protopuffs}
44
+ s.rdoc_options = ["--charset=UTF-8"]
45
+ s.require_paths = ["lib"]
46
+ s.rubygems_version = %q{1.3.5}
47
+ s.summary = %q{Sex, drugs, and protocol buffers}
48
+ s.test_files = [
49
+ "test/abstract_syntax_tree_test.rb",
50
+ "test/message_base_test.rb",
51
+ "test/message_field_test.rb",
52
+ "test/parse_tree_test.rb",
53
+ "test/protopuffs_test.rb",
54
+ "test/test_helper.rb",
55
+ "test/text_format_test.rb",
56
+ "test/wire_format_test.rb"
57
+ ]
58
+
59
+ if s.respond_to? :specification_version then
60
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
61
+ s.specification_version = 3
62
+
63
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
64
+ s.add_runtime_dependency(%q<treetop>, [">= 0"])
65
+ s.add_development_dependency(%q<mocha>, [">= 0"])
66
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
67
+ else
68
+ s.add_dependency(%q<treetop>, [">= 0"])
69
+ s.add_dependency(%q<mocha>, [">= 0"])
70
+ s.add_dependency(%q<shoulda>, [">= 0"])
71
+ end
72
+ else
73
+ s.add_dependency(%q<treetop>, [">= 0"])
74
+ s.add_dependency(%q<mocha>, [">= 0"])
75
+ s.add_dependency(%q<shoulda>, [">= 0"])
76
+ end
77
+ end
@@ -30,6 +30,7 @@ class MessageFieldTest < Test::Unit::TestCase
30
30
  [ "bytes", Protopuffs::Bytes],
31
31
  [ "float", Protopuffs::Float],
32
32
  [ "fixed32", Protopuffs::Fixed32],
33
+ [ "sfixed32", Protopuffs::SFixed32],
33
34
  [ "embedded", Protopuffs::Embedded],
34
35
  ].each do |type, klass|
35
36
  assert_kind_of klass, Protopuffs::MessageField.factory(type, "optional", "a_string", 1, 2)
@@ -50,7 +51,8 @@ class MessageFieldTest < Test::Unit::TestCase
50
51
  numeric_types = [Protopuffs::Double, Protopuffs::Float,
51
52
  Protopuffs::Int32, Protopuffs::Int64,
52
53
  Protopuffs::UInt32, Protopuffs::UInt64,
53
- Protopuffs::Fixed32, Protopuffs::Fixed64]
54
+ Protopuffs::Fixed32, Protopuffs::Fixed64,
55
+ Protopuffs::SFixed32]
54
56
  numeric_types.each do |type|
55
57
  assert_equal 0, type.new("optional", "number", 1).default
56
58
  assert_equal 0, type.new("optional", "number", 1, nil).default
@@ -2,7 +2,14 @@
2
2
 
3
3
  require 'rubygems'
4
4
  require 'test/unit'
5
+
6
+ gem "polyglot", "=0.2.9"
7
+ gem "treetop", "=1.4.2"
8
+
9
+ gem "thoughtbot-shoulda", "=2.10.2"
5
10
  require 'shoulda'
11
+
12
+ gem "mocha", "=0.9.8"
6
13
  require 'mocha'
7
14
 
8
15
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
@@ -58,5 +65,26 @@ class Test::Unit::TestCase
58
65
  end
59
66
  end
60
67
 
68
+ def self.should_encode_and_decode_wire_format_and_fields(bytes, fields)
69
+ self.should_encode_wire_format_from_fields(bytes, fields)
70
+ self.should_decode_wire_format_to_fields(bytes, fields)
71
+ end
72
+
73
+ def self.should_losslessly_encode_and_decode_a_random_sample(fields)
74
+ raise ArgumentError if fields.size > 1
75
+ name, range = fields.shift
76
+ should "get the same value back after encoding and decoding a random sample of the values #{range.inspect} for field #{name.inspect}" do
77
+ size = range.last - range.first
78
+ size -= 1 if range.exclude_end?
79
+ values_to_test = [range.first, range.first + size]
80
+ 250.times { values_to_test << range.first + rand(size) }
81
+ values_to_test.each do |value|
82
+ @message.send("#{name}=", value)
83
+ @message.from_wire_format(@message.to_wire_format)
84
+ assert_equal value, @message.send(name)
85
+ end
86
+ end
87
+ end
88
+
61
89
  end
62
90
 
@@ -193,6 +193,21 @@ class WireFormatTest < Test::Unit::TestCase
193
193
  end
194
194
 
195
195
 
196
+ context "a message with one sfixed32 field tagged #1" do
197
+ setup do
198
+ fields = [Protopuffs::SFixed32.new("required", "a", 1)]
199
+ Protopuffs::Message::Base.define_message_class("Test1", fields)
200
+ @message = Protopuffs::Message::Test1.new
201
+ end
202
+
203
+ should_encode_and_decode_wire_format_and_fields [0x0D, 0x05, 0x00, 0x00, 0x80],
204
+ :a => -2**31 + 5
205
+ should_encode_and_decode_wire_format_and_fields [0x0D, 0x05, 0x80, 0x00, 0x00],
206
+ :a => 2**15 + 5
207
+ should_losslessly_encode_and_decode_a_random_sample :a => -2**31...2**31
208
+ end
209
+
210
+
196
211
  context "a message with one repeating int32 field tagged #1" do
197
212
  setup do
198
213
  fields = [Protopuffs::Int32.new("repeated", "a", 1)]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chrisk-protopuffs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Kampmeier
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-03-19 00:00:00 -07:00
12
+ date: 2009-09-21 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -49,24 +49,23 @@ executables: []
49
49
  extensions: []
50
50
 
51
51
  extra_rdoc_files:
52
- - README.rdoc
53
52
  - LICENSE.txt
53
+ - README.rdoc
54
54
  files:
55
+ - .gitignore
56
+ - .specification
55
57
  - LICENSE.txt
56
58
  - README.rdoc
59
+ - Rakefile
57
60
  - VERSION.yml
58
- - lib/protopuffs
59
- - lib/protopuffs/message
61
+ - lib/protopuffs.rb
60
62
  - lib/protopuffs/message/base.rb
61
63
  - lib/protopuffs/message/field.rb
62
64
  - lib/protopuffs/message/wire_type.rb
63
- - lib/protopuffs/parser
64
65
  - lib/protopuffs/parser/parser.rb
65
66
  - lib/protopuffs/parser/protocol_buffer.treetop
66
- - lib/protopuffs.rb
67
+ - protopuffs.gemspec
67
68
  - test/abstract_syntax_tree_test.rb
68
- - test/fixtures
69
- - test/fixtures/proto
70
69
  - test/fixtures/proto/person.proto
71
70
  - test/message_base_test.rb
72
71
  - test/message_field_test.rb
@@ -75,11 +74,11 @@ files:
75
74
  - test/test_helper.rb
76
75
  - test/text_format_test.rb
77
76
  - test/wire_format_test.rb
78
- has_rdoc: true
77
+ has_rdoc: false
79
78
  homepage: http://github.com/chrisk/protopuffs
79
+ licenses:
80
80
  post_install_message:
81
81
  rdoc_options:
82
- - --inline-source
83
82
  - --charset=UTF-8
84
83
  require_paths:
85
84
  - lib
@@ -98,9 +97,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
97
  requirements: []
99
98
 
100
99
  rubyforge_project:
101
- rubygems_version: 1.2.0
100
+ rubygems_version: 1.3.5
102
101
  signing_key:
103
- specification_version: 2
102
+ specification_version: 3
104
103
  summary: Sex, drugs, and protocol buffers
105
- test_files: []
106
-
104
+ test_files:
105
+ - test/abstract_syntax_tree_test.rb
106
+ - test/message_base_test.rb
107
+ - test/message_field_test.rb
108
+ - test/parse_tree_test.rb
109
+ - test/protopuffs_test.rb
110
+ - test/test_helper.rb
111
+ - test/text_format_test.rb
112
+ - test/wire_format_test.rb