haml-edge 2.3.186 → 2.3.187

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. data/EDGE_GEM_VERSION +1 -1
  2. data/VERSION +1 -1
  3. data/lib/haml/exec.rb +94 -18
  4. data/lib/haml/helpers.rb +3 -1
  5. data/lib/sass/engine.rb +1 -1
  6. data/lib/sass/script/bool.rb +1 -1
  7. data/lib/sass/script/color.rb +1 -1
  8. data/lib/sass/script/funcall.rb +2 -2
  9. data/lib/sass/script/interpolation.rb +5 -5
  10. data/lib/sass/script/literal.rb +1 -1
  11. data/lib/sass/script/node.rb +10 -1
  12. data/lib/sass/script/number.rb +1 -1
  13. data/lib/sass/script/operation.rb +5 -5
  14. data/lib/sass/script/string.rb +12 -5
  15. data/lib/sass/script/unary_operation.rb +3 -3
  16. data/lib/sass/script/variable.rb +2 -2
  17. data/lib/sass/scss/css_parser.rb +1 -0
  18. data/lib/sass/scss/parser.rb +45 -25
  19. data/lib/sass/scss/rx.rb +1 -0
  20. data/lib/sass/tree/for_node.rb +1 -1
  21. data/lib/sass/tree/if_node.rb +1 -1
  22. data/lib/sass/tree/mixin_def_node.rb +3 -3
  23. data/lib/sass/tree/mixin_node.rb +2 -2
  24. data/lib/sass/tree/node.rb +8 -0
  25. data/lib/sass/tree/prop_node.rb +17 -16
  26. data/lib/sass/tree/rule_node.rb +2 -2
  27. data/lib/sass/tree/variable_node.rb +1 -1
  28. data/lib/sass/tree/while_node.rb +1 -1
  29. data/test/sass/conversion_test.rb +47 -0
  30. data/test/sass/scss/css_test.rb +3 -3
  31. data/test/sass/scss/scss_test.rb +40 -0
  32. metadata +2 -37
  33. data/test/haml/spec/README.md +0 -97
  34. data/test/haml/spec/lua_haml_spec.lua +0 -30
  35. data/test/haml/spec/ruby_haml_test.rb +0 -19
  36. data/test/haml/spec/tests.json +0 -534
  37. data/vendor/fssm/LICENSE +0 -20
  38. data/vendor/fssm/README.markdown +0 -55
  39. data/vendor/fssm/Rakefile +0 -59
  40. data/vendor/fssm/VERSION.yml +0 -5
  41. data/vendor/fssm/example.rb +0 -9
  42. data/vendor/fssm/fssm.gemspec +0 -77
  43. data/vendor/fssm/lib/fssm/backends/fsevents.rb +0 -36
  44. data/vendor/fssm/lib/fssm/backends/inotify.rb +0 -26
  45. data/vendor/fssm/lib/fssm/backends/polling.rb +0 -25
  46. data/vendor/fssm/lib/fssm/backends/rubycocoa/fsevents.rb +0 -131
  47. data/vendor/fssm/lib/fssm/monitor.rb +0 -26
  48. data/vendor/fssm/lib/fssm/path.rb +0 -91
  49. data/vendor/fssm/lib/fssm/pathname.rb +0 -502
  50. data/vendor/fssm/lib/fssm/state/directory.rb +0 -57
  51. data/vendor/fssm/lib/fssm/state/file.rb +0 -24
  52. data/vendor/fssm/lib/fssm/support.rb +0 -63
  53. data/vendor/fssm/lib/fssm/tree.rb +0 -176
  54. data/vendor/fssm/lib/fssm.rb +0 -33
  55. data/vendor/fssm/profile/prof-cache.rb +0 -40
  56. data/vendor/fssm/profile/prof-fssm-pathname.html +0 -1231
  57. data/vendor/fssm/profile/prof-pathname.rb +0 -68
  58. data/vendor/fssm/profile/prof-plain-pathname.html +0 -988
  59. data/vendor/fssm/profile/prof.html +0 -2379
  60. data/vendor/fssm/spec/path_spec.rb +0 -75
  61. data/vendor/fssm/spec/root/duck/quack.txt +0 -0
  62. data/vendor/fssm/spec/root/file.css +0 -0
  63. data/vendor/fssm/spec/root/file.rb +0 -0
  64. data/vendor/fssm/spec/root/file.yml +0 -0
  65. data/vendor/fssm/spec/root/moo/cow.txt +0 -0
  66. data/vendor/fssm/spec/spec_helper.rb +0 -14
