asciipack 0.0.1

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: 68234c0bbe69684169776ff05c4792716712ede4
4
+ data.tar.gz: 784a5ee093464b729d8d6f067db6d9614cdbd423
5
+ SHA512:
6
+ metadata.gz: c6836d277b9b5a37539e839b7768e3cd618e40f1bef95d099573679f2def33579b058fee2e143a2006b57bb0be45a1249a20b4f712202e68000ab05d786d016e
7
+ data.tar.gz: 4b49fd6f986b0a5e7d2030499388a87ad8530b2fab0ba3d80682ca5c1628e0274e177bc38d06930f56639e0885798420932910acb1389a92ae99247c807f7e9f
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/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 ksss
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,20 @@
1
+ # AsciiPack
2
+
3
+ ## Synopsis
4
+
5
+ ```ruby
6
+ demo = {"compact"=>true,"binary"=>0}
7
+ ap = AsciiPack.pack demo
8
+ p ap //=> "q2m7compactum6binaryf0"
9
+
10
+ unpacked = AsciiPack.unpack ap
11
+ p unpacked //=> {"compact"=>true,"binary"=>0}
12
+ ```
13
+
14
+ ## Install
15
+
16
+ ```
17
+ gem install asciipack
18
+ ```
19
+
20
+ see also [https://github.com/ksss/AsciiPack/blob/master/README.md](https://github.com/ksss/AsciiPack/blob/master/README.md)
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ require "bundler"
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rspec/core'
5
+ require 'rspec/core/rake_task'
6
+
7
+ RSpec::Core::RakeTask.new(:spec) do |t|
8
+ t.rspec_opts = ["-c", "-f progress", "-Ilib"]
9
+ t.pattern = "spec/**/*_spec.rb"
10
+ t.verbose = true
11
+ end
12
+
data/asciipack.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'asciipack/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "asciipack"
8
+ spec.version = AsciiPack::VERSION
9
+ spec.author = "ksss"
10
+ spec.email = "co000ri@gmail.com"
11
+ spec.description = %q{AsciiPack is an object serialization inspired by MessagePack.}
12
+ spec.summary = %q{AsciiPack is an object serialization inspired by MessagePack.}
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_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "rspec", ['~> 2.11']
24
+ end
data/lib/asciipack.rb ADDED
@@ -0,0 +1,3 @@
1
+ require "asciipack/version"
2
+ require 'asciipack/pack.rb'
3
+ require 'asciipack/unpack.rb'
@@ -0,0 +1,199 @@
1
+ require 'asciipack/typemap.rb'
2
+
3
+ module AsciiPack
4
+ class Packer
5
+ class << self
6
+ def pack (obj)
7
+ case
8
+ when obj.kind_of?(Hash)
9
+ map(obj);
10
+ when obj.kind_of?(Array)
11
+ array(obj);
12
+ when obj.kind_of?(Numeric)
13
+ if obj.kind_of?(Integer)
14
+ if 0 <= obj
15
+ if obj < 0x10
16
+ uint4 obj
17
+ elsif obj < 0x100
18
+ uint8 obj
19
+ elsif obj < 0x10000
20
+ uint16 obj
21
+ elsif obj < 0x100000000
22
+ uint32 obj
23
+ elsif obj < 0x10000000000000000
24
+ uint64 obj
25
+ end
26
+ else
27
+ if -0x8 <= obj
28
+ int4 obj
29
+ elsif -0x80 <= obj
30
+ int8 obj
31
+ elsif -0x8000 <= obj
32
+ int16 obj
33
+ elsif -0x80000000 <= obj
34
+ int32 obj
35
+ elsif -0x8000000000000000 <= obj
36
+ int64 obj
37
+ else
38
+ raise "pack size limit over"
39
+ end
40
+ end
41
+ else
42
+ float64 obj
43
+ end
44
+ when obj.kind_of?(String)
45
+ case obj.length
46
+ when 0...0x10
47
+ str4 obj
48
+ when 0x10...0x100
49
+ str8 obj
50
+ when 0x100...0x10000
51
+ str16 obj
52
+ when 0x10000...0x100000000
53
+ str32 obj
54
+ else
55
+ raise "pack size limit over"
56
+ end
57
+ when obj.nil?
58
+ TypeMap.nil
59
+ when obj == false
60
+ TypeMap.false
61
+ when obj == true
62
+ TypeMap.true
63
+ end
64
+ end
65
+
66
+ private
67
+
68
+ def int4 (obj)
69
+ TypeMap.int4 + ((obj & 0xf).to_s(16))
70
+ end
71
+
72
+ def int8 (obj)
73
+ TypeMap.int8 + ((obj & 0xff).to_s(16))
74
+ end
75
+
76
+ def int16 (obj)
77
+ TypeMap.int16 + ((obj & 0xffff).to_s(16))
78
+ end
79
+
80
+ def int16 (obj)
81
+ TypeMap.int16 + ((obj & 0xffff).to_s(16))
82
+ end
83
+
84
+ def int32 (obj)
85
+ TypeMap.int32 + ((obj & 0xffffffff).to_s(16))
86
+ end
87
+
88
+ def int64 (obj)
89
+ TypeMap.int64 + ((obj & 0xffffffffffffffff).to_s(16))
90
+ end
91
+
92
+ def uint4 (obj)
93
+ format_uint(TypeMap.uint4, 1, obj)
94
+ end
95
+
96
+ def uint8 (obj)
97
+ format_uint(TypeMap.uint8, 2, obj)
98
+ end
99
+
100
+ def uint16 (obj)
101
+ format_uint(TypeMap.uint16, 4, obj)
102
+ end
103
+
104
+ def uint32 (obj)
105
+ format_uint(TypeMap.uint32, 8, obj)
106
+ end
107
+
108
+ def uint64 (obj)
109
+ format_uint(TypeMap.uint64, 16, obj)
110
+ end
111
+
112
+ def float64 (obj)
113
+ unless obj.finite?
114
+ case obj.infinite?
115
+ when 1; return TypeMap.float64 + '7ff0000000000000' # +∞
116
+ when -1; return TypeMap.float64 + 'fff0000000000000' # -∞
117
+ else; return TypeMap.float64 + '7fffffffffffffff' # NAN
118
+ end
119
+ end
120
+
121
+ sign = obj < 0
122
+ obj *= -1 if sign
123
+ exp = ((Math.log(obj) / Math.log(2, Math::E)) + 1023).to_i
124
+ frac = obj * (2**(52 + 1023 - exp))
125
+ low = frac.to_i & 0xffffffff
126
+ exp |= 0x800 if sign
127
+ high = ((frac / 0x100000000).to_i & 0xfffff) | (exp << 20)
128
+
129
+ TypeMap.float64 + to_s16([
130
+ (high >> 24) & 0xff, (high >> 16) & 0xff,
131
+ (high >> 8) & 0xff, (high) & 0xff,
132
+ (low >> 24) & 0xff, (low >> 16) & 0xff,
133
+ (low >> 8) & 0xff, (low) & 0xff
134
+ ])
135
+ end
136
+
137
+ def str4 (obj)
138
+ format_str TypeMap.str4, 1, obj
139
+ end
140
+
141
+ def str8 (obj)
142
+ format_str TypeMap.str8, 2, obj
143
+ end
144
+
145
+ def str16 (obj)
146
+ format_str TypeMap.str16, 4, obj
147
+ end
148
+
149
+ def str32 (obj)
150
+ format_str TypeMap.str32, 8, obj
151
+ end
152
+
153
+ def map (obj)
154
+ keys = [];
155
+ obj.each { |key, value|
156
+ keys.push(pack(key.to_s) + pack(value));
157
+ }
158
+ TypeMap.map + keys.length.to_s + keys.join('');
159
+ end
160
+
161
+ def array (obj)
162
+ keys = [];
163
+ obj.each { |value|
164
+ keys.push(pack(value));
165
+ }
166
+ TypeMap.array + keys.length.to_s + keys.join('');
167
+ end
168
+
169
+ def format_uint (type, length, num)
170
+ hex = num.to_s(16);
171
+ len = length - hex.length;
172
+ zero = '0' * len;
173
+ type + zero + hex;
174
+ end
175
+
176
+ def format_str (type, length, str)
177
+ hex = str.length.to_s(16);
178
+ len = length - hex.length;
179
+ zero = '0' * len;
180
+ type + zero + hex + str;
181
+ end
182
+
183
+ def to_s16 (a)
184
+ a.map { |i|
185
+ hex = i.to_s(16)
186
+ len = hex.length
187
+ i = 2 - len
188
+ ('0' * i) + hex
189
+ }.join('')
190
+ end
191
+ end
192
+ end
193
+
194
+ class << self
195
+ def pack (obj)
196
+ Packer.pack obj
197
+ end
198
+ end
199
+ end
@@ -0,0 +1,35 @@
1
+ module AsciiPack
2
+ class TypeMap
3
+ class << self
4
+ {
5
+ :int4 => 'a',
6
+ :int8 => 'b',
7
+ :int16 => 'c',
8
+ :int32 => 'd',
9
+ :int64 => 'e',
10
+ :uint4 => 'f',
11
+ :uint8 => 'g',
12
+ :uint16 => 'h',
13
+ :uint32 => 'i',
14
+ :uint64 => 'j',
15
+ :float32 => 'k',
16
+ :float64 => 'l',
17
+ :str4 => 'm',
18
+ :str8 => 'n',
19
+ :str16 => 'o',
20
+ :str32 => 'p',
21
+ :map => 'q',
22
+ :array => 'r',
23
+ :nil => 's',
24
+ :false => 't',
25
+ :true => 'u',
26
+ }.each { |name, char|
27
+ module_eval %{
28
+ def #{name}
29
+ "#{char}"
30
+ end
31
+ }
32
+ }
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,187 @@
1
+ require 'asciipack/typemap.rb'
2
+
3
+ module AsciiPack
4
+ class Unpacker
5
+ def initialize (ap)
6
+ @ap = ap
7
+ @ret = nil
8
+ @at = 0
9
+ @ch = @ap[0]
10
+ end
11
+
12
+ def unpack
13
+ move
14
+ case @ch
15
+ when TypeMap.int4; int4
16
+ when TypeMap.int8; int8
17
+ when TypeMap.int16; int16
18
+ when TypeMap.int32; int32
19
+ when TypeMap.int64; int64
20
+ when TypeMap.uint4; uint4
21
+ when TypeMap.uint8; uint8
22
+ when TypeMap.uint16; uint16
23
+ when TypeMap.uint32; uint32
24
+ when TypeMap.uint64; uint64
25
+ when TypeMap.float64; float64
26
+ when TypeMap.map; map
27
+ when TypeMap.array; array
28
+ when TypeMap.str4; str4
29
+ when TypeMap.str8; str8
30
+ when TypeMap.str16; str16
31
+ when TypeMap.str32; str32
32
+ when TypeMap.nil; nil
33
+ when TypeMap.false; false
34
+ when TypeMap.true; true
35
+ else raise "undefined type " + @ch.to_s
36
+ end
37
+ end
38
+
39
+ private
40
+
41
+ def move
42
+ @ch = @ap[@at]
43
+ @at = @at + 1
44
+ @ch
45
+ end
46
+
47
+ def back
48
+ @ch = @ap[@at]
49
+ @at -= 1
50
+ @ch
51
+ end
52
+
53
+ def cut (len)
54
+ @ret = @ap[@at...(@at + len)]
55
+ @at += len
56
+ @ch = @ap[@at]
57
+ @ret
58
+ end
59
+
60
+ def length
61
+ ret = []
62
+ while (/\d/ =~ @ch)
63
+ ret << @ch
64
+ move()
65
+ end
66
+ back()
67
+ ret.join('').to_i
68
+ end
69
+
70
+ def int4
71
+ move
72
+ i = @ch.to_i(16)
73
+ return (@ch[0].to_i(16) < 0x8) ? i : i - 0x10;
74
+ end
75
+
76
+ def int8
77
+ c = cut(2)
78
+ i = c.to_i(16)
79
+ return (c[0].to_i(16) < 0x8) ? i : i - 0x100;
80
+ end
81
+
82
+ def int16
83
+ c = cut(4)
84
+ i = c.to_i(16)
85
+ return (c[0].to_i(16) < 0x8) ? i : i - 0x10000;
86
+ end
87
+
88
+ def int32
89
+ c = cut(8)
90
+ i = c.to_i(16)
91
+ return (c[0].to_i(16) < 0x8) ? i : i - 0x100000000;
92
+ end
93
+
94
+ def int64
95
+ c = cut(16)
96
+ i = c.to_i(16)
97
+ return (c[0].to_i(16) < 0x8) ? i : i - 0x10000000000000000;
98
+ end
99
+
100
+ def uint4
101
+ move.to_i(16)
102
+ end
103
+
104
+ def uint8
105
+ cut(2).to_i(16)
106
+ end
107
+
108
+ def uint16
109
+ cut(4).to_i(16)
110
+ end
111
+
112
+ def uint32
113
+ cut(8).to_i(16)
114
+ end
115
+
116
+ def uint64
117
+ cut(16).to_i(16)
118
+ end
119
+
120
+ def float64
121
+ # IEEE 752 format
122
+ hex = cut(3)
123
+ num = hex.to_i(16)
124
+ sign = num & 0x800
125
+ exp = (num & 0x7ff) - 1023
126
+ frac = ('1' + cut(13)).to_i(16)
127
+
128
+ if hex == '7ff' && frac != 0
129
+ return Float.NAN
130
+ elsif hex == '7ff' && frac == 0
131
+ return Float.INFINITY
132
+ elsif hex == 'fff' && frac == 0
133
+ return -1 / 0.0
134
+ end
135
+
136
+ ((sign == 0 ? 1 : -1) * frac * (2**(exp - 52))).to_f
137
+ end
138
+
139
+ def map
140
+ move
141
+ hash = {}
142
+ len = length()
143
+ len.times {
144
+ key = unpack
145
+ hash[key] = unpack
146
+ }
147
+ hash
148
+ end
149
+
150
+ def array
151
+ move
152
+ array = []
153
+ len = length()
154
+ len.times {
155
+ array << unpack
156
+ }
157
+ array
158
+ end
159
+
160
+ def str4
161
+ len = cut(1).to_i(16)
162
+ cut(len)
163
+ end
164
+
165
+ def str8
166
+ len = cut(2).to_i(16)
167
+ cut(len)
168
+ end
169
+
170
+ def str16
171
+ len = cut(4).to_i(16)
172
+ cut(len)
173
+ end
174
+
175
+ def str32
176
+ len = cut(8).to_i(16)
177
+ cut(len)
178
+ end
179
+ end
180
+
181
+ class << self
182
+ def unpack (obj)
183
+ unpacker = Unpacker.new obj
184
+ unpacker.unpack
185
+ end
186
+ end
187
+ end
@@ -0,0 +1,3 @@
1
+ module AsciiPack
2
+ VERSION = "0.0.1"
3
+ end
data/spec/bench.rb ADDED
@@ -0,0 +1,37 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ lib = File.expand_path('../../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+
6
+ require 'asciipack'
7
+ require 'json'
8
+ require 'msgpack'
9
+ require 'benchmark'
10
+
11
+ value = {}
12
+ 30.times { |i|
13
+ value[i] = case i % 5
14
+ when 0; 0xffffffff
15
+ when 1; " " * 0xffff
16
+ when 2; [1.1, -1.1, 1/3, 5]
17
+ when 3; JSON.parse(value.to_json)
18
+ when 4; nil
19
+ end
20
+ }
21
+ json = JSON.generate value
22
+ ap = AsciiPack.pack value
23
+ ms = Marshal.dump value
24
+ msg = MessagePack.pack value
25
+ n = 10
26
+
27
+ Benchmark.bm do |x|
28
+ x.report("JSON.generate") {n.times{ JSON.generate value }}
29
+ x.report("JSON.parse") {n.times{ JSON.parse json }}
30
+ x.report("AsciiPack.pack") {n.times{ AsciiPack.pack value }}
31
+ x.report("AsciiPack.unpack") {n.times{ AsciiPack.unpack ap }}
32
+ x.report("Marshal.dump") {n.times{ Marshal.dump value }}
33
+ x.report("Marshal.load") {n.times{ Marshal.load ms }}
34
+ x.report("MessagePack.pack") {n.times{ MessagePack.pack value }}
35
+ x.report("MessagePack.unpack") {n.times{ MessagePack.unpack msg }}
36
+ end
37
+
@@ -0,0 +1,122 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe AsciiPack do
6
+ it "int 4" do
7
+ format -1, T.int4, 2
8
+ format -8, T.int4, 2
9
+ end
10
+
11
+ it "int 8" do
12
+ format -0x9, T.int8, 3
13
+ format -0x80, T.int8, 3
14
+ end
15
+
16
+ it "int 16" do
17
+ format -0x81, T.int16, 5
18
+ format -0x8000, T.int16, 5
19
+ end
20
+
21
+ it "int 32" do
22
+ format -0x8001, T.int32, 9
23
+ format -0x80000000, T.int32, 9
24
+ end
25
+
26
+ it "int 64" do
27
+ format -0x80000001, T.int64, 17
28
+ format -0x8000000000000000, T.int64, 17
29
+ end
30
+
31
+ it "uint 4" do
32
+ format 0x0, T.uint4, 2
33
+ format 0xf, T.uint4, 2
34
+ end
35
+
36
+ it "uint 8" do
37
+ format 0x10, T.uint8, 3
38
+ format 0xff, T.uint8, 3
39
+ end
40
+
41
+ it "uint 16" do
42
+ format 0x100, T.uint16, 5
43
+ format 0xffff, T.uint16, 5
44
+ end
45
+
46
+ it "uint 32" do
47
+ format 0x10000, T.uint32, 9
48
+ format 0xffffffff, T.uint32, 9
49
+ end
50
+
51
+ it "uint 64" do
52
+ format 0x100000000, T.uint64, 17
53
+ format 0xffffffffffffffff, T.uint64, 17
54
+ end
55
+
56
+ it "float 64" do
57
+ format 1/3.0, T.float64, 17
58
+ format 1.0, T.float64, 17
59
+ format 0.1, T.float64, 17
60
+ format -0.1, T.float64, 17
61
+ expect(AsciiPack.pack(-0.1)).to eq(T.float64 + 'bfb999999999999a')
62
+ expect(AsciiPack.pack(1.0)).to eq(T.float64 + '3ff0000000000000')
63
+ expect(AsciiPack.pack(1.0000000000000002)).to eq(T.float64 + '3ff0000000000001')
64
+ expect(AsciiPack.pack(1.0000000000000004)).to eq(T.float64 + '3ff0000000000002')
65
+ expect(AsciiPack.pack(1/3.0)).to eq(T.float64 + '3fd5555555555555')
66
+ expect(AsciiPack.pack(Float::NAN)).to eq(T.float64 + '7fffffffffffffff')
67
+ expect(AsciiPack.pack(1 / 0.0)).to eq(T.float64 + '7ff0000000000000')
68
+ expect(AsciiPack.pack(-1 / 0.0)).to eq(T.float64 + 'fff0000000000000')
69
+ end
70
+
71
+ it "str 4" do
72
+ format "", T.str4, 2
73
+ format " " * 0xf, T.str4, 17
74
+ end
75
+
76
+ it "str 8" do
77
+ format "a" * 0x10, T.str8, 3 + 0x10
78
+ format "a" * 0xff, T.str8, 3 + 0xff
79
+ end
80
+
81
+ it "str 16" do
82
+ format "a" * 0x100, T.str16, 5 + 0x100
83
+ format "a" * 0xffff, T.str16, 5 + 0xffff
84
+ end
85
+
86
+ it "str 32" do
87
+ format "a" * 0x10000, T.str32, 9 + 0x10000
88
+ # too late
89
+ # format "a" * 0xffffffff, T.str32, 9 + 0xffffffff
90
+ end
91
+
92
+ it "map" do
93
+ format({}, T.map, 2)
94
+ format({"hash" => {}}, T.map, 10)
95
+ expect(AsciiPack.pack({})).to eq('q0')
96
+ end
97
+
98
+ it "array" do
99
+ format([], T.array, 2)
100
+ format([1,2,3], T.array, 8)
101
+ expect(AsciiPack.pack([])).to eq('r0')
102
+ end
103
+
104
+ it "nil" do
105
+ format nil, T.nil, 1
106
+ end
107
+
108
+ it "false" do
109
+ format false, T.false, 1
110
+ end
111
+
112
+ it "true" do
113
+ format true, T.true, 1
114
+ end
115
+ end
116
+
117
+ def format (object, first, length)
118
+ ap = AsciiPack.pack(object)
119
+ expect(ap[0]).to eq(first)
120
+ expect(ap.length).to eq(length)
121
+ expect(AsciiPack.unpack(ap)).to eq(object)
122
+ end
@@ -0,0 +1,3 @@
1
+ require 'asciipack'
2
+
3
+ T = AsciiPack::TypeMap
metadata ADDED
@@ -0,0 +1,102 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: asciipack
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - ksss
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-10-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '2.11'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '2.11'
55
+ description: AsciiPack is an object serialization inspired by MessagePack.
56
+ email: co000ri@gmail.com
57
+ executables: []
58
+ extensions: []
59
+ extra_rdoc_files: []
60
+ files:
61
+ - .gitignore
62
+ - Gemfile
63
+ - LICENSE.txt
64
+ - README.md
65
+ - Rakefile
66
+ - asciipack.gemspec
67
+ - lib/asciipack.rb
68
+ - lib/asciipack/pack.rb
69
+ - lib/asciipack/typemap.rb
70
+ - lib/asciipack/unpack.rb
71
+ - lib/asciipack/version.rb
72
+ - spec/bench.rb
73
+ - spec/format_spec.rb
74
+ - spec/spec_helper.rb
75
+ homepage: ''
76
+ licenses:
77
+ - MIT
78
+ metadata: {}
79
+ post_install_message:
80
+ rdoc_options: []
81
+ require_paths:
82
+ - lib
83
+ required_ruby_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - '>='
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ requirements: []
94
+ rubyforge_project:
95
+ rubygems_version: 2.0.3
96
+ signing_key:
97
+ specification_version: 4
98
+ summary: AsciiPack is an object serialization inspired by MessagePack.
99
+ test_files:
100
+ - spec/bench.rb
101
+ - spec/format_spec.rb
102
+ - spec/spec_helper.rb