proxyfs 0.0.1 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +8 -8
  2. data/lib/proxyfs.rb +139 -2
  3. data/lib/proxyfs/version.rb +1 -1
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NTg4NjlmZWRmYjZhNjhhN2M0Y2UzYWNiN2FiMWMxYWM5MzQxMzNmNw==
4
+ MjhmYWIzNDM4M2ZlOGZkY2I4NDg5MzYyYzdhMjUwYmExNmExMDczZA==
5
5
  data.tar.gz: !binary |-
6
- MDQ1YmVkMzI2ZWRhMjBiMTdmOGY3NGJlMTViODE0YzZkOWNmODQ5Yw==
6
+ NmE5YmJjYTQzZWY1MTkzZGJjZDc3MjNmNDA1NjUzZjA0ZTU0MjkxZA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZTNiOWJlZjhmYjEyOTMxYTAyOWM0ODY3ZjZmZDYwYzRiMGQ3NjNjMDliZTM5
10
- ZWZiZWNiYjM5NDkyNGRhMTU5NWE5YTZhYjNkZWJjMzFkZWE2NzI2NzAxMTFh
11
- OTM1NWE0MTdjYmU0MmJiZjRhOWUxOWE2MzdmNmQ3NDZiYzVkYjM=
9
+ YzY0YWVjMDYwMDZiNzk3OGU3YzU2MDc1ZjE3YmRkZWRkNTQyYzM1YjdlM2Fj
10
+ ODQ3MzMxMjRjOWZhNzhkY2I0YjkyOTI3NTIyY2JjNmY5NGNhOGQ5ODM1MGU2
11
+ ZDdhYTY4OTRhMjA1MjhlOTM4MDUxOTJjMDg2ZjA5Yzc3Y2FjYTA=
12
12
  data.tar.gz: !binary |-
13
- OGJmNjMxMjA0MzhjYTc1NThmYjA0ODRmNzNkNmExMTRjNmM0ZjQ1OTdjOTQ0
14
- Y2MyNjVhNDZkM2FhZjgxOTNkMGU5MDcwZmM4ZWZjOTZmYTZlZGE3MjY4YzRi
15
- ZDFiOWY3MDc4ZmM1MmZkZjMwMDc5Y2I0NzhjNWJjZTU2Y2IyMTg=
13
+ ZjVhMTdlZWI1OGFjNzBmZmEzNGZiYTVlMDgyMDNkMzEwZTVkZGI2NzE1ZGRk
14
+ NTM0MTZjMzEyMDAwZDQ4MDM5NTk4NjI3NmY3YWYwY2E5NzZhMzBmMTE3Y2Rk
15
+ N2Y1YWZhNGU2ZmViMWEzN2Y2ZWFlYWMwNzcwOGUwY2VlNTFjYmY=
data/lib/proxyfs.rb CHANGED
@@ -1,5 +1,142 @@
1
- class ProxyFS
2
- def initialize
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
 
@@ -1,3 +1,3 @@
1
1
  class ProxyFS
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.3'
3
3
  end
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.1
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-17 00:00:00.000000000 Z
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