ffi-msgpack 0.1.4 → 0.2.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.
- data/.gemtest +0 -0
- data/.rspec +1 -0
- data/ChangeLog.md +14 -0
- data/LICENSE.txt +1 -4
- data/README.md +9 -6
- data/Rakefile +25 -27
- data/ffi-msgpack.gemspec +11 -114
- data/gemspec.yml +19 -0
- data/lib/ffi/msgpack/extensions/symbol.rb +7 -0
- data/lib/ffi/msgpack/extensions.rb +1 -0
- data/lib/ffi/msgpack/msg_object.rb +190 -62
- data/lib/ffi/msgpack/msgpack.rb +4 -2
- data/lib/ffi/msgpack/packer.rb +21 -1
- data/lib/ffi/msgpack/unpacker.rb +1 -1
- data/spec/extensions/symbol_spec.rb +14 -0
- data/spec/msg_object_spec.rb +37 -0
- data/spec/spec_helper.rb +2 -12
- metadata +36 -74
- data/.gitignore +0 -4
- data/.specopts +0 -1
- data/Gemfile +0 -24
- data/Gemfile.lock +0 -33
- data/VERSION +0 -1
data/.gemtest
ADDED
File without changes
|
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--colour --format documentation
|
data/ChangeLog.md
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
### 0.2.0 / 2011-02-18
|
2
|
+
|
3
|
+
* Added {FFI::MsgPack::MsgObject#set!}.
|
4
|
+
* Added {FFI::MsgPack::MsgObject#set_nil!}.
|
5
|
+
* Added {FFI::MsgPack::MsgObject#set_boolean!}.
|
6
|
+
* Added {FFI::MsgPack::MsgObject#set_integer!}.
|
7
|
+
* Added {FFI::MsgPack::MsgObject#set_double!}.
|
8
|
+
* Added {FFI::MsgPack::MsgObject#set_float!}.
|
9
|
+
* Added {FFI::MsgPack::MsgObject#set_raw!}.
|
10
|
+
* Added {FFI::MsgPack::MsgObject#set_array!}.
|
11
|
+
* Added {FFI::MsgPack::MsgObject#set_map!}.
|
12
|
+
* Fixed a major bug, where newly created buffers holding Msg Raws, Arrays
|
13
|
+
or Maps, were getting GCed and then overwritten.
|
14
|
+
|
1
15
|
### 0.1.4 / 2010-08-12
|
2
16
|
|
3
17
|
* Added {FFI::MsgPack.version}.
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
# ffi-msgpack
|
2
2
|
|
3
|
-
* [
|
4
|
-
* [
|
5
|
-
*
|
3
|
+
* [Source](http://github.com/postmodern/ffi-msgpack/)
|
4
|
+
* [Issues](http://github.com/postmodern/ffi-msgpack/issues)
|
5
|
+
* [Documentation](http://rubydoc.info/ffi-msgpack)
|
6
|
+
* [Email](mailto:postmodern.mod3 at gmail.com)
|
6
7
|
|
7
8
|
## Description
|
8
9
|
|
9
|
-
Ruby FFI bindings for the [msgpack](http://msgpack.sourceforge.net/)
|
10
|
+
Ruby FFI bindings for the [msgpack](http://msgpack.sourceforge.net/)
|
11
|
+
library.
|
10
12
|
|
11
13
|
## Features
|
12
14
|
|
@@ -79,7 +81,7 @@ Enumerates over each unpacked Object from a stream:
|
|
79
81
|
## Requirements
|
80
82
|
|
81
83
|
* [libmsgpack](http://msgpack.sourceforge.net/) >= 0.5.0
|
82
|
-
* [ffi](http://github.com/ffi/ffi)
|
84
|
+
* [ffi](http://github.com/ffi/ffi) >= 0.6.0, <= 1.1.0
|
83
85
|
|
84
86
|
## Install
|
85
87
|
|
@@ -87,5 +89,6 @@ Enumerates over each unpacked Object from a stream:
|
|
87
89
|
|
88
90
|
## License
|
89
91
|
|
90
|
-
|
92
|
+
Copyright (c) 2010-2011 Hal Brodigan
|
91
93
|
|
94
|
+
See {file:LICENSE.txt} for license information.
|
data/Rakefile
CHANGED
@@ -1,38 +1,36 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
require '
|
2
|
+
require 'rake'
|
3
3
|
|
4
4
|
begin
|
5
|
-
|
6
|
-
|
5
|
+
gem 'ore-tasks', '~> 0.4'
|
6
|
+
require 'ore/tasks'
|
7
|
+
|
8
|
+
Ore::Tasks.new
|
9
|
+
rescue LoadError => e
|
7
10
|
STDERR.puts e.message
|
8
|
-
STDERR.puts "Run `
|
9
|
-
exit e.status_code
|
11
|
+
STDERR.puts "Run `gem install ore-tasks` to install 'ore/tasks'."
|
10
12
|
end
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
+
begin
|
15
|
+
gem 'rspec', '~> 2.4'
|
16
|
+
require 'rspec/core/rake_task'
|
14
17
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
gem.email = 'postmodern.mod3@gmail.com'
|
21
|
-
gem.homepage = %Q{http://github.com/postmodern/ffi-msgpack}
|
22
|
-
gem.authors = ['Postmodern']
|
23
|
-
gem.requirements = ['libmsgpack, 0.5.0 or greater']
|
24
|
-
gem.has_rdoc = 'yard'
|
18
|
+
RSpec::Core::RakeTask.new
|
19
|
+
rescue LoadError => e
|
20
|
+
task :spec do
|
21
|
+
abort "Please run `gem install rspec` to install RSpec."
|
22
|
+
end
|
25
23
|
end
|
24
|
+
task :test => :spec
|
25
|
+
task :default => :spec
|
26
26
|
|
27
|
-
|
27
|
+
begin
|
28
|
+
gem 'yard', '~> 0.6.0'
|
29
|
+
require 'yard'
|
28
30
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
31
|
+
YARD::Rake::YardocTask.new
|
32
|
+
rescue LoadError => e
|
33
|
+
task :yard do
|
34
|
+
abort "Please run `gem install yard` to install YARD."
|
35
|
+
end
|
34
36
|
end
|
35
|
-
task :default => :spec
|
36
|
-
|
37
|
-
require 'yard'
|
38
|
-
YARD::Rake::YardocTask.new
|
data/ffi-msgpack.gemspec
CHANGED
@@ -1,118 +1,15 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
1
|
# -*- encoding: utf-8 -*-
|
5
2
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
"
|
17
|
-
"LICENSE.txt",
|
18
|
-
"README.md"
|
19
|
-
]
|
20
|
-
s.files = [
|
21
|
-
".gitignore",
|
22
|
-
".specopts",
|
23
|
-
".yardopts",
|
24
|
-
"ChangeLog.md",
|
25
|
-
"Gemfile",
|
26
|
-
"Gemfile.lock",
|
27
|
-
"LICENSE.txt",
|
28
|
-
"README.md",
|
29
|
-
"Rakefile",
|
30
|
-
"VERSION",
|
31
|
-
"ffi-msgpack.gemspec",
|
32
|
-
"lib/ffi/msgpack.rb",
|
33
|
-
"lib/ffi/msgpack/exceptions/parse_error.rb",
|
34
|
-
"lib/ffi/msgpack/extensions.rb",
|
35
|
-
"lib/ffi/msgpack/extensions/array.rb",
|
36
|
-
"lib/ffi/msgpack/extensions/false_class.rb",
|
37
|
-
"lib/ffi/msgpack/extensions/float.rb",
|
38
|
-
"lib/ffi/msgpack/extensions/hash.rb",
|
39
|
-
"lib/ffi/msgpack/extensions/integer.rb",
|
40
|
-
"lib/ffi/msgpack/extensions/nil_class.rb",
|
41
|
-
"lib/ffi/msgpack/extensions/string.rb",
|
42
|
-
"lib/ffi/msgpack/extensions/true_class.rb",
|
43
|
-
"lib/ffi/msgpack/msg_array.rb",
|
44
|
-
"lib/ffi/msgpack/msg_key_value.rb",
|
45
|
-
"lib/ffi/msgpack/msg_map.rb",
|
46
|
-
"lib/ffi/msgpack/msg_object.rb",
|
47
|
-
"lib/ffi/msgpack/msg_object_union.rb",
|
48
|
-
"lib/ffi/msgpack/msg_raw.rb",
|
49
|
-
"lib/ffi/msgpack/msgpack.rb",
|
50
|
-
"lib/ffi/msgpack/packable.rb",
|
51
|
-
"lib/ffi/msgpack/packer.rb",
|
52
|
-
"lib/ffi/msgpack/types.rb",
|
53
|
-
"lib/ffi/msgpack/unpacker.rb",
|
54
|
-
"lib/ffi/msgpack/zone.rb",
|
55
|
-
"lib/ffi/msgpack/zone_chunk_list.rb",
|
56
|
-
"lib/ffi/msgpack/zone_finalizer.rb",
|
57
|
-
"lib/ffi/msgpack/zone_finalizer_array.rb",
|
58
|
-
"spec/extensions/array_spec.rb",
|
59
|
-
"spec/extensions/false_class_spec.rb",
|
60
|
-
"spec/extensions/float_spec.rb",
|
61
|
-
"spec/extensions/hash_spec.rb",
|
62
|
-
"spec/extensions/integer_spec.rb",
|
63
|
-
"spec/extensions/nil_class_spec.rb",
|
64
|
-
"spec/extensions/string_spec.rb",
|
65
|
-
"spec/extensions/true_class_spec.rb",
|
66
|
-
"spec/msg_object_spec.rb",
|
67
|
-
"spec/packer_spec.rb",
|
68
|
-
"spec/spec_helper.rb",
|
69
|
-
"spec/unpacker_spec.rb"
|
70
|
-
]
|
71
|
-
s.has_rdoc = %q{yard}
|
72
|
-
s.homepage = %q{http://github.com/postmodern/ffi-msgpack}
|
73
|
-
s.licenses = ["MIT"]
|
74
|
-
s.require_paths = ["lib"]
|
75
|
-
s.requirements = ["libmsgpack, 0.5.0 or greater"]
|
76
|
-
s.rubygems_version = %q{1.3.7}
|
77
|
-
s.summary = %q{FFI bindings for msgpack}
|
78
|
-
s.test_files = [
|
79
|
-
"spec/extensions/array_spec.rb",
|
80
|
-
"spec/extensions/false_class_spec.rb",
|
81
|
-
"spec/extensions/float_spec.rb",
|
82
|
-
"spec/extensions/hash_spec.rb",
|
83
|
-
"spec/extensions/integer_spec.rb",
|
84
|
-
"spec/extensions/nil_class_spec.rb",
|
85
|
-
"spec/extensions/string_spec.rb",
|
86
|
-
"spec/extensions/true_class_spec.rb",
|
87
|
-
"spec/msg_object_spec.rb",
|
88
|
-
"spec/packer_spec.rb",
|
89
|
-
"spec/spec_helper.rb",
|
90
|
-
"spec/unpacker_spec.rb"
|
91
|
-
]
|
92
|
-
|
93
|
-
if s.respond_to? :specification_version then
|
94
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
95
|
-
s.specification_version = 3
|
96
|
-
|
97
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
98
|
-
s.add_runtime_dependency(%q<ffi>, ["~> 0.6.0"])
|
99
|
-
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
100
|
-
s.add_development_dependency(%q<rake>, ["~> 0.8.7"])
|
101
|
-
s.add_development_dependency(%q<jeweler>, ["~> 1.4.0"])
|
102
|
-
s.add_development_dependency(%q<rspec>, ["~> 1.3.0"])
|
103
|
-
else
|
104
|
-
s.add_dependency(%q<ffi>, ["~> 0.6.0"])
|
105
|
-
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
106
|
-
s.add_dependency(%q<rake>, ["~> 0.8.7"])
|
107
|
-
s.add_dependency(%q<jeweler>, ["~> 1.4.0"])
|
108
|
-
s.add_dependency(%q<rspec>, ["~> 1.3.0"])
|
109
|
-
end
|
110
|
-
else
|
111
|
-
s.add_dependency(%q<ffi>, ["~> 0.6.0"])
|
112
|
-
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
113
|
-
s.add_dependency(%q<rake>, ["~> 0.8.7"])
|
114
|
-
s.add_dependency(%q<jeweler>, ["~> 1.4.0"])
|
115
|
-
s.add_dependency(%q<rspec>, ["~> 1.3.0"])
|
3
|
+
begin
|
4
|
+
Ore::Specification.new do |gemspec|
|
5
|
+
# custom logic here
|
6
|
+
end
|
7
|
+
rescue NameError
|
8
|
+
begin
|
9
|
+
require 'ore/specification'
|
10
|
+
retry
|
11
|
+
rescue LoadError
|
12
|
+
STDERR.puts "The 'ffi-msgpack.gemspec' file requires Ore."
|
13
|
+
STDERR.puts "Run `gem install ore-core` to install Ore."
|
116
14
|
end
|
117
15
|
end
|
118
|
-
|
data/gemspec.yml
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
name: ffi-msgpack
|
2
|
+
version: 0.2.0
|
3
|
+
summary: FFI bindings for msgpack
|
4
|
+
description: Ruby FFI bindings for the msgpack library.
|
5
|
+
license: MIT
|
6
|
+
authors: Postmodern
|
7
|
+
email: postmodern.mod3@gmail.com
|
8
|
+
homepage: http://github.com/postmodern/ffi-msgpack
|
9
|
+
has_yard: true
|
10
|
+
|
11
|
+
requirements: libmsgpack >= 0.5.0
|
12
|
+
|
13
|
+
dependencies:
|
14
|
+
ffi: >= 0.6.0, <= 1.1.0
|
15
|
+
|
16
|
+
development_dependencies:
|
17
|
+
ore-tasks: ~> 0.4
|
18
|
+
rspec: ~> 2.4
|
19
|
+
yard: ~> 0.6.0
|
@@ -4,5 +4,6 @@ require 'ffi/msgpack/extensions/false_class'
|
|
4
4
|
require 'ffi/msgpack/extensions/integer'
|
5
5
|
require 'ffi/msgpack/extensions/float'
|
6
6
|
require 'ffi/msgpack/extensions/string'
|
7
|
+
require 'ffi/msgpack/extensions/symbol'
|
7
8
|
require 'ffi/msgpack/extensions/array'
|
8
9
|
require 'ffi/msgpack/extensions/hash'
|
@@ -20,6 +20,9 @@ module FFI
|
|
20
20
|
else
|
21
21
|
super()
|
22
22
|
end
|
23
|
+
|
24
|
+
@object = nil
|
25
|
+
@memory = nil
|
23
26
|
end
|
24
27
|
|
25
28
|
#
|
@@ -33,8 +36,7 @@ module FFI
|
|
33
36
|
#
|
34
37
|
def MsgObject.new_nil(ptr=nil)
|
35
38
|
obj = MsgObject.new(ptr)
|
36
|
-
obj
|
37
|
-
|
39
|
+
obj.set_nil!
|
38
40
|
return obj
|
39
41
|
end
|
40
42
|
|
@@ -52,13 +54,7 @@ module FFI
|
|
52
54
|
#
|
53
55
|
def MsgObject.new_boolean(value,ptr=nil)
|
54
56
|
obj = MsgObject.new(ptr)
|
55
|
-
obj
|
56
|
-
obj[:values][:boolean] = if value
|
57
|
-
1
|
58
|
-
else
|
59
|
-
0
|
60
|
-
end
|
61
|
-
|
57
|
+
obj.set_boolean!(value)
|
62
58
|
return obj
|
63
59
|
end
|
64
60
|
|
@@ -76,15 +72,7 @@ module FFI
|
|
76
72
|
#
|
77
73
|
def MsgObject.new_integer(value,ptr=nil)
|
78
74
|
obj = MsgObject.new(ptr)
|
79
|
-
|
80
|
-
if value < 0
|
81
|
-
obj[:type] = :negative_integer
|
82
|
-
obj[:values][:i64] = value
|
83
|
-
else
|
84
|
-
obj[:type] = :positive_integer
|
85
|
-
obj[:values][:u64] = value
|
86
|
-
end
|
87
|
-
|
75
|
+
obj.set_integer!(value)
|
88
76
|
return obj
|
89
77
|
end
|
90
78
|
|
@@ -102,9 +90,7 @@ module FFI
|
|
102
90
|
#
|
103
91
|
def MsgObject.new_double(value,ptr=nil)
|
104
92
|
obj = MsgObject.new(ptr)
|
105
|
-
obj
|
106
|
-
obj[:values][:dec] = value
|
107
|
-
|
93
|
+
obj.set_double!(value)
|
108
94
|
return obj
|
109
95
|
end
|
110
96
|
|
@@ -112,7 +98,9 @@ module FFI
|
|
112
98
|
# @see MsgObject.new_double
|
113
99
|
#
|
114
100
|
def MsgObject.new_float(value,ptr=nil)
|
115
|
-
MsgObject.
|
101
|
+
obj = MsgObject.new(ptr)
|
102
|
+
obj.set_double!(value)
|
103
|
+
return obj
|
116
104
|
end
|
117
105
|
|
118
106
|
#
|
@@ -128,14 +116,8 @@ module FFI
|
|
128
116
|
# The raw Msg Object.
|
129
117
|
#
|
130
118
|
def MsgObject.new_raw(data,ptr=nil)
|
131
|
-
buffer = FFI::MemoryPointer.new(:uchar, data.length)
|
132
|
-
buffer.put_bytes(0,data)
|
133
|
-
|
134
119
|
obj = MsgObject.new(ptr)
|
135
|
-
obj
|
136
|
-
obj[:values][:raw][:size] = data.length
|
137
|
-
obj[:values][:raw][:ptr] = buffer
|
138
|
-
|
120
|
+
obj.set_raw!(data)
|
139
121
|
return obj
|
140
122
|
end
|
141
123
|
|
@@ -152,17 +134,8 @@ module FFI
|
|
152
134
|
# The array Msg Object.
|
153
135
|
#
|
154
136
|
def MsgObject.new_array(values,ptr=nil)
|
155
|
-
entries = FFI::MemoryPointer.new(MsgObject,values.length)
|
156
|
-
|
157
|
-
values.each_with_index do |value,index|
|
158
|
-
MsgObject.new_object(value,entries[index])
|
159
|
-
end
|
160
|
-
|
161
137
|
obj = MsgObject.new(ptr)
|
162
|
-
obj
|
163
|
-
obj[:values][:array][:size] = values.length
|
164
|
-
obj[:values][:array][:ptr] = entries
|
165
|
-
|
138
|
+
obj.set_array!(values)
|
166
139
|
return obj
|
167
140
|
end
|
168
141
|
|
@@ -179,20 +152,8 @@ module FFI
|
|
179
152
|
# The map Msg Object.
|
180
153
|
#
|
181
154
|
def MsgObject.new_map(values,ptr=nil)
|
182
|
-
|
183
|
-
|
184
|
-
values.each_with_index do |(key,value),index|
|
185
|
-
pair = MsgKeyValue.new(entries[index])
|
186
|
-
|
187
|
-
MsgObject.new_object(key,pair[:key].to_ptr)
|
188
|
-
MsgObject.new_object(value,pair[:value].to_ptr)
|
189
|
-
end
|
190
|
-
|
191
|
-
obj = MsgObject.new
|
192
|
-
obj[:type] = :map
|
193
|
-
obj[:values][:map][:size] = values.length
|
194
|
-
obj[:values][:map][:ptr] = entries
|
195
|
-
|
155
|
+
obj = MsgObject.new(ptr)
|
156
|
+
obj.set_map!(values)
|
196
157
|
return obj
|
197
158
|
end
|
198
159
|
|
@@ -209,24 +170,191 @@ module FFI
|
|
209
170
|
# The new Msg Object.
|
210
171
|
#
|
211
172
|
def MsgObject.new_object(value,ptr=nil)
|
173
|
+
obj = MsgObject.new(ptr)
|
174
|
+
obj.set!(value)
|
175
|
+
return obj
|
176
|
+
end
|
177
|
+
|
178
|
+
#
|
179
|
+
# Sets the Msg Objects value to nil.
|
180
|
+
#
|
181
|
+
# @since 0.2.0
|
182
|
+
#
|
183
|
+
def set_nil!
|
184
|
+
@objects = nil
|
185
|
+
@memory = nil
|
186
|
+
|
187
|
+
self[:type] = :nil
|
188
|
+
end
|
189
|
+
|
190
|
+
#
|
191
|
+
# Sets the Msg Objects value to a Boolean value.
|
192
|
+
#
|
193
|
+
# @param [Boolean] value
|
194
|
+
# The Boolean value.
|
195
|
+
#
|
196
|
+
# @since 0.2.0
|
197
|
+
#
|
198
|
+
def set_boolean!(value)
|
199
|
+
@objects = nil
|
200
|
+
@memory = nil
|
201
|
+
|
202
|
+
self[:type] = :boolean
|
203
|
+
self[:values][:boolean] = if value
|
204
|
+
1
|
205
|
+
else
|
206
|
+
0
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
#
|
211
|
+
# Sets the Msg Objects value to an Integer value.
|
212
|
+
#
|
213
|
+
# @param [Integer] value
|
214
|
+
# The Integer value.
|
215
|
+
#
|
216
|
+
# @since 0.2.0
|
217
|
+
#
|
218
|
+
def set_integer!(value)
|
219
|
+
@objects = nil
|
220
|
+
@memory = nil
|
221
|
+
|
222
|
+
if value < 0
|
223
|
+
self[:type] = :negative_integer
|
224
|
+
self[:values][:i64] = value
|
225
|
+
else
|
226
|
+
self[:type] = :positive_integer
|
227
|
+
self[:values][:u64] = value
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
#
|
232
|
+
# Sets the Msg Objects value to a Floating Point value.
|
233
|
+
#
|
234
|
+
# @param [Float] value
|
235
|
+
# The Floating Point value.
|
236
|
+
#
|
237
|
+
# @since 0.2.0
|
238
|
+
#
|
239
|
+
def set_double!(value)
|
240
|
+
@objects = nil
|
241
|
+
@memory = nil
|
242
|
+
|
243
|
+
self[:type] = :double
|
244
|
+
self[:values][:dec] = value
|
245
|
+
end
|
246
|
+
|
247
|
+
alias set_float! set_double!
|
248
|
+
|
249
|
+
#
|
250
|
+
# Sets the Msg Objects value to a String value.
|
251
|
+
#
|
252
|
+
# @param [String, Symbol] value
|
253
|
+
# The String value.
|
254
|
+
#
|
255
|
+
# @since 0.2.0
|
256
|
+
#
|
257
|
+
def set_raw!(value)
|
258
|
+
value = value.to_s
|
259
|
+
|
260
|
+
@objects = nil
|
261
|
+
@memory = FFI::MemoryPointer.new(:uchar, value.length)
|
262
|
+
@memory.put_bytes(0,value)
|
263
|
+
|
264
|
+
self[:type] = :raw
|
265
|
+
|
266
|
+
raw = self[:values][:raw]
|
267
|
+
raw[:size] = value.length
|
268
|
+
raw[:ptr] = @memory
|
269
|
+
end
|
270
|
+
|
271
|
+
#
|
272
|
+
# Sets the Msg Objects value to an Array value.
|
273
|
+
#
|
274
|
+
# @param [Array] value
|
275
|
+
# The Array value.
|
276
|
+
#
|
277
|
+
# @since 0.2.0
|
278
|
+
#
|
279
|
+
def set_array!(values)
|
280
|
+
@objects = []
|
281
|
+
@memory = FFI::MemoryPointer.new(MsgObject,values.length)
|
282
|
+
|
283
|
+
values.each_with_index do |value,index|
|
284
|
+
@objects << MsgObject.new_object(value,@memory[index])
|
285
|
+
end
|
286
|
+
|
287
|
+
self[:type] = :array
|
288
|
+
|
289
|
+
array = self[:values][:array]
|
290
|
+
array[:size] = values.length
|
291
|
+
array[:ptr] = @memory
|
292
|
+
end
|
293
|
+
|
294
|
+
#
|
295
|
+
# Sets the Msg Objects value to a Map value.
|
296
|
+
#
|
297
|
+
# @param [Hash] value
|
298
|
+
# The Map value.
|
299
|
+
#
|
300
|
+
# @since 0.2.0
|
301
|
+
#
|
302
|
+
def set_map!(values)
|
303
|
+
@objects = {}
|
304
|
+
@memory = FFI::MemoryPointer.new(MsgKeyValue,values.length)
|
305
|
+
|
306
|
+
values.each_with_index do |(key,value),index|
|
307
|
+
pair = MsgKeyValue.new(@memory[index])
|
308
|
+
|
309
|
+
key_obj = MsgObject.new_object(key,pair[:key].to_ptr)
|
310
|
+
value_obj = MsgObject.new_object(value,pair[:value].to_ptr)
|
311
|
+
|
312
|
+
@objects[key_obj] = value_obj
|
313
|
+
end
|
314
|
+
|
315
|
+
self[:type] = :map
|
316
|
+
|
317
|
+
map = self[:values][:map]
|
318
|
+
map[:size] = values.length
|
319
|
+
map[:ptr] = @memory
|
320
|
+
end
|
321
|
+
|
322
|
+
#
|
323
|
+
# Sets the contents of the Msg Object using a Ruby Object.
|
324
|
+
#
|
325
|
+
# @param [Object] value
|
326
|
+
# The Ruby object.
|
327
|
+
#
|
328
|
+
# @return [MsgObject]
|
329
|
+
# The new Msg Object.
|
330
|
+
#
|
331
|
+
# @raise [ArgumentError]
|
332
|
+
# The object was not a {Hash}, {Array}, {String}, {Symbol}, {Float},
|
333
|
+
# {Integer}, `true`, `false` or `nil`.
|
334
|
+
#
|
335
|
+
# @since 0.2.0
|
336
|
+
#
|
337
|
+
def set!(value)
|
212
338
|
case value
|
213
339
|
when Hash
|
214
|
-
|
340
|
+
set_map!(value)
|
215
341
|
when Array
|
216
|
-
|
342
|
+
set_array!(value)
|
217
343
|
when String, Symbol
|
218
|
-
|
344
|
+
set_raw!(value)
|
219
345
|
when Float
|
220
|
-
|
346
|
+
set_double!(value)
|
221
347
|
when Integer
|
222
|
-
|
348
|
+
set_integer!(value)
|
223
349
|
when TrueClass, FalseClass
|
224
|
-
|
350
|
+
set_boolean!(value)
|
225
351
|
when NilClass
|
226
|
-
|
352
|
+
set_nil!
|
227
353
|
else
|
228
|
-
raise(ArgumentError,"ambigious object to create MsgObject from: #{value.inspect}"
|
354
|
+
raise(ArgumentError,"ambigious object to create MsgObject from: #{value.inspect}")
|
229
355
|
end
|
356
|
+
|
357
|
+
return value
|
230
358
|
end
|
231
359
|
|
232
360
|
#
|
@@ -281,7 +409,7 @@ module FFI
|
|
281
409
|
when :map
|
282
410
|
self[:values][:map].to_hash
|
283
411
|
else
|
284
|
-
raise(
|
412
|
+
raise("unknown msgpack object type")
|
285
413
|
end
|
286
414
|
end
|
287
415
|
|
data/lib/ffi/msgpack/msgpack.rb
CHANGED
@@ -20,14 +20,16 @@ module FFI
|
|
20
20
|
#
|
21
21
|
# The version of libmsgpack.
|
22
22
|
#
|
23
|
-
# @return [
|
23
|
+
# @return [Gem::Version, nil]
|
24
24
|
# The version of `libmsgpack`. `nil` will be returned if the version
|
25
25
|
# of `libmsgpack` is <= 0.5.1.
|
26
26
|
#
|
27
27
|
# @since 0.1.4
|
28
28
|
#
|
29
29
|
def MsgPack.version
|
30
|
-
|
30
|
+
if MsgPack.respond_to?(:msgpack_version)
|
31
|
+
@version ||= Gem::Version.new(MsgPack.msgpack_version)
|
32
|
+
end
|
31
33
|
end
|
32
34
|
|
33
35
|
attach_function :msgpack_object_print, [:pointer, MsgObject.by_value], :void
|
data/lib/ffi/msgpack/packer.rb
CHANGED
@@ -62,6 +62,24 @@ module FFI
|
|
62
62
|
return packer
|
63
63
|
end
|
64
64
|
|
65
|
+
#
|
66
|
+
# Creates a new {Packer}.
|
67
|
+
#
|
68
|
+
# @param [FFI::Pointer] ptr
|
69
|
+
# An optional pointer to an existing packer.
|
70
|
+
#
|
71
|
+
# @since 0.2.0
|
72
|
+
#
|
73
|
+
def initialize(ptr=nil)
|
74
|
+
if ptr
|
75
|
+
super(ptr)
|
76
|
+
else
|
77
|
+
super()
|
78
|
+
end
|
79
|
+
|
80
|
+
@object = MsgObject.new
|
81
|
+
end
|
82
|
+
|
65
83
|
#
|
66
84
|
# Sets the write callback for the packer.
|
67
85
|
#
|
@@ -117,7 +135,9 @@ module FFI
|
|
117
135
|
# The packer.
|
118
136
|
#
|
119
137
|
def <<(value)
|
120
|
-
|
138
|
+
@object.set!(value)
|
139
|
+
|
140
|
+
pack(@object)
|
121
141
|
return self
|
122
142
|
end
|
123
143
|
|
data/lib/ffi/msgpack/unpacker.rb
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'ffi/msgpack/extensions/symbol'
|
3
|
+
|
4
|
+
describe Symbol do
|
5
|
+
subject { :hello }
|
6
|
+
|
7
|
+
it "should be packable" do
|
8
|
+
should be_kind_of(FFI::MsgPack::Packable)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should pack to a msg" do
|
12
|
+
subject.to_msgpack.should == "\xA5hello"
|
13
|
+
end
|
14
|
+
end
|
data/spec/msg_object_spec.rb
CHANGED
@@ -190,4 +190,41 @@ describe MsgPack::MsgObject do
|
|
190
190
|
@obj.to_ruby.should == @hash
|
191
191
|
end
|
192
192
|
end
|
193
|
+
|
194
|
+
it "should create highly nested Msg Objects" do
|
195
|
+
obj = MsgPack::MsgObject.new_object({'one' => {2 => [3.0]}})
|
196
|
+
|
197
|
+
obj[:type].should == :map
|
198
|
+
map = obj[:values][:map]
|
199
|
+
map[:size].should == 1
|
200
|
+
|
201
|
+
pair = MsgPack::MsgKeyValue.new(map[:ptr])
|
202
|
+
|
203
|
+
key = pair[:key]
|
204
|
+
key[:type].should == :raw
|
205
|
+
|
206
|
+
raw = key[:values][:raw]
|
207
|
+
raw[:ptr].get_bytes(0,raw[:size]).should == 'one'
|
208
|
+
|
209
|
+
value = pair[:value]
|
210
|
+
value[:type].should == :map
|
211
|
+
|
212
|
+
map = value[:values][:map]
|
213
|
+
map[:size].should == 1
|
214
|
+
|
215
|
+
pair = MsgPack::MsgKeyValue.new(map[:ptr])
|
216
|
+
key = pair[:key]
|
217
|
+
key[:type].should == :positive_integer
|
218
|
+
key[:values][:i64].should == 2
|
219
|
+
|
220
|
+
value = pair[:value]
|
221
|
+
value[:type].should == :array
|
222
|
+
|
223
|
+
array = value[:values][:array]
|
224
|
+
array[:size].should == 1
|
225
|
+
|
226
|
+
value = MsgPack::MsgObject.new(array[:ptr])
|
227
|
+
value[:type].should == :double
|
228
|
+
value[:values][:dec].should == 3.0
|
229
|
+
end
|
193
230
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,15 +1,5 @@
|
|
1
|
-
|
2
|
-
require '
|
1
|
+
gem 'rspec', '~> 2.4'
|
2
|
+
require 'rspec'
|
3
3
|
|
4
|
-
begin
|
5
|
-
Bundler.setup(:runtime, :test)
|
6
|
-
rescue Bundler::BundlerError => e
|
7
|
-
STDERR.puts e.message
|
8
|
-
STDERR.puts "Run `bundle install` to install missing gems"
|
9
|
-
exit e.status_code
|
10
|
-
end
|
11
|
-
|
12
|
-
require 'spec'
|
13
4
|
require 'ffi'
|
14
|
-
|
15
5
|
include FFI
|
metadata
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ffi-msgpack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 1
|
8
|
-
- 4
|
9
|
-
version: 0.1.4
|
4
|
+
prerelease:
|
5
|
+
version: 0.2.0
|
10
6
|
platform: ruby
|
11
7
|
authors:
|
12
8
|
- Postmodern
|
@@ -14,106 +10,75 @@ autorequire:
|
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
12
|
|
17
|
-
date:
|
13
|
+
date: 2011-02-18 00:00:00 -08:00
|
18
14
|
default_executable:
|
19
15
|
dependencies:
|
20
16
|
- !ruby/object:Gem::Dependency
|
21
17
|
name: ffi
|
18
|
+
prerelease: false
|
22
19
|
requirement: &id001 !ruby/object:Gem::Requirement
|
23
20
|
none: false
|
24
21
|
requirements:
|
25
|
-
- -
|
22
|
+
- - ">="
|
26
23
|
- !ruby/object:Gem::Version
|
27
|
-
segments:
|
28
|
-
- 0
|
29
|
-
- 6
|
30
|
-
- 0
|
31
24
|
version: 0.6.0
|
25
|
+
- - <=
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: 1.1.0
|
32
28
|
type: :runtime
|
33
|
-
prerelease: false
|
34
29
|
version_requirements: *id001
|
35
30
|
- !ruby/object:Gem::Dependency
|
36
|
-
name:
|
31
|
+
name: ore-tasks
|
32
|
+
prerelease: false
|
37
33
|
requirement: &id002 !ruby/object:Gem::Requirement
|
38
34
|
none: false
|
39
35
|
requirements:
|
40
36
|
- - ~>
|
41
37
|
- !ruby/object:Gem::Version
|
42
|
-
|
43
|
-
- 1
|
44
|
-
- 0
|
45
|
-
- 0
|
46
|
-
version: 1.0.0
|
38
|
+
version: "0.4"
|
47
39
|
type: :development
|
48
|
-
prerelease: false
|
49
40
|
version_requirements: *id002
|
50
41
|
- !ruby/object:Gem::Dependency
|
51
|
-
name:
|
42
|
+
name: rspec
|
43
|
+
prerelease: false
|
52
44
|
requirement: &id003 !ruby/object:Gem::Requirement
|
53
45
|
none: false
|
54
46
|
requirements:
|
55
47
|
- - ~>
|
56
48
|
- !ruby/object:Gem::Version
|
57
|
-
|
58
|
-
- 0
|
59
|
-
- 8
|
60
|
-
- 7
|
61
|
-
version: 0.8.7
|
49
|
+
version: "2.4"
|
62
50
|
type: :development
|
63
|
-
prerelease: false
|
64
51
|
version_requirements: *id003
|
65
52
|
- !ruby/object:Gem::Dependency
|
66
|
-
name:
|
53
|
+
name: yard
|
54
|
+
prerelease: false
|
67
55
|
requirement: &id004 !ruby/object:Gem::Requirement
|
68
56
|
none: false
|
69
57
|
requirements:
|
70
58
|
- - ~>
|
71
59
|
- !ruby/object:Gem::Version
|
72
|
-
|
73
|
-
- 1
|
74
|
-
- 4
|
75
|
-
- 0
|
76
|
-
version: 1.4.0
|
60
|
+
version: 0.6.0
|
77
61
|
type: :development
|
78
|
-
prerelease: false
|
79
62
|
version_requirements: *id004
|
80
|
-
- !ruby/object:Gem::Dependency
|
81
|
-
name: rspec
|
82
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
83
|
-
none: false
|
84
|
-
requirements:
|
85
|
-
- - ~>
|
86
|
-
- !ruby/object:Gem::Version
|
87
|
-
segments:
|
88
|
-
- 1
|
89
|
-
- 3
|
90
|
-
- 0
|
91
|
-
version: 1.3.0
|
92
|
-
type: :development
|
93
|
-
prerelease: false
|
94
|
-
version_requirements: *id005
|
95
63
|
description: Ruby FFI bindings for the msgpack library.
|
96
|
-
email:
|
64
|
+
email:
|
65
|
+
- postmodern.mod3@gmail.com
|
97
66
|
executables: []
|
98
67
|
|
99
68
|
extensions: []
|
100
69
|
|
101
70
|
extra_rdoc_files:
|
102
|
-
- ChangeLog.md
|
103
|
-
- LICENSE.txt
|
104
71
|
- README.md
|
105
72
|
files:
|
106
|
-
- .
|
107
|
-
- .
|
73
|
+
- .gemtest
|
74
|
+
- .rspec
|
108
75
|
- .yardopts
|
109
76
|
- ChangeLog.md
|
110
|
-
- Gemfile
|
111
|
-
- Gemfile.lock
|
112
77
|
- LICENSE.txt
|
113
78
|
- README.md
|
114
79
|
- Rakefile
|
115
|
-
- VERSION
|
116
80
|
- ffi-msgpack.gemspec
|
81
|
+
- gemspec.yml
|
117
82
|
- lib/ffi/msgpack.rb
|
118
83
|
- lib/ffi/msgpack/exceptions/parse_error.rb
|
119
84
|
- lib/ffi/msgpack/extensions.rb
|
@@ -124,6 +89,7 @@ files:
|
|
124
89
|
- lib/ffi/msgpack/extensions/integer.rb
|
125
90
|
- lib/ffi/msgpack/extensions/nil_class.rb
|
126
91
|
- lib/ffi/msgpack/extensions/string.rb
|
92
|
+
- lib/ffi/msgpack/extensions/symbol.rb
|
127
93
|
- lib/ffi/msgpack/extensions/true_class.rb
|
128
94
|
- lib/ffi/msgpack/msg_array.rb
|
129
95
|
- lib/ffi/msgpack/msg_key_value.rb
|
@@ -147,12 +113,13 @@ files:
|
|
147
113
|
- spec/extensions/integer_spec.rb
|
148
114
|
- spec/extensions/nil_class_spec.rb
|
149
115
|
- spec/extensions/string_spec.rb
|
116
|
+
- spec/extensions/symbol_spec.rb
|
150
117
|
- spec/extensions/true_class_spec.rb
|
151
118
|
- spec/msg_object_spec.rb
|
152
119
|
- spec/packer_spec.rb
|
153
120
|
- spec/spec_helper.rb
|
154
121
|
- spec/unpacker_spec.rb
|
155
|
-
has_rdoc:
|
122
|
+
has_rdoc: true
|
156
123
|
homepage: http://github.com/postmodern/ffi-msgpack
|
157
124
|
licenses:
|
158
125
|
- MIT
|
@@ -166,35 +133,30 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
166
133
|
requirements:
|
167
134
|
- - ">="
|
168
135
|
- !ruby/object:Gem::Version
|
169
|
-
hash: 1626239469308121946
|
170
|
-
segments:
|
171
|
-
- 0
|
172
136
|
version: "0"
|
173
137
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
174
138
|
none: false
|
175
139
|
requirements:
|
176
140
|
- - ">="
|
177
141
|
- !ruby/object:Gem::Version
|
178
|
-
segments:
|
179
|
-
- 0
|
180
142
|
version: "0"
|
181
143
|
requirements:
|
182
|
-
- libmsgpack
|
183
|
-
rubyforge_project:
|
184
|
-
rubygems_version: 1.
|
144
|
+
- libmsgpack >= 0.5.0
|
145
|
+
rubyforge_project: ffi-msgpack
|
146
|
+
rubygems_version: 1.5.0
|
185
147
|
signing_key:
|
186
148
|
specification_version: 3
|
187
149
|
summary: FFI bindings for msgpack
|
188
150
|
test_files:
|
151
|
+
- spec/msg_object_spec.rb
|
152
|
+
- spec/packer_spec.rb
|
153
|
+
- spec/unpacker_spec.rb
|
154
|
+
- spec/extensions/integer_spec.rb
|
155
|
+
- spec/extensions/true_class_spec.rb
|
189
156
|
- spec/extensions/array_spec.rb
|
190
157
|
- spec/extensions/false_class_spec.rb
|
191
158
|
- spec/extensions/float_spec.rb
|
192
|
-
- spec/extensions/
|
193
|
-
- spec/extensions/integer_spec.rb
|
194
|
-
- spec/extensions/nil_class_spec.rb
|
159
|
+
- spec/extensions/symbol_spec.rb
|
195
160
|
- spec/extensions/string_spec.rb
|
196
|
-
- spec/extensions/
|
197
|
-
- spec/
|
198
|
-
- spec/packer_spec.rb
|
199
|
-
- spec/spec_helper.rb
|
200
|
-
- spec/unpacker_spec.rb
|
161
|
+
- spec/extensions/nil_class_spec.rb
|
162
|
+
- spec/extensions/hash_spec.rb
|
data/.gitignore
DELETED
data/.specopts
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
--colour --format specdoc
|
data/Gemfile
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
source 'https://rubygems.org'
|
2
|
-
|
3
|
-
group(:runtime) do
|
4
|
-
gem 'ffi', '~> 0.6.0'
|
5
|
-
end
|
6
|
-
|
7
|
-
group(:development) do
|
8
|
-
gem 'bundler', '~> 1.0.0'
|
9
|
-
gem 'rake', '~> 0.8.7'
|
10
|
-
gem 'jeweler', '~> 1.4.0', :git => 'git://github.com/technicalpickles/jeweler.git'
|
11
|
-
end
|
12
|
-
|
13
|
-
group(:doc) do
|
14
|
-
case RUBY_PLATFORM
|
15
|
-
when 'java'
|
16
|
-
gem 'maruku', '~> 0.6.0'
|
17
|
-
else
|
18
|
-
gem 'rdiscount', '~> 1.6.3'
|
19
|
-
end
|
20
|
-
|
21
|
-
gem 'yard', '~> 0.5.3'
|
22
|
-
end
|
23
|
-
|
24
|
-
gem 'rspec', '~> 1.3.0', :group => [:development, :test]
|
data/Gemfile.lock
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
GIT
|
2
|
-
remote: git://github.com/technicalpickles/jeweler.git
|
3
|
-
revision: b996854
|
4
|
-
specs:
|
5
|
-
jeweler (1.4.0)
|
6
|
-
bundler (>= 0.9.5)
|
7
|
-
gemcutter (>= 0.1.0)
|
8
|
-
git (>= 1.2.5)
|
9
|
-
rake
|
10
|
-
|
11
|
-
GEM
|
12
|
-
remote: https://rubygems.org/
|
13
|
-
specs:
|
14
|
-
ffi (0.6.3)
|
15
|
-
rake (>= 0.8.7)
|
16
|
-
gemcutter (0.6.1)
|
17
|
-
git (1.2.5)
|
18
|
-
rake (0.8.7)
|
19
|
-
rdiscount (1.6.5)
|
20
|
-
rspec (1.3.0)
|
21
|
-
yard (0.5.8)
|
22
|
-
|
23
|
-
PLATFORMS
|
24
|
-
ruby
|
25
|
-
|
26
|
-
DEPENDENCIES
|
27
|
-
bundler (~> 1.0.0)
|
28
|
-
ffi (~> 0.6.0)
|
29
|
-
jeweler (~> 1.4.0)!
|
30
|
-
rake (~> 0.8.7)
|
31
|
-
rdiscount (~> 1.6.3)
|
32
|
-
rspec (~> 1.3.0)
|
33
|
-
yard (~> 0.5.3)
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.1.4
|