iron_hammer 0.3.9 → 0.3.10

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -12,7 +12,7 @@ $hoe = Hoe.spec 'iron_hammer' do
12
12
  self.rubyforge_name = self.name
13
13
  self.extra_deps = [['rubyzip2','>= 2.0.1'],
14
14
  ['builder', '>= 2.1.2']]
15
- self.version = '0.3.9'
15
+ self.version = '0.3.10'
16
16
  end
17
17
 
18
18
  require 'newgem/tasks'
data/lib/iron_hammer.rb CHANGED
@@ -31,6 +31,7 @@ require 'iron_hammer/projects/project_types'
31
31
  require 'iron_hammer/projects/test_project'
32
32
  require 'iron_hammer/solutions/solution'
33
33
  require 'iron_hammer/solutions/solution_file'
34
+ require 'iron_hammer/utils/code_analyzers_environment'
34
35
  require 'iron_hammer/utils/dot_net_environment'
35
36
  require 'iron_hammer/utils/file_system'
36
37
  require 'iron_hammer/utils/ivy_builder'
@@ -12,6 +12,7 @@ module IronHammer
12
12
  @configuration = params[:configuration] || IronHammer::Defaults::CONFIGURATION_RUN
13
13
  @dot_net_environment = IronHammer::Utils::DotNetEnvironment.new params.merge(
14
14
  :framework_path => params[:dot_net_path])
15
+ @code_analyzers_environment = CodeAnalyzersEnvironment.new params
15
16
  end
16
17
 
17
18
  def details
@@ -37,6 +38,15 @@ module IronHammer
37
38
  "#{mstest} #{runconfig || ''}#{containers.join ' '} /resultsfile:#{results} #{details}"
38
39
  end
39
40
 
41
+ def analyze *projects
42
+ return if projects.nil? || projects.empty?
43
+ fxcop = @code_analyzers_environment.fxcop
44
+ rules = @code_analyzers_environment.fxcop_rules
45
+ binaries = projects.collect {|project| "/file:#{project.path_to_binaries}"}
46
+ results = @code_analyzers_environment.fxcop_result
47
+ "\"#{fxcop}\" /rule:\"#{rules}\" /out:\"#{results}\" #{binaries.join ' '}"
48
+ end
49
+
40
50
  end unless defined? Hammer
41
51
  end
42
52
 
@@ -3,10 +3,12 @@ module IronHammer
3
3
  class Dependency
4
4
  attr_accessor :name
5
5
  attr_accessor :version
6
+ attr_accessor :extension
6
7
 
7
8
  def initialize params = {}
8
9
  @name = params[:name] || raise(ArgumentError.new('you must specify a name'))
9
10
  @version = params[:version]
11
+ @extension = params[:extension] || 'dll'
10
12
  end
11
13
 
12
14
  def == other
@@ -22,7 +24,17 @@ module IronHammer
22
24
  name = includes.split(', ')[0]
23
25
  match = includes.match /Version=(.+?),/
24
26
  version = match[1] if match
25
- Dependency.new :name => name, :version => version
27
+ extension = get_extension reference
28
+ Dependency.new :name => name, :version => version, :extension => extension
29
+ end
30
+
31
+ private
32
+ def self.get_extension reference
33
+ hint_path = reference.elements["HintPath"]
34
+ return hint_path.text.split(/\./).last if hint_path
35
+
36
+ executable_extension = reference.elements["ExecutableExtension"]
37
+ executable_extension.text.gsub(/\./, '') if executable_extension
26
38
  end
27
39
  end
28
40
  end
@@ -5,21 +5,19 @@ module IronHammer
5
5
  module Projects
6
6
  class TestProject < GenericProject
7
7
  attr_accessor :config
8
- attr_accessor :dll
9
- attr_accessor :name
10
- attr_accessor :path
11
8
 
12
9
  def initialize params = {}
13
10
  params[:name] ||= "#{ params[:project] || params[:solution] }.Tests"
14
- @name = params[:name]
15
- @dll = "#{ params[:dll] || @name}.dll"
11
+ @dll = "#{params[:dll]}.dll" if params[:dll]
16
12
  @config = params[:config] || IronHammer::Defaults::TEST_CONFIG
17
- @path = params[:path]
18
13
  super(params)
19
14
  end
20
15
 
16
+ def dll
17
+ @dll ||= "#{assembly_name}.dll"
18
+ end
21
19
  def container configuration
22
- [@name, 'bin', configuration, @dll].patheticalize
20
+ [@path, 'bin', configuration, dll].patheticalize
23
21
  end
24
22
 
25
23
  def results_file
@@ -5,34 +5,49 @@ require 'iron_hammer'
5
5
  CLEAN.include("TestResults/**")
6
6
  CLEAN.include("ivy*.xml")
7
7
 
8
+
8
9
  namespace :iron do
