folio 0.1.0 → 0.2.0

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 (70) hide show
  1. data/CHANGES +2 -0
  2. data/MANIFEST +20 -5
  3. data/METADATA +3 -2
  4. data/README +5 -0
  5. data/doc/rdoc/classes/Enumerator.html +92 -0
  6. data/doc/rdoc/classes/Folio.html +12 -2
  7. data/doc/rdoc/classes/Folio/BlockDevice.html +4 -4
  8. data/doc/rdoc/classes/Folio/CharacterDevice.html +4 -4
  9. data/doc/rdoc/classes/Folio/Directory.html +169 -41
  10. data/doc/rdoc/classes/Folio/Document.html +130 -51
  11. data/doc/rdoc/classes/Folio/FileObject.html +318 -313
  12. data/doc/rdoc/classes/Folio/Pipe.html +8 -8
  13. data/doc/rdoc/classes/Folio/Prompt.html +261 -218
  14. data/doc/rdoc/created.rid +1 -1
  15. data/doc/rdoc/files/CHANGES.html +92 -0
  16. data/doc/rdoc/files/METADATA.html +7 -6
  17. data/doc/rdoc/files/README.html +1 -1
  18. data/doc/rdoc/files/lib/folio/directory_rb.html +1 -1
  19. data/doc/rdoc/files/lib/folio/document_rb.html +1 -1
  20. data/doc/rdoc/files/lib/folio/fileobject_rb.html +6 -1
  21. data/doc/rdoc/files/lib/folio/prompt_rb.html +1 -1
  22. data/doc/rdoc/files/lib/folio_rb.html +1 -1
  23. data/doc/rdoc/fr_class_index.html +1 -0
  24. data/doc/rdoc/fr_file_index.html +1 -0
  25. data/doc/rdoc/fr_method_index.html +126 -116
  26. data/doc/ri/Enumerator/cdesc-Enumerator.yaml +15 -0
  27. data/doc/ri/Folio/Directory/%2f-i.yaml +1 -1
  28. data/doc/ri/Folio/Directory/cdesc-Directory.yaml +10 -2
  29. data/doc/ri/Folio/Directory/chdir-i.yaml +3 -1
  30. data/doc/ri/Folio/Directory/chmod_r-i.yaml +2 -0
  31. data/doc/ri/Folio/Directory/chown_r-i.yaml +1 -1
  32. data/doc/ri/Folio/Directory/chroot-i.yaml +2 -0
  33. data/doc/ri/Folio/Directory/cp_r-i.yaml +1 -1
  34. data/doc/ri/Folio/Directory/directories-i.yaml +12 -0
  35. data/doc/ri/Folio/Directory/directory_entries-i.yaml +12 -0
  36. data/doc/ri/Folio/Directory/document_entries-i.yaml +12 -0
  37. data/doc/ri/Folio/Directory/documents-i.yaml +12 -0
  38. data/doc/ri/Folio/Directory/entries-i.yaml +1 -1
  39. data/doc/ri/Folio/Directory/files-i.yaml +12 -0
  40. data/doc/ri/Folio/Directory/foreach-i.yaml +2 -0
  41. data/doc/ri/Folio/Directory/rm_r-i.yaml +2 -0
  42. data/doc/ri/Folio/Directory/rm_rf-i.yaml +2 -0
  43. data/doc/ri/Folio/Directory/rmdir-i.yaml +2 -0
  44. data/doc/ri/Folio/Document/%3c%3c-i.yaml +12 -0
  45. data/doc/ri/Folio/{Prompt/paths-i.yaml → Document/%3c-i.yaml} +4 -4
  46. data/doc/ri/Folio/Document/append-i.yaml +13 -0
  47. data/doc/ri/Folio/Document/cdesc-Document.yaml +10 -2
  48. data/doc/ri/Folio/{Directory/paths-i.yaml → Document/document%3f-i.yaml} +3 -3
  49. data/doc/ri/Folio/Document/write-i.yaml +13 -0
  50. data/doc/ri/Folio/FileObject/cdesc-FileObject.yaml +2 -2
  51. data/doc/ri/Folio/FileObject/{file%3f-i.yaml → document%3f-i.yaml} +4 -2
  52. data/doc/ri/Folio/Prompt/{pwd-i.yaml → %5b%5d-i.yaml} +5 -3
  53. data/doc/ri/Folio/Prompt/cdesc-Prompt.yaml +11 -5
  54. data/doc/ri/Folio/Prompt/directories-i.yaml +1 -1
  55. data/doc/ri/Folio/Prompt/directory_entries-i.yaml +12 -0
  56. data/doc/ri/Folio/Prompt/document_entries-i.yaml +12 -0
  57. data/doc/ri/Folio/Prompt/documents-i.yaml +12 -0
  58. data/doc/ri/Folio/Prompt/entries-i.yaml +1 -1
  59. data/doc/ri/Folio/Prompt/file-i.yaml +4 -3
  60. data/doc/ri/Folio/Prompt/files-i.yaml +1 -1
  61. data/doc/ri/Folio/Prompt/fileutils-i.yaml +2 -0
  62. data/doc/ri/Folio/Prompt/mode-i.yaml +1 -1
  63. data/doc/ri/created.rid +1 -1
  64. data/lib/folio.rb +7 -50
  65. data/lib/folio/directory.rb +55 -10
  66. data/lib/folio/document.rb +14 -1
  67. data/lib/folio/fileobject.rb +9 -1
  68. data/lib/folio/prompt.rb +65 -25
  69. metadata +25 -9
  70. data/doc/ri/Folio/Document/file%3f-i.yaml +0 -10
