haml 3.1.3 → 3.1.4
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of haml might be problematic. Click here for more details.
- data/Rakefile +42 -17
- data/VERSION +1 -1
- data/lib/haml/compiler.rb +3 -3
- data/lib/haml/helpers/action_view_mods.rb +4 -3
- data/lib/haml/template.rb +3 -1
- data/test/gemfiles/Gemfile.rails-2.0.x +8 -0
- data/test/gemfiles/Gemfile.rails-2.0.x.lock +38 -0
- data/test/gemfiles/Gemfile.rails-2.1.x +8 -0
- data/test/gemfiles/Gemfile.rails-2.1.x.lock +38 -0
- data/test/gemfiles/Gemfile.rails-2.2.x +8 -0
- data/test/gemfiles/Gemfile.rails-2.2.x.lock +38 -0
- data/test/gemfiles/Gemfile.rails-2.3.x +8 -0
- data/test/gemfiles/Gemfile.rails-2.3.x.lock +40 -0
- data/test/gemfiles/Gemfile.rails-3.0.x +8 -0
- data/test/gemfiles/Gemfile.rails-3.0.x.lock +85 -0
- data/test/gemfiles/Gemfile.rails-3.1.x +8 -0
- data/test/gemfiles/Gemfile.rails-3.1.x.lock +98 -0
- data/test/gemfiles/Gemfile.rails-xss-2.3.x +9 -0
- data/test/gemfiles/Gemfile.rails-xss-2.3.x.lock +42 -0
- data/test/haml/engine_test.rb +19 -0
- data/test/haml/html2haml_test.rb +1 -1
- data/test/haml/template_test.rb +20 -2
- data/test/haml/templates/partial_layout.haml +4 -1
- data/test/linked_rails.rb +4 -4
- data/vendor/sass/VERSION +1 -1
- data/vendor/sass/doc-src/SASS_CHANGELOG.md +115 -2
- data/vendor/sass/doc-src/SASS_REFERENCE.md +12 -4
- data/vendor/sass/lib/sass.rb +1 -0
- data/vendor/sass/lib/sass/cache_stores/base.rb +3 -1
- data/vendor/sass/lib/sass/cache_stores/filesystem.rb +2 -0
- data/vendor/sass/lib/sass/css.rb +2 -1
- data/vendor/sass/lib/sass/engine.rb +39 -23
- data/vendor/sass/lib/sass/environment.rb +11 -0
- data/vendor/sass/lib/sass/exec.rb +14 -1
- data/vendor/sass/lib/sass/importers/base.rb +2 -1
- data/vendor/sass/lib/sass/importers/filesystem.rb +18 -13
- data/vendor/sass/lib/sass/less.rb +2 -2
- data/vendor/sass/lib/sass/logger.rb +15 -0
- data/vendor/sass/lib/sass/logger/base.rb +32 -0
- data/vendor/sass/lib/sass/logger/log_level.rb +49 -0
- data/vendor/sass/lib/sass/plugin.rb +4 -8
- data/vendor/sass/lib/sass/plugin/compiler.rb +42 -17
- data/vendor/sass/lib/sass/plugin/configuration.rb +0 -2
- data/vendor/sass/lib/sass/railtie.rb +1 -1
- data/vendor/sass/lib/sass/script/funcall.rb +14 -1
- data/vendor/sass/lib/sass/script/functions.rb +44 -1
- data/vendor/sass/lib/sass/script/interpolation.rb +9 -0
- data/vendor/sass/lib/sass/script/lexer.rb +6 -1
- data/vendor/sass/lib/sass/script/list.rb +7 -0
- data/vendor/sass/lib/sass/script/literal.rb +5 -0
- data/vendor/sass/lib/sass/script/node.rb +8 -0
- data/vendor/sass/lib/sass/script/number.rb +28 -5
- data/vendor/sass/lib/sass/script/operation.rb +8 -0
- data/vendor/sass/lib/sass/script/parser.rb +12 -5
- data/vendor/sass/lib/sass/script/string_interpolation.rb +9 -0
- data/vendor/sass/lib/sass/script/unary_operation.rb +7 -0
- data/vendor/sass/lib/sass/script/variable.rb +5 -0
- data/vendor/sass/lib/sass/scss/parser.rb +78 -38
- data/vendor/sass/lib/sass/scss/rx.rb +2 -1
- data/vendor/sass/lib/sass/scss/static_parser.rb +2 -2
- data/vendor/sass/lib/sass/shared.rb +1 -1
- data/vendor/sass/lib/sass/tree/comment_node.rb +24 -11
- data/vendor/sass/lib/sass/tree/debug_node.rb +1 -1
- data/vendor/sass/lib/sass/tree/each_node.rb +1 -1
- data/vendor/sass/lib/sass/tree/extend_node.rb +1 -1
- data/vendor/sass/lib/sass/tree/for_node.rb +2 -2
- data/vendor/sass/lib/sass/tree/function_node.rb +1 -1
- data/vendor/sass/lib/sass/tree/if_node.rb +1 -14
- data/vendor/sass/lib/sass/tree/mixin_def_node.rb +1 -1
- data/vendor/sass/lib/sass/tree/mixin_node.rb +2 -2
- data/vendor/sass/lib/sass/tree/node.rb +2 -5
- data/vendor/sass/lib/sass/tree/prop_node.rb +2 -9
- data/vendor/sass/lib/sass/tree/return_node.rb +1 -1
- data/vendor/sass/lib/sass/tree/rule_node.rb +9 -2
- data/vendor/sass/lib/sass/tree/variable_node.rb +1 -1
- data/vendor/sass/lib/sass/tree/visitors/check_nesting.rb +17 -18
- data/vendor/sass/lib/sass/tree/visitors/convert.rb +10 -5
- data/vendor/sass/lib/sass/tree/visitors/deep_copy.rb +87 -0
- data/vendor/sass/lib/sass/tree/visitors/perform.rb +50 -19
- data/vendor/sass/lib/sass/tree/visitors/set_options.rb +97 -0
- data/vendor/sass/lib/sass/tree/visitors/to_css.rb +9 -15
- data/vendor/sass/lib/sass/tree/warn_node.rb +1 -1
- data/vendor/sass/lib/sass/tree/while_node.rb +1 -1
- data/vendor/sass/lib/sass/util.rb +58 -6
- data/vendor/sass/sass.gemspec +2 -1
- data/vendor/sass/test/Gemfile +4 -0
- data/vendor/sass/test/Gemfile.lock +19 -0
- data/vendor/sass/test/sass/cache_test.rb +15 -0
- data/vendor/sass/test/sass/conversion_test.rb +2 -6
- data/vendor/sass/test/sass/css2sass_test.rb +9 -0
- data/vendor/sass/test/sass/engine_test.rb +124 -26
- data/vendor/sass/test/sass/fixtures/test_staleness_check_across_importers.css +1 -0
- data/vendor/sass/test/sass/fixtures/test_staleness_check_across_importers.scss +1 -0
- data/vendor/sass/test/sass/functions_test.rb +13 -0
- data/vendor/sass/test/sass/importer_test.rb +110 -0
- data/vendor/sass/test/sass/logger_test.rb +58 -0
- data/vendor/sass/test/sass/plugin_test.rb +16 -13
- data/vendor/sass/test/sass/script_conversion_test.rb +2 -0
- data/vendor/sass/test/sass/script_test.rb +18 -0
- data/vendor/sass/test/sass/scss/css_test.rb +7 -1
- data/vendor/sass/test/sass/scss/scss_test.rb +37 -13
- data/vendor/sass/test/sass/templates/bork5.sass +3 -0
- data/vendor/sass/test/sass/templates/nested_bork5.sass +2 -0
- data/vendor/sass/test/sass/test_helper.rb +1 -1
- data/vendor/sass/test/sass/util_test.rb +12 -0
- data/vendor/sass/vendor/fssm/Gemfile +3 -0
- data/vendor/sass/vendor/fssm/LICENSE +1 -1
- data/vendor/sass/vendor/fssm/README.markdown +55 -27
- data/vendor/sass/vendor/fssm/Rakefile +6 -54
- data/vendor/sass/vendor/fssm/example.rb +6 -3
- data/vendor/sass/vendor/fssm/fssm.gemspec +17 -70
- data/vendor/sass/vendor/fssm/lib/fssm.rb +7 -3
- data/vendor/sass/vendor/fssm/lib/fssm/backends/fsevents.rb +1 -1
- data/vendor/sass/vendor/fssm/lib/fssm/backends/inotify.rb +2 -2
- data/vendor/sass/vendor/fssm/lib/fssm/backends/polling.rb +2 -2
- data/vendor/sass/vendor/fssm/lib/fssm/backends/rbfsevent.rb +42 -0
- data/vendor/sass/vendor/fssm/lib/fssm/backends/rubycocoa/fsevents.rb +10 -10
- data/vendor/sass/vendor/fssm/lib/fssm/monitor.rb +19 -9
- data/vendor/sass/vendor/fssm/lib/fssm/path.rb +24 -21
- data/vendor/sass/vendor/fssm/lib/fssm/pathname.rb +13 -479
- data/vendor/sass/vendor/fssm/lib/fssm/state/directory.rb +29 -11
- data/vendor/sass/vendor/fssm/lib/fssm/state/file.rb +1 -1
- data/vendor/sass/vendor/fssm/lib/fssm/support.rb +41 -12
- data/vendor/sass/vendor/fssm/lib/fssm/tree.rb +6 -6
- data/vendor/sass/vendor/fssm/lib/fssm/version.rb +3 -0
- data/vendor/sass/vendor/fssm/profile/prof-cache.rb +3 -3
- data/vendor/sass/vendor/fssm/profile/prof-pathname-rubinius.rb +35 -0
- data/vendor/sass/vendor/fssm/profile/prof-pathname.rb +7 -7
- data/vendor/sass/vendor/fssm/spec/count_down_latch.rb +151 -0
- data/vendor/sass/vendor/fssm/spec/monitor_spec.rb +202 -0
- data/vendor/sass/vendor/fssm/spec/path_spec.rb +36 -15
- data/vendor/sass/vendor/fssm/spec/spec_helper.rb +6 -6
- metadata +36 -5
- data/vendor/sass/vendor/fssm/VERSION.yml +0 -5
@@ -4,23 +4,33 @@ class FSSM::Monitor
|
|
4
4
|
@backend = FSSM::Backends::Default.new
|
5
5
|
end
|
6
6
|
|
7
|
-
def path(
|
8
|
-
path =
|
9
|
-
FSSM::
|
10
|
-
|
11
|
-
@backend.add_handler(FSSM::State::Directory.new(path))
|
7
|
+
def path(path=nil, glob=nil, &block)
|
8
|
+
path = create_path(path, glob, &block)
|
9
|
+
@backend.add_handler(FSSM::State::Directory.new(path, @options))
|
12
10
|
path
|
11
|
+
rescue FSSM::FileNotRealError => e
|
12
|
+
FSSM.dbg("#{e}")
|
13
|
+
nil
|
13
14
|
end
|
14
15
|
|
15
|
-
def file(
|
16
|
-
path =
|
17
|
-
FSSM::Support.use_block(path, block)
|
18
|
-
|
16
|
+
def file(path=nil, glob=nil, &block)
|
17
|
+
path = create_path(path, glob, &block)
|
19
18
|
@backend.add_handler(FSSM::State::File.new(path))
|
20
19
|
path
|
20
|
+
rescue FSSM::FileNotRealError => e
|
21
|
+
FSSM.dbg("#{e}")
|
22
|
+
nil
|
21
23
|
end
|
22
24
|
|
23
25
|
def run
|
24
26
|
@backend.run
|
25
27
|
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def create_path(path, glob, &block)
|
32
|
+
path = FSSM::Path.new(path, glob, @options)
|
33
|
+
FSSM::Support.use_block(path, block)
|
34
|
+
path
|
35
|
+
end
|
26
36
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
class FSSM::Path
|
2
|
-
def initialize(path=nil, glob=nil, &block)
|
2
|
+
def initialize(path=nil, glob=nil, options={}, &block)
|
3
|
+
@options = options
|
3
4
|
set_path(path || '.')
|
4
5
|
set_glob(glob || '**/*')
|
5
6
|
init_callbacks
|
@@ -26,32 +27,32 @@ class FSSM::Path
|
|
26
27
|
set_glob(value)
|
27
28
|
end
|
28
29
|
|
29
|
-
def create(
|
30
|
-
callback_action(:create, (block_given? ? block :
|
30
|
+
def create(*args, &block)
|
31
|
+
callback_action(:create, (block_given? ? block : args))
|
31
32
|
end
|
32
33
|
|
33
|
-
def update(
|
34
|
-
callback_action(:update, (block_given? ? block :
|
34
|
+
def update(*args, &block)
|
35
|
+
callback_action(:update, (block_given? ? block : args))
|
35
36
|
end
|
36
37
|
|
37
|
-
def delete(
|
38
|
-
callback_action(:delete, (block_given? ? block :
|
38
|
+
def delete(*args, &block)
|
39
|
+
callback_action(:delete, (block_given? ? block : args))
|
39
40
|
end
|
40
41
|
|
41
42
|
private
|
42
43
|
|
43
44
|
def init_callbacks
|
44
|
-
do_nothing = lambda {|base, relative|}
|
45
|
+
do_nothing = lambda { |base, relative|}
|
45
46
|
@callbacks = Hash.new(do_nothing)
|
46
47
|
end
|
47
48
|
|
48
|
-
def callback_action(type,
|
49
|
-
if
|
50
|
-
set_callback(type,
|
51
|
-
elsif
|
49
|
+
def callback_action(type, args=[])
|
50
|
+
if args.is_a?(Proc)
|
51
|
+
set_callback(type, args)
|
52
|
+
elsif args.empty?
|
52
53
|
get_callback(type)
|
53
54
|
else
|
54
|
-
run_callback(type,
|
55
|
+
run_callback(type, args)
|
55
56
|
end
|
56
57
|
end
|
57
58
|
|
@@ -64,25 +65,27 @@ class FSSM::Path
|
|
64
65
|
@callbacks[type]
|
65
66
|
end
|
66
67
|
|
67
|
-
def run_callback(type,
|
68
|
-
|
68
|
+
def run_callback(type, args)
|
69
|
+
callback_args = split_path(args[0])
|
70
|
+
callback_args << args[1] if @options[:directories]
|
69
71
|
|
70
72
|
begin
|
71
|
-
@callbacks[type].call(
|
73
|
+
@callbacks[type].call(*callback_args)
|
72
74
|
rescue Exception => e
|
73
|
-
raise FSSM::CallbackError, "#{type} - #{
|
75
|
+
raise FSSM::CallbackError, "#{type} - #{args[0]}: #{e.message}", e.backtrace
|
74
76
|
end
|
75
77
|
end
|
76
78
|
|
77
79
|
def split_path(path)
|
78
80
|
path = FSSM::Pathname.for(path)
|
79
|
-
[@path, (path.relative? ? path : path.relative_path_from(@path))]
|
81
|
+
[@path.to_s, (path.relative? ? path : path.relative_path_from(@path)).to_s]
|
80
82
|
end
|
81
83
|
|
82
84
|
def set_path(path)
|
83
|
-
path = FSSM::Pathname.for(path)
|
84
|
-
raise FSSM::FileNotFoundError, "No such file or directory - #{path}" unless path.exist?
|
85
|
-
@path
|
85
|
+
@path = FSSM::Pathname.for(path).expand_path
|
86
|
+
raise FSSM::FileNotFoundError, "No such file or directory - #{@path}" unless @path.exist?
|
87
|
+
raise FSSM::FileNotRealError, "Path is virtual - #{@path}" if @path.is_virtual?
|
88
|
+
@path = @path.realpath
|
86
89
|
end
|
87
90
|
|
88
91
|
def set_glob(glob)
|
@@ -1,502 +1,36 @@
|
|
1
1
|
require 'fileutils'
|
2
2
|
require 'find'
|
3
|
+
require 'pathname'
|
3
4
|
|
4
5
|
module FSSM
|
5
|
-
class Pathname <
|
6
|
-
|
7
|
-
|
8
|
-
ROOT = '/'.freeze
|
9
|
-
DOT = '.'.freeze
|
10
|
-
DOT_DOT = '..'.freeze
|
6
|
+
class Pathname < ::Pathname
|
7
|
+
VIRTUAL_REGEX = /^file:([^!]*)!/
|
11
8
|
|
12
9
|
class << self
|
13
10
|
def for(path)
|
14
|
-
path.is_a?(::FSSM::Pathname) ? path : new(
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def initialize(path)
|
19
|
-
raise ArgumentError, "path cannot contain ASCII NULLs" if path =~ %r{\0}
|
20
|
-
super(path)
|
21
|
-
end
|
22
|
-
|
23
|
-
def <=>(other)
|
24
|
-
self.tr('/', "\0").to_s <=> other.to_str.tr('/', "\0")
|
25
|
-
rescue NoMethodError
|
26
|
-
nil
|
27
|
-
end
|
28
|
-
|
29
|
-
def ==(other)
|
30
|
-
left = self.cleanpath.tr('/', "\0").to_s
|
31
|
-
right = self.class.for(other).cleanpath.tr('/', "\0").to_s
|
32
|
-
|
33
|
-
left == right
|
34
|
-
rescue NoMethodError
|
35
|
-
false
|
36
|
-
end
|
37
|
-
|
38
|
-
def +(path)
|
39
|
-
dup << path
|
40
|
-
end
|
41
|
-
|
42
|
-
def <<(path)
|
43
|
-
replace( join(path).cleanpath! )
|
44
|
-
end
|
45
|
-
|
46
|
-
def absolute?
|
47
|
-
self[0, 1].to_s == ROOT
|
48
|
-
end
|
49
|
-
|
50
|
-
def ascend
|
51
|
-
parts = to_a
|
52
|
-
parts.length.downto(1) do |i|
|
53
|
-
yield self.class.join(parts[0, i])
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def children
|
58
|
-
entries[2..-1]
|
59
|
-
end
|
60
|
-
|
61
|
-
def cleanpath!
|
62
|
-
parts = to_a
|
63
|
-
final = []
|
64
|
-
|
65
|
-
parts.each do |part|
|
66
|
-
case part
|
67
|
-
when DOT then
|
68
|
-
next
|
69
|
-
when DOT_DOT then
|
70
|
-
case final.last
|
71
|
-
when ROOT then
|
72
|
-
next
|
73
|
-
when DOT_DOT then
|
74
|
-
final.push(DOT_DOT)
|
75
|
-
when nil then
|
76
|
-
final.push(DOT_DOT)
|
77
|
-
else
|
78
|
-
final.pop
|
79
|
-
end
|
80
|
-
else
|
81
|
-
final.push(part)
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
replace(final.empty? ? DOT : self.class.join(*final))
|
86
|
-
end
|
87
|
-
|
88
|
-
def cleanpath
|
89
|
-
dup.cleanpath!
|
90
|
-
end
|
91
|
-
|
92
|
-
def descend
|
93
|
-
parts = to_a
|
94
|
-
1.upto(parts.length) { |i| yield self.class.join(parts[0, i]) }
|
95
|
-
end
|
96
|
-
|
97
|
-
def dot?
|
98
|
-
self == DOT
|
99
|
-
end
|
100
|
-
|
101
|
-
def dot_dot?
|
102
|
-
self == DOT_DOT
|
103
|
-
end
|
104
|
-
|
105
|
-
def each_filename(&blk)
|
106
|
-
to_a.each(&blk)
|
107
|
-
end
|
108
|
-
|
109
|
-
def mountpoint?
|
110
|
-
stat1 = self.lstat
|
111
|
-
stat2 = self.parent.lstat
|
112
|
-
|
113
|
-
stat1.dev != stat2.dev || stat1.ino == stat2.ino
|
114
|
-
rescue Errno::ENOENT
|
115
|
-
false
|
116
|
-
end
|
117
|
-
|
118
|
-
def parent
|
119
|
-
self + '..'
|
120
|
-
end
|
121
|
-
|
122
|
-
def realpath
|
123
|
-
path = self
|
124
|
-
|
125
|
-
SYMLOOP_MAX.times do
|
126
|
-
link = path.readlink
|
127
|
-
link = path.dirname + link if link.relative?
|
128
|
-
path = link
|
129
|
-
end
|
130
|
-
|
131
|
-
raise Errno::ELOOP, self
|
132
|
-
rescue Errno::EINVAL
|
133
|
-
path.expand_path
|
134
|
-
end
|
135
|
-
|
136
|
-
def relative?
|
137
|
-
!absolute?
|
138
|
-
end
|
139
|
-
|
140
|
-
def relative_path_from(base)
|
141
|
-
base = self.class.for(base)
|
142
|
-
|
143
|
-
raise ArgumentError, 'no relative path between a relative and absolute' if self.absolute? != base.absolute?
|
144
|
-
|
145
|
-
return self if base.dot?
|
146
|
-
return self.class.new(DOT) if self == base
|
147
|
-
|
148
|
-
base = base.cleanpath.to_a
|
149
|
-
dest = self.cleanpath.to_a
|
150
|
-
|
151
|
-
while !dest.empty? && !base.empty? && dest[0] == base[0]
|
152
|
-
base.shift
|
153
|
-
dest.shift
|
11
|
+
path.is_a?(::FSSM::Pathname) ? path : new(path)
|
154
12
|
end
|
155
13
|
|
156
|
-
|
157
|
-
dest.shift if dest[0] == DOT
|
158
|
-
|
159
|
-
raise ArgumentError, "base directory may not contain '#{DOT_DOT}'" if base.include?(DOT_DOT)
|
160
|
-
|
161
|
-
path = base.fill(DOT_DOT) + dest
|
162
|
-
path = self.class.join(*path)
|
163
|
-
path = self.class.new(DOT) if path.empty?
|
164
|
-
|
165
|
-
path
|
14
|
+
alias :[] :glob
|
166
15
|
end
|
167
16
|
|
168
|
-
def
|
169
|
-
!!(
|
17
|
+
def is_virtual?
|
18
|
+
!!(VIRTUAL_REGEX =~ to_s)
|
170
19
|
end
|
171
20
|
|
172
|
-
def
|
173
|
-
|
21
|
+
def segments
|
22
|
+
path = to_s
|
23
|
+
array = path.split(File::SEPARATOR)
|
174
24
|
array.delete('')
|
175
|
-
array.insert(0,
|
25
|
+
array.insert(0, File::SEPARATOR) if path[0, 1] == File::SEPARATOR
|
26
|
+
array[0] += File::SEPARATOR if path[0, 3] =~ SEPARATOR_PAT
|
176
27
|
array
|
177
28
|
end
|
178
29
|
|
179
|
-
alias segments to_a
|
180
|
-
|
181
|
-
def to_path
|
182
|
-
self
|
183
|
-
end
|
184
|
-
|
185
|
-
def to_s
|
186
|
-
"#{self}"
|
187
|
-
end
|
188
|
-
|
189
|
-
alias to_str to_s
|
190
|
-
|
191
|
-
def unlink
|
192
|
-
Dir.unlink(self)
|
193
|
-
true
|
194
|
-
rescue Errno::ENOTDIR
|
195
|
-
File.unlink(self)
|
196
|
-
true
|
197
|
-
end
|
198
|
-
end
|
199
|
-
|
200
|
-
class Pathname
|
201
|
-
def self.[](pattern)
|
202
|
-
Dir[pattern].map! {|d| FSSM::Pathname.new(d) }
|
203
|
-
end
|
204
|
-
|
205
|
-
def self.pwd
|
206
|
-
FSSM::Pathname.new(Dir.pwd)
|
207
|
-
end
|
208
|
-
|
209
|
-
def entries
|
210
|
-
Dir.entries(self).map! {|e| FSSM::Pathname.new(e) }
|
211
|
-
end
|
212
|
-
|
213
|
-
def mkdir(mode = 0777)
|
214
|
-
Dir.mkdir(self, mode)
|
215
|
-
end
|
216
|
-
|
217
|
-
def opendir(&blk)
|
218
|
-
Dir.open(self, &blk)
|
219
|
-
end
|
220
|
-
|
221
|
-
def rmdir
|
222
|
-
Dir.rmdir(self)
|
223
|
-
end
|
224
|
-
|
225
|
-
def self.glob(pattern, flags = 0)
|
226
|
-
dirs = Dir.glob(pattern, flags)
|
227
|
-
dirs.map! {|path| FSSM::Pathname.new(path) }
|
228
|
-
|
229
|
-
if block_given?
|
230
|
-
dirs.each {|dir| yield dir }
|
231
|
-
nil
|
232
|
-
else
|
233
|
-
dirs
|
234
|
-
end
|
235
|
-
end
|
236
|
-
|
237
30
|
def glob(pattern, flags = 0, &block)
|
238
31
|
patterns = [pattern].flatten
|
239
|
-
patterns.map! {|p| self.class.glob(
|
32
|
+
patterns.map! { |p| self.class.glob(to_s + p, flags, &block) }
|
240
33
|
patterns.flatten
|
241
34
|
end
|
242
|
-
|
243
|
-
def chdir
|
244
|
-
blk = lambda { yield self } if block_given?
|
245
|
-
Dir.chdir(self, &blk)
|
246
|
-
end
|
247
|
-
end
|
248
|
-
|
249
|
-
class Pathname
|
250
|
-
def blockdev?
|
251
|
-
FileTest.blockdev?(self)
|
252
|
-
end
|
253
|
-
|
254
|
-
def chardev?
|
255
|
-
FileTest.chardev?(self)
|
256
|
-
end
|
257
|
-
|
258
|
-
def directory?
|
259
|
-
FileTest.directory?(self)
|
260
|
-
end
|
261
|
-
|
262
|
-
def executable?
|
263
|
-
FileTest.executable?(self)
|
264
|
-
end
|
265
|
-
|
266
|
-
def executable_real?
|
267
|
-
FileTest.executable_real?(self)
|
268
|
-
end
|
269
|
-
|
270
|
-
def exists?
|
271
|
-
FileTest.exists?(self)
|
272
|
-
end
|
273
|
-
|
274
|
-
def file?
|
275
|
-
FileTest.file?(self)
|
276
|
-
end
|
277
|
-
|
278
|
-
def grpowned?
|
279
|
-
FileTest.grpowned?(self)
|
280
|
-
end
|
281
|
-
|
282
|
-
def owned?
|
283
|
-
FileTest.owned?(self)
|
284
|
-
end
|
285
|
-
|
286
|
-
def pipe?
|
287
|
-
FileTest.pipe?(self)
|
288
|
-
end
|
289
|
-
|
290
|
-
def readable?
|
291
|
-
FileTest.readable?(self)
|
292
|
-
end
|
293
|
-
|
294
|
-
def readable_real?
|
295
|
-
FileTest.readable_real?(self)
|
296
|
-
end
|
297
|
-
|
298
|
-
def setgid?
|
299
|
-
FileTest.setgit?(self)
|
300
|
-
end
|
301
|
-
|
302
|
-
def setuid?
|
303
|
-
FileTest.setuid?(self)
|
304
|
-
end
|
305
|
-
|
306
|
-
def socket?
|
307
|
-
FileTest.socket?(self)
|
308
|
-
end
|
309
|
-
|
310
|
-
def sticky?
|
311
|
-
FileTest.sticky?(self)
|
312
|
-
end
|
313
|
-
|
314
|
-
def symlink?
|
315
|
-
FileTest.symlink?(self)
|
316
|
-
end
|
317
|
-
|
318
|
-
def world_readable?
|
319
|
-
FileTest.world_readable?(self)
|
320
|
-
end
|
321
|
-
|
322
|
-
def world_writable?
|
323
|
-
FileTest.world_writable?(self)
|
324
|
-
end
|
325
|
-
|
326
|
-
def writable?
|
327
|
-
FileTest.writable?(self)
|
328
|
-
end
|
329
|
-
|
330
|
-
def writable_real?
|
331
|
-
FileTest.writable_real?(self)
|
332
|
-
end
|
333
|
-
|
334
|
-
def zero?
|
335
|
-
FileTest.zero?(self)
|
336
|
-
end
|
337
|
-
end
|
338
|
-
|
339
|
-
class Pathname
|
340
|
-
def atime
|
341
|
-
File.atime(self)
|
342
|
-
end
|
343
|
-
|
344
|
-
def ctime
|
345
|
-
File.ctime(self)
|
346
|
-
end
|
347
|
-
|
348
|
-
def ftype
|
349
|
-
File.ftype(self)
|
350
|
-
end
|
351
|
-
|
352
|
-
def lstat
|
353
|
-
File.lstat(self)
|
354
|
-
end
|
355
|
-
|
356
|
-
def mtime
|
357
|
-
File.mtime(self)
|
358
|
-
end
|
359
|
-
|
360
|
-
def stat
|
361
|
-
File.stat(self)
|
362
|
-
end
|
363
|
-
|
364
|
-
def utime(atime, mtime)
|
365
|
-
File.utime(self, atime, mtime)
|
366
|
-
end
|
367
|
-
end
|
368
|
-
|
369
|
-
class Pathname
|
370
|
-
def self.join(*parts)
|
371
|
-
last_part = FSSM::Pathname.new(parts.last)
|
372
|
-
return last_part if last_part.absolute?
|
373
|
-
FSSM::Pathname.new(File.join(*parts.reject {|p| p.empty? }))
|
374
|
-
end
|
375
|
-
|
376
|
-
def basename
|
377
|
-
self.class.new(File.basename(self))
|
378
|
-
end
|
379
|
-
|
380
|
-
def chmod(mode)
|
381
|
-
File.chmod(mode, self)
|
382
|
-
end
|
383
|
-
|
384
|
-
def chown(owner, group)
|
385
|
-
File.chown(owner, group, self)
|
386
|
-
end
|
387
|
-
|
388
|
-
def dirname
|
389
|
-
self.class.new(File.dirname(self))
|
390
|
-
end
|
391
|
-
|
392
|
-
def expand_path(from = nil)
|
393
|
-
self.class.new(File.expand_path(self, from))
|
394
|
-
end
|
395
|
-
|
396
|
-
def extname
|
397
|
-
File.extname(self)
|
398
|
-
end
|
399
|
-
|
400
|
-
def fnmatch?(pat, flags = 0)
|
401
|
-
File.fnmatch(pat, self, flags)
|
402
|
-
end
|
403
|
-
|
404
|
-
def join(*parts)
|
405
|
-
self.class.join(self, *parts)
|
406
|
-
end
|
407
|
-
|
408
|
-
def lchmod(mode)
|
409
|
-
File.lchmod(mode, self)
|
410
|
-
end
|
411
|
-
|
412
|
-
def lchown(owner, group)
|
413
|
-
File.lchown(owner, group, self)
|
414
|
-
end
|
415
|
-
|
416
|
-
def link(to)
|
417
|
-
File.link(self, to)
|
418
|
-
end
|
419
|
-
|
420
|
-
def open(mode = 'r', perm = nil, &blk)
|
421
|
-
File.open(self, mode, perm, &blk)
|
422
|
-
end
|
423
|
-
|
424
|
-
def readlink
|
425
|
-
self.class.new(File.readlink(self))
|
426
|
-
end
|
427
|
-
|
428
|
-
def rename(to)
|
429
|
-
File.rename(self, to)
|
430
|
-
replace(to)
|
431
|
-
end
|
432
|
-
|
433
|
-
def size
|
434
|
-
File.size(self)
|
435
|
-
end
|
436
|
-
|
437
|
-
def size?
|
438
|
-
File.size?(self)
|
439
|
-
end
|
440
|
-
|
441
|
-
def split
|
442
|
-
File.split(self).map {|part| FSSM::Pathname.new(part) }
|
443
|
-
end
|
444
|
-
|
445
|
-
def symlink(to)
|
446
|
-
File.symlink(self, to)
|
447
|
-
end
|
448
|
-
|
449
|
-
def truncate
|
450
|
-
File.truncate(self)
|
451
|
-
end
|
452
|
-
end
|
453
|
-
|
454
|
-
class Pathname
|
455
|
-
def mkpath
|
456
|
-
self.class.new(FileUtils.mkpath(self))
|
457
|
-
end
|
458
|
-
|
459
|
-
def rmtree
|
460
|
-
self.class.new(FileUtils.rmtree(self).first)
|
461
|
-
end
|
462
|
-
|
463
|
-
def touch
|
464
|
-
self.class.new(FileUtils.touch(self).first)
|
465
|
-
end
|
466
|
-
end
|
467
|
-
|
468
|
-
class Pathname
|
469
|
-
def each_line(sep = $/, &blk)
|
470
|
-
IO.foreach(self, sep, &blk)
|
471
|
-
end
|
472
|
-
|
473
|
-
def read(len = nil, off = 0)
|
474
|
-
IO.read(self, len, off)
|
475
|
-
end
|
476
|
-
|
477
|
-
def readlines(sep = $/)
|
478
|
-
IO.readlines(self, sep)
|
479
|
-
end
|
480
|
-
|
481
|
-
def sysopen(mode = 'r', perm = nil)
|
482
|
-
IO.sysopen(self, mode, perm)
|
483
|
-
end
|
484
|
-
end
|
485
|
-
|
486
|
-
class Pathname
|
487
|
-
def find
|
488
|
-
Find.find(self) {|path| yield FSSM::Pathname.new(path) }
|
489
|
-
end
|
490
|
-
end
|
491
|
-
|
492
|
-
class Pathname
|
493
|
-
class << self
|
494
|
-
alias getwd pwd
|
495
|
-
end
|
496
|
-
|
497
|
-
alias absolute expand_path
|
498
|
-
alias delete unlink
|
499
|
-
alias exist? exists?
|
500
|
-
alias fnmatch fnmatch?
|
501
35
|
end
|
502
36
|
end
|