9
- task :initialize do
10
- @anvil = Anvil.load_from '.'
11
- @hammer = Hammer.new(defined?(VISUAL_STUDIO_PATH) ? {:visual_studio_path => VISUAL_STUDIO_PATH} : {})
12
- FileUtils.mkdir 'TestResults' unless (File.exists?('TestResults') && File.directory?('TestResults'))
13
- end
10
+ @anvil = Anvil.load_from '.'
11
+ @hammer = Hammer.new(
12
+ (defined?(VISUAL_STUDIO_PATH) ? {:visual_studio_path => VISUAL_STUDIO_PATH} : {}).merge(
13
+ :configuration => ENV['Configuration']
14
+ ))
15
+ FileUtils.mkdir 'TestResults' unless (File.exists?('TestResults') && File.directory?('TestResults'))
16
+
17
+ desc 'Executes the default lifecycle'
18
+ task :default => [:clean, "ivy:retrieve", :build, "test:unit", "ivy:publish"]
14
19
 
15
20
  desc 'Builds the solution'
16
- task :build => [:clean, :initialize] do
21
+ task :build => [:clean] do
17
22
  sh @hammer.build @anvil.solution
18
23
  end
19
24
 
20
25
  namespace :test do
21
26
  desc 'Runs the unit tests'
22
27
  task :unit => [:build] do
23
- sh @hammer.test *@anvil.test_projects
28
+ command = @hammer.test *@anvil.test_projects
29
+ puts "There are no tests to run" unless command
30
+ sh command if command
31
+ end
32
+ end
33
+
34
+ namespace :analyze do
35
+ desc 'Analyze the code using fxcop'
36
+ task :fxcop do
37
+ sh @hammer.analyze *@anvil.projects do |ok, response|
38
+ puts response
39
+ end
24
40
  end
25
41
  end
26
42
 
27
43
  namespace :ivy do
28
44
  desc 'Publish project dependencies into ivy repository'
29
- task :setup do
30
- @anvil = Anvil.load_from '.'
45
+ task :setup, [:binaries_path] do |t, args|
31
46
  @anvil.projects.each do |project|
32
47
  project.dependencies.each do |dependency|
33
48
  dependency_project = DependencyProject.new(
34
49
  :name => dependency.name,
35
- :binaries_path => ENV['binaries_path'],
50
+ :binaries_path => args.binaries_path,
36
51
  :version => dependency.version)
37
52
 
38
53
  puts "Dependency #{dependency.name}"
@@ -47,7 +62,8 @@ namespace :iron do
47
62
  end
48
63
 
49
64
  desc 'Generates ivy-<project_name>.xml for all projects of the solution'
50
- task :generate => [:initialize] do
65
+ task :generate do
66
+ puts "Generating ivy files for projects"
51
67
  @anvil.projects.each do |project|
52
68
  builder = IvyBuilder.new project
53
69
  builder.write_to "ivy-#{project.name}.xml"
@@ -0,0 +1,34 @@
1
+ require 'iron_hammer/utils/windows'
2
+
3
+ module IronHammer
4
+ module Utils
5
+ class CodeAnalyzersEnvironment
6
+ attr_accessor :fxcop_path
7
+
8
+ def initialize params={}
9
+ @fxcop_path = params[:fxcop_path] || default_fxcop_path
10
+ end
11
+
12
+ def fxcop
13
+ [@fxcop_path, 'fxcopcmd.exe'].patheticalize
14
+ end
15
+
16
+ def fxcop_rules
17
+ [@fxcop_path, 'Rules'].patheticalize
18
+ end
19
+
20
+ def fxcop_result
21
+ "fxcop-result.xml"
22
+ end
23
+
24
+ private
25
+ def default_fxcop_path
26
+ [
27
+ ENV['ProgramFiles'] || IronHammer::Defaults::PROGRAM_FILES,
28
+ 'Microsoft FxCop 1.35'
29
+ ].patheticalize
30
+ end
31
+ end unless defined? CodeAnalyzersEnvironment
32
+ end
33
+ end
34
+
@@ -18,13 +18,15 @@ module IronHammer
18
18
  name = @project.assembly_name
19
19
  xml.info :organisation => @organisation, :module => name
20
20
  xml.publications do
21
- extension = 'dll'
22
- xml.artifact :name => name, :type => extension
21
+ xml.artifact :name => name, :type => 'dll'
22
+ xml.artifact :name => name, :type => 'exe'
23
23
  end if @project.is_a? DllProject
24
24
 
25
25
  xml.dependencies do
26
26
  @project.dependencies.each do |dependency|
27
- xml.dependency :org => @organisation, :name => dependency.name, :rev => dependency.version
27
+ xml.dependency :org => @organisation, :name => dependency.name, :rev => dependency.version do
28
+ xml.artifact :type => dependency.extension, :name => dependency.name
29
+ end
28
30
  end
29
31
  end unless @project.dependencies.empty?
30
32
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iron_hammer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.9
4
+ version: 0.3.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mozair Alves do Carmo Junior
@@ -96,6 +96,7 @@ files:
96
96
  - lib/iron_hammer/solutions/solution.rb
97
97
  - lib/iron_hammer/solutions/solution_file.rb
98
98
  - lib/iron_hammer/tasks.rb
99
+ - lib/iron_hammer/utils/code_analyzers_environment.rb
99
100
  - lib/iron_hammer/utils/dot_net_environment.rb
100
101
  - lib/iron_hammer/utils/file_system.rb
101
102
  - lib/iron_hammer/utils/ivy_builder.rb