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