tilt-fs 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 02ce198c6409d6708884ac010f4f0f365530ac65
4
+ data.tar.gz: 32ddf32e300c64f8237ad7261d1e70c388823ae7
5
+ SHA512:
6
+ metadata.gz: 91eff9cdcd9010e0e014f19a9a464bb3802d8d2c6e5613507e3c8a73f350c3ad939c58d247286de7b17d93d354c0beafde1d55ed3f4e5853f1800a6b9d3bc770
7
+ data.tar.gz: 96d674b8f910fd9e17b1fbe10c7e97db7c34f93cd2c41648cd70897a0d1e68c48d55f339f63b024cc71d28da13b956c4475a8e1c005c12316cecfb1fb948e6a4
data/.gitignore ADDED
@@ -0,0 +1,15 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
15
+ /.idea/
data/.travis.yml ADDED
@@ -0,0 +1,16 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - "2.1"
5
+ - "2.0"
6
+ - "1.9"
7
+
8
+ bundler_args: "--jobs 4"
9
+
10
+ sudo: false
11
+
12
+ script:
13
+ - bundle exec rake test
14
+
15
+ cache:
16
+ bundler: true
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in tilt-fs.gemspec
4
+ gemspec
5
+
6
+ group :development do
7
+ gem "fakefs", :require => "fakefs/safe"
8
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Hiroyuki Sano
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,36 @@
1
+ # TiltFS
2
+
3
+ The user space file system based on [Tilt](https://github.com/rtomayko/tilt).
4
+
5
+ ## Installation
6
+
7
+ $ gem install tilt-fs
8
+
9
+ ## Usage
10
+
11
+ ### 1. Run the filesystem
12
+
13
+ $ cd {some_dir}
14
+ $ mkdir _template
15
+ $ mkdir mnt
16
+ $ echo 'Hello, <%= name %>' > _template/hello.txt.erb
17
+ $ tiltfs mnt/ _template/
18
+ -> Mount "_template" into "mnt"
19
+
20
+ ### 2. Access to the files
21
+
22
+ $ cd {some_dir}
23
+ $ ruby -r yaml -e "puts({name: "world"}.to_yaml)" > .data.yaml
24
+ $ cat mnt/hello.txt
25
+ Hello, world
26
+ $ ruby -r yaml -e "puts({name: "NEW WORLD"}.to_yaml)" > .data.yaml
27
+ $ cat mnt/hello.txt
28
+ Hello, NEW WORLD
29
+
30
+ ## Contributing
31
+
32
+ 1. Fork it ( https://github.com/sh19910711/ruby-tilt-fs/fork )
33
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
34
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
35
+ 4. Push to the branch (`git push origin my-new-feature`)
36
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require "bundler/setup"
2
+ require "bundler/gem_tasks"
3
+
4
+ task :default => :test
5
+
6
+ task :test do
7
+ ruby("test/run_test.rb")
8
+ end
data/bin/tiltfs ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "rfuse"
4
+ require "tilt/fs"
5
+
6
+ args = ARGV.clone
7
+ src_path = args.pop
8
+
9
+ RFuse.main(args) do
10
+ mount_point = ARGV.first
11
+ fs = Tilt::Fs::FileSystem::Core.new(mount_point, src_path)
12
+ end
@@ -0,0 +1,7 @@
1
+ module Tilt::Fs::FileSystem
2
+
3
+ FS_DEFAULT_DIR_MODE = 0500
4
+ FS_DEFAULT_FILE_MODE = 0400
5
+ FS_DEFAULT_DATA_FILE = ".data.yaml"
6
+
7
+ end
@@ -0,0 +1,57 @@
1
+ module Tilt::Fs::FileSystem
2
+
3
+ class Core
4
+
5
+ attr_reader :logger
6
+ attr_reader :root_dir
7
+ attr_reader :mount_point
8
+ attr_reader :src_path
9
+ attr_reader :template_data_file
10
+
11
+ def initialize(new_mount_point, new_src_path = "./")
12
+ @logger = FS_LOGGER
13
+ @src_path = new_src_path
14
+ @template_data_file = ::File.join(::Dir.pwd, FS_DEFAULT_DATA_FILE)
15
+ @root_dir = Dir.new(src_path, template_data_file)
16
+ @mount_point = new_mount_point
17
+
18
+ logger.debug "core#new(): created"
19
+ logger.info "Mounted into #{mount_point} from #{src_path}"
20
+ logger.info "Template data path = #{template_data_file}"
21
+ end
22
+
23
+ def init(ctx, rfuse_info)
24
+ logger.info "Tilt::Fs started."
25
+ end
26
+
27
+ def readdir(ctx, path, filter, offset, ffi)
28
+ logger.info "READ_DIR: #{::File.join mount_point, path}"
29
+ logger.debug "Core#readdir(): ctx = #{ctx}, path = #{path}"
30
+ dir = root_dir.find(path)
31
+
32
+ raise ::Errno::ENOTDIR.new(path) unless dir.is_dir?
33
+
34
+ token = ::Pathname.new(path).basename.to_s
35
+ dir.search(token).each do |entry|
36
+ filter.push entry.name, entry.attr, 0
37
+ end
38
+ end
39
+
40
+ def open(ctx, path, ffi)
41
+ logger.debug "Core#open(): path = #{path}"
42
+ end
43
+
44
+ def read(ctx, path, size, offset, ffi)
45
+ logger.info "READ_FILE: #{::File.join mount_point, path}"
46
+ logger.debug "Core#read(): path = #{path}, size = #{size}"
47
+ root_dir.find(path).content
48
+ end
49
+
50
+ def getattr(ctx, path)
51
+ logger.debug "Core#getattr(): path = #{path}"
52
+ root_dir.find(path).attr
53
+ end
54
+
55
+ end
56
+
57
+ end
@@ -0,0 +1,84 @@
1
+ module Tilt::Fs::FileSystem
2
+
3
+ class Dir
4
+
5
+ attr_reader :name
6
+ attr_reader :logger
7
+ attr_reader :real_path
8
+ attr_reader :data_path
9
+ attr_reader :flag_no_data
10
+
11
+ def initialize(new_real_path, new_data_path)
12
+ @logger = FS_LOGGER
13
+ @real_path = new_real_path
14
+ @name = ::Pathname.new(real_path).basename.to_s
15
+ @data_path = new_data_path
16
+ logger.debug "dir#new(): created, real_path = #{real_path}"
17
+ end
18
+
19
+ def is_dir?
20
+ true
21
+ end
22
+
23
+ def is_file?
24
+ false
25
+ end
26
+
27
+ def stat
28
+ {
29
+ :uid => ::Process.uid,
30
+ :gid => ::Process.gid,
31
+ :atime => ::Time.now,
32
+ :mtime => ::Time.now,
33
+ :size => 0,
34
+ }
35
+ end
36
+
37
+ def attr
38
+ ::RFuse::Stat.directory FS_DEFAULT_DIR_MODE, stat
39
+ end
40
+
41
+ def create_file_or_dir(path)
42
+ logger.debug "dir#create_file_or_dir(): path = #{path}"
43
+ if ::FileTest.directory?(path)
44
+ Dir.new path, data_path
45
+ else
46
+ File.new path, data_path
47
+ end
48
+ end
49
+
50
+ def glob_and_create(glob_path)
51
+ ::Dir.glob(glob_path).map do |found_path|
52
+ create_file_or_dir found_path
53
+ end
54
+ end
55
+
56
+ def search(token)
57
+ logger.debug "dir#search(): token = #{token}"
58
+ glob_path = ::File.join(real_path, "#{token}*")
59
+ logger.debug "dir#search(): glob_path = #{glob_path}"
60
+ glob_and_create glob_path
61
+ end
62
+
63
+ def find(path)
64
+ logger.debug "dir#find(): path = #{path}"
65
+ lookup_path = ::File.join(real_path, path)
66
+ if ::FileTest.file?(lookup_path)
67
+ create_file_or_dir lookup_path
68
+ elsif ::FileTest.directory?(lookup_path)
69
+ create_file_or_dir lookup_path
70
+ else
71
+ logger.debug "dir#find(): find template for #{path}"
72
+ templates = ::Dir.glob(::File.join real_path, "#{path}*")
73
+ if templates.length === 1
74
+ logger.debug "dir#find(): found in #{templates.first}"
75
+ create_file_or_dir templates.first
76
+ else
77
+ raise ::Errno::ENOENT.new(path)
78
+ end
79
+ end
80
+ end
81
+
82
+ end
83
+
84
+ end
@@ -0,0 +1,78 @@
1
+ module Tilt::Fs::FileSystem
2
+
3
+ class File
4
+
5
+ attr_reader :logger
6
+ attr_reader :real_path
7
+ attr_reader :data_path
8
+ attr_reader :content
9
+
10
+ def initialize(new_real_path, new_data_path = nil)
11
+ @real_path = new_real_path
12
+ @logger = FS_LOGGER
13
+ @data_path = new_data_path
14
+ @content = render_content
15
+
16
+ logger.debug "file#new(): created, real_path = #{real_path}, data_path = #{data_path}"
17
+ end
18
+
19
+ def render_content
20
+ if ::Tilt.templates_for(real_path).empty?
21
+ ::File.read real_path
22
+ else
23
+ template_data = load_template_data
24
+ template = ::Tilt.new(real_path, nil)
25
+ begin
26
+ template.render self, template_data
27
+ rescue => e
28
+ logger.warn "file#render_content(): #{e}"
29
+ raise "error on file#render_content()"
30
+ end
31
+ end
32
+ end
33
+
34
+ def load_template_data
35
+ if data_path.nil? || (not ::FileTest.file? data_path)
36
+ logger.debug "file#load_template_data(): no data"
37
+ {}
38
+ else
39
+ logger.debug "file#load_template_data(): data_path = #{data_path}"
40
+ ::YAML.load_file data_path
41
+ end
42
+ end
43
+
44
+ # e.g. "foo.txt.erb" => "foo.txt"
45
+ def name
46
+ res = ::Pathname.new(real_path).basename.to_s
47
+ if /\.erb$/ === res
48
+ res.gsub /\.erb$/, ""
49
+ else
50
+ res
51
+ end
52
+ end
53
+
54
+ def is_dir?
55
+ false
56
+ end
57
+
58
+ def is_file?
59
+ true
60
+ end
61
+
62
+ def stat
63
+ {
64
+ :uid => ::Process.uid,
65
+ :gid => ::Process.gid,
66
+ :atime => ::Time.now,
67
+ :mtime => ::Time.now,
68
+ :size => content.length,
69
+ }
70
+ end
71
+
72
+ def attr
73
+ ::RFuse::Stat.file FS_DEFAULT_FILE_MODE, stat
74
+ end
75
+
76
+ end
77
+
78
+ end
@@ -0,0 +1,16 @@
1
+ module Tilt::Fs::FileSystem
2
+
3
+ require "tilt"
4
+ require "yaml"
5
+
6
+ require "tilt/fs/file_system/core"
7
+ require "tilt/fs/file_system/dir"
8
+ require "tilt/fs/file_system/constants"
9
+ require "tilt/fs/file_system/file"
10
+
11
+ require "logger"
12
+ FS_LOGGER = ::Logger.new(STDOUT)
13
+ FS_LOGGER.level = ::Logger::Severity::INFO
14
+ FS_LOGGER.level = ::Logger::Severity::DEBUG if ENV["TILTFS_DEBUG"] === "true"
15
+
16
+ end
@@ -0,0 +1,9 @@
1
+ module Tilt
2
+
3
+ module Fs
4
+
5
+ VERSION = "0.0.2"
6
+
7
+ end
8
+
9
+ end
data/lib/tilt/fs.rb ADDED
@@ -0,0 +1,10 @@
1
+ module Tilt
2
+
3
+ module Fs
4
+
5
+ require "tilt/fs/version"
6
+ require "tilt/fs/file_system"
7
+
8
+ end
9
+
10
+ end
data/test/run_test.rb ADDED
@@ -0,0 +1,8 @@
1
+ require "bundler/setup"
2
+ Bundler.require :development
3
+ require "tilt/fs"
4
+
5
+ base_dir = File.expand_path(File.join(File.dirname(__FILE__), ".."))
6
+ test_dir = File.join(base_dir, "test")
7
+
8
+ exit Test::Unit::AutoRunner.run(true, test_dir)
data/test/test_dir.rb ADDED
@@ -0,0 +1,23 @@
1
+ class TestDir < Test::Unit::TestCase
2
+
3
+ setup do
4
+ FakeFS.activate!
5
+ end
6
+
7
+ teardown do
8
+ FakeFS.deactivate!
9
+ FakeFS::FileSystem.clear
10
+ end
11
+
12
+ setup do
13
+ Tilt::Fs::FileSystem::FS_LOGGER.level = Logger::Severity::UNKNOWN
14
+ end
15
+
16
+ test "dir#search()" do
17
+ FileUtils.mkdir_p "/path/to"
18
+ FileUtils.touch "/path/to/hello"
19
+ dir = Tilt::Fs::FileSystem::Dir.new("/path/to")
20
+ assert_equal 1, dir.search("/hello").length
21
+ end
22
+
23
+ end
data/test/test_file.rb ADDED
@@ -0,0 +1,48 @@
1
+ class TestFile < Test::Unit::TestCase
2
+
3
+ setup do
4
+ FakeFS.activate!
5
+ end
6
+
7
+ teardown do
8
+ FakeFS.deactivate!
9
+ FakeFS::FileSystem.clear
10
+ end
11
+
12
+ setup do
13
+ Tilt::Fs::FileSystem::FS_LOGGER.level = Logger::Severity::UNKNOWN
14
+ end
15
+
16
+ test "file#content" do
17
+ FileUtils.mkdir_p "/path/to"
18
+ FileUtils.touch "/path/to/hello"
19
+ File.write "/path/to/hello", "hello, world"
20
+ file = Tilt::Fs::FileSystem::File.new("/path/to/hello")
21
+ assert_equal "hello, world", file.content
22
+ end
23
+
24
+ test "file#is_file?()" do
25
+ FileUtils.mkdir_p "/path/to"
26
+ FileUtils.touch "/path/to/hello"
27
+ File.write "/path/to/hello", "hello, world"
28
+ file = Tilt::Fs::FileSystem::File.new("/path/to/hello")
29
+ assert_equal true, file.is_file?
30
+ end
31
+
32
+ test "file#is_dir?()" do
33
+ FileUtils.mkdir_p "/path/to"
34
+ FileUtils.touch "/path/to/hello"
35
+ File.write "/path/to/hello", "hello, world"
36
+ file = Tilt::Fs::FileSystem::File.new("/path/to/hello")
37
+ assert_equal false, file.is_dir?
38
+ end
39
+
40
+ test "file#name" do
41
+ FileUtils.mkdir_p "/path/to"
42
+ FileUtils.touch "/path/to/hello.txt.erb"
43
+ File.write "/path/to/hello.txt.erb", "hello"
44
+ file = Tilt::Fs::FileSystem::File.new("/path/to/hello.txt.erb")
45
+ assert_equal "hello.txt", file.name
46
+ end
47
+
48
+ end
data/tilt-fs.gemspec ADDED
@@ -0,0 +1,29 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'tilt/fs/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "tilt-fs"
8
+ spec.version = Tilt::Fs::VERSION
9
+ spec.authors = ["Hiroyuki Sano"]
10
+ spec.email = ["sh19910711@gmail.com"]
11
+ spec.summary = %q{The user space file system based on Tilt.}
12
+ spec.description = %q{The user space file system based on Tilt.}
13
+ spec.homepage = "https://github.com/sh19910711/ruby-tilt-fs"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "tilt", "~> 2.0"
22
+ spec.add_dependency "rfuse", "~> 1.1.0.RC0"
23
+
24
+ spec.add_development_dependency "bundler", "~> 1.7.0"
25
+ spec.add_development_dependency "rake", "~> 10.4.0"
26
+ spec.add_development_dependency "test-unit", "~> 3.0.0"
27
+ spec.add_development_dependency "fakefs", "~> 0.6.0"
28
+ spec.add_development_dependency "pry-byebug", "~> 2.0.0"
29
+ end
metadata ADDED
@@ -0,0 +1,164 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tilt-fs
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Hiroyuki Sano
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-12-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: tilt
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rfuse
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.1.0.RC0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.1.0.RC0
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 1.7.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 1.7.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 10.4.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 10.4.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: test-unit
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 3.0.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 3.0.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: fakefs
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.6.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.6.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: pry-byebug
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 2.0.0
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 2.0.0
111
+ description: The user space file system based on Tilt.
112
+ email:
113
+ - sh19910711@gmail.com
114
+ executables:
115
+ - tiltfs
116
+ extensions: []
117
+ extra_rdoc_files: []
118
+ files:
119
+ - ".gitignore"
120
+ - ".travis.yml"
121
+ - Gemfile
122
+ - LICENSE.txt
123
+ - README.md
124
+ - Rakefile
125
+ - bin/tiltfs
126
+ - lib/tilt/fs.rb
127
+ - lib/tilt/fs/file_system.rb
128
+ - lib/tilt/fs/file_system/constants.rb
129
+ - lib/tilt/fs/file_system/core.rb
130
+ - lib/tilt/fs/file_system/dir.rb
131
+ - lib/tilt/fs/file_system/file.rb
132
+ - lib/tilt/fs/version.rb
133
+ - test/run_test.rb
134
+ - test/test_dir.rb
135
+ - test/test_file.rb
136
+ - tilt-fs.gemspec
137
+ homepage: https://github.com/sh19910711/ruby-tilt-fs
138
+ licenses:
139
+ - MIT
140
+ metadata: {}
141
+ post_install_message:
142
+ rdoc_options: []
143
+ require_paths:
144
+ - lib
145
+ required_ruby_version: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ required_rubygems_version: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
155
+ requirements: []
156
+ rubyforge_project:
157
+ rubygems_version: 2.4.5
158
+ signing_key:
159
+ specification_version: 4
160
+ summary: The user space file system based on Tilt.
161
+ test_files:
162
+ - test/run_test.rb
163
+ - test/test_dir.rb
164
+ - test/test_file.rb