@@ -0,0 +1,12 @@
1
+ --- !ruby/object:RI::MethodDescription
2
+ aliases: []
3
+
4
+ block_params:
5
+ comment:
6
+ - !ruby/struct:SM::Flow::P
7
+ body: Returns Enumerator of directories.
8
+ full_name: Folio::Prompt#documents
9
+ is_singleton: false
10
+ name: documents
11
+ params: ()
12
+ visibility: public
@@ -5,7 +5,7 @@ aliases:
5
5
  block_params:
6
6
  comment:
7
7
  - !ruby/struct:SM::Flow::P
8
- body: Directory entries.
8
+ body: Lists all entries.
9
9
  full_name: Folio::Prompt#entries
10
10
  is_singleton: false
11
11
  name: entries
@@ -1,10 +1,11 @@
1
1
  --- !ruby/object:RI::MethodDescription
2
- aliases: []
3
-
2
+ aliases:
3
+ - !ruby/object:RI::AliasName
4
+ name: "[]"
4
5
  block_params:
5
6
  comment:
6
7
  - !ruby/struct:SM::Flow::P
7
- body: Get the FileObject.
8
+ body: Get the FileObject for the given file name.
8
9
  full_name: Folio::Prompt#file
9
10
  is_singleton: false
10
11
  name: file
@@ -4,7 +4,7 @@ aliases: []
4
4
  block_params:
5
5
  comment:
6
6
  - !ruby/struct:SM::Flow::P
7
- body: Directory entries.
7
+ body: Returns Enumerator of files objects.
8
8
  full_name: Folio::Prompt#files
9
9
  is_singleton: false
10
10
  name: files
@@ -3,6 +3,8 @@ aliases: []
3
3
 
4
4
  block_params:
5
5
  comment:
6
+ - !ruby/struct:SM::Flow::P
7
+ body: Returns FileUtils module based on mode.
6
8
  full_name: Folio::Prompt#fileutils
7
9
  is_singleton: false
8
10
  name: fileutils
@@ -4,7 +4,7 @@ aliases: []
4
4
  block_params:
5
5
  comment:
6
6
  - !ruby/struct:SM::Flow::P
7
- body: opertaton mode
7
+ body: Opertaton mode. This can be :noop, :verbose or :dryrun. The later is the same as the first two combined.
8
8
  full_name: Folio::Prompt#mode
9
9
  is_singleton: false
10
10
  name: mode
