[フレーム]

Class: Pathname

Inherits:
Object show all
Includes:
Comparable
Defined in:
opal/stdlib/pathname.rb,
opal/stdlib/nodejs/pathname.rb

Overview

Portions from Author:: Tanaka Akira [email protected]

Constant Summary collapse

SEPARATOR_PAT =
/#{Regexp .quote File ::SEPARATOR}/
SAME_PATHS =
if File ::FNM_SYSCASE.nonzero?
 # Avoid #zero? here because #casecmp can return nil.
 proc { |a, b| a.casecmp(b) == 0 }
else
 proc { |a, b| a == b }
end

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(path) ⇒ Pathname

Returns a new instance of Pathname.

Raises:

  • (ArgumentError)
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'opal/stdlib/pathname.rb', line 10
def initialize(path)
 if Pathname  === path
 @path = path.path.to_s
 elsif path.respond_to?(:to_path)
 @path = path.to_path
 elsif path.is_a?(String )
 @path = path
 elsif path.nil?
 raise TypeError, 'no implicit conversion of nil into String'
 else
 raise TypeError, "no implicit conversion of #{path.class} into String"
 end
 raise ArgumentError if @path == "0円"
end

Instance Attribute Details

#pathObject (readonly)

Returns the value of attribute path.

29
30
31
# File 'opal/stdlib/pathname.rb', line 29
def path
 @path
end

Class Method Details

.pwdObject

25
26
27
# File 'opal/stdlib/pathname.rb', line 25
def self.pwd
 new(Dir .pwd )
end

Instance Method Details

#+(other) ⇒ Object

87
88
89
90
# File 'opal/stdlib/pathname.rb', line 87
def +(other)
 other = Pathname .new (other) unless Pathname  === other
 Pathname .new (plus(@path, other.to_s))
end

#<=>(other) ⇒ Object

166
167
168
# File 'opal/stdlib/pathname.rb', line 166
def <=>(other)
 path <=> other.path
end

#==(other) ⇒ Object Also known as: ===, eql?

31
32
33
# File 'opal/stdlib/pathname.rb', line 31
def ==(other)
 other.path == @path
end

#absolute?Boolean

Returns:

35
36
37
# File 'opal/stdlib/pathname.rb', line 35
def absolute?
 !relative?
end

#basenameObject

154
155
156
# File 'opal/stdlib/pathname.rb', line 154
def basename
 Pathname .new (File .basename(@path))
end

#chop_basename(path) ⇒ Object

:nodoc:

47
48
49
50
51
52
53
54
55
# File 'opal/stdlib/pathname.rb', line 47
def chop_basename(path) # :nodoc:
 base = File .basename(path)
 # ruby uses /^#{SEPARATOR_PAT}?$/o but having issues with interpolation
 if Regexp .new("^#{Pathname ::SEPARATOR_PAT .source}?$") =~ base
 return nil
 else
 return path[0, path.rindex(base)], base
 end
end

#cleanpathObject

71
72
73
# File 'opal/stdlib/pathname.rb', line 71
def cleanpath
 `return Opal.normalize(#{@path})`
end

#directory?Boolean

Returns:

158
159
160
# File 'opal/stdlib/pathname.rb', line 158
def directory?
 File .directory? (@path)
end

#dirnameObject

150
151
152
# File 'opal/stdlib/pathname.rb', line 150
def dirname
 Pathname .new (File .dirname(@path))
end

#entriesObject

213
214
215
# File 'opal/stdlib/pathname.rb', line 213
def entries
 Dir .entries (@path).map { |f| self.class.new(f) }
end

#expand_pathObject

83
84
85
# File 'opal/stdlib/pathname.rb', line 83
def expand_path
 Pathname .new (File .expand_path(@path))
end

#extnameObject

162
163
164
# File 'opal/stdlib/pathname.rb', line 162
def extname
 File .extname(@path)
end

#hashObject

79
80
81
# File 'opal/stdlib/pathname.rb', line 79
def hash
 @path.hash
end

#join(*args) ⇒ Object

133
134
135
136
137
138
139
140
141
142
143
144
# File 'opal/stdlib/pathname.rb', line 133
def join(*args)
 return self if args.empty?
 result = args.pop
 result = Pathname .new (result) unless Pathname  === result
 return result if result.absolute?
 args.reverse_each do |arg|
 arg = Pathname .new (arg) unless Pathname  === arg
 result = arg + result
 return result if result.absolute?
 end
 self + result
