camino 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/camino.rb +100 -0
  2. 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
+