pfuse 0.7.5
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/.document +5 -0
- data/.gitignore +14 -0
- data/API.txt +279 -0
- data/Changes.txt +63 -0
- data/LICENSE +21 -0
- data/README +36 -0
- data/Rakefile +20 -0
- data/TODO +11 -0
- data/VERSION +1 -0
- data/ext/extconf.rb +12 -0
- data/ext/fusefs_fuse.c +150 -0
- data/ext/fusefs_fuse.h +19 -0
- data/ext/fusefs_lib.c +560 -0
- data/ext/fusefs_lib.h +119 -0
- data/hello.sh +10 -0
- data/lib/fusefs.rb +114 -0
- data/pfuse.gemspec +69 -0
- data/sample/demo.rb +100 -0
- data/sample/dictfs.rb +84 -0
- data/sample/hello.rb +27 -0
- data/sample/openurifs.rb +53 -0
- data/sample/railsfs.rb +77 -0
- data/sample/sqlfs.rb +134 -0
- data/sample/yamlfs.rb +168 -0
- data/test/fusefs_test.rb +7 -0
- data/test/test_helper.rb +10 -0
- metadata +84 -0
data/sample/yamlfs.rb
ADDED
@@ -0,0 +1,168 @@
|
|
1
|
+
# yamlfs.rb
|
2
|
+
#
|
3
|
+
|
4
|
+
require "rubygems"
|
5
|
+
require 'fusefs'
|
6
|
+
include FuseFS
|
7
|
+
|
8
|
+
require 'yaml'
|
9
|
+
|
10
|
+
class YAMLFS < FuseFS::FuseDir
|
11
|
+
def initialize(filename)
|
12
|
+
@filename = filename
|
13
|
+
begin
|
14
|
+
@fs = YAML.load(IO.read(filename))
|
15
|
+
rescue Exception
|
16
|
+
@fs = Hash.new()
|
17
|
+
end
|
18
|
+
end
|
19
|
+
def save
|
20
|
+
File.open(@filename,'w') do |fout|
|
21
|
+
fout.puts(YAML.dump(@fs))
|
22
|
+
end
|
23
|
+
end
|
24
|
+
def contents(path)
|
25
|
+
items = scan_path(path)
|
26
|
+
node = items.inject(@fs) do |node,item|
|
27
|
+
item ? node[item] : node
|
28
|
+
end
|
29
|
+
node.keys.sort
|
30
|
+
end
|
31
|
+
def directory?(path)
|
32
|
+
items = scan_path(path)
|
33
|
+
node = items.inject(@fs) do |node,item|
|
34
|
+
item ? node[item] : node
|
35
|
+
end
|
36
|
+
node.is_a?(Hash)
|
37
|
+
end
|
38
|
+
def file?(path)
|
39
|
+
items = scan_path(path)
|
40
|
+
node = items.inject(@fs) do |node,item|
|
41
|
+
item ? node[item] : node
|
42
|
+
end
|
43
|
+
node.is_a?(String)
|
44
|
+
end
|
45
|
+
def touch(path)
|
46
|
+
puts "#{path} has been pushed like a button!"
|
47
|
+
end
|
48
|
+
|
49
|
+
# File reading
|
50
|
+
def read_file(path)
|
51
|
+
items = scan_path(path)
|
52
|
+
node = items.inject(@fs) do |node,item|
|
53
|
+
item ? node[item] : node
|
54
|
+
end
|
55
|
+
node.to_s
|
56
|
+
end
|
57
|
+
|
58
|
+
def size(path)
|
59
|
+
read_file(path).size
|
60
|
+
end
|
61
|
+
|
62
|
+
# File writing
|
63
|
+
def can_write?(path)
|
64
|
+
items = scan_path(path)
|
65
|
+
name = items.pop # Last is the filename.
|
66
|
+
node = items.inject(@fs) do |node,item|
|
67
|
+
item ? node[item] : node
|
68
|
+
end
|
69
|
+
node.is_a?(Hash)
|
70
|
+
rescue Exception => er
|
71
|
+
puts "Error! #{er}"
|
72
|
+
end
|
73
|
+
def write_to(path,body)
|
74
|
+
items = scan_path(path)
|
75
|
+
name = items.pop # Last is the filename.
|
76
|
+
node = items.inject(@fs) do |node,item|
|
77
|
+
item ? node[item] : node
|
78
|
+
end
|
79
|
+
node[name] = body
|
80
|
+
self.save
|
81
|
+
rescue Exception => er
|
82
|
+
puts "Error! #{er}"
|
83
|
+
end
|
84
|
+
|
85
|
+
# Delete a file
|
86
|
+
def can_delete?(path)
|
87
|
+
items = scan_path(path)
|
88
|
+
node = items.inject(@fs) do |node,item|
|
89
|
+
item ? node[item] : node
|
90
|
+
end
|
91
|
+
node.is_a?(String)
|
92
|
+
rescue Exception => er
|
93
|
+
puts "Error! #{er}"
|
94
|
+
end
|
95
|
+
def delete(path)
|
96
|
+
items = scan_path(path)
|
97
|
+
name = items.pop # Last is the filename.
|
98
|
+
node = items.inject(@fs) do |node,item|
|
99
|
+
item ? node[item] : node
|
100
|
+
end
|
101
|
+
node.delete(name)
|
102
|
+
self.save
|
103
|
+
rescue Exception => er
|
104
|
+
puts "Error! #{er}"
|
105
|
+
end
|
106
|
+
|
107
|
+
# mkdirs
|
108
|
+
def can_mkdir?(path)
|
109
|
+
items = scan_path(path)
|
110
|
+
name = items.pop # Last is the filename.
|
111
|
+
node = items.inject(@fs) do |node,item|
|
112
|
+
item ? node[item] : node
|
113
|
+
end
|
114
|
+
node.is_a?(Hash)
|
115
|
+
rescue Exception => er
|
116
|
+
puts "Error! #{er}"
|
117
|
+
end
|
118
|
+
def mkdir(path)
|
119
|
+
items = scan_path(path)
|
120
|
+
name = items.pop # Last is the filename.
|
121
|
+
node = items.inject(@fs) do |node,item|
|
122
|
+
item ? node[item] : node
|
123
|
+
end
|
124
|
+
node[name] = Hash.new
|
125
|
+
self.save
|
126
|
+
end
|
127
|
+
|
128
|
+
# rmdir
|
129
|
+
def can_rmdir?(path)
|
130
|
+
items = scan_path(path)
|
131
|
+
node = items.inject(@fs) do |node,item|
|
132
|
+
item ? node[item] : node
|
133
|
+
end
|
134
|
+
node.is_a?(Hash) && node.empty?
|
135
|
+
end
|
136
|
+
def rmdir(path)
|
137
|
+
items = scan_path(path)
|
138
|
+
name = items.pop # Last is the filename.
|
139
|
+
node = items.inject(@fs) do |node,item|
|
140
|
+
item ? node[item] : node
|
141
|
+
end
|
142
|
+
node.delete(name)
|
143
|
+
self.save
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
if (File.basename($0) == File.basename(__FILE__))
|
148
|
+
if (ARGV.size < 2)
|
149
|
+
puts "Usage: #{$0} <directory> <yamlfile> <options>"
|
150
|
+
exit
|
151
|
+
end
|
152
|
+
|
153
|
+
dirname, yamlfile = ARGV.shift, ARGV.shift
|
154
|
+
|
155
|
+
unless File.directory?(dirname)
|
156
|
+
puts "Usage: #{dirname} is not a directory."
|
157
|
+
exit
|
158
|
+
end
|
159
|
+
|
160
|
+
root = YAMLFS.new(yamlfile)
|
161
|
+
|
162
|
+
# Set the root FuseFS
|
163
|
+
FuseFS.set_root(root)
|
164
|
+
|
165
|
+
FuseFS.mount_under(dirname, *ARGV)
|
166
|
+
|
167
|
+
FuseFS.run # This doesn't return until we're unmounted.
|
168
|
+
end
|
data/test/fusefs_test.rb
ADDED
data/test/test_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pfuse
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.7.5
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- David Turnbull
|
8
|
+
- Kyle Maxwell
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2010-02-26 00:00:00 +11:00
|
14
|
+
default_executable:
|
15
|
+
dependencies: []
|
16
|
+
|
17
|
+
description: Gemified
|
18
|
+
email: dsturnbull@gmail.com
|
19
|
+
executables: []
|
20
|
+
|
21
|
+
extensions:
|
22
|
+
- ext/extconf.rb
|
23
|
+
extra_rdoc_files:
|
24
|
+
- LICENSE
|
25
|
+
- README
|
26
|
+
- TODO
|
27
|
+
files:
|
28
|
+
- .document
|
29
|
+
- .gitignore
|
30
|
+
- API.txt
|
31
|
+
- Changes.txt
|
32
|
+
- LICENSE
|
33
|
+
- README
|
34
|
+
- Rakefile
|
35
|
+
- TODO
|
36
|
+
- VERSION
|
37
|
+
- ext/extconf.rb
|
38
|
+
- ext/fusefs_fuse.c
|
39
|
+
- ext/fusefs_fuse.h
|
40
|
+
- ext/fusefs_lib.c
|
41
|
+
- ext/fusefs_lib.h
|
42
|
+
- hello.sh
|
43
|
+
- lib/fusefs.rb
|
44
|
+
- pfuse.gemspec
|
45
|
+
- sample/demo.rb
|
46
|
+
- sample/dictfs.rb
|
47
|
+
- sample/hello.rb
|
48
|
+
- sample/openurifs.rb
|
49
|
+
- sample/railsfs.rb
|
50
|
+
- sample/sqlfs.rb
|
51
|
+
- sample/yamlfs.rb
|
52
|
+
- test/fusefs_test.rb
|
53
|
+
- test/test_helper.rb
|
54
|
+
has_rdoc: true
|
55
|
+
homepage: http://github.com/dsturnbull/pfuse
|
56
|
+
licenses: []
|
57
|
+
|
58
|
+
post_install_message:
|
59
|
+
rdoc_options:
|
60
|
+
- --charset=UTF-8
|
61
|
+
require_paths:
|
62
|
+
- lib
|
63
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: "0"
|
68
|
+
version:
|
69
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: "0"
|
74
|
+
version:
|
75
|
+
requirements: []
|
76
|
+
|
77
|
+
rubyforge_project:
|
78
|
+
rubygems_version: 1.3.5
|
79
|
+
signing_key:
|
80
|
+
specification_version: 3
|
81
|
+
summary: fusefs
|
82
|
+
test_files:
|
83
|
+
- test/fusefs_test.rb
|
84
|
+
- test/test_helper.rb
|