end

#parentObject

61
62
63
64
65
# File 'opal/stdlib/pathname.rb', line 61
def parent
 new_path = @path.sub(%r{/([^/]+/?$)}, '')
 new_path = absolute? ? '/' : '.' if new_path == ''
 Pathname .new (new_path)
end

#plus(path1, path2) ⇒ Object

-> path # :nodoc:

92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'opal/stdlib/pathname.rb', line 92
def plus(path1, path2) # -> path # :nodoc:
 prefix2 = path2
 index_list2 = []
 basename_list2 = []
 while (r2 = chop_basename(prefix2))
 prefix2, basename2 = r2
 index_list2.unshift prefix2.length
 basename_list2.unshift basename2
 end
 return path2 if prefix2 != ''
 prefix1 = path1
 while true
 while !basename_list2.empty? && basename_list2.first == '.'
 index_list2.shift
 basename_list2.shift
 end
 break unless (r1 = chop_basename(prefix1))
 prefix1, basename1 = r1
 next if basename1 == '.'
 if basename1 == '..' || basename_list2.empty? || basename_list2.first != '..'
 prefix1 += basename1
 break
 end
 index_list2.shift
 basename_list2.shift
 end
 r1 = chop_basename(prefix1)
 if !r1 && /#{SEPARATOR_PAT }/ =~ File .basename(prefix1)
 while !basename_list2.empty? && basename_list2.first == '..'
 index_list2.shift
 basename_list2.shift
 end
 end
 if !basename_list2.empty?
 suffix2 = path2[index_list2.first..-1]
 r1 ? File .join (prefix1, suffix2) : prefix1 + suffix2
 else
 r1 ? prefix1 : File .dirname(prefix1)
 end
end

#relative?Boolean

Returns:

39
40
41
42
43
44
45
# File 'opal/stdlib/pathname.rb', line 39
def relative?
 path = @path
 while (r = chop_basename(path))
 path, = r
 end
 path == ''
end

#relative_path_from(base_directory) ⇒ Object

177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
# File 'opal/stdlib/pathname.rb', line 177
def relative_path_from(base_directory)
 dest_directory = cleanpath.to_s
 base_directory = base_directory.cleanpath.to_s
 dest_prefix = dest_directory
 dest_names = []
 while (r = chop_basename(dest_prefix))
 dest_prefix, basename = r
 dest_names.unshift basename if basename != '.'
 end
 base_prefix = base_directory
 base_names = []
 while (r = chop_basename(base_prefix))
 base_prefix, basename = r
 base_names.unshift basename if basename != '.'
 end
 unless SAME_PATHS [dest_prefix, base_prefix]
 raise ArgumentError, "different prefix: #{dest_prefix.inspect} and #{base_directory.inspect}"
 end
 while !dest_names.empty? &&
 !base_names.empty? &&
 SAME_PATHS [dest_names.first, base_names.first]
 dest_names.shift
 base_names.shift
 end
 if base_names.include? '..'
 raise ArgumentError, "base_directory has ..: #{base_directory.inspect}"
 end
 base_names.fill('..')
 relpath_names = base_names + dest_names
 if relpath_names.empty?
 Pathname .new ('.')
 else
 Pathname .new (File .join (*relpath_names))
 end
end

#root?Boolean

Returns:

57
58
59
# File 'opal/stdlib/pathname.rb', line 57
def root?
 @path == '/'
end

#splitObject

146
147
148
# File 'opal/stdlib/pathname.rb', line 146
def split
 [dirname, basename]
end

#sub(*args) ⇒ Object

67
68
69
# File 'opal/stdlib/pathname.rb', line 67
def sub(*args)
 Pathname .new (@path.sub(*args))
end

#to_pathObject

75
76
77
# File 'opal/stdlib/pathname.rb', line 75
def to_path
 @path
end

#to_sObject

219
220
221
# File 'opal/stdlib/pathname.rb', line 219
def to_path
 @path
end

#to_strObject

220
221
222
# File 'opal/stdlib/pathname.rb', line 220
def to_path
 @path
end

AltStyle によって変換されたページ (->オリジナル) /