filestr 0.0.1

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.
@@ -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: []