vfs 0.4.4 → 0.4.5
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +7 -2
- data/lib/vfs/entries/entry.rb +5 -0
- data/lib/vfs/entries/file.rb +2 -1
- data/readme.md +20 -95
- data/spec/file_spec.rb +5 -0
- metadata +3 -3
data/Rakefile
CHANGED
@@ -7,5 +7,10 @@ project(
|
|
7
7
|
# version: '0.4.0',
|
8
8
|
|
9
9
|
author: "Alexey Petrushin",
|
10
|
-
homepage: "http://github.com/
|
11
|
-
)
|
10
|
+
homepage: "http://alexeypetrushin.github.com/vfs"
|
11
|
+
)
|
12
|
+
|
13
|
+
desc "Generate documentation"
|
14
|
+
task :docs do
|
15
|
+
%x(cd docs && rocco -o site *.rb)
|
16
|
+
end
|
data/lib/vfs/entries/entry.rb
CHANGED
@@ -124,6 +124,11 @@ module Vfs
|
|
124
124
|
driver.eql?(other.driver) and path.eql?(other.path)
|
125
125
|
end
|
126
126
|
|
127
|
+
def delete *args
|
128
|
+
raise "use :destroy!"
|
129
|
+
end
|
130
|
+
alias_method :remove, :delete
|
131
|
+
|
127
132
|
protected
|
128
133
|
def destroy_entry first = :file, second = :dir
|
129
134
|
driver.open do
|
data/lib/vfs/entries/file.rb
CHANGED
@@ -53,6 +53,7 @@ module Vfs
|
|
53
53
|
options = args.first || {}
|
54
54
|
else
|
55
55
|
data, options = *args
|
56
|
+
data ||= ""
|
56
57
|
options ||= {}
|
57
58
|
end
|
58
59
|
raise "can't do :override and :append at the same time!" if options[:override] and options[:append]
|
@@ -144,7 +145,7 @@ module Vfs
|
|
144
145
|
def size; get :size end
|
145
146
|
|
146
147
|
def basename
|
147
|
-
::File.basename(name, File.extname(name))
|
148
|
+
::File.basename(name, ::File.extname(name))
|
148
149
|
end
|
149
150
|
|
150
151
|
def extension
|
data/readme.md
CHANGED
@@ -1,104 +1,22 @@
|
|
1
|
-
|
2
|
-
It is possible to provide such unified API because although those storages have different API the core concept are almost the same.
|
1
|
+
**Documentation:** http://alexeypetrushin.github.com/vfs
|
3
2
|
|
4
|
-
|
3
|
+
Virtual File System provides **clean, simple and unified API over different storages** (Local File System, AWS S3, SFTP, ...).
|
5
4
|
|
6
|
-
|
5
|
+
- very simple and intuitive API.
|
6
|
+
- same API for different storages.
|
7
|
+
- work simultaneously with multiple storages.
|
8
|
+
- small codebase, easy to learn and extend.
|
9
|
+
- driver implementation is very simple, it is easy to create new drivers.
|
7
10
|
|
8
|
-
|
9
|
-
- same API for different storages (Local FS, SSH, Hadoop, or any other , ...).
|
10
|
-
- should work **simultaneously with different storages**.
|
11
|
-
- small codebase, easy to extend and understand.
|
12
|
-
- driver implementation should be simple, is should be easy to create new drivers.
|
11
|
+
Such unified API is possible because although the API of storages are different the core concept are almost the same.
|
13
12
|
|
14
|
-
|
13
|
+
Install Vfs with Rubygems:
|
15
14
|
|
16
|
-
|
15
|
+
gem install vfs
|
17
16
|
|
18
|
-
|
19
|
-
require 'vfs'
|
17
|
+
Once installed, You can proceed with the [basic example][basics], there's also [S3 version][s3_basics] and [SFTP version][ssh_basics] (also [S3 backup][s3_backup] and [SSH/SFTP deployment][ssh_deployment] examples availiable).
|
20
18
|
|
21
|
-
|
22
|
-
sandbox = '/tmp/vfs_sandbox'.to_dir.destroy
|
23
|
-
|
24
|
-
# Let's create simple Hello World project.
|
25
|
-
project = sandbox['hello_world'] # Our Hello World project.
|
26
|
-
|
27
|
-
project['readme.txt'].write 'My shiny App' # Writing readme file, note that parent dirs
|
28
|
-
# where created automatically.
|
29
|
-
|
30
|
-
# File operations.
|
31
|
-
readme = project['readme.txt']
|
32
|
-
|
33
|
-
# Checking that it's all ok with our readme.
|
34
|
-
p readme.name # => readme.txt
|
35
|
-
p readme.path # => /.../readme.txt
|
36
|
-
p readme.exist? # => true
|
37
|
-
p readme.file? # => true
|
38
|
-
p readme.dir? # => false
|
39
|
-
p readme.size # => 12
|
40
|
-
p readme.created_at # => 2011-09-09 13:20:43 +0400
|
41
|
-
p readme.updated_at # => 2011-09-09 13:20:43 +0400
|
42
|
-
|
43
|
-
# Reading.
|
44
|
-
p readme.read # => "My shiny App"
|
45
|
-
readme.read{|chunk| p chunk} # => "My shiny App"
|
46
|
-
|
47
|
-
# Writing.
|
48
|
-
readme.append "2 + 2 = 4"
|
49
|
-
p readme.size # => 21
|
50
|
-
|
51
|
-
readme.write "My shiny App v2" # Writing new version of readme.
|
52
|
-
p readme.read # => "My shiny App v2"
|
53
|
-
|
54
|
-
readme.write{|s| s.write "My shiny App v3"} # Writing another new version of readme.
|
55
|
-
p readme.read # => "My shiny App v3"
|
56
|
-
|
57
|
-
# Copying & Moving.
|
58
|
-
readme.copy_to project['docs/readme.txt'] # Copying to ./docs folder.
|
59
|
-
p project['docs/readme.txt'].exist? # => true
|
60
|
-
p readme.exist? # => true
|
61
|
-
|
62
|
-
readme.move_to project['docs/readme.txt'] # Moving to ./docs folder.
|
63
|
-
p project['docs/readme.txt'].exist? # => true
|
64
|
-
p readme.exist? # => false
|
65
|
-
|
66
|
-
|
67
|
-
# Dir operations.
|
68
|
-
project.file('Rakefile').create # Creating empty Rakefile.
|
69
|
-
|
70
|
-
# Checking our project exists and not empty.
|
71
|
-
p project.exist? # => true
|
72
|
-
p project.empty? # => false
|
73
|
-
|
74
|
-
# Listing dir content.
|
75
|
-
p project.entries # => [/.../docs, .../Rakefile]
|
76
|
-
p project.files # => [/.../Rakefile]
|
77
|
-
p project.dirs # => [/.../docs]
|
78
|
-
project.entries do |entry| # => ["docs", false]
|
79
|
-
p [entry.name, entry.file?] # => ["Rakefile", true]
|
80
|
-
end
|
81
|
-
p project.include?('Rakefile') # => true
|
82
|
-
|
83
|
-
# Copying & Moving, let's create another project by cloning our hello_world.
|
84
|
-
project.copy_to sandbox['another_project']
|
85
|
-
p sandbox['another_project'].entries # => [/.../docs, .../Rakefile]
|
86
|
-
|
87
|
-
# Cleaning sandbox.
|
88
|
-
sandbox.destroy
|
89
|
-
```
|
90
|
-
|
91
|
-
API is the same for all storage types (Local, S3, SFTP, ...). Also API are the same for transfers (copy_to, move_to, ...) between any storage types.
|
92
|
-
So, for example backup from S3 looks exactly the same as if files are located on the local folder.
|
93
|
-
|
94
|
-
## Installation
|
95
|
-
|
96
|
-
``` bash
|
97
|
-
$ gem install vfs
|
98
|
-
|
99
|
-
# For S3 and SFTP support install also vos
|
100
|
-
$ gem install vos
|
101
|
-
```
|
19
|
+
You can report bugs and discuss features on the [issues page][issues].
|
102
20
|
|
103
21
|
## Integration with [Vos][vos] (Virtual Operating System)
|
104
22
|
|
@@ -123,4 +41,11 @@ Copyright (c) Alexey Petrushin http://petrush.in, released under the MIT license
|
|
123
41
|
|
124
42
|
[vos]: http://github.com/alexeypetrushin/vos
|
125
43
|
[cluster_management]: http://github.com/alexeypetrushin/cluster_management
|
126
|
-
[my_cluster]: http://github.com/alexeypetrushin/my_cluster
|
44
|
+
[my_cluster]: http://github.com/alexeypetrushin/my_cluster
|
45
|
+
|
46
|
+
[basics]: http://alexeypetrushin.github.com/vfs/basics.html
|
47
|
+
[s3_basics]: http://alexeypetrushin.github.com/vfs/s3_basics.html
|
48
|
+
[s3_backup]: http://alexeypetrushin.github.com/vfs/s3_backup.html
|
49
|
+
[ssh_basics]: http://alexeypetrushin.github.com/vfs/ssh_basics.html
|
50
|
+
[ssh_deployment]: http://alexeypetrushin.github.com/vfs/ssh_deployment.html
|
51
|
+
[issues]: https://github.com/alexeypetrushin/vfs/issues
|
data/spec/file_spec.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vfs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-09-
|
12
|
+
date: 2011-09-11 00:00:00.000000000Z
|
13
13
|
dependencies: []
|
14
14
|
description:
|
15
15
|
email:
|
@@ -41,7 +41,7 @@ files:
|
|
41
41
|
- spec/storages/local_spec/emptygit
|
42
42
|
- spec/storages/local_spec.rb
|
43
43
|
- spec/universal_entry_spec.rb
|
44
|
-
homepage: http://github.com/
|
44
|
+
homepage: http://alexeypetrushin.github.com/vfs
|
45
45
|
licenses: []
|
46
46
|
post_install_message:
|
47
47
|
rdoc_options: []
|