@@ -1 +1 @@
1
- Thu, 21 Aug 2008 15:20:49 -0400
1
+ Sat, 30 Aug 2008 23:40:59 -0400
@@ -15,6 +15,13 @@ require 'folio/pipe'
15
15
 
16
16
  # = Folio
17
17
  #
18
+ # In folio the term `file` means a file object. That is to say any
19
+ # type of file system resource: document, directory, device, etc.
20
+ # We use the term `document` instead to mean "regular files".
21
+ # This terminolgy was chosen for two reasons. Namely, (1) a
22
+ # differentiation in terms was required; and (2) a file in the
23
+ # everyday sense is something in which one puts papars (eg. documents).
24
+ #
18
25
  module Folio
19
26
 
20
27
  def self.file(*path)
@@ -27,53 +34,3 @@ module Folio
27
34
 
28
35
  end
29
36
 
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
- #pwd()
39
- =begin
40
- if ::File.blockdev?(path)
41
- Device.new(path)
42
- elsif chardev?(path)
43
- Device.new(path)
44
- elsif pipe?(path)
45
- Device.new(path)
46
- elsif ::File.socket?(path)
47
- Socket.new(path)
48
- elsif ::File.directory?(path)
49
- Directory.new(path)
50
- else
51
- Document.new(path)
52
- end
53
- end
54
- =end
55
-
56
- # delegate ?
57
- =begin
58
- def initialize(path)
59
- @path = path = ::File.join(*path)
60
-
61
- raise FileNotFound unless ::File.exist?(path)
62
-
63
- if ::File.blockdev?(path) or chardev?(path)
64
- @delegate = Device.new(path)
65
- elsif ::File.link?(path)
66
- @delegate = Link.new(path)
67
- elsif ::File.directory?(path)
68
- @delegate = Directory.new(path)
69
- else
70
- @delegate = Document.new(path)
71
- end
72
- end
73
-
74
- def delete
75
- @delegate.delete
76
- @delegate = nil
77
- end
78
- =end
79
-
@@ -12,13 +12,14 @@ module Folio
12
12
  def directory? ; true ; end
13
13
 
14
14
  # We have to use FileUtils here b/c of some obscure
15
- # secutiry issue.
15
+ # secutiry issues.
16
16
 
17
- # Copy recursively.
17
+ # Copy this directory recursively to destination.
18
18
  def cp_r(dest)
19
19
  util.cp_r(path, dest)
20
20
  end
21
21
 
22
+ # Remove this directory. Fails if not empty.
22
23
  def rmdir
23
24
  util.rmdir(path)
24
25
  end
@@ -26,19 +27,35 @@ module Folio
26
27
  alias_method :delete, :rmdir
27
28
  undef_method :rm
28
29
 
30
+ # Remove this directory and all it's content.
29
31
  def rm_r
30
32
  util.rm_r(path)
31
33
  end
32
34
 
35
+ # Remove this directory and all it's content forcefully.
33
36
  def rm_rf(list)
34
37
  util.rm_rf(path)
35
38
  end
36
39
 
40
+ # Change the mode of this directory.
41
+ #def chmod(mode)
42
+ # util.chmod(mode, path)
43
+ #end
44
+
45
+ # Change the owner of this directory.
46
+ #def chown(user, group)
47
+ # util.chown(user, group, path)
48
+ #end
49
+
50
+ # Change the mode of this directory and all it's content
51
+ # recursively.
37
52
  def chmod_r(mode)
38
53
  util.chmod_r(mode, path)
39
54
  end
40
55
  #alias_method :chmod_R, :chmod_r
41
56
 
57
+ # Change the owner of this directory and all it's content
58
+ # recursively.
42
59
  def chown_r(user, group)
43
60
  util.chown_r(user, group, path)
44
61
  end
@@ -48,33 +65,61 @@ module Folio
48
65
  # ::Dir
49
66
  #++
50
67
 
68
+ # Change into this directory.
51
69
  def chdir(&block)
52
70
  ::Dir.chdir(path, &block)
53
71
  end
54
72
  alias_method :cd, :chdir
55
73
 
74
+ # Make this directory the file system root.
56
75
  def chroot(&block)
