camino 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/camino.rb +100 -0
- metadata +62 -0
data/lib/camino.rb
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
class Path < String
|
2
|
+
|
3
|
+
def initialize(string = Path.root)
|
4
|
+
super(string)
|
5
|
+
end
|
6
|
+
|
7
|
+
def /(obj)
|
8
|
+
Path.new(File.join(self, obj.to_s))
|
9
|
+
end
|
10
|
+
|
11
|
+
def +(obj)
|
12
|
+
Path.new(self.to_s + obj.to_s)
|
13
|
+
end
|
14
|
+
|
15
|
+
def exist?
|
16
|
+
File.exists?(self)
|
17
|
+
end
|
18
|
+
|
19
|
+
alias exists? exist?
|
20
|
+
|
21
|
+
def directory?
|
22
|
+
File.directory?(self)
|
23
|
+
end
|
24
|
+
|
25
|
+
def file?
|
26
|
+
exist? && !directory?
|
27
|
+
end
|
28
|
+
|
29
|
+
def files(pattern = "*")
|
30
|
+
if directory?
|
31
|
+
Dir.glob(File.join(self, pattern)).collect{|p|Path.new(p)}
|
32
|
+
else
|
33
|
+
raise "Not a directory:(#{self})"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def read
|
38
|
+
if file?
|
39
|
+
File.open(self).read
|
40
|
+
else
|
41
|
+
raise "Not a file:(#{self})"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def directory
|
46
|
+
File.dirname(self)
|
47
|
+
end
|
48
|
+
|
49
|
+
def file
|
50
|
+
File.basename(self)
|
51
|
+
end
|
52
|
+
|
53
|
+
def extension
|
54
|
+
File.extname(self)[1..-1]
|
55
|
+
end
|
56
|
+
|
57
|
+
def filename
|
58
|
+
File.basename(self, File.extname(self))
|
59
|
+
end
|
60
|
+
|
61
|
+
def inspect
|
62
|
+
"#<Path:#{(object_id * 2).to_s(16)}:#{self}>"
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.relative
|
66
|
+
path = get_path_from_caller(caller)
|
67
|
+
dir = File.dirname(path)
|
68
|
+
raise "Path doesn't seem to exist:#{last_call.inspect}" if !File.exist?(dir)
|
69
|
+
Path.new(dir)
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.home
|
73
|
+
Path.new(ENV['HOME'])
|
74
|
+
end
|
75
|
+
|
76
|
+
def self.root
|
77
|
+
Path.new("/")
|
78
|
+
end
|
79
|
+
|
80
|
+
def self.pwd
|
81
|
+
Path.new(Dir.pwd)
|
82
|
+
end
|
83
|
+
|
84
|
+
private
|
85
|
+
|
86
|
+
def self.get_path_from_caller(caller)
|
87
|
+
last_call = caller.first
|
88
|
+
matches = last_call.scan(/(.*?):(\d*)(:in\s`.*')?$/)
|
89
|
+
raise "Path name conflicts with caller syntax:#{last_call.inspect}" if matches.length != 1
|
90
|
+
path, line_number, method = matches.first
|
91
|
+
path
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
class String
|
97
|
+
def to_path
|
98
|
+
Path.new(self)
|
99
|
+
end
|
100
|
+
end
|
metadata
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: camino
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
version: 0.0.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Noel Warren
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2014-06-28 00:00:00 +02:00
|
18
|
+
default_executable:
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: Sugar syntax for your path
|
22
|
+
email: noelwarr@gmail.com
|
23
|
+
executables: []
|
24
|
+
|
25
|
+
extensions: []
|
26
|
+
|
27
|
+
extra_rdoc_files: []
|
28
|
+
|
29
|
+
files:
|
30
|
+
- lib/camino.rb
|
31
|
+
has_rdoc: true
|
32
|
+
homepage:
|
33
|
+
licenses:
|
34
|
+
- MIT
|
35
|
+
post_install_message:
|
36
|
+
rdoc_options: []
|
37
|
+
|
38
|
+
require_paths:
|
39
|
+
- lib
|
40
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
segments:
|
45
|
+
- 0
|
46
|
+
version: "0"
|
47
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - ">="
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
segments:
|
52
|
+
- 0
|
53
|
+
version: "0"
|
54
|
+
requirements: []
|
55
|
+
|
56
|
+
rubyforge_project:
|
57
|
+
rubygems_version: 1.3.6
|
58
|
+
signing_key:
|
59
|
+
specification_version: 3
|
60
|
+
summary: Sugar syntax for your path
|
61
|
+
test_files: []
|
62
|
+
|