box-rb 1.0.2
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/bin/box +34 -0
- data/lib/box/packer.rb +22 -0
- data/lib/box/reader.rb +33 -0
- data/lib/box/writer.rb +38 -0
- data/lib/box.rb +3 -0
- metadata +51 -0
data/bin/box
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'box'
|
3
|
+
|
4
|
+
if ARGV.size < 2
|
5
|
+
puts "wrong parameter"
|
6
|
+
else
|
7
|
+
cmd = ARGV[0].downcase
|
8
|
+
|
9
|
+
case cmd
|
10
|
+
when "pack"
|
11
|
+
box = Box::Writer.new
|
12
|
+
|
13
|
+
for i in 2..ARGV.size-1
|
14
|
+
fp = File.new( ARGV[i] )
|
15
|
+
|
16
|
+
box.add( ARGV[i], fp.read )
|
17
|
+
|
18
|
+
fp.close
|
19
|
+
end
|
20
|
+
|
21
|
+
box.write( ARGV[1] )
|
22
|
+
when "unpack"
|
23
|
+
box = Box::Reader.new
|
24
|
+
|
25
|
+
data = box.read( ARGV[1] )
|
26
|
+
|
27
|
+
data.each do |k,v|
|
28
|
+
fp = File.new(k)
|
29
|
+
fp.write(v)
|
30
|
+
fp.close
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
data/lib/box/packer.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
module Box
|
2
|
+
require 'zlib'
|
3
|
+
require 'base64'
|
4
|
+
|
5
|
+
class Packer
|
6
|
+
def initialize
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.pack(data)
|
10
|
+
c = Zlib::Deflate.deflate(data)
|
11
|
+
e = Base64.encode64(c)
|
12
|
+
|
13
|
+
return e
|
14
|
+
end
|
15
|
+
def self.unpack(data)
|
16
|
+
e = Base64.decode64(data)
|
17
|
+
c = Zlib::Inflate.inflate(e)
|
18
|
+
|
19
|
+
return c
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/box/reader.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
module Box
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
class Reader
|
5
|
+
def initialize
|
6
|
+
@data = Hash.new
|
7
|
+
end
|
8
|
+
|
9
|
+
def unpack_data(data)
|
10
|
+
unpacked = Hash.new
|
11
|
+
|
12
|
+
data.each do |k,v|
|
13
|
+
unpacked[k] = Packer.unpack(v)
|
14
|
+
end
|
15
|
+
|
16
|
+
return unpacked
|
17
|
+
end
|
18
|
+
def load(data)
|
19
|
+
json = JSON.load(data)
|
20
|
+
@data = unpack_data( json )
|
21
|
+
|
22
|
+
return @data
|
23
|
+
end
|
24
|
+
|
25
|
+
def read(path)
|
26
|
+
fp = File.new(path, "w")
|
27
|
+
data = fp.read
|
28
|
+
fp.close
|
29
|
+
|
30
|
+
load data
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/box/writer.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
module Box
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
class Writer
|
5
|
+
def initialize
|
6
|
+
@data = Hash.new
|
7
|
+
end
|
8
|
+
|
9
|
+
def add(name, data)
|
10
|
+
@data[name] = data
|
11
|
+
end
|
12
|
+
def delete(name)
|
13
|
+
@data.delete name
|
14
|
+
end
|
15
|
+
|
16
|
+
def pack_data(data)
|
17
|
+
packed = Hash.new
|
18
|
+
|
19
|
+
data.each do |k,v|
|
20
|
+
packed[k] = Packer.pack(v)
|
21
|
+
end
|
22
|
+
|
23
|
+
return packed
|
24
|
+
end
|
25
|
+
def dump
|
26
|
+
packed = pack_data(@data)
|
27
|
+
json = JSON.dump(packed)
|
28
|
+
|
29
|
+
return json
|
30
|
+
end
|
31
|
+
|
32
|
+
def write(path)
|
33
|
+
fp = File.new(path, "w")
|
34
|
+
fp.write(dump)
|
35
|
+
fp.close
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/box.rb
ADDED
metadata
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: box-rb
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.2
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- pjc0247
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-11-18 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: ruby data box
|
15
|
+
email:
|
16
|
+
- pjc0247@naver.com
|
17
|
+
executables:
|
18
|
+
- box
|
19
|
+
extensions: []
|
20
|
+
extra_rdoc_files: []
|
21
|
+
files:
|
22
|
+
- lib/box.rb
|
23
|
+
- lib/box/packer.rb
|
24
|
+
- lib/box/reader.rb
|
25
|
+
- lib/box/writer.rb
|
26
|
+
- bin/box
|
27
|
+
homepage: http://github.com/pjc0247/Box
|
28
|
+
licenses: []
|
29
|
+
post_install_message:
|
30
|
+
rdoc_options: []
|
31
|
+
require_paths:
|
32
|
+
- lib
|
33
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: 1.3.6
|
45
|
+
requirements: []
|
46
|
+
rubyforge_project: box
|
47
|
+
rubygems_version: 1.8.25
|
48
|
+
signing_key:
|
49
|
+
specification_version: 3
|
50
|
+
summary: ruby data box
|
51
|
+
test_files: []
|