57
76
  ::Dir.chroot(path, &block)
58
77
  end
59
78
 
60
- # Directory entries. This returns a list of file names.
79
+ # Loop over the entries (this does includes '.' and '..').
80
+ def foreach(&block)
81
+ ::Dir.foreach(path, &block)
82
+ end
83
+
84
+ # This returns a list of file names. Unlike traditional
85
+ # Dir.entries method, this does not include '.' or '..'.
61
86
  def entries
62
- ::Dir.entries(path)
87
+ ::Dir.entries(path) - ['.', '..']
63
88
  end
64
89
 
65
- def foreach(&block)
66
- ::Dir.foreach(path, &block)
90
+ # Returns a list of document names.
91
+ def document_entries
92
+ entries.select{|f| File.file?(File.join(path,f)) }
67
93
  end
68
94
 
69
- # TODO: use enumerator (?)
70
- def paths
71
- (::Dir.entries(path) - ['.', '..']).collect{ |f| FileObject[path, f] }
95
+ # Returns a list of directory names. This does not
96
+ # include '.' or '..'.
97
+ def directory_entries
98
+ dirs = ::Dir.glob("#{path}/")
99
+ dirs.collect{ |f| f.chomp('/') }
72
100
  end
73
101
 
74
- # Join paths.
102
+ # Returns an Enumerator over all file objects in the directory.
103
+ def files
104
+ entries.to_enum(:each){ |f| FileObject[path, f] }
105
+ end
106
+
107
+ # Returns an Enumerator over all documents in the directory.
108
+ def documents
109
+ document_entries.to_enum(:each){ |f| FileObject[path, f] }
110
+ end
111
+
112
+ # Returns an Enumerator over all directories in the directory.
113
+ def directories
114
+ directory_entries.to_enum(:each){ |f| FileObject[path, f] }
115
+ end
116
+
117
+ # Join path and return new file object.
75
118
  def /(fname)
76
119
  FileObject[path, fname]
77
120
  end
121
+
122
+ # Same as #/.
78
123
  alias_method :+, :/
79
124
 
80
125
  end
@@ -14,7 +14,8 @@ module Folio
14
14
  # Polymorphism
15
15
  #++
16
16
 
17
- def file? ; true ; end
17
+ #def file? ; true ; end
18
+ def document? ; true ; end
18
19
 
19
20
  #--
20
21
  # FileTest::
@@ -47,6 +48,18 @@ module Folio
47
48
  ::File.open(path, 'w'){|f| f.truncate(size)}
48
49
  end
49
50
 
51
+ # Replace contents of file with string.
52
+ def write(string)
53
+ ::File.open(path, 'w'){|f| f.write(string)}
54
+ end
55
+ alias_method :<, :write # NOTE: Sure about this? It means no Comparable.
56
+
57
+ # Replace contents of file with string.
58
+ def append(string)
59
+ ::File.open(path, 'a'){|f| f.write(string)}
60
+ end
61
+ alias_method :<<, :append
62
+
50
63
  #--
51
64
  # Can we handle other modes besides read this way?
52
65
  #++
@@ -1,3 +1,10 @@
1
+ require 'enumerator'
2
+ require 'fileutils'
3
+
4
+ class Enumerator
5
+ alias_method :list, :to_a
6
+ end
7
+
1
8
 
2
9
  module Folio
3
10
 
@@ -149,7 +156,8 @@ module Folio
149
156
  end
150
157
  alias_method :stat!, :restat
151
158
 
152
- def file? ; stat.file? ; end
159
+ #def file? ; stat.file? ; end
160
+ def document? ; stat.file? ; end
153
161
  def directory? ; stat.directory? ; end
154
162
  def blockdev? ; stat.blockdev? ; end
155
163
  def chardev? ; stat.chardev? ; end
@@ -1,10 +1,20 @@
1
+ =begin
2
+
3
+ = Folio Prompt
4
+
5
+ A Folio Prompt object emulates a file system shell prompt in code.
6
+
7
+ =end
8
+
1
9
  module Folio
2
10
 
3
11
  # = Prompt class
4
12
  #
