proxyfs 0.0.1 → 0.0.3
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 +8 -8
- data/lib/proxyfs.rb +139 -2
- data/lib/proxyfs/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MjhmYWIzNDM4M2ZlOGZkY2I4NDg5MzYyYzdhMjUwYmExNmExMDczZA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NmE5YmJjYTQzZWY1MTkzZGJjZDc3MjNmNDA1NjUzZjA0ZTU0MjkxZA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YzY0YWVjMDYwMDZiNzk3OGU3YzU2MDc1ZjE3YmRkZWRkNTQyYzM1YjdlM2Fj
|
10
|
+
ODQ3MzMxMjRjOWZhNzhkY2I0YjkyOTI3NTIyY2JjNmY5NGNhOGQ5ODM1MGU2
|
11
|
+
ZDdhYTY4OTRhMjA1MjhlOTM4MDUxOTJjMDg2ZjA5Yzc3Y2FjYTA=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZjVhMTdlZWI1OGFjNzBmZmEzNGZiYTVlMDgyMDNkMzEwZTVkZGI2NzE1ZGRk
|
14
|
+
NTM0MTZjMzEyMDAwZDQ4MDM5NTk4NjI3NmY3YWYwY2E5NzZhMzBmMTE3Y2Rk
|
15
|
+
N2Y1YWZhNGU2ZmViMWEzN2Y2ZWFlYWMwNzcwOGUwY2VlNTFjYmY=
|
data/lib/proxyfs.rb
CHANGED
@@ -1,5 +1,142 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
|
4
|
+
class Dir
|
5
|
+
def [] name
|
6
|
+
raise Errno::ENOENT unless include? name
|
7
|
+
|
8
|
+
fpath = File.join(path, name)
|
9
|
+
|
10
|
+
File.directory?(fpath) ? Dir.new(fpath) : File.open(fpath)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
module ProxyFS
|
16
|
+
class File
|
17
|
+
@path
|
18
|
+
@entry
|
19
|
+
@file
|
20
|
+
|
21
|
+
def initialize path
|
22
|
+
@path = path
|
23
|
+
@entry = fs.entry(@path)
|
24
|
+
|
25
|
+
if Array === @entry
|
26
|
+
@file = @entry[0].new(*@entry[1..(-1)])
|
27
|
+
elsif Hash === e
|
28
|
+
else
|
29
|
+
@file = @entry
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
define_proxy_method = Proc.new do |method, method_name|
|
34
|
+
self.send method, method_name do |*args, &block|
|
35
|
+
e = @entry.nil? ? fs.entry(args.shift) : @entry
|
36
|
+
|
37
|
+
if Array === e
|
38
|
+
f = @file.nil? ? e[0].new(*e[1..(-1)]) : @file
|
39
|
+
f.send method_name, *args, &block
|
40
|
+
elsif Hash === e
|
41
|
+
raise ArgumentError, 'it is directory'
|
42
|
+
else
|
43
|
+
f = @entry.nil? ? e : @entry
|
44
|
+
f.send method_name, *args, &block
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.binread name, length=nil, offset=nil
|
50
|
+
f = self.new name
|
51
|
+
f.binmode
|
52
|
+
f.seek offset if offset
|
53
|
+
f.read *([length].compact)
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.binwrite name, string, offset=nil
|
57
|
+
f = self.new name
|
58
|
+
f.binmode
|
59
|
+
f.seek offset if offset
|
60
|
+
f.write string
|
61
|
+
end
|
62
|
+
|
63
|
+
[:read, :write, :seek, :binmode].each do |name|
|
64
|
+
define_proxy_method[:define_method, name]
|
65
|
+
end
|
66
|
+
|
67
|
+
[:read, :write].each do |name|
|
68
|
+
define_proxy_method[:define_singleton_method, name]
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
class Dir
|
73
|
+
def initialize path
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
class FS
|
78
|
+
@tree
|
79
|
+
attr_reader :dir,:file
|
80
|
+
|
81
|
+
def initialize tree
|
82
|
+
@tree = tree
|
83
|
+
iam = self
|
84
|
+
|
85
|
+
@dir = Class.new Dir do
|
86
|
+
@@fs = iam
|
87
|
+
|
88
|
+
def self.fs
|
89
|
+
@@fs
|
90
|
+
end
|
91
|
+
|
92
|
+
def fs
|
93
|
+
@@fs
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
@file = Class.new File do
|
98
|
+
@@fs = iam
|
99
|
+
|
100
|
+
def self.fs
|
101
|
+
@@fs
|
102
|
+
end
|
103
|
+
|
104
|
+
def fs
|
105
|
+
@@fs
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def entry path
|
111
|
+
path = Pathname.new path
|
112
|
+
|
113
|
+
raise ArgumentError, 'path shall be absolute' unless path.absolute?
|
114
|
+
|
115
|
+
patha = path.each_filename.to_a
|
116
|
+
|
117
|
+
find = Proc.new do |patha, curdir|
|
118
|
+
name = patha[0]
|
119
|
+
raise Errno::ENOENT unless curdir.include? name
|
120
|
+
|
121
|
+
e = curdir[name]
|
122
|
+
|
123
|
+
rest_patha = patha[1..(-1)]
|
124
|
+
|
125
|
+
if rest_patha.empty?
|
126
|
+
e
|
127
|
+
else
|
128
|
+
if Hash === e
|
129
|
+
find[rest_patha, e]
|
130
|
+
elsif Array === e
|
131
|
+
find[rest_patha, e[0].new(*e[1..(-1)])]
|
132
|
+
else
|
133
|
+
find[rest_patha, e]
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
find[patha, @tree]
|
139
|
+
end
|
3
140
|
end
|
4
141
|
end
|
5
142
|
|
data/lib/proxyfs/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: proxyfs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- A. Levenkov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-21 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Proxy file system
|
14
14
|
email: artem@levenkov.org
|