class Albacore::NugetModel::Metadata
the nuget xml metadata element writer
Attributes
set_fields[R]
gets the field symbols that have been set
Public Class Methods
from_xml(node)
click to toggle source
# File lib/albacore/nuget_model.rb, line 278 def self.from_xml node m = Metadata.new node.children.reject { |n| n.text? }.each do |n| if n.name == 'dependencies' n.children.reject { |n| n.text? }.each do |node| if node.name == 'group' node.children.reject { |n| n.text? }.each do |dep| tfw = node['targetFramework'] || '' m.add_dependency dep['id'], dep['version'], tfw, group=true end else m.add_dependency node['id'], node['version'], group=false end end elsif n.name == 'frameworkDependencies' n.children.reject { |n| n.text? }.each do |node| if node.name == 'group' node.children.reject { |n| n.text? }.each do |dep| tfw = node['targetFramework'] || '' m.add_framework_dependency dep['id'], dep['version'], tfw, group=true end else m.add_framework_dependency node['id'], node['version'], group=false end end else # just set the property m.send(:"#{underscore n.name}=", n.inner_text) end end m end
new(dependencies = nil, framework_assemblies = nil)
click to toggle source
initialise a new package data object
# File lib/albacore/nuget_model.rb, line 122 def initialize dependencies = nil, framework_assemblies = nil @set_fields = Set.new @dependencies = dependencies || Hash.new @framework_assemblies = framework_assemblies || Hash.new @has_group = false debug "creating new metadata with dependencies: #{dependencies} [nuget model: metadata]" unless dependencies.nil? debug "creating new metadata (same as prev) with fw asms: #{framework_assemblies} [nuget model: metadata]" unless framework_assemblies.nil? end
nuspec_field(*syms)
click to toggle source
# File lib/albacore/nuget_model.rb, line 43 def self.nuspec_field *syms syms.each do |sym| self.class_eval( %{def #{sym} @#{sym} end}) self.class_eval( %{def #{sym}= val @#{sym} = val @set_fields.add? :#{sym} end}) end end
pascal_case(str)
click to toggle source
# File lib/albacore/nuget_model.rb, line 311 def self.pascal_case str str = str.to_s unless str.respond_to? :split str = str.split('_').inject([]){ |buffer,e| buffer.push(buffer.empty? ? e : e.capitalize) }.join :"#{str}" end
underscore(str)
click to toggle source
# File lib/albacore/nuget_model.rb, line 317 def self.underscore str str.gsub(/::/, '/'). gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2'). gsub(/([a-z\d])([A-Z])/,'\1_\2'). tr("-", "_"). downcase end
Public Instance Methods
add_dependency(id, version, target_framework = '', group = true)
click to toggle source
add a dependency to the package; id and version
# File lib/albacore/nuget_model.rb, line 133 def add_dependency id, version, target_framework = '', group = true guard_groups_or_not group extra = (target_framework || '') == '' ? '' : "|#{target_framework}" @has_group ||= group @dependencies["#{id}#{extra}"] = IdVersion.new id, version, group, target_framework end
add_framework_dependency(id, version, target_framework = '', group = true)
click to toggle source
add a framework dependency for the package
# File lib/albacore/nuget_model.rb, line 141 def add_framework_dependency id, version, target_framework = '', group = true guard_groups_or_not group @has_group ||= group @framework_assemblies[id] = IdVersion.new id, version, group, target_framework end
merge_with(other)
click to toggle source
# File lib/albacore/nuget_model.rb, line 246 def merge_with other raise ArgumentError, 'other is nil' if other.nil? raise ArgumentError, 'other is wrong type' unless other.is_a? Metadata trace { "#{self} merging with #{other} [nuget model: metadata]" } deps = @dependencies.clone.merge(other.dependencies) fw_asms = @framework_assemblies.clone.merge(other.framework_assemblies) m_next = Metadata.new deps, fw_asms # set all my fields to the new instance @set_fields.each do |field| debug "setting field '#{field}' to be '#{send(field)}' [nuget model: metadata]" m_next.send(:"#{field}=", send(field)) end # set all other's fields to the new instance, overriding mine other.set_fields.each do |field| debug "setting field '#{field}' to be '#{send(field)}' [nuget model: metadata]" m_next.send(:"#{field}=", other.send(field)) end m_next end
to_s()
click to toggle source
# File lib/albacore/nuget_model.rb, line 272 def to_s "NugetModel::Metadata(#{ @set_fields.map { |f| "#{f}=#{send(f)}" }.join(', ') })" end
to_template()
click to toggle source
# File lib/albacore/nuget_model.rb, line 147 def to_template lines = [] lines << 'type file' # fields @set_fields.each do |f| key, value = Metadata.pascal_case(f), send(f) if value.is_a?(Array) lines << "#{key}" value.map{ |line| " #{line}" }.each do |line| lines << line end else lines << "#{key} #{value}" end end lines << 'dependencies' unless @dependencies.empty? if @has_group groups = @dependencies.group_by { |k, d| d.target_framework } groups.each do |group| fw, deps = group if fw == '' deps.each do |k, d| lines << " #{d.id} ~> #{d.version}" end else lines << " framework: #{fw}" deps.each do |k, d| lines << " #{d.id} ~> #{d.version}" end end end else @dependencies.each do |k, d| lines << " #{d.id} ~> #{d.version}" end end if @framework_assemblies.respond_to?(:each) && @framework_assemblies.length > 0 lines << 'frameworkAssemblies' @framework_assemblies.each do |k, d| lines << " #{d.id}" end end lines end
to_xml()
click to toggle source
transform the data structure to the corresponding xml
# File lib/albacore/nuget_model.rb, line 242 def to_xml to_xml_builder.to_xml end
to_xml_builder()
click to toggle source
# File lib/albacore/nuget_model.rb, line 196 def to_xml_builder # alt: new(encoding: 'utf-8') Nokogiri::XML::Builder.new do |x| x.metadata do @set_fields.each do |f| x.send(Metadata.pascal_case(f), send(f)) end x.dependencies do if @has_group groups = @dependencies.group_by { |k, d| d.target_framework } groups.each do |group| fw, deps = group if fw == '' x.group do deps.each do |k, d| x.dependency id: d.id, version: d.version end end else x.group(targetFramework: fw) do deps.each do |k, d| x.dependency id: d.id, version: d.version end end end end else @dependencies.each do |k, d| x.dependency id: d.id, version: d.version end end end if @framework_assemblies.respond_to?(:each) && @framework_assemblies.length > 0 x.frameworkAssemblies do @framework_assemblies.each do |k, d| x.frameworkAssembly assemblyName: d.id, targetFramework: d.version end end end end end end
Private Instance Methods
guard_groups_or_not(add_in_group)
click to toggle source
# File lib/albacore/nuget_model.rb, line 326 def guard_groups_or_not add_in_group if @has_group && ! add_in_group \ || ! @has_group && @dependencies.length > 0 && add_in_group raise ArgumentError.new("If you've added dependencies in group, you must add the rest in groups, too. See https://docs.microsoft.com/en-us/nuget/schema/nuspec#framework-assembly-references") end end