Class: Slinky::ManifestDir
- Inherits:
-
Object
- Object
- Slinky::ManifestDir
- Defined in:
- lib/slinky/manifest.rb
Instance Attribute Summary collapse
-
#children ⇒ Object
Returns the value of attribute children.
-
#dir ⇒ Object
Returns the value of attribute dir.
-
#files ⇒ Object
Returns the value of attribute files.
-
#parent ⇒ Object
Returns the value of attribute parent.
Instance Method Summary collapse
-
#add_child(path) ⇒ Object
Adds a child directory.
-
#add_file(path) ⇒ Object
Adds a file on the filesystem to the manifest.
- #build ⇒ Object
-
#find_by_path(path, allow_multiple = false) ⇒ ManifestFile
Finds the file at the given path in the directory if one exists, otherwise nil.
-
#initialize(dir, parent, build_dir, manifest) ⇒ ManifestDir
constructor
A new instance of ManifestDir.
-
#remove_file(mf) ⇒ Object
Removes a file from the manifest.
- #to_s ⇒ Object
Constructor Details
#initialize(dir, parent, build_dir, manifest) ⇒ ManifestDir
Returns a new instance of ManifestDir.
376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 |
# File 'lib/slinky/manifest.rb', line 376 def initialize dir, parent, build_dir, manifest @dir = dir @parent = parent @files = [] @children = [] @build_dir = Pathname.new(build_dir) @manifest = manifest Dir.glob("#{dir}/*").each do |path| # skip the build dir next if Pathname.new(File.(path)) == Pathname.new(build_dir) if File.directory? path add_child(path) else add_file(path) end end end |
Instance Attribute Details
#children ⇒ Object
Returns the value of attribute children.
375 376 377 |
# File 'lib/slinky/manifest.rb', line 375 def children @children end |
#dir ⇒ Object
Returns the value of attribute dir.
375 376 377 |
# File 'lib/slinky/manifest.rb', line 375 def dir @dir end |
#files ⇒ Object
Returns the value of attribute files.
375 376 377 |
# File 'lib/slinky/manifest.rb', line 375 def files @files end |
#parent ⇒ Object
Returns the value of attribute parent.
375 376 377 |
# File 'lib/slinky/manifest.rb', line 375 def parent @parent end |
Instance Method Details
#add_child(path) ⇒ Object
Adds a child directory
444 445 446 447 448 449 450 451 |
# File 'lib/slinky/manifest.rb', line 444 def add_child path if File.directory? path build_dir = (@build_dir + File.basename(path)).cleanpath md = ManifestDir.new(path, self, build_dir, @manifest) @children << md md end end |
#add_file(path) ⇒ Object
Adds a file on the filesystem to the manifest
456 457 458 459 460 461 462 463 464 465 466 467 468 469 |
# File 'lib/slinky/manifest.rb', line 456 def add_file path file = File.basename(path) full_path = Pathname.new(@dir).join(file).to_s if File.exists?(full_path) && !file.start_with?(".") mf = ManifestFile.new(full_path, @build_dir, @manifest, self) # we don't want two files with the same source extant_file = @files.find{|f| f.source == mf.source} if extant_file @files.delete(extant_file) end @files << mf mf end end |
#build ⇒ Object
478 479 480 481 482 483 484 485 486 487 488 489 |
# File 'lib/slinky/manifest.rb', line 478 def build unless File.directory?(@build_dir.to_s) FileUtils.mkdir(@build_dir.to_s) end if (@files + @children).map {|m| m.build}.any? @build_dir else FileUtils.rmdir(@build_dir.to_s) nil end end |
#find_by_path(path, allow_multiple = false) ⇒ ManifestFile
Finds the file at the given path in the directory if one exists, otherwise nil.
403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 |
# File 'lib/slinky/manifest.rb', line 403 def find_by_path path, allow_multiple = false if path[0] == '/' # refer absolute paths to the manifest return @manifest.find_by_path(path[1..-1], allow_multiple) end components = path.to_s.split(File::SEPARATOR).reject{|x| x == ""} case components.size when 0 [self] when 1 path = [@dir, components[0]].join(File::SEPARATOR) if (File.directory?(path) rescue false) c = @children.find{|d| Pathname.new(d.dir).cleanpath == Pathname.new(path).cleanpath } unless c c = add_child(path) end [c] else @files.find_all{|f| f.matches? components[0], allow_multiple} end else if components[0] == ".." @parent.find_by_path components[1..-1].join(File::SEPARATOR) else child = @children.find{|d| Pathname.new(d.dir).basename.to_s == components[0] } if child child.find_by_path(components[1..-1].join(File::SEPARATOR), allow_multiple) else [] end end end end |
#remove_file(mf) ⇒ Object
Removes a file from the manifest
474 475 476 |
# File 'lib/slinky/manifest.rb', line 474 def remove_file mf @files.delete(mf) end |
#to_s ⇒ Object
491 492 493 |
# File 'lib/slinky/manifest.rb', line 491 def to_s "<ManifestDir:'#{@dir}'>" end |