bones-rpc-adapter-msgpack 0.0.2-java

Sign up to get free protection for your applications and to get access to all the features.
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: []