bones-rpc-adapter-msgpack 0.0.2-java

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9131306c2ff1cd0947a6319528cbc0a84cb4c8c3
4
+ data.tar.gz: 5ce234f3da5f1862f0bd0765016498ed6d6a4159
5
+ SHA512:
6
+ metadata.gz: e785b72c7d5d662f345c824b66647563c79cb7ca4ea363bdf96f48fee32053e14b355a8c180d01a51bad5186af09b25dde7d9610568d37e32c98a8b9866e73c5
7
+ data.tar.gz: 41e33605de8000f7f912c40c7b85bfcc5231d064dda15cd4530cb929b9fd9d39e354c60748fd2fcf97c8cd1019732492135a92df697dbd919e18b8ded2b105c2
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ bones-rpc
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-2.0.0
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in bones-rpc-ruby.gemspec
4
+ gemspec
5
+
6
+ group :development do
7
+ gem 'bones-rpc', github: 'bones-rpc/bones-rpc-ruby', branch: 'master'
8
+ gem 'pry'
9
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Andrew Bennett
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # Bones::RPC::Adapter::Msgpack
2
+
3
+ Bones::RPC msgpack adapter for ruby
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'bones-rpc-adapter-msgpack'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install bones-rpc-adapter-msgpack
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,33 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'bones/rpc/adapter/msgpack/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "bones-rpc-adapter-msgpack"
8
+ spec.version = Bones::RPC::Adapter::Msgpack::VERSION
9
+ spec.authors = ["Andrew Bennett"]
10
+ spec.email = ["andrew@pagodabox.com"]
11
+ spec.description = %q{Bones::RPC msgpack adapter for ruby}
12
+ spec.summary = %q{Bones::RPC msgpack adapter for ruby}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "bones-rpc"
22
+
23
+ if !!(RUBY_PLATFORM =~ /java/)
24
+ spec.platform = 'java'
25
+ spec.add_dependency "msgpack-jruby"
26
+ else
27
+ spec.platform = Gem::Platform::RUBY
28
+ spec.add_dependency "msgpack"
29
+ end
30
+
31
+ spec.add_development_dependency "bundler", "~> 1.3"
32
+ spec.add_development_dependency "rake"
33
+ end
@@ -0,0 +1,128 @@
1
+ # encoding: utf-8
2
+
3
+ module Bones
4
+ module RPC
5
+ module Adapter
6
+ module Msgpack
7
+ module Ruby
8
+ def self.unpack(bytes)
9
+ Decoder.new(bytes).next
10
+ end
11
+
12
+ class Decoder
13
+ attr_reader :buffer
14
+
15
+ def initialize(buffer)
16
+ @buffer = ::Bones::RPC::Parser::Buffer.new(buffer)
17
+ end
18
+
19
+ def next
20
+ buffer.transaction do
21
+ consume_next
22
+ end
23
+ rescue TypeError
24
+ raise EOFError
25
+ end
26
+ alias :read :next
27
+
28
+ private
29
+
30
+ DECODINGS = []
31
+ DECODINGS[0xc0] = lambda { |d| nil }
32
+ DECODINGS[0xc2] = lambda { |d| false }
33
+ DECODINGS[0xc3] = lambda { |d| true }
34
+ DECODINGS[0xc4] = lambda { |d| d.consume_string(d.consume_byte, Encoding::BINARY) }
35
+ DECODINGS[0xc5] = lambda { |d| d.consume_string(d.consume_int16, Encoding::BINARY) }
36
+ DECODINGS[0xc6] = lambda { |d| d.consume_string(d.consume_int32, Encoding::BINARY) }
37
+ DECODINGS[0xca] = lambda { |d| d.consume_float }
38
+ DECODINGS[0xcb] = lambda { |d| d.consume_double }
39
+ DECODINGS[0xcc] = lambda { |d| d.consume_byte }
40
+ DECODINGS[0xcd] = lambda { |d| d.consume_int16 }
41
+ DECODINGS[0xce] = lambda { |d| d.consume_int32 }
42
+ DECODINGS[0xcf] = lambda { |d| d.consume_int64 }
43
+ DECODINGS[0xd0] = lambda { |d| d.consume_byte - 0x100 }
44
+ DECODINGS[0xd1] = lambda { |d| d.consume_int16 - 0x10000 }
45
+ DECODINGS[0xd2] = lambda { |d| d.consume_int32 - 0x100000000 }
46
+ DECODINGS[0xd3] = lambda { |d| d.consume_int64 - 0x10000000000000000 }
47
+ DECODINGS[0xd9] = lambda { |d| d.consume_string(d.consume_byte) }
48
+ DECODINGS[0xda] = lambda { |d| d.consume_string(d.consume_int16) }
49
+ DECODINGS[0xdb] = lambda { |d| d.consume_string(d.consume_int32) }
50
+ DECODINGS[0xdc] = lambda { |d| d.consume_array(d.consume_int16) }
51
+ DECODINGS[0xdd] = lambda { |d| d.consume_array(d.consume_int32) }
52
+ DECODINGS[0xde] = lambda { |d| Hash[*d.consume_array(d.consume_int16 * 2)] }
53
+ DECODINGS[0xdf] = lambda { |d| Hash[*d.consume_array(d.consume_int32 * 2)] }
54
+
55
+ FLOAT_FMT = 'g'.freeze
56
+ DOUBLE_FMT = 'G'.freeze
57
+
58
+ public
59
+
60
+ def consume_byte
61
+ buffer.getbyte
62
+ end
63
+
64
+ def consume_int16
65
+ (consume_byte << 8) | consume_byte
66
+ end
67
+
68
+ def consume_int32
69
+ (consume_byte << 24) | (consume_byte << 16) | (consume_byte << 8) | consume_byte
70
+ end
71
+
72
+ def consume_int64
73
+ n = (consume_byte << 56)
74
+ n |= (consume_byte << 48)
75
+ n |= (consume_byte << 40)
76
+ n |= (consume_byte << 32)
77
+ n |= (consume_byte << 24)
78
+ n |= (consume_byte << 16)
79
+ n |= (consume_byte << 8)
80
+ n |= consume_byte
81
+ n
82
+ end
83
+
84
+ def consume_float
85
+ f, = buffer.read(4).unpack(FLOAT_FMT)
86
+ f
87
+ end
88
+
89
+ def consume_double
90
+ d, = buffer.read(8).unpack(DOUBLE_FMT)
91
+ d
92
+ end
93
+
94
+ def consume_string(size, encoding=Encoding::UTF_8)
95
+ s = buffer.read(size)
96
+ s.force_encoding(encoding)
97
+ s
98
+ end
99
+
100
+ def consume_array(size)
101
+ Array.new(size) { consume_next }
102
+ end
103
+
104
+ def consume_next
105
+ b = consume_byte
106
+ if (method = DECODINGS[b])
107
+ method.call(self)
108
+ elsif b <= 0b01111111
109
+ b
110
+ elsif b & 0b11100000 == 0b11100000
111
+ b - 0x100
112
+ elsif b & 0b11100000 == 0b10100000
113
+ size = b & 0b00011111
114
+ consume_string(size)
115
+ elsif b & 0b11110000 == 0b10010000
116
+ size = b & 0b00001111
117
+ consume_array(size)
118
+ elsif b & 0b11110000 == 0b10000000
119
+ size = b & 0b00001111
120
+ Hash[*consume_array(size * 2)]
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,10 @@
1
+ # encoding: utf-8
2
+ module Bones
3
+ module RPC
4
+ module Adapter
5
+ module Msgpack
6
+ VERSION = "0.0.2"
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,69 @@
1
+ # encoding: utf-8
2
+ require 'bones/rpc/adapter'
3
+ require 'msgpack'
4
+
5
+ module Bones
6
+ module RPC
7
+ module Adapter
8
+ module Msgpack
9
+
10
+ @adapter_name = :msgpack
11
+
12
+ def pack(message, buffer="")
13
+ buffer << ::MessagePack.pack(message)
14
+ end
15
+
16
+ def unpack(buffer)
17
+ ::MessagePack.unpack(buffer)
18
+ end
19
+
20
+ def unpack_stream(stream)
21
+ buffer = StringIO.new(stream)
22
+ ::MessagePack::Unpacker.new(buffer).read
23
+ end
24
+
25
+ def read(unpacker)
26
+ (unpacker.adapter_unpacker ||= ::MessagePack::Unpacker.new(unpacker.buffer)).read
27
+ end
28
+
29
+ def unpacker(data)
30
+ Unpacker.new(StringIO.new(data))
31
+ end
32
+
33
+ def parser(data)
34
+ Adapter::Parser.new(self, data)
35
+ end
36
+
37
+ if !!(RUBY_PLATFORM =~ /java/)
38
+ require 'bones/rpc/adapter/msgpack/ruby'
39
+ Unpacker = Bones::RPC::Adapter::Msgpack::Ruby::Decoder
40
+
41
+ def unpacker_pos(parser)
42
+ parser.unpacker.buffer.pos
43
+ end
44
+
45
+ def unpacker_seek(parser, n)
46
+ parser.unpacker.buffer.seek(n)
47
+ return n
48
+ end
49
+ else
50
+ Unpacker = ::MessagePack::Unpacker
51
+
52
+ def unpacker_pos(parser)
53
+ size = parser.unpacker.buffer.size
54
+ pos = parser.unpacker.buffer.io.pos
55
+ (pos > size) ? (pos - size) : 0
56
+ end
57
+
58
+ def unpacker_seek(parser, n)
59
+ pos = unpacker_pos(parser)
60
+ parser.unpacker.buffer.skip(n - pos) if pos < n
61
+ return pos
62
+ end
63
+ end
64
+
65
+ Adapter.register self
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,2 @@
1
+ # encoding: utf-8
2
+ require 'bones/rpc/adapter/msgpack'
metadata ADDED
@@ -0,0 +1,112 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bones-rpc-adapter-msgpack
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: java
6
+ authors:
7
+ - Andrew Bennett
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-10-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bones-rpc
15
+ version_requirements: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ requirement: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - '>='
23
+ - !ruby/object:Gem::Version
24
+ version: '0'
25
+ prerelease: false
26
+ type: :runtime
27
+ - !ruby/object:Gem::Dependency
28
+ name: msgpack-jruby
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ prerelease: false
40
+ type: :runtime
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ version_requirements: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '1.3'
48
+ requirement: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ~>
51
+ - !ruby/object:Gem::Version
52
+ version: '1.3'
53
+ prerelease: false
54
+ type: :development
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ prerelease: false
68
+ type: :development
69
+ description: Bones::RPC msgpack adapter for ruby
70
+ email:
71
+ - andrew@pagodabox.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - .gitignore
77
+ - .ruby-gemset
78
+ - .ruby-version
79
+ - Gemfile
80
+ - LICENSE.txt
81
+ - README.md
82
+ - Rakefile
83
+ - bones-rpc-adapter-msgpack.gemspec
84
+ - lib/bones-rpc-adapter-msgpack.rb
85
+ - lib/bones/rpc/adapter/msgpack.rb
86
+ - lib/bones/rpc/adapter/msgpack/ruby.rb
87
+ - lib/bones/rpc/adapter/msgpack/version.rb
88
+ homepage: ''
89
+ licenses:
90
+ - MIT
91
+ metadata: {}
92
+ post_install_message:
93
+ rdoc_options: []
94
+ require_paths:
95
+ - lib
96
+ required_ruby_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - '>='
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ required_rubygems_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - '>='
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ requirements: []
107
+ rubyforge_project:
108
+ rubygems_version: 2.1.5
109
+ signing_key:
110
+ specification_version: 4
111
+ summary: Bones::RPC msgpack adapter for ruby
112
+ test_files: []