5
13
  class Prompt
6
14
 
7
- attr :path
15
+ # @work store the present working directory
16
+ # as a Directory object.
17
+ attr :work
8
18
 
9
19
  #
10
20
  def initialize(*path)
@@ -23,7 +33,8 @@ module Folio
23
33
  @path = Directory.new(path)
24
34
  end
25
35
 
26
- # opertaton mode
36
+ # Opertaton mode. This can be :noop, :verbose or :dryrun.
37
+ # The later is the same as the first two combined.
27
38
  def mode(opts=nil)
28
39
  return @mode unless opts
29
40
  opts.each do |key, val|
@@ -39,45 +50,45 @@ module Folio
39
50
  end
40
51
  end
41
52
 
42
- def to_s ; path.to_s ; end
43
- def pwd ; path ; end
53
+ def to_s ; work.to_s ; end
44
54
 
45
- # Get the FileObject.
55
+ # Get the FileObject for the given file name.
46
56
  def file(name)
47
57
  FileObject(name)
48
58
  end
49
-
50
- #--
51
- # ::Dir
52
- #++
59
+ alias_method :[], :file
53
60
 
54
61
  # Join paths.
55
62
  def +(fname)
56
- @path =+ fname
63
+ @work =+ fname
57
64
  end
58
65
  alias_method :/, :+
59
66
 
60
- # Directory entries.
61
- def paths
62
- path.paths
63
- end
64
-
65
- # Directory entries.
67
+ # Lists all entries.
66
68
  def entries
67
- path.entries
69
+ work.entries
68
70
  end
69
71
  alias_method :ls, :entries
70
72
 
71
- # Directory entries.
72
- def directories
73
- path.paths.select{ |f| f.directory? }
73
+ # Lists directory entries.
74
+ def directory_entries
75
+ work.directory_entries
74
76
  end
75
77
 
76
- # Directory entries.
77
- def files
78
- path.paths.select{ |f| f.file? }
78
+ # Lists directory entries.
79
+ def document_entries
80
+ work.document_entries
79
81
  end
80
82
 
83
+ # Returns Enumerator of files objects.
84
+ def files ; work.files ; end
85
+
86
+ # Returns Enumerator of directories.
87
+ def documents ; work.documents ; end
88
+
89
+ # Returns Enumerator of documents.
90
+ def directories ; work.directories ; end
91
+
81
92
  # Glob pattern.
82
93
  def glob(*patterns)
83
94
  opts = (::Integer===patterns.last ? patterns.pop : 0)
@@ -88,9 +99,9 @@ module Folio
88
99
  def cd(dir, &block)
89
100
  #dir = localize(dir)
90
101
  if block
91
- @path.cd(dir, &block)
102
+ @work.cd(dir, &block)
92
103
  else
93
- @path += dir
104
+ @work += dir
94
105
  end
95
106
  end
96
107
 
@@ -213,6 +224,7 @@ module Folio
213
224
  end
214
225
  end
215
226
 
227
+ # Returns FileUtils module based on mode.
216
228
  def fileutils
217
229
  return ::FileUtils unless @mode
218
230
  case @mode
@@ -237,3 +249,31 @@ module Folio
237
249
 
238
250
  end
239
251
 
252
+
253
+ # Could the prompt act as a delegate to file objects?
254
+ # If we did this then the file prompt could actually "cd" into a file.
255
+ #
256
+ =begin :nodoc:
257
+ def initialize(path)
258
+ @path = path = ::File.join(*path)
259
+
260
+ raise FileNotFound unless ::File.exist?(path)
261
+
262
+ if ::File.blockdev?(path) or chardev?(path)
263
+ @delegate = Device.new(path)
264
+ elsif ::File.link?(path)
265
+ @delegate = Link.new(path)
266
+ elsif ::File.directory?(path)
267
+ @delegate = Directory.new(path)
268
+ else
269
+ @delegate = Document.new(path)
270
+ end
271
+ end
272
+
273
+ def delete
274
+ @delegate.delete
275
+ @delegate = nil
276
+ end
277
+ =end
278
+ #++
279
+