rakeoff 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- Copyright (c) 2012 Rob Beal
1
+ Copyright (c) 2012 Robert Beal
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -14,6 +14,6 @@ Description goes here.
14
14
 
15
15
  == Copyright
16
16
 
17
- Copyright (c) 2012 Rob Beal. See LICENSE.txt for
17
+ Copyright (c) 2012 Robert Beal. See LICENSE.txt for
18
18
  further details.
19
19
 
@@ -0,0 +1,7 @@
1
+ root_dir = File.expand_path(File.dirname(__FILE__))
2
+ $: << root_dir
3
+ $: << File.join(root_dir, 'rakeoff')
4
+ $: << File.join(root_dir, 'rakeoff', 'support')
5
+
6
+ Dir.glob(File.join(root_dir, 'rakeoff/*.rb')).each {|file| require file }
7
+
@@ -0,0 +1,12 @@
1
+ require 'rake'
2
+ require 'terminal'
3
+
4
+ class AspnetCompile
5
+ def execute(session)
6
+ session.solution.projects.select { |project| project.is_webapp }.each do |project|
7
+ print_heading 'Aspnet Compile'
8
+ puts "Compiling #{project.name} at #{project.directory}".yellow
9
+ sh "%windir%/microsoft.net/framework/#{session.framework_version}/aspnet_compiler.exe -p #{project.directory} -v / -nologo"
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ require 'support/task_helper'
2
+ require 'aspnetcompile'
3
+
4
+ class AspnetCompileTask
5
+ def initialize(name, *args)
6
+ body = proc {
7
+ task = AspnetCompile.new
8
+ task.execute(SESSION)
9
+ }
10
+
11
+ create_task(name, *args, &body)
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+
2
+ class Clean
3
+
4
+ def initialize(session)
5
+ @session = session
6
+ end
7
+
8
+ def execute()
9
+ print_heading 'Clean'
10
+
11
+ puts "Removing and recreating #{@session.output_dir}"
12
+ FileUtils.rm_rf @session.output_dir
13
+ FileUtils.mkdir_p @session.output_dir + '/release'
14
+ end
15
+ end
@@ -0,0 +1,13 @@
1
+ require 'support/task_helper'
2
+ require 'clean'
3
+
4
+ class CleanTask
5
+ def initialize(name, options='', *args)
6
+ body = proc {
7
+ task = Clean.new(SESSION)
8
+ task.execute
9
+ }
10
+
11
+ create_task(name, *args, &body)
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+
2
+ class Compile
3
+
4
+ def execute(name, session, options)
5
+ print_heading name
6
+
7
+ multi_core = session.framework_version[1,1].to_i > 2 ? '/m' : ''
8
+ msbuild_path = "%windir%/microsoft.net/framework/#{session.framework_version}/msbuild.exe"
9
+
10
+ sh "#{msbuild_path} /t:Clean;Build /p:Configuration=#{session.configuration} #{options} /p:TrackFileAccess=false #{multi_core} /consoleloggerparameters:ErrorsOnly #{session.solution.path}"
11
+ end
12
+
13
+ end
@@ -0,0 +1,13 @@
1
+ require 'support/task_helper'
2
+ require 'compile'
3
+
4
+ class CompileTask
5
+ def initialize(name, options, *args)
6
+ body = proc {
7
+ task = Compile.new
8
+ task.execute(name.to_s.capitalize, SESSION, options)
9
+ }
10
+
11
+ create_task(name, *args, &body)
12
+ end
13
+ end
@@ -0,0 +1,23 @@
1
+ require 'logger'
2
+
3
+ module Logging
4
+ def logger
5
+ @logger ||= Logging.logger_for(self.class.name)
6
+ end
7
+
8
+ # Use a hash class-ivar to cache a unique Logger per class:
9
+ @loggers = {}
10
+
11
+ class << self
12
+ def logger_for(classname)
13
+ @loggers[classname] ||= configure_logger_for(classname)
14
+ end
15
+
16
+ def configure_logger_for(classname)
17
+ logger = Logger.new(STDOUT)
18
+ logger.level = LOGGING_LEVEL
19
+ logger.progname = classname
20
+ logger
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,30 @@
1
+
2
+ class Project
3
+
4
+ attr_accessor :name, :path, :directory, :assembly_name, :dll_path, :is_webapp
5
+
6
+ def initialize(path)
7
+ if !File.exists?(path)
8
+ raise ProjectDoesNotExist, "Project does not exist at #{path}".red
9
+ end
10
+
11
+ @path = path
12
+ @name = File.basename(path).gsub('.csproj', '')
13
+ @directory = File.dirname(@path)
14
+
15
+ match = File.read(path).match('<AssemblyName>(.*)</AssemblyName>')
16
+ @assembly_name = match.nil? ? nil : match[1]
17
+ @is_webapp = File.exist?(@directory + '/Web.config')
18
+ end
19
+
20
+ def include(expression)
21
+ return File.read(path).include?(expression)
22
+ end
23
+
24
+ def dll_path(configuration)
25
+ return @path.gsub(@name + '.csproj', "bin/#{configuration}/#{@assembly_name}.dll")
26
+ end
27
+ end
28
+
29
+ class ProjectDoesNotExist < StandardError
30
+ end
@@ -0,0 +1,43 @@
1
+ require 'terminal'
2
+
3
+ class Robocopy
4
+
5
+ def initialize(session)
6
+ @session = session
7
+ end
8
+
9
+ def execute(source, destination, parameters='/MIR /R:5 /W:5 /NP /NFL /NDL')
10
+ print_heading 'Copying'
11
+
12
+ status = run_command("#{@session.tools_dir}/robocopy.exe #{source} #{destination} /XD .svn #{parameters}")
13
+ failed = check_status(status)
14
+
15
+ if failed
16
+ raise RobocopyException, "Robocopy failed with status code #{status}. Please see http://bit.ly/dzegQL for what it means.".red
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def check_status(status)
23
+ fail = true
24
+
25
+ [0, 1, 2, 3, 11].each do |code|
26
+ if status == code
27
+ fail = false
28
+ end
29
+ end
30
+
31
+ fail
32
+ end
33
+
34
+ def run_command(text)
35
+ sh(text) do |ok, result|
36
+ return result.exitstatus
37
+ end
38
+ end
39
+
40
+ end
41
+
42
+ class RobocopyException < StandardError
43
+ end
@@ -0,0 +1,13 @@
1
+ require 'support/task_helper'
2
+ require 'robocopy'
3
+
4
+ class RobocopyTask
5
+ def initialize(name, source, destination, parameters='', *args)
6
+ body = proc {
7
+ task = Robocopy.new(SESSION)
8
+ task.execute(source, destination, parameters)
9
+ }
10
+
11
+ create_task(name, *args, &body)
12
+ end
13
+ end
@@ -0,0 +1,81 @@
1
+ require 'logging'
2
+ require 'solution'
3
+ require 'terminal'
4
+ require 'yaml'
5
+
6
+ class Session
7
+ include Logging
8
+
9
+ # .net build options
10
+ attr_accessor :agent_name, :is_build_agent, :framework_version, :configuration
11
+
12
+ # directories
13
+ attr_accessor :working_dir, :tools_dir, :output_dir
14
+
15
+ attr_accessor :solution, :globals, :tokens_pattern
16
+
17
+ def set_values
18
+ print_heading 'Build Info'
19
+
20
+ set_defaults
21
+ override_defaults_from_yaml
22
+ print_session_info
23
+ end
24
+
25
+ def load_solution
26
+ @solution = Solution.new(@working_dir)
27
+ end
28
+
29
+ private
30
+
31
+ def set_defaults
32
+ @agent_name = ENV['COMPUTERNAME']
33
+ @framework_version = 'v4.0.30319'
34
+ @configuration = 'Release'
35
+
36
+ @working_dir = Dir.getwd
37
+ @tools_dir = File.join(@working_dir, '../tools')
38
+ @output_dir = File.join(@working_dir + '/_output')
39
+
40
+ @globals = './Globals.config'
41
+ @tokens_pattern = '*.master.config'
42
+ end
43
+
44
+ def override_defaults_from_yaml
45
+ file = File.join(@working_dir, '/rakefile.yml')
46
+
47
+ if(!File.exists?(file))
48
+ puts "No rakefile.yml found at #{@working_dir}, using defaults...".yellow
49
+ return
50
+ end
51
+
52
+ yaml = YAML.load_file(file)
53
+
54
+ if yaml.nil?
55
+ puts "Unable to read 'rakefile.yml', it may be invalid".yellow
56
+ return
57
+ end
58
+
59
+ yaml.each_key do |variable|
60
+ if (self.instance_variable_defined?('@' + variable))
61
+ self.instance_variable_set('@' + variable, yaml[variable])
62
+ end
63
+ end
64
+ end
65
+
66
+ def print_session_info
67
+ puts "Current Environemnt = #{@environment}"
68
+ puts "Agent = #{@agent_name}"
69
+ puts ''
70
+
71
+ puts "Build Framework = #{@framework_version}"
72
+ puts "Build Configuration = #{@configuration}"
73
+ puts "Token File Pattern = #{@tokens_pattern}"
74
+ puts "Global Tokens File = #{@globals}"
75
+ puts ''
76
+
77
+ puts "Output Directory = #{@output_dir}"
78
+ puts "Tools Directory = #{@tools_dir}"
79
+ end
80
+
81
+ end
@@ -0,0 +1,25 @@
1
+ Dir.glob(File.join(File.expand_path(File.dirname(__FILE__)), '*.rb')).each {|file| require file }
2
+
3
+ desc 'Setup this must be run!'
4
+ task :off do
5
+ LOGGING_LEVEL = Logger::ERROR
6
+
7
+ SESSION = Session.new
8
+ SESSION.set_values
9
+ SESSION.load_solution
10
+
11
+ create_tasks
12
+ end
13
+
14
+ def create_tasks
15
+ #AspnetCompileTask.new(:aspnetcompile)
16
+ CleanTask.new(:clean)
17
+ TokensTask.new(:tokens)
18
+
19
+ CompileTask.new(:compile, '')
20
+ CompileTask.new(:publish, "/property:OutDir=#{SESSION.output_dir}/publish/")
21
+
22
+ TestsTask.new(:unit_tests, '.Unit.Tests')
23
+ TestsTask.new(:integration_tests, '.Integration.Tests')
24
+ TestsTask.new(:acceptance_tests, '.Acceptance.Tests')
25
+ end
@@ -0,0 +1,67 @@
1
+ require 'logging'
2
+ require 'project'
3
+
4
+ class Solution
5
+ include Logging
6
+
7
+ attr_accessor :name, :path, :directory, :projects
8
+
9
+ def initialize(path)
10
+ find_solution(path)
11
+ find_projects
12
+ end
13
+
14
+ def get_projects(pattern)
15
+ return @projects.select {|project| project.path.include?(pattern) }
16
+ end
17
+
18
+ private
19
+
20
+ def find_solution(path)
21
+ logger.info "Searching for solution files at: #{path}/*.sln"
22
+ matches = Dir.glob("#{path}/**/*.sln")
23
+
24
+ if matches.empty?
25
+ raise NoSolutionFile, "No *.sln file found in #{path}".red
26
+ end
27
+
28
+ if matches.length > 1
29
+ raise MultipleSolutionFiles, "Multiple solution files found. Don't know which one to build!".red
30
+ end
31
+
32
+ match = matches.first
33
+
34
+ @name = match.to_s.match(/.*\/(.*).sln/)[1]
35
+ @path = match
36
+ @directory = File.dirname(match)
37
+ end
38
+
39
+ def find_projects
40
+ @projects = []
41
+ logger.info "Reading projects in solution #{@path}"
42
+
43
+ readlines(@path).each do |line|
44
+ match = line.match(/,\s\"(.*\.csproj)\"/)
45
+ path = match.nil? ? nil : match[1]
46
+
47
+ if(!path.nil?)
48
+ path = File.join(File.expand_path(@directory), path).gsub('\\', '/')
49
+
50
+ logger.info "Creating project instance for path #{path}"
51
+ projects.push(Project.new(path))
52
+ end
53
+ end
54
+ end
55
+
56
+ def readlines(file)
57
+ lines = []
58
+ File.open(file, 'r').each { |line| lines << line }
59
+ return lines
60
+ end
61
+ end
62
+
63
+ class NoSolutionFile < StandardError
64
+ end
65
+
66
+ class MultipleSolutionFiles < StandardError
67
+ end
@@ -0,0 +1,34 @@
1
+ require 'rake'
2
+ include Rake::DSL
3
+
4
+ def create_task(name, *args, &body)
5
+ args || args = []
6
+ args.insert 0, name
7
+
8
+ # allows you to define your own overriden tasks
9
+ # hardcoded tasks are added first, then user dynamic ones, then finally rakeoff dyanmic ones
10
+ if(task_exists(name))
11
+ return
12
+ end
13
+
14
+ # make sure the off task is our own and not overriden
15
+ if(task_exists(name) && name == 'off')
16
+ remove_task(name)
17
+ end
18
+
19
+ Rake::Task.define_task(*args, &body)
20
+ end
21
+
22
+ def task_exists(name)
23
+ return Rake::Task.task_defined?(name)
24
+ end
25
+
26
+ def remove_task(task_name)
27
+ Rake.application.remove_task(task_name)
28
+ end
29
+
30
+ Rake::TaskManager.class_eval do
31
+ def remove_task(task_name)
32
+ @tasks.delete(task_name.to_s)
33
+ end
34
+ end
@@ -0,0 +1,17 @@
1
+ require 'rubygems'
2
+ require 'term/ansicolor'
3
+ require 'win32console' unless !(RUBY_PLATFORM =~ /mswin32/)
4
+
5
+ class String
6
+ include Term::ANSIColor
7
+ end
8
+
9
+ def print_heading(message)
10
+ if(SESSION.is_build_agent)
11
+ puts "##teamcity[progressMessage '#{message}']"
12
+ else
13
+ puts ''
14
+ puts message.cyan
15
+ puts "####################################".cyan
16
+ end
17
+ end
@@ -0,0 +1,41 @@
1
+ require 'fileutils'
2
+ require 'terminal'
3
+
4
+ class NUnit
5
+
6
+ attr_accessor :assemblies
7
+
8
+ def initialize(session)
9
+ @session = session
10
+ end
11
+
12
+ def execute(pattern)
13
+ print_heading("Tests - #{pattern}")
14
+
15
+ if(there_are_test_projects(pattern))
16
+ sh "#{@session.tools_dir}/nunit/nunit-console.exe #{assemblies} /xml=#{@session.output_dir}/test-reports/nunit.xml"
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def there_are_test_projects(pattern)
23
+ projects = @session.solution.get_projects(pattern)
24
+
25
+ if(projects.length == 0)
26
+ puts "No test projects found matching pattern #{pattern}".yellow
27
+ return false
28
+ end
29
+
30
+ mkdir_p "#{@session.output_dir}/test-reports"
31
+ get_assemblies(projects)
32
+
33
+ return true
34
+ end
35
+
36
+ def get_assemblies(projects)
37
+ files = []
38
+ projects.each { |project| files << project.dll_path(@session.configuration) + ' ' }
39
+ @assemblies = files.join
40
+ end
41
+ end
@@ -0,0 +1,13 @@
1
+ require 'support/task_helper'
2
+ require 'tests'
3
+
4
+ class TestsTask
5
+ def initialize(name, pattern, *args)
6
+ body = proc {
7
+ task = NUnit.new(SESSION)
8
+ task.execute(pattern)
9
+ }
10
+
11
+ create_task(name, *args, &body)
12
+ end
13
+ end
@@ -0,0 +1,63 @@
1
+ require 'terminal'
2
+
3
+ class Tokens
4
+
5
+ def initialize(session, writer)
6
+ @session = session
7
+ @writer = writer
8
+ @globals = {}
9
+ end
10
+
11
+ def find_and_replace(path)
12
+ print_heading 'Tokenising'
13
+
14
+ read_tokens_file(@session.globals)
15
+
16
+ @files = Dir.glob("#{path}/**/#{@session.tokens_pattern}")
17
+ puts "#{@files.length} config(s) found for tokenising"
18
+ puts ''
19
+
20
+ @files.each do |file|
21
+ @environments = {}
22
+ read_tokens_file(file.gsub('.master.', '.tokens.'))
23
+ puts "Tokensing - #{file}"
24
+ puts "Environments - #{@environments.keys.join(', ')}"
25
+
26
+ @environments.each_pair do |environment, values|
27
+ @writer.write_for(environment, file, values, @globals, true)
28
+ end
29
+
30
+ @writer.write_for('', file, @environments.values[0], @globals, false)
31
+ puts ''
32
+ end
33
+ end
34
+
35
+ private
36
+
37
+ def read_tokens_file(path)
38
+ if(File.exist?(path))
39
+ begin
40
+ eval(File.read(path))
41
+ rescue SyntaxError => exception
42
+ raise exception, "Syntax error in the tokens file #{path} - #{exception.message}".red
43
+ end
44
+ else
45
+ puts "No tokens file found at #{path}".yellow
46
+ end
47
+ end
48
+
49
+ end
50
+
51
+ def keys_for(environment, values)
52
+ environment = environment.to_s.downcase
53
+
54
+ if @environments.has_key?(environment)
55
+ @environments[environment].merge!(values)
56
+ else
57
+ @environments[environment] = values
58
+ end
59
+ end
60
+
61
+ def share_with(envs, values)
62
+ envs.each { |env| keys_for(env, values) }
63
+ end
@@ -0,0 +1,13 @@
1
+ require 'support/task_helper'
2
+ require 'tokens'
3
+
4
+ class TokensTask
5
+ def initialize(name, *args)
6
+ body = proc {
7
+ task = Tokens.new(SESSION, TokensWriter.new)
8
+ task.find_and_replace(SESSION.working_dir)
9
+ }
10
+
11
+ create_task(name, *args, &body)
12
+ end
13
+ end
@@ -0,0 +1,50 @@
1
+
2
+ class TokensWriter
3
+
4
+ def write_for(environment, master_file, tokens, globals, check_usage)
5
+ @master_file = master_file
6
+ @environment = environment
7
+
8
+ output_file = @master_file.gsub('.master', environment.empty? ? '' : "._#{environment}")
9
+ text = File.read(@master_file)
10
+
11
+ check_if_tokens_are_used(text, tokens) if check_usage
12
+ text = replace_tokens(text, tokens)
13
+ text = replace_tokens(text, globals)
14
+
15
+ write_to_file(output_file, text)
16
+
17
+ matches = text.scan(/(\$[\w\d\-_\.]+\$)/)
18
+
19
+ if (matches.any?)
20
+ raise UnReplacedTokenException, "There are untokenised value(s): #{matches.join(', ').strip} still in #{@output_file}!".red
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def replace_tokens(text, tokens)
27
+ tokens.each_pair do |key, value|
28
+ text.gsub!(/\$#{key}\$/, value.to_s)
29
+ end
30
+
31
+ text
32
+ end
33
+
34
+ def check_if_tokens_are_used(text, tokens)
35
+ tokens.each { |key, value| print_unused_token_warning(key) if !text.include?("$#{key}$") }
36
+ end
37
+
38
+ def print_unused_token_warning(key)
39
+ puts "$#{key}$ token is not used for '#{@environment}'".yellow
40
+ end
41
+
42
+ def write_to_file(file, text)
43
+ File.open(file, 'w') { |f| f.write(text) }
44
+ end
45
+
46
+ end
47
+
48
+ class UnReplacedTokenException < StandardError
49
+ end
50
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rakeoff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,121 +9,155 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-17 00:00:00.000000000Z
12
+ date: 2012-04-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &29137660 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - =
19
+ - - '='
20
20
  - !ruby/object:Gem::Version
21
21
  version: 0.9.2.2
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *29137660
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - '='
28
+ - !ruby/object:Gem::Version
29
+ version: 0.9.2.2
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: rubyzip
27
- requirement: &29134220 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
- - - =
35
+ - - '='
31
36
  - !ruby/object:Gem::Version
32
37
  version: 0.9.6.1
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *29134220
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - '='
44
+ - !ruby/object:Gem::Version
45
+ version: 0.9.6.1
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: term-ansicolor
38
- requirement: &29133640 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
- - - =
51
+ - - '='
42
52
  - !ruby/object:Gem::Version
43
53
  version: 1.0.7
44
54
  type: :runtime
45
55
  prerelease: false
46
- version_requirements: *29133640
47
- - !ruby/object:Gem::Dependency
48
- name: juicer
49
- requirement: &29133100 !ruby/object:Gem::Requirement
56
+ version_requirements: !ruby/object:Gem::Requirement
50
57
  none: false
51
58
  requirements:
52
- - - =
59
+ - - '='
53
60
  - !ruby/object:Gem::Version
54
- version: 1.0.13
55
- type: :runtime
56
- prerelease: false
57
- version_requirements: *29133100
61
+ version: 1.0.7
58
62
  - !ruby/object:Gem::Dependency
59
63
  name: logger
60
- requirement: &29132520 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
61
65
  none: false
62
66
  requirements:
63
- - - =
67
+ - - '='
64
68
  - !ruby/object:Gem::Version
65
69
  version: 1.2.8
66
70
  type: :runtime
67
71
  prerelease: false
68
- version_requirements: *29132520
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - '='
76
+ - !ruby/object:Gem::Version
77
+ version: 1.2.8
69
78
  - !ruby/object:Gem::Dependency
70
79
  name: rspec
71
- requirement: &29131960 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
72
81
  none: false
73
82
  requirements:
74
- - - =
83
+ - - '='
75
84
  - !ruby/object:Gem::Version
76
- version: 2.8.0
85
+ version: 2.9.0
77
86
  type: :development
78
87
  prerelease: false
79
- version_requirements: *29131960
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - '='
92
+ - !ruby/object:Gem::Version
93
+ version: 2.9.0
80
94
  - !ruby/object:Gem::Dependency
81
95
  name: mocha
82
- requirement: &29131420 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
83
97
  none: false
84
98
  requirements:
85
- - - =
99
+ - - '='
86
100
  - !ruby/object:Gem::Version
87
101
  version: 0.10.5
88
102
  type: :development
89
103
  prerelease: false
90
- version_requirements: *29131420
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - '='
108
+ - !ruby/object:Gem::Version
109
+ version: 0.10.5
91
110
  - !ruby/object:Gem::Dependency
92
111
  name: rdoc
93
- requirement: &29130880 !ruby/object:Gem::Requirement
112
+ requirement: !ruby/object:Gem::Requirement
94
113
  none: false
95
114
  requirements:
96
- - - ~>
115
+ - - '='
97
116
  - !ruby/object:Gem::Version
98
117
  version: '3.12'
99
118
  type: :development
100
119
  prerelease: false
101
- version_requirements: *29130880
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - '='
124
+ - !ruby/object:Gem::Version
125
+ version: '3.12'
102
126
  - !ruby/object:Gem::Dependency
103
127
  name: bundler
104
- requirement: &29130260 !ruby/object:Gem::Requirement
128
+ requirement: !ruby/object:Gem::Requirement
105
129
  none: false
106
130
  requirements:
107
- - - ~>
131
+ - - '='
108
132
  - !ruby/object:Gem::Version
109
- version: 1.0.0
133
+ version: 1.1.3
110
134
  type: :development
111
135
  prerelease: false
112
- version_requirements: *29130260
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - '='
140
+ - !ruby/object:Gem::Version
141
+ version: 1.1.3
113
142
  - !ruby/object:Gem::Dependency
114
143
  name: jeweler
115
- requirement: &29129660 !ruby/object:Gem::Requirement
144
+ requirement: !ruby/object:Gem::Requirement
116
145
  none: false
117
146
  requirements:
118
- - - ~>
147
+ - - '='
119
148
  - !ruby/object:Gem::Version
120
149
  version: 1.8.3
121
150
  type: :development
122
151
  prerelease: false
123
- version_requirements: *29129660
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - '='
156
+ - !ruby/object:Gem::Version
157
+ version: 1.8.3
124
158
  - !ruby/object:Gem::Dependency
125
159
  name: simplecov
126
- requirement: &29129100 !ruby/object:Gem::Requirement
160
+ requirement: !ruby/object:Gem::Requirement
127
161
  none: false
128
162
  requirements:
129
163
  - - ! '>='
@@ -131,7 +165,12 @@ dependencies:
131
165
  version: '0'
132
166
  type: :development
133
167
  prerelease: false
134
- version_requirements: *29129100
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
135
174
  description: A common set of build tasks typically used when creating projects in
136
175
  .Net
137
176
  email: robertbeal@gmail.com
@@ -141,9 +180,30 @@ extra_rdoc_files:
141
180
  - LICENSE.txt
142
181
  - README.rdoc
143
182
  files:
183
+ - lib/rakeoff.rb
184
+ - lib/rakeoff/aspnetcompile.rb
185
+ - lib/rakeoff/aspnetcompile_task.rb
186
+ - lib/rakeoff/clean.rb
187
+ - lib/rakeoff/clean_task.rb
188
+ - lib/rakeoff/compile.rb
189
+ - lib/rakeoff/compile_task.rb
190
+ - lib/rakeoff/logging.rb
191
+ - lib/rakeoff/project.rb
192
+ - lib/rakeoff/robocopy.rb
193
+ - lib/rakeoff/robocopy_task.rb
194
+ - lib/rakeoff/session.rb
195
+ - lib/rakeoff/setup.rb
196
+ - lib/rakeoff/solution.rb
197
+ - lib/rakeoff/support/task_helper.rb
198
+ - lib/rakeoff/terminal.rb
199
+ - lib/rakeoff/tests.rb
200
+ - lib/rakeoff/tests_task.rb
201
+ - lib/rakeoff/tokens.rb
202
+ - lib/rakeoff/tokens_task.rb
203
+ - lib/rakeoff/tokens_writer.rb
144
204
  - LICENSE.txt
145
205
  - README.rdoc
146
- homepage: http://github.com/robertbeal/rakeoff
206
+ homepage: http://bitbucket.org/robertbeal/rakeoff
147
207
  licenses:
148
208
  - MIT
149
209
  post_install_message:
@@ -158,7 +218,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
158
218
  version: '0'
159
219
  segments:
160
220
  - 0
161
- hash: -1379076687771494216
221
+ hash: 424452616281254389
162
222
  required_rubygems_version: !ruby/object:Gem::Requirement
163
223
  none: false
164
224
  requirements:
@@ -167,7 +227,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
167
227
  version: '0'
168
228
  requirements: []
169
229
  rubyforge_project:
170
- rubygems_version: 1.8.17
230
+ rubygems_version: 1.8.21
171
231
  signing_key:
172
232
  specification_version: 3
173
233
  summary: Build tasks for .Net projects