asciipack 0.0.1

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: 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