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.
19 20 21 22 23 24 25 |
# File 'lib/albacore/project.rb', line 19 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.
17 18 19 |
# File 'lib/albacore/project.rb', line 17 def proj_filename @proj_filename end |
#proj_path_base ⇒ Object (readonly)
Returns the value of attribute proj_path_base.
17 18 19 |
# File 'lib/albacore/project.rb', line 17 def proj_path_base @proj_path_base end |
#proj_xml_node ⇒ Object (readonly)
Returns the value of attribute proj_xml_node.
17 18 19 |
# File 'lib/albacore/project.rb', line 17 def proj_xml_node @proj_xml_node end |
Instance Method Details
#asmname ⇒ Object
get the assembly name specified in the project file
53 54 55 |
# File 'lib/albacore/project.rb', line 53 def asmname read_property 'AssemblyName' end |
#authors ⇒ Object
gets any authors from the project file
68 69 70 |
# File 'lib/albacore/project.rb', line 68 def read_property 'Authors' end |
#declared_packages ⇒ Object
139 140 141 |
# File 'lib/albacore/project.rb', line 139 def declared_packages return nuget_packages || paket_packages || [] end |
#declared_projects ⇒ Object
143 144 145 146 147 148 149 150 151 |
# File 'lib/albacore/project.rb', line 143 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
72 73 74 |
# File 'lib/albacore/project.rb', line 72 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.
100 101 102 103 104 105 |
# File 'lib/albacore/project.rb', line 100 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
119 120 121 |
# File 'lib/albacore/project.rb', line 119 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
172 173 174 175 176 177 178 |
# File 'lib/albacore/project.rb', line 172 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
114 115 116 117 |
# File 'lib/albacore/project.rb', line 114 def find_refs # should always be there @proj_xml_node.css("Project Reference") end |
#guid ⇒ Object
Get the project GUID without ‘or ‘’ characters.
28 29 30 |
# File 'lib/albacore/project.rb', line 28 def guid guid_raw.gsub /[\{\}]/, '' end |
#guid_raw ⇒ Object
Get the project GUID as it is in the project file.
33 34 35 |
# File 'lib/albacore/project.rb', line 33 def guid_raw read_property 'ProjectGuid' end |
#has_faulty_refs? ⇒ Boolean
123 124 125 |
# File 'lib/albacore/project.rb', line 123 def has_faulty_refs? faulty_refs.any? end |
#has_packages_config? ⇒ Boolean
127 128 129 |
# File 'lib/albacore/project.rb', line 127 def has_packages_config? File.exists? package_config end |
#has_paket_deps? ⇒ Boolean
131 132 133 |
# File 'lib/albacore/project.rb', line 131 def has_paket_deps? File.exists? paket_deps end |
#has_paket_refs? ⇒ Boolean
135 136 137 |
# File 'lib/albacore/project.rb', line 135 def has_paket_refs? File.exists? paket_refs end |
#id ⇒ Object
Get the project id specified in the project file. Defaults to #name.
38 39 40 |
# File 'lib/albacore/project.rb', line 38 def id (read_property 'Id') || name end |
#included_files ⇒ Object
returns a list of the files included in the project
154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/albacore/project.rb', line 154 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.
77 78 79 |
# File 'lib/albacore/project.rb', line 77 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.
45 46 47 |
# File 'lib/albacore/project.rb', line 45 def name (read_property 'Name') || asmname end |
#namespace ⇒ Object
Get the root namespace of the project
58 59 60 |
# File 'lib/albacore/project.rb', line 58 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
109 110 111 |
# File 'lib/albacore/project.rb', line 109 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
83 84 85 |
# File 'lib/albacore/project.rb', line 83 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’
192 193 194 |
# File 'lib/albacore/project.rb', line 192 def package_config File.join @proj_path_base, 'packages.config' end |
#paket_deps ⇒ Object
Get the full path of ‘paket.dependencies’
197 198 199 |
# File 'lib/albacore/project.rb', line 197 def paket_deps File.join @proj_path_base, 'paket.dependencies' end |
#paket_refs ⇒ Object
Get the full path of ‘paket.references’
202 203 204 |
# File 'lib/albacore/project.rb', line 202 def paket_refs File.join @proj_path_base, 'paket.references' end |
#path ⇒ Object
get the path of the project file
181 182 183 |
# File 'lib/albacore/project.rb', line 181 def path File.join @proj_path_base, @proj_filename end |
#save(output = nil) ⇒ Object
save the xml
186 187 188 189 |
# File 'lib/albacore/project.rb', line 186 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
207 208 209 |
# File 'lib/albacore/project.rb', line 207 def to_s path end |
#try_output_path(conf) ⇒ Object
87 88 89 90 91 92 93 94 95 |
# File 'lib/albacore/project.rb', line 87 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
63 64 65 |
# File 'lib/albacore/project.rb', line 63 def version read_property 'Version' end |