Class: Albacore::NugetModel::Package
- Inherits:
-
Object
- Object
- Albacore::NugetModel::Package
- Extended by:
- Logging
- Includes:
- Logging
- Defined in:
- lib/albacore/nuget_model.rb
Overview
the nuget package element writer
Instance Attribute Summary collapse
-
#files ⇒ Object
the files is something enumerable that corresponds to the file elements inside '//package/files'.
-
#metadata ⇒ Object
the metadata corresponds to the metadata element of the nuspec.
Class Method Summary collapse
-
.from_xml(xml) ⇒ Object
read the nuget specification from a nuspec file.
-
.from_xxproj(proj, *opts) ⇒ Object
Read the nuget specification from a xxproj instance (e.g. csproj, fsproj) Options: - symbols Specifies the version to use for constructing the nuspec's lib folder - known_projects - configuration - project_dependencies Specifies whether to follow the project dependencies.
-
.from_xxproj_file(file, *opts) ⇒ Object
read the nuget specification from a xxproj file (e.g. csproj, fsproj).
- .get_output_path(proj, opts) ⇒ Object
Instance Method Summary collapse
-
#add_file(src, target, exclude = nil) ⇒ Object
add a file to the instance.
-
#initialize(metadata = nil, files = nil) ⇒ Package
constructor
creates a new nuspec package instance.
-
#merge_with(other) ⇒ Object
creates a new Package/Metadata by overriding data in this instance with data from passed instance.
-
#remove_file(src) ⇒ Object
remove the file denoted by src.
- #to_s ⇒ Object
- #to_template ⇒ Object
-
#to_xml ⇒ Object
gets the current package as a xml node.
-
#to_xml_builder ⇒ Object
gets the current package as a xml builder.
-
#with_metadata {|@metadata| ... } ⇒ Object
do something with the metadata.
Methods included from Logging
debug, err, error, fatal, info, puts, trace, warn
Constructor Details
#initialize(metadata = nil, files = nil) ⇒ Package
creates a new nuspec package instance
348 349 350 351 |
# File 'lib/albacore/nuget_model.rb', line 348 def initialize = nil, files = nil @metadata = || Metadata.new @files = files || [] end |
Instance Attribute Details
#files ⇒ Object
the files is something enumerable that corresponds to the file elements inside '//package/files'.
345 346 347 |
# File 'lib/albacore/nuget_model.rb', line 345 def files @files end |
#metadata ⇒ Object
the metadata corresponds to the metadata element of the nuspec
341 342 343 |
# File 'lib/albacore/nuget_model.rb', line 341 def @metadata end |
Class Method Details
.from_xml(xml) ⇒ Object
read the nuget specification from a nuspec file
439 440 441 442 443 444 445 446 447 448 449 |
# File 'lib/albacore/nuget_model.rb', line 439 def self.from_xml xml ns = { ng: 'http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd' } parser = Nokogiri::XML(xml) = Metadata.from_xml(parser.xpath('.//ng:metadata', ns)) files = parser. xpath('.//ng:files', ns). children. reject { |n| n.text? or n['src'].nil? }. collect { |n| FileItem.new n['src'], n['target'], n['exclude'] } Package.new , files end |
.from_xxproj(proj, *opts) ⇒ Object
Read the nuget specification from a xxproj instance (e.g. csproj, fsproj) Options:
- symbols Specifies the version to use for constructing the nuspec's lib folder
- known_projects
- configuration
- project_dependencies Specifies whether to follow the project dependencies. See nuget_model_spec.rb for examples of usage of this property.
- nuget_dependencies
467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 |
# File 'lib/albacore/nuget_model.rb', line 467 def self.from_xxproj proj, *opts opts = Map.(opts || {}). apply({ symbols: false, known_projects: Set.new, configuration: 'Debug', project_dependencies: true, verify_files: false, nuget_dependencies: true, framework_dependencies: true, metadata: Metadata.new }) trace { "#from_xxproj proj: '#{proj}' opts: #{opts} [nuget model: package]" } version = opts.get :version package = Package.new(opts.get(:metadata)) package..id = proj.id if proj.id package..title = proj.name if proj.name package..version = version if version package.. = proj. if proj. if opts.get :nuget_dependencies trace "adding nuget dependencies for id #{proj.id} [nuget model: package]" # add declared packages as dependencies proj.declared_packages.each do |p| # p is a Package debug "adding package dependency: #{proj.id} => #{p.id} at #{p.version}, fw #{p.target_framework} [nuget model: package]" package..add_dependency p.id, p.version, p.target_framework, group=true end end if opts.get :project_dependencies # add declared projects as dependencies proj. declared_projects. keep_if { |p| opts.get(:known_projects).include? p.id }. each do |p| # p is a Project debug "adding project dependency: #{proj.id} => #{p.id} at #{version}, fw #{p.target_frameworks.inspect} [nuget model: package]" p.target_frameworks.each do |fw| package..add_dependency p.id, version, fw, group=true end end end fd = opts.get :framework_dependencies if fd && fd.respond_to?(:each) fd.each { |n, p| package..add_framework_dependency p.id, p.version, p.target_framework, p.group } end debug "including files for frameworks #{proj.target_frameworks.inspect}" proj.target_frameworks.each do |fw| conf = opts.get(:configuration) proj.outputs(conf, fw).each do |output| lib_filepath = %W|lib #{fw}|.join(Albacore::Paths.separator) debug "adding output file #{output.path} => #{lib_filepath} [nuget model: package]" package.add_file output.path, lib_filepath end if opts.get :sources compile_files = proj.included_files.keep_if { |f| f.item_name == "compile" } debug "add compiled files: #{compile_files} [nuget model: package]" compile_files.each do |f| target = %W[src #{Albacore::Paths.normalise_slashes(f.include)}].join(Albacore::Paths.separator) package.add_file f.include, target end end end if opts.get :verify_files package.files.each do |file| file_path = File. file.src, proj.proj_path_base unless File.exists? file_path info "while building nuspec for proj id: #{proj.id}, file: #{file_path} => #{file.target} not found, removing from nuspec [nuget model: package]" package.remove_file file.src trace { "files: #{package.files.map { |f| f.src }.inspect} [nuget model: package]" } end end end package end |
.from_xxproj_file(file, *opts) ⇒ Object
read the nuget specification from a xxproj file (e.g. csproj, fsproj)
452 453 454 455 |
# File 'lib/albacore/nuget_model.rb', line 452 def self.from_xxproj_file file, *opts proj = Albacore::Project.new file from_xxproj proj, *opts end |
.get_output_path(proj, opts) ⇒ Object
554 555 556 557 558 559 |
# File 'lib/albacore/nuget_model.rb', line 554 def self.get_output_path proj, opts try = proj.try_output_path(opts.get(:configuration)) return try if try warn 'using fallback output path' proj.fallback_output_path end |
Instance Method Details
#add_file(src, target, exclude = nil) ⇒ Object
add a file to the instance
354 355 356 357 |
# File 'lib/albacore/nuget_model.rb', line 354 def add_file src, target, exclude = nil @files << FileItem.new(src, target, exclude) self end |
#merge_with(other) ⇒ Object
creates a new Package/Metadata by overriding data in this instance with data from passed instance
415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 |
# File 'lib/albacore/nuget_model.rb', line 415 def merge_with other m_next = @metadata.merge_with other. files_res = {} # my files @files.each { |f| files_res[f.src] = f } # overrides other.files.each { |f| files_res[f.src] = f } # result f_next = files_res.collect { |k, v| v } Package.new m_next, f_next end |
#remove_file(src) ⇒ Object
remove the file denoted by src
360 361 362 363 364 |
# File 'lib/albacore/nuget_model.rb', line 360 def remove_file src src = src.src if src.respond_to? :src # if passed an OpenStruct e.g. trace { "remove_file: removing file '#{src}' [nuget model: package]" } @files = @files.reject { |f| f.src == src } end |
#to_s ⇒ Object
431 432 433 |
# File 'lib/albacore/nuget_model.rb', line 431 def to_s "NugetModel::Package(files: #{@files.map(&:to_s)}, metadata: #{ @metadata.to_s })" end |
#to_template ⇒ Object
373 374 375 376 377 378 379 380 381 382 383 384 385 |
# File 'lib/albacore/nuget_model.rb', line 373 def to_template lines = @metadata.to_template unless @files.empty? lines << 'files' @files.each do |file| lines << " #{file.src} ==> #{file.target}" unless file.exclude lines << " !#{file.src}" if file.exclude end end lines end |
#to_xml ⇒ Object
gets the current package as a xml node
409 410 411 |
# File 'lib/albacore/nuget_model.rb', line 409 def to_xml to_xml_builder.to_xml end |
#to_xml_builder ⇒ Object
gets the current package as a xml builder
388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 |
# File 'lib/albacore/nuget_model.rb', line 388 def to_xml_builder md = Nokogiri::XML(@metadata.to_xml).at_css('metadata').to_xml Nokogiri::XML::Builder.new(encoding: 'utf-8') do |x| x.package(xmlns: 'http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd') { x << md unless @files.empty? x.files { @files.each do |f| if f.exclude x.file src: f.src, target: f.target, exclude: f.exclude else x.file src: f.src, target: f.target end end } end } end end |
#with_metadata {|@metadata| ... } ⇒ Object
do something with the metadata. returns the #self Package instance
368 369 370 371 |
# File 'lib/albacore/nuget_model.rb', line 368 def &block yield @metadata if block_given? self end |