fun_with_files 0.0.6 → 0.0.7
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.
- checksums.yaml +15 -0
- data/Gemfile +3 -3
- data/README.rdoc +61 -1
- data/VERSION +1 -1
- data/lib/fun_with/files/core_extensions/array.rb +5 -0
- data/lib/fun_with/files/core_extensions/false.rb +5 -0
- data/lib/fun_with/files/core_extensions/hash.rb +5 -0
- data/lib/fun_with/files/core_extensions/nil.rb +5 -0
- data/lib/fun_with/files/core_extensions/object.rb +9 -0
- data/lib/fun_with/files/core_extensions/string.rb +5 -0
- data/lib/fun_with/files/digest_methods.rb +9 -0
- data/lib/{files → fun_with/files}/directory_builder.rb +4 -48
- data/lib/{files → fun_with/files}/downloader.rb +0 -0
- data/lib/fun_with/files/errors.rb +5 -0
- data/lib/fun_with/files/file_manipulation_methods.rb +134 -0
- data/lib/{files → fun_with/files}/file_orderer.rb +0 -0
- data/lib/{files → fun_with/files}/file_path.rb +16 -6
- data/lib/fun_with/files/file_permission_methods.rb +22 -0
- data/lib/{files → fun_with/files}/pathname_extensions.rb +0 -0
- data/lib/{files → fun_with/files}/remote_path.rb +0 -0
- data/lib/{files → fun_with/files}/root_path.rb +0 -0
- data/lib/{files → fun_with/files}/string_behavior.rb +4 -0
- data/lib/{files → fun_with/files}/string_extensions.rb +0 -0
- data/lib/{files → fun_with/files}/xdg_extensions.rb +0 -0
- data/lib/fun_with_files.rb +18 -16
- data/test/data/gsub1.txt +0 -0
- data/test/data/gsub2.txt +0 -0
- data/test/test_copying.rb +52 -0
- data/test/test_file_manipulation.rb +24 -0
- data/test/test_file_path.rb +43 -3
- data/test/test_fun_with_files.rb +15 -0
- metadata +34 -50
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
YTg3ZGQzMDAxYTczMjBjNTc5NjU2ZDA0MDRlNzQ0YTc5MzBjMmE2OQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
NTBhOGNkNTcyZGRlNGNjYTFjNzMyYzVhYzhmNWE0NmU3ODMwODFjMw==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
M2VhMTIwMDRjNDRiODQ3MTcwNDJiYmJlYmExODA3ZmVlOTQwYzI3ODFkNGI4
|
10
|
+
MTNkZGUxYTRkNjE5ZmZjYjMwYzUyNDdkYjNmN2MxNjU3NmY5YmVlMTQ5NzZj
|
11
|
+
NzY5ODZlNWIyMGU4MjI4MDI4ZGM2MTRkZDg4NzEzMThlY2FmMjU=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
YzI5ZGYyZDgwYzQ0ODg0MjNjNjVhYTI4OGEzZDcwODk4MjI0OGZlNmMzZWRi
|
14
|
+
ZGQyZjUwN2M0MjBmYzQzMTY3YWZhYmNhNDdhNGE5M2NhM2MyNzYxZGQ3NDA3
|
15
|
+
YjRjNWM5NWRiZGUxODc2MTFlM2ZmMGZlNGJlZDZjNjQ0ODJjMDk=
|
data/Gemfile
CHANGED
@@ -9,9 +9,9 @@ source "http://rubygems.org"
|
|
9
9
|
group :development do
|
10
10
|
gem "shoulda", ">= 3.5"
|
11
11
|
gem "rdoc", "~> 3.12"
|
12
|
-
gem "bundler", "~> 1.
|
13
|
-
gem "jeweler", "~>
|
12
|
+
gem "bundler", "~> 1.5"
|
13
|
+
gem "jeweler", "~> 2.0"
|
14
|
+
# gem "debugger", "~> 1.6"
|
14
15
|
end
|
15
16
|
|
16
17
|
gem "xdg"
|
17
|
-
gem "debugger"
|
data/README.rdoc
CHANGED
@@ -34,7 +34,67 @@ To the code!
|
|
34
34
|
|
35
35
|
# whole buchcha other goodies, yet to be documented.
|
36
36
|
|
37
|
-
|
37
|
+
== DirectoryBuilder
|
38
|
+
|
39
|
+
DirectoryBuilder is a class for defining and populating a file hierarchy with relative ease. DirectoryBuilder is probably most easily demonstrated by example. Sample code:
|
40
|
+
|
41
|
+
# starts by creating directory. If parent
|
42
|
+
# directories don't exist, they will soon.
|
43
|
+
DirectoryBuilder.create( '~/project' ) do |b|
|
44
|
+
b.dir("images") do # creates subdirectory "images", which gets populated within the block
|
45
|
+
for img in src_dir.entries.select{|img| img.extension == ".png"}
|
46
|
+
b.copy( src_dir.join( img.filename ) ) # copies a bunch of files from another directory
|
47
|
+
end # rises back to the initial '~/project directory
|
48
|
+
|
49
|
+
b.copy( src_dir.join( "rorshach.xml" ) ) # Copies a file from a source file.
|
50
|
+
b.download( "dest.bash", "http://get.rvm.io" ) # downloads file directly beneath '~/project'
|
51
|
+
# maybe someday, though
|
52
|
+
|
53
|
+
b.dir("text", "scenes") do # creates ~/project/text/scenes subdir (creating two new directories text/ and text/scene/)
|
54
|
+
b.file( "adventure_time.txt" ) do |f|
|
55
|
+
f << "Fill this in later"
|
56
|
+
end
|
57
|
+
|
58
|
+
# calling .file without feeding it a block leaves it open for writing,
|
59
|
+
# until either the enclosing block terminates, or b.file is called again
|
60
|
+
# with a filename argument. While it's open, b.file can be treated like
|
61
|
+
# any IO object.
|
62
|
+
b.file( "another_brick.txt" )
|
63
|
+
b.file << "Hey, you!"
|
64
|
+
b.file << "Yes, you!"
|
65
|
+
b.file.push "Stand still, laddie!"
|
66
|
+
|
67
|
+
|
68
|
+
# TODO: Make sure this works.
|
69
|
+
#
|
70
|
+
# Set a bunch of vars to apply to the template. Template gets copied into DirectoryBuilder's current
|
71
|
+
# directory, with the template's filename (minus the .template extension).
|
72
|
+
#
|
73
|
+
# Inside the templates, you can use Ruby code in the usual ERB style. The vars you declare will be
|
74
|
+
# available within the template as (see example below) @fname, @lname, @graduated, etc.
|
75
|
+
#
|
76
|
+
# See FunWith::Templates for a better understanding of templates. You must require the 'fun_with_templates'
|
77
|
+
# gem to use the template function.
|
78
|
+
b.template( templates_dir.join("blue_template.txt.template") ) do |t|
|
79
|
+
# t is a VarCollector, which is just a hash with a couple of added methods, shown here.
|
80
|
+
# I recommend sticking to t.var and t.vars for setting variables, in case the interface
|
81
|
+
# changes.
|
82
|
+
t.var(:fname, "John")
|
83
|
+
t.vars(graduated: "2003", blackmailed: "2004") # set multiple variables at a time
|
84
|
+
t[:lname] = "Macey"
|
85
|
+
t.var(:state, "Ohio")
|
86
|
+
t.vars(quot: "That wasn't my duck.", photo: "john.png", css: "font-family: arial")
|
87
|
+
end
|
88
|
+
|
89
|
+
b.copy( [src_dir.join("abba.txt"), "baab.txt"] ) # contents of abba.txt copied into baab.txt
|
90
|
+
|
91
|
+
|
92
|
+
b.file( ".lockfile" ) # creates an empty file, closing it to further writing at the end of the block.
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
|
97
|
+
|
38
98
|
|
39
99
|
|
40
100
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.7
|
@@ -88,6 +88,10 @@ module FunWith
|
|
88
88
|
puts "No current file to append #{url} to."
|
89
89
|
end
|
90
90
|
end
|
91
|
+
|
92
|
+
def template( *args )
|
93
|
+
raise "DirectoryBuilder cannot use template() function. require 'fun_with_templates' to enable."
|
94
|
+
end
|
91
95
|
|
92
96
|
protected
|
93
97
|
def make_path
|
@@ -129,51 +133,3 @@ module FunWith
|
|
129
133
|
end
|
130
134
|
end
|
131
135
|
|
132
|
-
|
133
|
-
# sample code
|
134
|
-
#
|
135
|
-
# DirBuilder.create( '~/project' ) do |b| # starts by creating directory. If parent
|
136
|
-
# # directories don't exist, they will soon.
|
137
|
-
# # if you use DirBuilder.tmp('~/project'), a tempdir
|
138
|
-
# # is created, and its contents relocated to ~/project when the
|
139
|
-
# # block terminates.
|
140
|
-
# b.dir("images") do # creates subdirectory "images"
|
141
|
-
# for img in src_dir.entries.select{|img| img.extension == ".png"}
|
142
|
-
# b.copy( src_dir.join( img.filename ) ) # copies a bunch of files from another directory
|
143
|
-
# end # rises back to the initial '~/project directory
|
144
|
-
#
|
145
|
-
# b.copy( src_dir.join( "rorshach.xml" ) )
|
146
|
-
# b.download( "dest.bash", "http://get.rvm.io" ) # downloads file directly beneath '~/project'
|
147
|
-
# # maybe someday, though
|
148
|
-
#
|
149
|
-
# b.dir("text", "scenes") do # creates ~/project/text/scenes subdir
|
150
|
-
# b.file( "adventure_time.txt" ) do |f|
|
151
|
-
# f << "Fill this in later"
|
152
|
-
# end
|
153
|
-
#
|
154
|
-
# # calling .file without feeding it a block leaves it open for writing,
|
155
|
-
# # until either the enclosing block terminates or .file is called
|
156
|
-
# # again with a string argument.
|
157
|
-
# b.file( "another_brick.txt" )
|
158
|
-
# b.file << "Hey, you!"
|
159
|
-
# b.file << "Yes, you!"
|
160
|
-
# b.file.push "Stand still, laddie!"
|
161
|
-
#
|
162
|
-
# b.template(templates_dir.join("blue_template.txt")) do |t|
|
163
|
-
# t.var(:fname, "John")
|
164
|
-
# t.var(:lname, "Macey")
|
165
|
-
# t.var(:state, "Ohio")
|
166
|
-
# t.vars(graduated: "2003")
|
167
|
-
# t.vars(quot: "That wasn't my duck.", photo: "john.png", css: "font-family: arial")
|
168
|
-
# end
|
169
|
-
#
|
170
|
-
# b.copy( [src_dir.join("abba.txt"), "baab.txt"] ) # contents of abba.txt copied into baab.txt
|
171
|
-
#
|
172
|
-
#
|
173
|
-
# b.file( ".lockfile" ) # creates an empty file
|
174
|
-
# end
|
175
|
-
#
|
176
|
-
# b.
|
177
|
-
# end
|
178
|
-
#
|
179
|
-
|
File without changes
|
@@ -0,0 +1,134 @@
|
|
1
|
+
module FunWith
|
2
|
+
module Files
|
3
|
+
# Mostly just convenience methods for FileUtils
|
4
|
+
module FileManipulationMethods
|
5
|
+
# cd(dir, options)
|
6
|
+
# cd(dir, options) {|dir| .... }
|
7
|
+
# pwd()
|
8
|
+
# mkdir(dir, options)
|
9
|
+
# mkdir(list, options)
|
10
|
+
# mkdir_p(dir, options)
|
11
|
+
# mkdir_p(list, options)
|
12
|
+
# ln(old, new, options)
|
13
|
+
# ln(list, destdir, options)
|
14
|
+
# ln_s(old, new, options)
|
15
|
+
# ln_s(list, destdir, options)
|
16
|
+
# ln_sf(src, dest, options)
|
17
|
+
|
18
|
+
def cp( *args )
|
19
|
+
self.destination_and_options( args ) do |dest, opts|
|
20
|
+
FileUtils.cp_r( self, dest, opts )
|
21
|
+
dest.fwf_filepath
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
alias :copy :cp
|
26
|
+
|
27
|
+
# self is the target, link is the thing linking to self
|
28
|
+
# returns filepath of the new link. Will fall back to symbolic
|
29
|
+
# link if self is a directory
|
30
|
+
def ln( *args )
|
31
|
+
self.destination_and_options( args ) do |link, opts|
|
32
|
+
symlink = self.directory? || opts[:symbolic] || opts[:sym] || opts[:soft]
|
33
|
+
|
34
|
+
if symlink
|
35
|
+
FileUtils.ln_s( self, link, opts )
|
36
|
+
else
|
37
|
+
FileUtils.ln( self, link, opts )
|
38
|
+
end
|
39
|
+
|
40
|
+
link.fwf_filepath
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def ln_s( link, options = {} )
|
45
|
+
FileUtils.ln_s( self, link, options )
|
46
|
+
link.fwf_filepath
|
47
|
+
end
|
48
|
+
|
49
|
+
def file_gsub( *args, &block )
|
50
|
+
lines = []
|
51
|
+
self.each_line do |line|
|
52
|
+
lines << line.gsub( *args, &block )
|
53
|
+
end
|
54
|
+
|
55
|
+
lines.compact.join( "" )
|
56
|
+
end
|
57
|
+
|
58
|
+
def file_gsub!( *args, &block )
|
59
|
+
self.write( self.file_gsub(*args,&block) )
|
60
|
+
end
|
61
|
+
|
62
|
+
protected
|
63
|
+
def destination_and_options( args, &block )
|
64
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
65
|
+
destination = self.find_destination_from_args( args )
|
66
|
+
|
67
|
+
if block_given?
|
68
|
+
yield [destination, options]
|
69
|
+
else
|
70
|
+
[destination, options]
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
# logic should be shared by various manipulators
|
77
|
+
def find_destination_from_args( args )
|
78
|
+
if args.first.is_a?(Pathname)
|
79
|
+
dest = args.first
|
80
|
+
elsif self.directory?
|
81
|
+
# what if they're trying to define an absolute dest, but being splitty?
|
82
|
+
dest = self.join( *args )
|
83
|
+
else
|
84
|
+
# ......
|
85
|
+
dest = self.dirname.join( *args )
|
86
|
+
dest = dest.join( self.basename ) if dest.directory?
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
# rm(list, options)
|
91
|
+
# rm_r(list, options)
|
92
|
+
# rm_rf(list, options)
|
93
|
+
# rmdir(dir, options)
|
94
|
+
# rmdir(list, options)
|
95
|
+
|
96
|
+
|
97
|
+
# def cp( dest, options = {} )
|
98
|
+
# raise NoSuchFile.new( "No such file as #{self} to copy" ) unless self.exist?
|
99
|
+
#
|
100
|
+
# dest = dest.fwf_filepath.expand
|
101
|
+
#
|
102
|
+
# if self.directory?
|
103
|
+
# # touch dest directory?
|
104
|
+
# FileUtils.cp_r( self, dest, options)
|
105
|
+
# else
|
106
|
+
# dest = dest.join( self.basename ) if dest.directory?
|
107
|
+
# dest_dir = dest.up.touch_dir
|
108
|
+
#
|
109
|
+
# raise NotWritable.new( "Could not create directory or directory not writable: #{dest_dir}" ) unless dest_dir.directory? && dest_dir.writable?
|
110
|
+
#
|
111
|
+
# FileUtils.cp( self, dest, options ) unless dest.exist? && options[:safe]
|
112
|
+
# end
|
113
|
+
#
|
114
|
+
# dest
|
115
|
+
# end
|
116
|
+
#
|
117
|
+
#
|
118
|
+
|
119
|
+
# cp_r(src, dest, options)
|
120
|
+
# cp_r(list, dir, options)
|
121
|
+
|
122
|
+
|
123
|
+
|
124
|
+
# mv(src, dest, options)
|
125
|
+
# mv(list, dir, options)
|
126
|
+
# install(src, dest, mode = <src's>, options)
|
127
|
+
# chmod(mode, list, options)
|
128
|
+
# chmod_R(mode, list, options)
|
129
|
+
# chown(user, group, list, options)
|
130
|
+
# chown_R(user, group, list, options)
|
131
|
+
# touch(list, options)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
File without changes
|
@@ -33,10 +33,6 @@ module FunWith
|
|
33
33
|
Dir.home.fwf_filepath.join( *args )
|
34
34
|
end
|
35
35
|
|
36
|
-
def self.template( src, dest, vars = {} )
|
37
|
-
raise "require 'fun_with_templates' to use this method"
|
38
|
-
end
|
39
|
-
|
40
36
|
def join( *args, &block )
|
41
37
|
if block_given?
|
42
38
|
yield self.class.new( super(*args) )
|
@@ -197,7 +193,7 @@ module FunWith
|
|
197
193
|
if self.file?
|
198
194
|
File.size( self ) == 0
|
199
195
|
elsif self.directory?
|
200
|
-
self.glob( "**", "*" ).
|
196
|
+
self.glob( "**", "*" ).fwf_blank?
|
201
197
|
end
|
202
198
|
end
|
203
199
|
|
@@ -292,11 +288,25 @@ module FunWith
|
|
292
288
|
end
|
293
289
|
|
294
290
|
|
291
|
+
def specifier( str )
|
292
|
+
str = str.to_s
|
293
|
+
chunks = self.to_s.split(".")
|
294
|
+
|
295
|
+
if chunks.length == 1
|
296
|
+
chunks << str
|
297
|
+
else
|
298
|
+
chunks = chunks[0..-2] + [str] + [chunks[-1]]
|
299
|
+
end
|
300
|
+
|
301
|
+
chunks.join(".").fwf_filepath
|
302
|
+
end
|
303
|
+
|
295
304
|
# TODO: succession : enumerates a sequence of files that get passed
|
296
305
|
# to a block in order.
|
297
306
|
def succession( opts = { digit_count: SUCC_DIGIT_COUNT, timestamp: false } )
|
298
307
|
if opts[:timestamp]
|
299
|
-
|
308
|
+
opts[:timestamp_format] ||= "%Y%m%d%H%M%S%L"
|
309
|
+
timestamp = Time.now.strftime( opts[:timestamp_format] )
|
300
310
|
digit_count = timestamp.length
|
301
311
|
else
|
302
312
|
timestamp = false
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module FunWith
|
2
|
+
module Files
|
3
|
+
# view and change file permissions
|
4
|
+
module FilePermissionMethods
|
5
|
+
def readable?
|
6
|
+
File.readable?( self )
|
7
|
+
end
|
8
|
+
|
9
|
+
def writable?
|
10
|
+
File.writable?( self )
|
11
|
+
end
|
12
|
+
|
13
|
+
def executable?
|
14
|
+
File.executable?( self )
|
15
|
+
end
|
16
|
+
|
17
|
+
def chmod( mode, options )
|
18
|
+
FileUtils.chmod( mode, self, options = {} )
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/lib/fun_with_files.rb
CHANGED
@@ -1,22 +1,24 @@
|
|
1
|
-
require '
|
1
|
+
require 'digest/md5' # stdlib
|
2
|
+
require 'pathname' # stdlib
|
2
3
|
require 'tmpdir'
|
3
|
-
require 'debugger'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
root_path
|
10
|
-
remote_path
|
11
|
-
string_extensions
|
12
|
-
string_behavior
|
13
|
-
pathname_extensions
|
14
|
-
xdg_extensions)
|
15
|
-
|
16
|
-
require_relative File.join("files", file)
|
5
|
+
files = Dir.glob( File.join( File.dirname(__FILE__), "fun_with", "**", "*.rb" ) )
|
6
|
+
|
7
|
+
for file in files.map{ |f| f.gsub(/\.rb$/, '') }
|
8
|
+
require file
|
17
9
|
end
|
18
10
|
|
19
11
|
FunWith::Files::RootPath.rootify( FunWith::Files, __FILE__.fwf_filepath.dirname.up )
|
20
|
-
FunWith::Files::VERSION = FunWith::Files.root("VERSION").read
|
21
12
|
|
22
|
-
|
13
|
+
module FunWith
|
14
|
+
module Files
|
15
|
+
class FilePath
|
16
|
+
for mod in [ StringBehavior,
|
17
|
+
FileManipulationMethods,
|
18
|
+
FilePermissionMethods,
|
19
|
+
DigestMethods ]
|
20
|
+
include mod
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/test/data/gsub1.txt
ADDED
File without changes
|
data/test/data/gsub2.txt
ADDED
File without changes
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestCopying < FunWith::Files::TestCase
|
4
|
+
context "inside a tmpdir" do
|
5
|
+
setup do
|
6
|
+
@dir = FilePath.tmpdir
|
7
|
+
assert @dir.exist?
|
8
|
+
end
|
9
|
+
|
10
|
+
teardown do
|
11
|
+
@dir.rm
|
12
|
+
assert_equal false, @dir.directory?
|
13
|
+
end
|
14
|
+
|
15
|
+
should "copy a single file" do
|
16
|
+
outdir = @dir.join( "down", "down", "down", "to", "the", "depths" )
|
17
|
+
assert !outdir.exist?
|
18
|
+
outdir.touch_dir
|
19
|
+
assert outdir.exist?
|
20
|
+
|
21
|
+
infile = FunWith::Files.root( "test", "helper.rb" )
|
22
|
+
assert infile.exist?
|
23
|
+
|
24
|
+
outfile = outdir.join("copy_of_helper.rb")
|
25
|
+
assert !outfile.exist?
|
26
|
+
|
27
|
+
infile.cp( outdir )
|
28
|
+
assert outdir.join("helper.rb").exist?
|
29
|
+
|
30
|
+
infile.cp( outfile )
|
31
|
+
assert outfile.exist?
|
32
|
+
end
|
33
|
+
|
34
|
+
should "copy a directory structure" do
|
35
|
+
outdir = @dir.join( "down", "down", "abandon", "all", "hope" )
|
36
|
+
indir = FunWith::Files.root( "test" )
|
37
|
+
outdir.touch_dir
|
38
|
+
indir.cp( outdir )
|
39
|
+
|
40
|
+
assert outdir.exist?
|
41
|
+
helper_file = outdir.join( "test", "helper.rb" )
|
42
|
+
assert helper_file.exist?
|
43
|
+
assert_equal indir.join( "helper.rb" ).grep( /FunWith::Files/ ).length, helper_file.grep( /FunWith::Files/ ).length
|
44
|
+
|
45
|
+
assert_equal indir.glob(:all).length, outdir.join("test").glob(:all).length
|
46
|
+
end
|
47
|
+
|
48
|
+
should "symlink masterfully" do
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestFileManipulation < FunWith::Files::TestCase
|
4
|
+
context "testing gsubs" do
|
5
|
+
setup do
|
6
|
+
@license = FunWith::Files.root("LICENSE.txt")
|
7
|
+
end
|
8
|
+
|
9
|
+
should "copy LICENSE.txt" do
|
10
|
+
copied = @license.cp( "test", "tmp" )
|
11
|
+
assert_match /LICENSE\.txt/, copied.to_s
|
12
|
+
assert copied.exist?
|
13
|
+
assert copied.read.length > 0
|
14
|
+
end
|
15
|
+
|
16
|
+
should "gsub copy of license.txt" do
|
17
|
+
copied = @license.cp( "test", "tmp" )
|
18
|
+
copied.file_gsub!( /Bryce Anderson/, "Wilford Brimley" )
|
19
|
+
assert copied.size > 1000
|
20
|
+
|
21
|
+
assert_equal 1, copied.grep("Wilford Brimley").length
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/test/test_file_path.rb
CHANGED
@@ -12,7 +12,7 @@ class TestFilePath < FunWith::Files::TestCase
|
|
12
12
|
assert f1.exist?
|
13
13
|
assert f2.exist?
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
should "go up/down when asked" do
|
17
17
|
f1 = FilePath.new( "/", "home", "users", "monkeylips", "ask_for_floyd" )
|
18
18
|
f2 = FilePath.new( "/", "home", "users" )
|
@@ -60,9 +60,9 @@ class TestFilePath < FunWith::Files::TestCase
|
|
60
60
|
|
61
61
|
should "glob items in test/data directory" do
|
62
62
|
files = @data_dir.glob(:all)
|
63
|
-
assert_equal
|
63
|
+
assert_equal 5, files.length
|
64
64
|
files = @data_dir.glob(:all, :flags => [File::FNM_DOTMATCH])
|
65
|
-
assert_equal
|
65
|
+
assert_equal 9, files.length
|
66
66
|
end
|
67
67
|
|
68
68
|
should "glob with case insensitive flag" do
|
@@ -139,4 +139,44 @@ class TestFilePath < FunWith::Files::TestCase
|
|
139
139
|
assert_equal file_name_strings[1..-1], file_name_strings[1..-1].sort
|
140
140
|
end
|
141
141
|
end
|
142
|
+
|
143
|
+
context "test specify()" do
|
144
|
+
should "just friggin' work" do
|
145
|
+
fil = "resume.doc".fwf_filepath
|
146
|
+
|
147
|
+
test_data = [ [:cyberdyne, "resume.cyberdyne.doc"],
|
148
|
+
[:administrative, "resume.cyberdyne.administrative.doc"],
|
149
|
+
[:v2, "resume.cyberdyne.administrative.v2.doc"],
|
150
|
+
[:gratuitous_use_of_specifier, "resume.cyberdyne.administrative.v2.gratuitous_use_of_specifier.doc"]
|
151
|
+
]
|
152
|
+
|
153
|
+
for key, result in test_data
|
154
|
+
fil = fil.specifier( key )
|
155
|
+
assert_equal result, fil.to_s
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
context "test digest functions" do
|
161
|
+
setup do
|
162
|
+
@tmp_dir = FunWith::Files.root( 'test', 'tmp' )
|
163
|
+
end
|
164
|
+
|
165
|
+
teardown do
|
166
|
+
`rm -rf #{@tmp_dir.join('*')}`
|
167
|
+
end
|
168
|
+
|
169
|
+
should "md5hash a file" do
|
170
|
+
nilhash = "d41d8cd98f00b204e9800998ecf8427e"
|
171
|
+
nilhashhash = "74be16979710d4c4e7c6647856088456"
|
172
|
+
|
173
|
+
empty = @tmp_dir.join("empty.dat")
|
174
|
+
empty.touch
|
175
|
+
assert_equal( nilhash, empty.md5 )
|
176
|
+
|
177
|
+
file = @tmp_dir.join( "#{nilhash}.dat" )
|
178
|
+
file.write( nilhash )
|
179
|
+
assert_equal( nilhashhash, file.md5 )
|
180
|
+
end
|
181
|
+
end
|
142
182
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestFunWithFiles < FunWith::Files::TestCase
|
4
|
+
context "testing basics" do
|
5
|
+
should "have core extensions working" do
|
6
|
+
assert [].fwf_blank?
|
7
|
+
assert false.fwf_blank?
|
8
|
+
assert Hash.new.fwf_blank?
|
9
|
+
assert "".fwf_blank?
|
10
|
+
assert " ".fwf_blank?
|
11
|
+
refute true.fwf_blank?
|
12
|
+
refute Object.new.fwf_blank?
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fun_with_files
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.7
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Bryce Anderson
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2014-
|
11
|
+
date: 2014-04-04 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: xdg
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ! '>='
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,23 +20,6 @@ dependencies:
|
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ! '>='
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '0'
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
|
-
name: debugger
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
|
-
requirements:
|
35
|
-
- - ! '>='
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: '0'
|
38
|
-
type: :runtime
|
39
|
-
prerelease: false
|
40
|
-
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
23
|
requirements:
|
43
24
|
- - ! '>='
|
44
25
|
- !ruby/object:Gem::Version
|
@@ -46,7 +27,6 @@ dependencies:
|
|
46
27
|
- !ruby/object:Gem::Dependency
|
47
28
|
name: shoulda
|
48
29
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
30
|
requirements:
|
51
31
|
- - ! '>='
|
52
32
|
- !ruby/object:Gem::Version
|
@@ -54,7 +34,6 @@ dependencies:
|
|
54
34
|
type: :development
|
55
35
|
prerelease: false
|
56
36
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
37
|
requirements:
|
59
38
|
- - ! '>='
|
60
39
|
- !ruby/object:Gem::Version
|
@@ -62,7 +41,6 @@ dependencies:
|
|
62
41
|
- !ruby/object:Gem::Dependency
|
63
42
|
name: rdoc
|
64
43
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
44
|
requirements:
|
67
45
|
- - ~>
|
68
46
|
- !ruby/object:Gem::Version
|
@@ -70,7 +48,6 @@ dependencies:
|
|
70
48
|
type: :development
|
71
49
|
prerelease: false
|
72
50
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
51
|
requirements:
|
75
52
|
- - ~>
|
76
53
|
- !ruby/object:Gem::Version
|
@@ -78,35 +55,31 @@ dependencies:
|
|
78
55
|
- !ruby/object:Gem::Dependency
|
79
56
|
name: bundler
|
80
57
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
58
|
requirements:
|
83
59
|
- - ~>
|
84
60
|
- !ruby/object:Gem::Version
|
85
|
-
version: 1.
|
61
|
+
version: '1.5'
|
86
62
|
type: :development
|
87
63
|
prerelease: false
|
88
64
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
65
|
requirements:
|
91
66
|
- - ~>
|
92
67
|
- !ruby/object:Gem::Version
|
93
|
-
version: 1.
|
68
|
+
version: '1.5'
|
94
69
|
- !ruby/object:Gem::Dependency
|
95
70
|
name: jeweler
|
96
71
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
72
|
requirements:
|
99
73
|
- - ~>
|
100
74
|
- !ruby/object:Gem::Version
|
101
|
-
version:
|
75
|
+
version: '2.0'
|
102
76
|
type: :development
|
103
77
|
prerelease: false
|
104
78
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
79
|
requirements:
|
107
80
|
- - ~>
|
108
81
|
- !ruby/object:Gem::Version
|
109
|
-
version:
|
82
|
+
version: '2.0'
|
110
83
|
description: ! " A more intuitive syntax for performing a variety of file actions.
|
111
84
|
Examples:\n \"/\".fwf_filepath.join('usr', 'bin', 'bash').touch\n FunWith::Files::FilePath.home(\"Music\").glob(:ext
|
112
85
|
=> \"mp3\", :recurse => true)\n home = FunWith::Files::FilePath.home\n home.touch(
|
@@ -121,20 +94,32 @@ extra_rdoc_files:
|
|
121
94
|
- LICENSE.txt
|
122
95
|
- README.rdoc
|
123
96
|
files:
|
124
|
-
- ./lib/files/
|
125
|
-
- ./lib/files/
|
126
|
-
- ./lib/files/
|
127
|
-
- ./lib/files/
|
128
|
-
- ./lib/files/
|
129
|
-
- ./lib/files/
|
130
|
-
- ./lib/files/
|
131
|
-
- ./lib/files/
|
132
|
-
- ./lib/files/
|
133
|
-
- ./lib/files/
|
97
|
+
- ./lib/fun_with/files/core_extensions/array.rb
|
98
|
+
- ./lib/fun_with/files/core_extensions/false.rb
|
99
|
+
- ./lib/fun_with/files/core_extensions/hash.rb
|
100
|
+
- ./lib/fun_with/files/core_extensions/nil.rb
|
101
|
+
- ./lib/fun_with/files/core_extensions/object.rb
|
102
|
+
- ./lib/fun_with/files/core_extensions/string.rb
|
103
|
+
- ./lib/fun_with/files/digest_methods.rb
|
104
|
+
- ./lib/fun_with/files/directory_builder.rb
|
105
|
+
- ./lib/fun_with/files/downloader.rb
|
106
|
+
- ./lib/fun_with/files/errors.rb
|
107
|
+
- ./lib/fun_with/files/file_manipulation_methods.rb
|
108
|
+
- ./lib/fun_with/files/file_orderer.rb
|
109
|
+
- ./lib/fun_with/files/file_path.rb
|
110
|
+
- ./lib/fun_with/files/file_permission_methods.rb
|
111
|
+
- ./lib/fun_with/files/pathname_extensions.rb
|
112
|
+
- ./lib/fun_with/files/remote_path.rb
|
113
|
+
- ./lib/fun_with/files/root_path.rb
|
114
|
+
- ./lib/fun_with/files/string_behavior.rb
|
115
|
+
- ./lib/fun_with/files/string_extensions.rb
|
116
|
+
- ./lib/fun_with/files/xdg_extensions.rb
|
134
117
|
- ./lib/fun_with_files.rb
|
135
118
|
- ./test/data/empty.txt
|
136
119
|
- ./test/data/grep1.txt
|
137
120
|
- ./test/data/grep2.txt
|
121
|
+
- ./test/data/gsub1.txt
|
122
|
+
- ./test/data/gsub2.txt
|
138
123
|
- ./test/helper.rb
|
139
124
|
- ./test/loadable_dir/dir1/file1.rb
|
140
125
|
- ./test/loadable_dir/dir2/file2.rb
|
@@ -144,9 +129,12 @@ files:
|
|
144
129
|
- ./test/loadable_dir/dir5/b.rb
|
145
130
|
- ./test/loadable_dir/dir5/c.rb
|
146
131
|
- ./test/loadable_dir/dir5/d.rb
|
132
|
+
- ./test/test_copying.rb
|
147
133
|
- ./test/test_descent.rb
|
148
134
|
- ./test/test_directory_builder.rb
|
135
|
+
- ./test/test_file_manipulation.rb
|
149
136
|
- ./test/test_file_path.rb
|
137
|
+
- ./test/test_fun_with_files.rb
|
150
138
|
- ./test/test_globbing.rb
|
151
139
|
- ./test/test_loading.rb
|
152
140
|
- ./test/test_root_path.rb
|
@@ -159,30 +147,26 @@ files:
|
|
159
147
|
homepage: http://github.com/darthschmoo/fun_with_files
|
160
148
|
licenses:
|
161
149
|
- MIT
|
150
|
+
metadata: {}
|
162
151
|
post_install_message:
|
163
152
|
rdoc_options: []
|
164
153
|
require_paths:
|
165
154
|
- lib
|
166
155
|
required_ruby_version: !ruby/object:Gem::Requirement
|
167
|
-
none: false
|
168
156
|
requirements:
|
169
157
|
- - ! '>='
|
170
158
|
- !ruby/object:Gem::Version
|
171
159
|
version: '0'
|
172
|
-
segments:
|
173
|
-
- 0
|
174
|
-
hash: 1257082353176487045
|
175
160
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
176
|
-
none: false
|
177
161
|
requirements:
|
178
162
|
- - ! '>='
|
179
163
|
- !ruby/object:Gem::Version
|
180
164
|
version: '0'
|
181
165
|
requirements: []
|
182
166
|
rubyforge_project:
|
183
|
-
rubygems_version:
|
167
|
+
rubygems_version: 2.2.2
|
184
168
|
signing_key:
|
185
|
-
specification_version:
|
169
|
+
specification_version: 4
|
186
170
|
summary: A mashup of several File, FileUtils, and Dir class functions, with a peppy,
|
187
171
|
fun-loving syntax
|
188
172
|
test_files: []
|