filestr 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,3 @@
1
+ = Version history
2
+
3
+ [0.0.1] Initial version.
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2013 tero.isannainen@gmail.com
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,115 @@
1
+ = FileStr
2
+
3
+ * Introduction
4
+ * Usage
5
+ * Methods
6
+
7
+
8
+ = Introduction
9
+
10
+ FileStr is a library that augments String objects with File, Dir, and
11
+ FileUtils capabilities (class methods). The String (self) is passed as
12
+ the first argument to original class methods. With FileStr you can use
13
+ "normal" strings as filename/dirname objects.
14
+
15
+ It is sometimes inconvenient to write
16
+
17
+ File.exist?( 'report.txt' )
18
+
19
+ when you could instead do
20
+
21
+ 'report.txt'.f_exist?
22
+
23
+ The class methods from File are prefixed with "f_", Dir methods with
24
+ "d_", and FileUtils methods with "u_". There are some special versions
25
+ of methods which are prefixed with "s_" (See: Methods).
26
+
27
+ FileStr class inherits String class, i.e. it has all String
28
+ methods. It also includes all the augmenting methods. You can keep
29
+ the augmenting methods within FileStr class, or you can explicitly
30
+ make them also part of String class.
31
+
32
+
33
+ = Usage
34
+
35
+ After requiring the "filestr" library, you have FileStr class defined
36
+ which includes methods from File, Dir, and FileUtils.
37
+
38
+ You can create a FileStr object from String:
39
+
40
+ require 'filestr'
41
+ fs = 'report.txt'.to_fs
42
+
43
+ or
44
+
45
+ fs = 'report.txt'.fs
46
+
47
+ Then you can check if the file exists?
48
+
49
+ fs.f_exist?
50
+
51
+ If you execute:
52
+
53
+ String.fileStr
54
+
55
+ you get all augmenting methods straight to String class and you can
56
+ use strings directly. For example:
57
+
58
+ 'report.txt'.f_exist?
59
+
60
+ or
61
+
62
+ 'bin'.d_exist?
63
+
64
+ to test if there is a sub-directory called "bin".
65
+
66
+ You can rename (move) a file with:
67
+
68
+ 'report.txt'.u_mv( 'history.txt' )
69
+
70
+
71
+ = Methods
72
+
73
+ Almost all class methods from File and Dir are imported. A filtered
74
+ selection is taken from FileUtils.
75
+
76
+ Some methods from File and Dir doesn't take a name (filename, dirname)
77
+ as the first argument. There are modified versions of these methods
78
+ within FileStr where the "name" argument comes from self. These method
79
+ are prefixed with "s_".
80
+
81
+ List of special methods:
82
+ s_chmod, s_chown, s_fnmatch
83
+
84
+ You can change a mode of a file:
85
+
86
+ 'report.txt'.s_chmod( 0777 )
87
+
88
+ There is also a special version of Dir.glob, called s_glob. s_glob
89
+ concatenates the string (self) to the given "pattern" argument, and
90
+ passed this to Dir.glob.
91
+
92
+ The complete list of methods coming directly from File, Dir, and
93
+ FileUtils is:
94
+
95
+ f_binread, f_binwrite, f_copy_stream, f_foreach, f_read,
96
+ f_readlines, f_sysopen, f_write, f_absolute_path, f_atime,
97
+ f_basename, f_birthtime, f_blockdev?, f_chardev?, f_ctime,
98
+ f_delete, f_directory?, f_dirname, f_executable?,
99
+ f_executable_real?, f_exist?, f_exists?, f_expand_path,
100
+ f_extname, f_filename, f_file?, f_ftype, f_grpowned?,
101
+ f_identical?, f_join, f_link, f_lstat, f_mtime, f_new, f_open,
102
+ f_owned?, f_path, f_pipe?, f_readable?, f_readable_real?,
103
+ f_readlink, f_realdirpath, f_realpath, f_rename, f_setgid?,
104
+ f_setuid?, f_size, f_size?, f_socket?, f_split, f_stat,
105
+ f_sticky?, f_symlink, f_symlink?, f_truncate, f_unlink,
106
+ f_world_readable?, f_world_writable?, f_writable?,
107
+ f_writable_real?, f_zero?, d_chdir, d_chroot, d_delete,
108
+ d_entries, d_exist?, d_exists?, d_foreach, d_mkdir, d_new,
109
+ d_open, d_rmdir, d_unlink, u_cd, u_cmp, u_mkdir_p, u_ln_s,
110
+ u_cp, u_cp_r, u_mv, u_rm, u_rm_f, u_rm_r, u_rm_rf, u_touch,
111
+ u_uptodate?
112
+
113
+ You can use the original documentation of the class methods
114
+ above. Just imagine the string (self) as being the first argument, and
115
+ the rest are as in documentation.
@@ -0,0 +1,228 @@
1
+ # {FileStr} is library that augments String objects with File, Dir,
2
+ # and FileUtils capabilities (class methods). The String (self) is
3
+ # passed as the first argument to original class methods.
4
+
5
+
6
+ require 'fileutils'
7
+
8
+
9
+ # {FileStr} class related module which maps missing methods to
10
+ # {FileStr} defined methods.
11
+ module FileStrModule
12
+
13
+ # Call FileStr supported methods (if available).
14
+ def method_missing( m, *args, &block )
15
+
16
+ klass = FileStr.support[ m ]
17
+
18
+ if klass
19
+ # Generate the actual class method name.
20
+ cm = m.to_s[2..-1].to_sym
21
+ klass.send( cm, self, *args, &block )
22
+ else
23
+ raise NoMethodError
24
+ end
25
+ end
26
+
27
+
28
+ # ------------------------------------------------------------
29
+ # File class support:
30
+
31
+ # Chmod with mode_int.
32
+ #
33
+ # @param mode_int [Integer] New file mode.
34
+ def s_chmod( mode_int )
35
+ File.chmod( mode_int, self )
36
+ end
37
+
38
+ # Chown with owner_int, group_int.
39
+ #
40
+ # @param owner_int [Integer] New file owner.
41
+ # @param group_int [Integer] New file group.
42
+ def s_chown( owner_int, group_int )
43
+ File.chown( owner_int, group_int, self )
44
+ end
45
+
46
+ # Fnmatch to pattern with flags.
47
+ #
48
+ # @param pattern [String] Glob patttern for matching.
49
+ # @param flags [Constant] Flags for matching.
50
+ def s_fnmatch( pattern, *flags )
51
+ File.fnmatch( pattern, self, *flags )
52
+ end
53
+
54
+
55
+ # ------------------------------------------------------------
56
+ # Dir class support:
57
+
58
+ # Glob with self as base string.
59
+ #
60
+ # @param pattern [String] Suffix of glob pattern (concat to self).
61
+ def s_glob( pattern = "", *args, &block )
62
+ Dir.glob( self + pattern, *args, &block )
63
+ end
64
+
65
+ end
66
+
67
+
68
+ # Enable use of File, Dir, and FileUtils class methods straight from
69
+ # {FileStr}/String objects.
70
+ class FileStr < String
71
+
72
+ include FileStrModule
73
+
74
+
75
+ # Extend a class (String) with {FileStr} features.
76
+ #
77
+ # @param klass [Constant] Class to extend.
78
+ def FileStr.extend( klass = String )
79
+ klass.send( :include, FileStrModule )
80
+ end
81
+
82
+ # Return hash describing {FileStr} provided File/Dir support.
83
+ def FileStr.support
84
+ @@fileStrSupport
85
+ end
86
+
87
+ # Supported methods from File, Dir, and FileUtils.
88
+ @@fileStrSupport = {
89
+
90
+ # File Methods from IO.
91
+ :f_binread => File,
92
+ :f_binwrite => File,
93
+ :f_copy_stream => File,
94
+ # :for_fd => File, # NA
95
+ :f_foreach => File,
96
+ # :new => File, # NA
97
+ # :open => File, # NA
98
+ # :pipe => File, # NA
99
+ # :popen => File, # NA
100
+ :f_read => File,
101
+ :f_readlines => File,
102
+ # :select => File, # NA
103
+ :f_sysopen => File,
104
+ # :try_convert => File, # NA
105
+ :f_write => File,
106
+
107
+ # File Methods.
108
+ :f_absolute_path => File,
109
+ :f_atime => File,
110
+ :f_basename => File,
111
+ :f_birthtime => File,
112
+ :f_blockdev? => File,
113
+ :f_chardev? => File,
114
+ # :chmod => File, # s-version
115
+ # :chown => File, # s-version
116
+ :f_ctime => File,
117
+ :f_delete => File,
118
+ :f_directory? => File,
119
+ :f_dirname => File,
120
+ :f_executable? => File,
121
+ :f_executable_real? => File,
122
+ :f_exist? => File,
123
+ :f_exists? => File,
124
+ :f_expand_path => File,
125
+ :f_extname => File,
126
+ :f_filename => File,
127
+ :f_file? => File,
128
+ # :fnmatch => File, # s-version
129
+ # :fnmatch? => File, # NA
130
+ :f_ftype => File,
131
+ :f_grpowned? => File,
132
+ :f_identical? => File,
133
+ :f_join => File,
134
+ # :lchmod => File,
135
+ # :lchown => File,
136
+ :f_link => File,
137
+ :f_lstat => File,
138
+ # :mkfifo => File, # Unknown
139
+ :f_mtime => File,
140
+ :f_new => File,
141
+ :f_open => File,
142
+ :f_owned? => File,
143
+ :f_path => File,
144
+ :f_pipe? => File,
145
+ :f_readable? => File,
146
+ :f_readable_real? => File,
147
+ :f_readlink => File,
148
+ :f_realdirpath => File,
149
+ :f_realpath => File,
150
+ :f_rename => File,
151
+ :f_setgid? => File,
152
+ :f_setuid? => File,
153
+ :f_size => File,
154
+ :f_size? => File,
155
+ :f_socket? => File,
156
+ :f_split => File,
157
+ :f_stat => File,
158
+ :f_sticky? => File,
159
+ :f_symlink => File,
160
+ :f_symlink? => File,
161
+ :f_truncate => File,
162
+ # :umask => File, # NA
163
+ :f_unlink => File,
164
+ # :utime => File, # NA
165
+ :f_world_readable? => File,
166
+ :f_world_writable? => File,
167
+ :f_writable? => File,
168
+ :f_writable_real? => File,
169
+ :f_zero? => File,
170
+
171
+ # Dir Methods.
172
+ :d_chdir => Dir,
173
+ :d_chroot => Dir,
174
+ :d_delete => Dir,
175
+ :d_entries => Dir,
176
+ :d_exist? => Dir,
177
+ :d_exists? => Dir,
178
+ :d_foreach => Dir,
179
+ # :getwd => Dir, # NA
180
+ # :glob => Dir, # s-version
181
+ # :home => Dir, # NA
182
+ :d_mkdir => Dir,
183
+ :d_new => Dir,
184
+ :d_open => Dir,
185
+ # :pwd => Dir, # NA
186
+ :d_rmdir => Dir,
187
+ :d_unlink => Dir,
188
+
189
+ # FileUtils Methods (selection).
190
+ :u_cd => FileUtils,
191
+ :u_cmp => FileUtils,
192
+ :u_mkdir_p => FileUtils,
193
+ :u_ln_s => FileUtils,
194
+ :u_cp => FileUtils,
195
+ :u_cp_r => FileUtils,
196
+ :u_mv => FileUtils,
197
+ :u_rm => FileUtils,
198
+ :u_rm_f => FileUtils,
199
+ :u_rm_r => FileUtils,
200
+ :u_rm_rf => FileUtils,
201
+ :u_touch => FileUtils,
202
+ :u_uptodate? => FileUtils,
203
+ }
204
+
205
+ end
206
+
207
+
208
+
209
+ # Extend String with capability to convert itself to {FileStr}.
210
+ class String
211
+
212
+ # Use FileStr method directly in String.
213
+ def String.fileStr
214
+ FileStr.extend( String )
215
+ end
216
+
217
+ # Convert String to FileStr object.
218
+ def toFileStr
219
+ FileStr.new( self )
220
+ end
221
+
222
+ alias to_fs toFileStr
223
+
224
+ alias fs toFileStr
225
+
226
+ end
227
+
228
+ require_relative 'version'
@@ -0,0 +1,6 @@
1
+ class FileStr
2
+ VERSION = "0.0.1"
3
+ def FileStr.version
4
+ FileStr::VERSION
5
+ end
6
+ end
@@ -0,0 +1,55 @@
1
+ require 'test/unit'
2
+
3
+ require_relative '../lib/filestr'
4
+
5
+
6
+ class FileStrTest < Test::Unit::TestCase
7
+
8
+ def setup
9
+ Dir.chdir 'test'
10
+ end
11
+
12
+ def teardown
13
+ Dir.chdir '..'
14
+ end
15
+
16
+ def test_filestr
17
+ f = "filestr.txt".to_fs
18
+
19
+ f.u_touch
20
+ assert_true( f.f_exist? )
21
+
22
+ f.u_rm_f
23
+ assert_false( f.f_exist? )
24
+ end
25
+
26
+
27
+ # Check that we are testing the current number of methods.
28
+ def test_string
29
+ String.fileStr
30
+
31
+ f = "string.txt"
32
+
33
+ f.u_touch
34
+ assert_true( f.f_exist? )
35
+
36
+ txt = "basic testing text\n"
37
+ f.f_write txt
38
+ assert_equal( txt, f.f_read )
39
+
40
+ list = './'.s_glob('*')
41
+ assert_equal( [ './string.txt', './test_all.rb' ], list )
42
+
43
+ d = 'test_dir'
44
+ d.d_mkdir
45
+ assert_true( d.d_exist? )
46
+ d.d_rmdir
47
+ assert_false( d.d_exist? )
48
+
49
+ fs = f.fs
50
+
51
+ fs.u_rm_f
52
+ assert_false( fs.f_exist? )
53
+ end
54
+
55
+ end
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: filestr
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Tero Isannainen
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2016-12-28 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: ! 'FileStr is a library that augments String objects with File, Dir,
15
+ and
16
+
17
+ FileUtils capabilities (class methods). The String (self) is passed as
18
+
19
+ the first argument to original class methods. With FileStr you can use
20
+
21
+ *normal* strings as filename/dirname objects.'
22
+ email: tero.isannainen@gmail.com
23
+ executables: []
24
+ extensions: []
25
+ extra_rdoc_files:
26
+ - README.rdoc
27
+ - CHANGELOG.rdoc
28
+ files:
29
+ - README.rdoc
30
+ - CHANGELOG.rdoc
31
+ - LICENSE
32
+ - lib/filestr.rb
33
+ - lib/version.rb
34
+ - test/test_all.rb
35
+ homepage:
36
+ licenses:
37
+ - Ruby
38
+ post_install_message: Check README...
39
+ rdoc_options: []
40
+ require_paths:
41
+ - lib
42
+ required_ruby_version: !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: 1.9.3
48
+ required_rubygems_version: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ requirements: []
55
+ rubyforge_project:
56
+ rubygems_version: 1.8.23
57
+ signing_key:
58
+ specification_version: 3
59
+ summary: Augment Strings with File, Dir, and FileUtils capabilities.
60
+ test_files: []