epitools 0.5.13 → 0.5.14
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +13 -37
- data/VERSION +1 -1
- data/epitools.gemspec +2 -2
- data/lib/epitools/core_ext/array.rb +11 -0
- data/lib/epitools/path.rb +69 -20
- data/spec/path_spec.rb +17 -1
- metadata +2 -2
data/Rakefile
CHANGED
@@ -1,22 +1,20 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
desc 'Default: specs.'
|
15
|
-
task :default => :spec
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
#require 'bundler'
|
5
|
+
# begin
|
6
|
+
# Bundler.setup(:default, :development)
|
7
|
+
# rescue Bundler::BundlerError => e
|
8
|
+
# $stderr.puts e.message
|
9
|
+
# $stderr.puts "Run `bundle install` to install missing gems"
|
10
|
+
# exit e.status_code
|
11
|
+
# end
|
12
|
+
require 'rake'
|
16
13
|
|
17
14
|
#
|
18
15
|
# Jewelerrrr
|
19
16
|
#
|
17
|
+
require 'jeweler'
|
20
18
|
Jeweler::Tasks.new do |gem|
|
21
19
|
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
22
20
|
gem.name = "epitools"
|
@@ -36,25 +34,3 @@ Jeweler::Tasks.new do |gem|
|
|
36
34
|
gem.add_development_dependency "sqlite3-ruby"
|
37
35
|
end
|
38
36
|
Jeweler::RubygemsDotOrgTasks.new
|
39
|
-
|
40
|
-
desc 'Run all the specs.'
|
41
|
-
RSpec::Core::RakeTask.new(:spec) do |spec|
|
42
|
-
spec.pattern = FileList['spec/**/*_spec.rb']
|
43
|
-
end
|
44
|
-
|
45
|
-
desc 'Run rcov code coverage'
|
46
|
-
RSpec::Core::RakeTask.new(:rcov) do |spec|
|
47
|
-
spec.pattern = 'spec/**/*_spec.rb'
|
48
|
-
spec.rcov = true
|
49
|
-
end
|
50
|
-
|
51
|
-
|
52
|
-
desc 'Generate documentation for rdoc.'
|
53
|
-
Rake::RDocTask.new do |rdoc|
|
54
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
55
|
-
|
56
|
-
rdoc.rdoc_dir = 'rdoc'
|
57
|
-
rdoc.title = "epitools #{version}"
|
58
|
-
rdoc.rdoc_files.include('README*')
|
59
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
60
|
-
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.14
|
data/epitools.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "epitools"
|
8
|
-
s.version = "0.5.
|
8
|
+
s.version = "0.5.14"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["epitron"]
|
12
|
-
s.date = "2012-11-
|
12
|
+
s.date = "2012-11-25"
|
13
13
|
s.description = "Miscellaneous utility libraries to make my life easier."
|
14
14
|
s.email = "chris@ill-logic.com"
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/epitools/path.rb
CHANGED
@@ -58,12 +58,27 @@ require 'epitools/core_ext/string'
|
|
58
58
|
#
|
59
59
|
class Path
|
60
60
|
|
61
|
+
# The directories in the path, split into an array. (eg: ['usr', 'src', 'linux'])
|
62
|
+
attr_reader :dirs
|
63
|
+
|
64
|
+
# The filename without an extension
|
65
|
+
attr_reader :base
|
66
|
+
|
67
|
+
# The file extension, including the . (eg: ".mp3")
|
68
|
+
attr_reader :ext
|
69
|
+
|
61
70
|
## initializers
|
62
71
|
|
63
72
|
def initialize(newpath, hints={})
|
64
73
|
self.send("path=", newpath, hints)
|
65
74
|
end
|
66
75
|
|
76
|
+
def initialize_copy(other)
|
77
|
+
@dirs = other.dirs.dup
|
78
|
+
@base = other.base.dup
|
79
|
+
@ext = other.ext.dup
|
80
|
+
end
|
81
|
+
|
67
82
|
def self.glob(str)
|
68
83
|
Dir[str].map { |entry| new(entry) }
|
69
84
|
end
|
@@ -99,6 +114,26 @@ class Path
|
|
99
114
|
attr_writer :base
|
100
115
|
attr_writer :dirs
|
101
116
|
|
117
|
+
#
|
118
|
+
# Clear out the internal state of this object, so that it can be reinitialized.
|
119
|
+
#
|
120
|
+
def reset!
|
121
|
+
[:@dirs, :@base, :@ext].each { |var| remove_instance_variable var }
|
122
|
+
self
|
123
|
+
end
|
124
|
+
|
125
|
+
|
126
|
+
#
|
127
|
+
# Reload this path (update cached values.)
|
128
|
+
#
|
129
|
+
def reload!
|
130
|
+
temp = path
|
131
|
+
reset!
|
132
|
+
self.path = temp
|
133
|
+
self
|
134
|
+
end
|
135
|
+
|
136
|
+
|
102
137
|
#
|
103
138
|
# This is the core that initializes the whole class.
|
104
139
|
#
|
@@ -159,15 +194,6 @@ class Path
|
|
159
194
|
|
160
195
|
## getters
|
161
196
|
|
162
|
-
# The directories in the path, split into an array. (eg: ['usr', 'src', 'linux'])
|
163
|
-
attr_reader :dirs
|
164
|
-
|
165
|
-
# The filename without an extension
|
166
|
-
attr_reader :base
|
167
|
-
|
168
|
-
# The file extension, including the . (eg: ".mp3")
|
169
|
-
attr_reader :ext
|
170
|
-
|
171
197
|
# Joins and returns the full path
|
172
198
|
def path
|
173
199
|
if d = dir
|
@@ -488,6 +514,7 @@ class Path
|
|
488
514
|
def read_json
|
489
515
|
JSON.load(io)
|
490
516
|
end
|
517
|
+
alias_method :from_json, :read_json
|
491
518
|
|
492
519
|
# Convert the object to JSON and write it to the file (overwriting the existing file).
|
493
520
|
def write_json(object)
|
@@ -498,6 +525,7 @@ class Path
|
|
498
525
|
def read_html
|
499
526
|
Nokogiri::HTML(io)
|
500
527
|
end
|
528
|
+
alias_method :from_html, :read_html
|
501
529
|
|
502
530
|
|
503
531
|
# Convert the object to YAML and write it to the file (overwriting the existing file).
|
@@ -509,6 +537,7 @@ class Path
|
|
509
537
|
def read_yaml
|
510
538
|
YAML.load(io)
|
511
539
|
end
|
540
|
+
alias_method :from_yaml, :read_yaml
|
512
541
|
|
513
542
|
|
514
543
|
def read_xml
|
@@ -533,6 +562,14 @@ class Path
|
|
533
562
|
write BSON.serialize(object)
|
534
563
|
end
|
535
564
|
|
565
|
+
#
|
566
|
+
# Change into the directory. If a block is given, it changes into
|
567
|
+
# the directory for the duration of the block, then puts you back where you
|
568
|
+
# came from once the block is finished.
|
569
|
+
#
|
570
|
+
def cd(&block)
|
571
|
+
Path.cd(path, &block)
|
572
|
+
end
|
536
573
|
|
537
574
|
#
|
538
575
|
# Examples:
|
@@ -577,10 +614,6 @@ raise "Broken!"
|
|
577
614
|
end
|
578
615
|
alias_method :mv!, :rename_to!
|
579
616
|
|
580
|
-
def reload!
|
581
|
-
self.path = to_s
|
582
|
-
end
|
583
|
-
|
584
617
|
#
|
585
618
|
# Generate two almost identical methods: mkdir and mkdir_p
|
586
619
|
#
|
@@ -592,16 +625,13 @@ raise "Broken!"
|
|
592
625
|
def #{method}
|
593
626
|
if exists?
|
594
627
|
if directory?
|
595
|
-
|
628
|
+
reload!
|
596
629
|
else
|
597
630
|
raise "Error: A file by this name already exists."
|
598
631
|
end
|
599
632
|
else
|
600
|
-
#{command}
|
601
|
-
|
602
|
-
p [:path, path]
|
603
|
-
self.path = path # regenerate object
|
604
|
-
p [:path, path]
|
633
|
+
#{command} path # Make the directory
|
634
|
+
reload!
|
605
635
|
self
|
606
636
|
end
|
607
637
|
end
|
@@ -926,7 +956,26 @@ raise "Broken!"
|
|
926
956
|
@@dir_stack.pop
|
927
957
|
end
|
928
958
|
|
929
|
-
|
959
|
+
#
|
960
|
+
# Change into the directory "dest". If a block is given, it changes into
|
961
|
+
# the directory for the duration of the block, then puts you back where you
|
962
|
+
# came from once the block is finished.
|
963
|
+
#
|
964
|
+
def self.cd(dest, &block)
|
965
|
+
dest = Path[dest]
|
966
|
+
|
967
|
+
raise "Can't 'cd' into #{dest}" unless dest.dir?
|
968
|
+
|
969
|
+
if block_given?
|
970
|
+
orig = pwd
|
971
|
+
|
972
|
+
Dir.chdir(dest)
|
973
|
+
yield
|
974
|
+
Dir.chdir(orig)
|
975
|
+
else
|
976
|
+
Dir.chdir(dest)
|
977
|
+
end
|
978
|
+
end
|
930
979
|
|
931
980
|
def self.ls(path); Path[path].ls end
|
932
981
|
|
data/spec/path_spec.rb
CHANGED
@@ -12,6 +12,14 @@ describe Path do
|
|
12
12
|
path.base.should == "hello"
|
13
13
|
end
|
14
14
|
|
15
|
+
it "dups itself" do
|
16
|
+
path = Path.new "/whatever/blah/stuff.ext"
|
17
|
+
path2 = path.dup
|
18
|
+
path2.path.should == path.path
|
19
|
+
path.dirs.pop
|
20
|
+
path2.path.should_not == path.path
|
21
|
+
end
|
22
|
+
|
15
23
|
it "works with relative paths" do
|
16
24
|
path = Path.new("../hello.mp3/blah")
|
17
25
|
|
@@ -187,6 +195,14 @@ describe Path do
|
|
187
195
|
path.read.should == "rawr"
|
188
196
|
end
|
189
197
|
|
198
|
+
it "cds into directories" do
|
199
|
+
path = Path["/etc"]
|
200
|
+
start = Path.pwd
|
201
|
+
path.should_not == Path.pwd
|
202
|
+
path.cd { path.should == Path.pwd }
|
203
|
+
Path.pwd.should == start
|
204
|
+
end
|
205
|
+
|
190
206
|
it "renames" do
|
191
207
|
path = Path.tmpfile
|
192
208
|
|
@@ -288,7 +304,7 @@ describe Path do
|
|
288
304
|
Path.which("ruby").should_not be_nil
|
289
305
|
Path.which("asdfasdfhkajlsdhfkljashdf").should be_nil
|
290
306
|
Path.which("ruby").class.should == Path
|
291
|
-
Path.which("
|
307
|
+
Path.which("ps", "sh", "tar").should == ["/bin/ps", "/bin/sh", "/bin/tar"]
|
292
308
|
end
|
293
309
|
|
294
310
|
it "Path[]s another path" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: epitools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.14
|
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: 2012-11-
|
12
|
+
date: 2012-11-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|