class Rake::Funnel::Support::SpecsRemover::ProjectFiles
Public Class Methods
remove_specs_and_references(projects, references, specs)
click to toggle source
# File lib/rake/funnel/support/specs_remover.rb, line 12 def remove_specs_and_references(projects, references, specs) deleted = remove(projects, references, specs) projects = deleted.map { |e| e[:project] }.flatten.uniq packages = deleted.map { |e| e[:packages] }.flatten.uniq specs = deleted.map { |e| e[:specs] }.flatten.uniq [projects, packages, specs] end
Private Class Methods
normalize(path)
click to toggle source
# File lib/rake/funnel/support/specs_remover.rb, line 99 def normalize(path) path.gsub('\\', File::SEPARATOR) end
package_for(reference)
click to toggle source
# File lib/rake/funnel/support/specs_remover.rb, line 87 def package_for(reference) path = normalize(reference) Pathname.new(path).ascend do |p| break p.parent.basename.to_s if p.basename.to_s == 'lib' end end
remove(projects, references, specs)
click to toggle source
# File lib/rake/funnel/support/specs_remover.rb, line 24 def remove(projects, references, specs) # rubocop:disable Metrics/MethodLength Dir[*projects].map do |project| Trace.message("Processing #{project} with references #{references} and specs #{specs}") removed_references, removed_specs = with_document(project) do |xml| [remove_references(references, xml), remove_specs(specs, xml)] end { project: project, packages: resolve_package_names(removed_references), specs: resolve_paths(project, removed_specs) } end end
remove_references(references, xml)
click to toggle source
# File lib/rake/funnel/support/specs_remover.rb, line 50 def remove_references(references, xml) deleted = references.flat_map do |ref| query = "/Project//Reference[starts-with(lower-case(@Include), '#{ref.downcase}')]" xml.elements.delete_all(query) end deleted.each { |d| Trace.message("Removed references: #{d.inspect}") } deleted = deleted.flat_map do |d| d.get_elements('/HintPath').map(&:text) end deleted.each { |d| Trace.message("HintPaths: #{d}") } end
remove_specs(specs, xml)
click to toggle source
# File lib/rake/funnel/support/specs_remover.rb, line 65 def remove_specs(specs, xml) deleted = specs.map do |glob| query = "/Project//Compile[matches(lower-case(@Include), '#{glob}')]" xml.elements.delete_all(query) end deleted .flatten .map { |d| d.attributes['Include'] } .tap { |d| Trace.message("Removed specs: #{d}") } end
resolve_package_names(references)
click to toggle source
# File lib/rake/funnel/support/specs_remover.rb, line 83 def resolve_package_names(references) references.map { |r| package_for(r) }.compact end
resolve_paths(project, files)
click to toggle source
# File lib/rake/funnel/support/specs_remover.rb, line 95 def resolve_paths(project, files) files.map { |f| File.expand_path(File.join(File.dirname(project), normalize(f))) } end
save(project, xml)
click to toggle source
# File lib/rake/funnel/support/specs_remover.rb, line 77 def save(project, xml) File.open(project, 'w+') do |file| xml.write(output: file, ie_hack: true) end end
with_document(project) { |xml| ... }
click to toggle source
# File lib/rake/funnel/support/specs_remover.rb, line 40 def with_document(project) xml = REXML::Document.new(File.read(project), attribute_quote: :quote) removed = yield(xml) if block_given? save(project, xml) if [removed].flatten.compact.any? removed end