chrisk-protopuffs 0.2.1 → 0.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.
@@ -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