Class: Albacore::Project
- Inherits:
-
Object
- Object
- Albacore::Project
- Includes:
- Logging
- Defined in:
- lib/albacore/project.rb
Overview
a project encapsulates the properties from a xxproj file.
Instance Attribute Summary collapse
-
#proj_filename ⇒ Object
readonly
Returns the value of attribute proj_filename.
-
#proj_path_base ⇒ Object
readonly
Returns the value of attribute proj_path_base.
-
#proj_xml_node ⇒ Object
readonly
Returns the value of attribute proj_xml_node.
Instance Method Summary collapse
-
#asmname ⇒ Object
get the assembly name specified in the project file.
-
#authors ⇒ Object
gets any authors from the project file.
- #declared_packages ⇒ Object
- #declared_projects ⇒ Object
- #description ⇒ Object
-
#fallback_output_path ⇒ Object
This is the output path if the project file doens’t have a configured ‘Configuration’ condition like all default project files have that come from Visual Studio/Xamarin Studio.
- #faulty_refs ⇒ Object
-
#find_packages ⇒ Object
Find all packages that have been declared and can be found in ./src/packages.
-
#find_refs ⇒ Object
find the NodeList reference list.
-
#guid ⇒ Object
Get the project GUID without ‘or ‘’ characters.
-
#guid_raw ⇒ Object
Get the project GUID as it is in the project file.
- #has_faulty_refs? ⇒ Boolean
- #has_packages_config? ⇒ Boolean
- #has_paket_deps? ⇒ Boolean
- #has_paket_refs? ⇒ Boolean
-
#id ⇒ Object
Get the project id specified in the project file.
-
#included_files ⇒ Object
returns a list of the files included in the project.
-
#initialize(proj_path) ⇒ Project
constructor
A new instance of Project.
-
#license ⇒ Object
the license that the project has defined in the metadata in the xxproj file.
-
#name ⇒ Object
(also: #title)
Get the project name specified in the project file.
-
#namespace ⇒ Object
Get the root namespace of the project.
-
#output_dll(conf) ⇒ Object
Gets the relative location (to the project base path) of the dll that it will output.
-
#output_path(conf) ⇒ Object
gets the output path of the project given the configuration or raise an error otherwise.
-
#package_config ⇒ Object
get the full path of ‘packages.config’.
-
#paket_deps ⇒ Object
Get the full path of ‘paket.dependencies’.
-
#paket_refs ⇒ Object
Get the full path of ‘paket.references’.
-
#path ⇒ Object
get the path of the project file.
-
#save(output = nil) ⇒ Object
save the xml.
-
#to_s ⇒ Object
Gets the path of the project file.
- #try_output_path(conf) ⇒ Object
-
#version ⇒ Object
gets the version from the project file.
Methods included from Logging
#debug, #err, #error, #fatal, #info, #puts, #trace, #warn
Constructor Details
#initialize(proj_path) ⇒ Project
Returns a new instance of Project.
20 21 22 23 24 25 26 |
# File 'lib/albacore/project.rb', line 20 def initialize proj_path raise ArgumentError, 'project path does not exist' unless File.exists? proj_path.to_s proj_path = proj_path.to_s unless proj_path.is_a? String @proj_xml_node = Nokogiri.XML(open(proj_path)) @proj_path_base, @proj_filename = File.split proj_path sanity_checks end |
Instance Attribute Details
#proj_filename ⇒ Object (readonly)
Returns the value of attribute proj_filename.
18 19 20 |
# File 'lib/albacore/project.rb', line 18 def proj_filename @proj_filename end |
#proj_path_base ⇒ Object (readonly)
Returns the value of attribute proj_path_base.
18 19 20 |
# File 'lib/albacore/project.rb', line 18 def proj_path_base @proj_path_base end |
#proj_xml_node ⇒ Object (readonly)
Returns the value of attribute proj_xml_node.
18 19 20 |
# File 'lib/albacore/project.rb', line 18 def proj_xml_node @proj_xml_node end |
Instance Method Details
#asmname ⇒ Object
get the assembly name specified in the project file
54 55 56 |
# File 'lib/albacore/project.rb', line 54 def asmname read_property 'AssemblyName' end |
#authors ⇒ Object
gets any authors from the project file
69 70 71 |
# File 'lib/albacore/project.rb', line 69 def read_property 'Authors' end |
#declared_packages ⇒ Object
140 141 142 |
# File 'lib/albacore/project.rb', line 140 def declared_packages return nuget_packages || paket_packages || [] end |
#declared_projects ⇒ Object
144 145 146 147 148 149 150 151 152 |
# File 'lib/albacore/project.rb', line 144 def declared_projects @proj_xml_node.css("ProjectReference").collect do |proj_ref| debug do ref_name = proj_ref.css("Name").inner_text "found project reference: #{name} => #{ref_name} [albacore: project]" end Project.new(File.join(@proj_path_base, Albacore::Paths.normalise_slashes(proj_ref['Include']))) end end |
#description ⇒ Object
73 74 75 |
# File 'lib/albacore/project.rb', line 73 def description read_property 'Description' end |
#fallback_output_path ⇒ Object
This is the output path if the project file doens’t have a configured ‘Configuration’ condition like all default project files have that come from Visual Studio/Xamarin Studio.
101 102 103 104 105 106 |
# File 'lib/albacore/project.rb', line 101 def fallback_output_path fallback = @proj_xml_node.css("Project PropertyGroup OutputPath").first condition = fallback.parent['Condition'] || 'No \'Condition\' specified' warn "chose an OutputPath in: '#{self}' for Configuration: <#{condition}> [albacore: project]" fallback.inner_text end |
#faulty_refs ⇒ Object
120 121 122 |
# File 'lib/albacore/project.rb', line 120 def faulty_refs find_refs.to_a.keep_if{ |r| r.children.css("HintPath").empty? } end |
#find_packages ⇒ Object
Find all packages that have been declared and can be found in ./src/packages. This is mostly useful if you have that repository structure. returns enumerable Package
173 174 175 176 177 178 179 |
# File 'lib/albacore/project.rb', line 173 def find_packages declared_packages.collect do |package| guess = ::Albacore::PackageRepo.new(%w|./packages ./src/packages|).find_latest package.id debug "#{name}: guess: #{guess} [albacore: project]" guess end end |
#find_refs ⇒ Object
find the NodeList reference list
115 116 117 118 |
# File 'lib/albacore/project.rb', line 115 def find_refs # should always be there @proj_xml_node.css("Project Reference") end |
#guid ⇒ Object
Get the project GUID without ‘or ‘’ characters.
29 30 31 |
# File 'lib/albacore/project.rb', line 29 def guid guid_raw.gsub /[\{\}]/, '' end |
#guid_raw ⇒ Object
Get the project GUID as it is in the project file.
34 35 36 |
# File 'lib/albacore/project.rb', line 34 def guid_raw read_property 'ProjectGuid' end |
#has_faulty_refs? ⇒ Boolean
124 125 126 |
# File 'lib/albacore/project.rb', line 124 def has_faulty_refs? faulty_refs.any? end |
#has_packages_config? ⇒ Boolean
128 129 130 |
# File 'lib/albacore/project.rb', line 128 def has_packages_config? File.exists? package_config end |
#has_paket_deps? ⇒ Boolean
132 133 134 |
# File 'lib/albacore/project.rb', line 132 def has_paket_deps? File.exists? paket_deps end |
#has_paket_refs? ⇒ Boolean
136 137 138 |
# File 'lib/albacore/project.rb', line 136 def has_paket_refs? File.exists? paket_refs end |
#id ⇒ Object
Get the project id specified in the project file. Defaults to #name.
39 40 41 |
# File 'lib/albacore/project.rb', line 39 def id (read_property 'Id') || name end |
#included_files ⇒ Object
returns a list of the files included in the project
155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
# File 'lib/albacore/project.rb', line 155 def included_files ['Compile','Content','EmbeddedResource','None'].map { |item_name| proj_xml_node.xpath("/x:Project/x:ItemGroup/x:#{item_name}", 'x' => "http://schemas.microsoft.com/developer/msbuild/2003").collect { |f| debug "#{name}: #included_files looking at '#{f}' [albacore: project]" link = f.elements.select{ |el| el.name == 'Link' }.map { |el| el.content }.first OpenStruct.new( :item_name => item_name.downcase, :link => link, :include => f['Include'] ) } }.flatten end |
#license ⇒ Object
the license that the project has defined in the metadata in the xxproj file.
78 79 80 |
# File 'lib/albacore/project.rb', line 78 def license read_property 'License' end |
#name ⇒ Object Also known as: title
Get the project name specified in the project file. This is the same as the title of the nuspec and, if Id is not specified, also the id of the nuspec.
46 47 48 |
# File 'lib/albacore/project.rb', line 46 def name (read_property 'Name') || asmname end |
#namespace ⇒ Object
Get the root namespace of the project
59 60 61 |
# File 'lib/albacore/project.rb', line 59 def namespace read_property 'RootNamespace' end |
#output_dll(conf) ⇒ Object
Gets the relative location (to the project base path) of the dll that it will output
110 111 112 |
# File 'lib/albacore/project.rb', line 110 def output_dll conf Paths.join(output_path(conf) || fallback_output_path, "#{asmname}.dll") end |
#output_path(conf) ⇒ Object
gets the output path of the project given the configuration or raise an error otherwise
84 85 86 |
# File 'lib/albacore/project.rb', line 84 def output_path conf try_output_path conf || raise(ConfigurationNotFoundError, "could not find configuration '#{conf}'") end |
#package_config ⇒ Object
get the full path of ‘packages.config’
193 194 195 |
# File 'lib/albacore/project.rb', line 193 def package_config File.join @proj_path_base, 'packages.config' end |
#paket_deps ⇒ Object
Get the full path of ‘paket.dependencies’
198 199 200 |
# File 'lib/albacore/project.rb', line 198 def paket_deps File.join @proj_path_base, 'paket.dependencies' end |
#paket_refs ⇒ Object
Get the full path of ‘paket.references’
203 204 205 |
# File 'lib/albacore/project.rb', line 203 def paket_refs File.join @proj_path_base, 'paket.references' end |
#path ⇒ Object
get the path of the project file
182 183 184 |
# File 'lib/albacore/project.rb', line 182 def path File.join @proj_path_base, @proj_filename end |
#save(output = nil) ⇒ Object
save the xml
187 188 189 190 |
# File 'lib/albacore/project.rb', line 187 def save(output = nil) output = path unless output File.open(output, 'w') { |f| @proj_xml_node.write_xml_to f } end |
#to_s ⇒ Object
Gets the path of the project file
208 209 210 |
# File 'lib/albacore/project.rb', line 208 def to_s path end |
#try_output_path(conf) ⇒ Object
88 89 90 91 92 93 94 95 96 |
# File 'lib/albacore/project.rb', line 88 def try_output_path conf path = @proj_xml_node.css("Project PropertyGroup[Condition*='#{conf}|'] OutputPath") # path = @proj_xml_node.xpath("//Project/PropertyGroup[matches(@Condition, '#{conf}')]/OutputPath") debug { "#{name}: output path node[#{conf}]: #{ (path.empty? ? 'empty' : path.inspect) } [albacore: project]" } return path.inner_text unless path.empty? nil end |
#version ⇒ Object
gets the version from the project file
64 65 66 |
# File 'lib/albacore/project.rb', line 64 def version read_property 'Version' end |