Class: Buildr::ArchiveTask::Path
- Defined in:
- lib/buildr/packaging/archive.rb
Overview
Which files go where. All the rules for including, excluding and merging files are handled by this object.
Instance Attribute Summary collapse
-
#root ⇒ Object
readonly
Returns the archive from this path.
Instance Method Summary collapse
-
#add_files(file_map) ⇒ Object
:nodoc:.
-
#contain?(*files) ⇒ Boolean
:call-seq: contain(file*) => boolean.
-
#empty? ⇒ Boolean
:call-seq: empty? => boolean.
-
#entry(name) ⇒ Object
:call-seq: entry(name) => ZipEntry.
-
#exclude(*files) ⇒ Object
:call-seq: exclude(*files) => self.
-
#exist? ⇒ Boolean
:call-seq: exist => boolean.
-
#include(*args) ⇒ Object
(also: #add, #<<)
:call-seq: include(*files) => self include(*files, :path=>path) => self include(file, :as=>name) => self include(:from=>path) => self include(*files, :merge=>true) => self.
-
#initialize(root, path) ⇒ Path
constructor
A new instance of Path.
-
#merge(*args) ⇒ Object
:call-seq: merge(*files) => Merge merge(*files, :path=>name) => Merge.
-
#path(path) ⇒ Object
Returns a Path relative to this one.
-
#sources ⇒ Object
Returns all the source files.
- #to_s ⇒ Object
Constructor Details
#initialize(root, path) ⇒ Path
Returns a new instance of Path.
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/buildr/packaging/archive.rb', line 29 def initialize(root, path) @root = root @path = path.empty? ? path : "#{path}/" @includes = FileList[] @excludes = [] # Expand source files added to this path. = proc { @includes.map{ |file| file.to_s }.uniq } @sources = [ ] # Add files and directories added to this path. @actions = [] << proc do |file_map| .call.each do |path| unless excluded?(path) if File.directory?(path) in_directory path do |file, rel_path| dest = "#{@path}#{rel_path}" trace "Adding #{dest}" file_map[dest] = file end else trace "Adding #{@path}#{File.basename(path)}" file_map["#{@path}#{File.basename(path)}"] = path end end end end end |
Instance Attribute Details
Instance Method Details
#add_files(file_map) ⇒ Object
:nodoc:
131 132 133 |
# File 'lib/buildr/packaging/archive.rb', line 131 def add_files(file_map) #:nodoc: @actions.each { |action| action.call(file_map) } end |
#contain?(*files) ⇒ Boolean
:call-seq:
contain(file*) => boolean
Returns true if this ZIP file path contains all the specified files. You can use relative file names and glob patterns (using *, **, etc).
157 158 159 |
# File 'lib/buildr/packaging/archive.rb', line 157 def contain?(*files) files.all? { |file| entries.detect { |entry| File.fnmatch(file, entry.to_s) } } end |
#empty? ⇒ Boolean
:call-seq:
empty? => boolean
Returns true if this path is empty (has no other entries inside).
148 149 150 |
# File 'lib/buildr/packaging/archive.rb', line 148 def empty? entries.all? { |entry| entry.empty? } end |
#entry(name) ⇒ Object
:call-seq:
entry(name) => ZipEntry
Returns a ZIP file entry. You can use this to check if the entry exists and its contents, for example:
package(:jar).path("META-INF").entry("LICENSE").should contain(/Apache Software License/)
167 168 169 |
# File 'lib/buildr/packaging/archive.rb', line 167 def entry(name) root.entry("#{@path}#{name}") end |
#exclude(*files) ⇒ Object
:call-seq:
exclude(*files) => self
94 95 96 97 98 99 |
# File 'lib/buildr/packaging/archive.rb', line 94 def exclude(*files) files = files.flatten.map(&:to_s) @excludes |= files @excludes |= files.reject { |f| f =~ /\*$/ }.map { |f| "#{f}/*" } self end |
#exist? ⇒ Boolean
:call-seq:
exist => boolean
Returns true if this path exists. This only works if the path has any entries in it, so exist on path happens to be the opposite of empty.
140 141 142 |
# File 'lib/buildr/packaging/archive.rb', line 140 def exist? !entries.empty? end |
#include(*args) ⇒ Object Also known as: add, <<
:call-seq:
include(*files) => self
include(*files, :path=>path) => self
include(file, :as=>name) => self
include(:from=>path) => self
include(*files, :merge=>true) => self
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/buildr/packaging/archive.rb', line 62 def include(*args) = args.pop if Hash === args.last files = args.flatten raise 'AchiveTask.include() values should not include nil' if files.include? nil if .nil? || .empty? @includes.include *files.flatten elsif [:path] sans_path = .reject { |k,v| k == :path } path([:path]).include *files + [sans_path] elsif [:as] raise 'You can only use the :as option in combination with the :path option' unless .size == 1 raise 'You can only use one file with the :as option' unless files.size == 1 include_as files.first.to_s, [:as] elsif [:from] raise 'You can only use the :from option in combination with the :path option' unless .size == 1 raise 'You cannot use the :from option with file names' unless files.empty? fail 'AchiveTask.include() :from value should not be nil' if [[:from]].flatten.include? nil [[:from]].flatten.each { |path| include_as path.to_s, '.' } elsif [:merge] raise 'You can only use the :merge option in combination with the :path option' unless .size == 1 files.each { |file| merge file } else raise "Unrecognized option #{.keys.join(', ')}" end self end |
#merge(*args) ⇒ Object
104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/buildr/packaging/archive.rb', line 104 def merge(*args) = Hash === args.last ? args.pop : {} files = args.flatten , :path raise ArgumentError, "Expected at least one file to merge" if files.empty? path = [:path] || @path = files.collect do |file| @sources << proc { file.to_s } = ZipExpander.new(file) @actions << proc { |file_map| .(file_map, path) } end Merge.new() end |
#path(path) ⇒ Object
Returns a Path relative to this one.
120 121 122 123 124 |
# File 'lib/buildr/packaging/archive.rb', line 120 def path(path) return self if path.nil? return root.path(path[1..-1]) if path[0] == ?/ root.path("#{@path}#{path}") end |
#sources ⇒ Object
Returns all the source files.
127 128 129 |
# File 'lib/buildr/packaging/archive.rb', line 127 def sources #:nodoc: @sources.map{ |source| source.call }.flatten end |
#to_s ⇒ Object
171 172 173 |
# File 'lib/buildr/packaging/archive.rb', line 171 def to_s @path end |