@@ -1,502 +0,0 @@
1
- require 'fileutils'
2
- require 'find'
3
-
4
- module FSSM
5
- class Pathname < String
6
- SYMLOOP_MAX = 8
7
-
8
- ROOT = '/'.freeze
9
- DOT = '.'.freeze
10
- DOT_DOT = '..'.freeze
11
-
12
- class << self
13
- def for(path)
14
- path.is_a?(::FSSM::Pathname) ? path : new("#{path}")
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
154
- end
155
-
156
- base.shift if base[0] == DOT
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
166
- end
167
-
168
- def root?
169
- !!(self =~ %r{^#{ROOT}+$})
170
- end
171
-
172
- def to_a
173
- array = to_s.split(File::SEPARATOR)
174
- array.delete('')
175
- array.insert(0, ROOT) if absolute?
176
- array
177
- end
178
-
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
- def glob(pattern, flags = 0, &block)
238
- patterns = [pattern].flatten
239
- patterns.map! {|p| self.class.glob(self.to_s + p, flags, &block) }
240
- patterns.flatten
241
- 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
- end
502
- end
@@ -1,57 +0,0 @@
1
- module FSSM::State
2
- class Directory
3
- attr_reader :path
4
-
5
- def initialize(path)
6
- @path = path
7
- @cache = FSSM::Tree::Cache.new
8
- end
9
-
10
- def refresh(base=nil, skip_callbacks=false)
11
- previous, current = recache(base || @path.to_pathname)
12
-
13
- unless skip_callbacks
14
- deleted(previous, current)
15
- created(previous, current)
16
- modified(previous, current)
17
- end
18
- end
19
-
20
- private
21
-
22
- def created(previous, current)
23
- (current.keys - previous.keys).each {|created| @path.create(created)}
24
- end
25
-
26
- def deleted(previous, current)
27
- (previous.keys - current.keys).each {|deleted| @path.delete(deleted)}
28
- end
29
-
30
- def modified(previous, current)
31
- (current.keys & previous.keys).each do |file|
32
- @path.update(file) if (current[file] <=> previous[file]) != 0
33
- end
34
- end
35
-
36
- def recache(base)
37
- base = FSSM::Pathname.for(base)
38
- previous = @cache.files
39
- snapshot(base)
40
- current = @cache.files
41
- [previous, current]
42
- end
43
-
44
- def snapshot(base)
45
- base = FSSM::Pathname.for(base)
46
- @cache.unset(base)
47
- @path.glob.each {|glob| add_glob(base, glob)}
48
- end
49
-
50
- def add_glob(base, glob)
51
- FSSM::Pathname.glob(base.join(glob).to_s).each do |fn|
52
- @cache.set(fn)
53
- end
54
- end
55
-
56
- end
57
- end
@@ -1,24 +0,0 @@
1
- module FSSM::State
2
- class File
3
- attr_reader :path
4
-
5
- def initialize(path)
6
- @path = path
7
- end
8
-
9
- def refresh(base=nil, skip_callbacks=false)
10
- base ||= @path.to_pathname
11
- used_to_exist, @exists = @exists, base.exists?
12
- # this handles bad symlinks without failing. why handle bad symlinks at
13
- # all? well, we could still be interested in their creation and deletion.
14
- old_mtime, @mtime = @mtime, base.symlink? ? Time.at(0) : base.mtime if @exists
15
-
16
- unless skip_callbacks
17
- @path.delete(@path.to_s) if used_to_exist && !@exists
18
- @path.create(@path.to_s) if !used_to_exist && @exists
19
- @path.update(@path.to_s) if used_to_exist && @exists && old_mtime != @mtime
20
- end
21
- end
22
-
23
- end
24
- end
@@ -1,63 +0,0 @@
1
- require 'rbconfig'
2
-
3
- module FSSM::Support
4
- class << self
5
- def backend
6
- @@backend ||= case
7
- when mac? && !jruby? && carbon_core?
8
- 'FSEvents'
9
- when linux? && rb_inotify?
10
- 'Inotify'
11
- else
12
- 'Polling'
13
- end
14
- end
15
-
16
- def jruby?
17
- defined?(JRUBY_VERSION)
18
- end
19
-
20
- def mac?
21
- Config::CONFIG['target_os'] =~ /darwin/i
22
- end
23
-
24
- def linux?
25
- Config::CONFIG['target_os'] =~ /linux/i
26
- end
27
-
28
- def carbon_core?
29
- begin
30
- require 'osx/foundation'
31
- OSX.require_framework '/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework'
32
- true
33
- rescue LoadError
34
- STDERR.puts("Warning: Unable to load CarbonCore. FSEvents will be unavailable.")
35
- false
36
- end
37
- end
38
-
39
- def rb_inotify?
40
- found = begin
41
- require 'rb-inotify'
42
- if defined?(INotify::VERSION)
43
- version = INotify::VERSION
44
- version[0] > 0 || version[1] >= 6
45
- end
46
- rescue LoadError
47
- false
48
- end
49
- STDERR.puts("Warning: Unable to load rb-inotify >= 0.5.1. Inotify will be unavailable.") unless found
50
- found
51
- end
52
-
53
- def use_block(context, block)
54
- return if block.nil?
55
- if block.arity == 1
56
- block.call(context)
57
- else
58
- context.instance_eval(&block)
59
- end
60
- end
61
-
62
- end
63
- end