seabass 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -2
- data/install_dependencies.rb +1 -0
- data/lib/rake/feature_consumer_task.rb +3 -0
- data/lib/rake/feature_packager_task.rb +3 -0
- data/lib/rake/website_deploy_verifyication_task.rb +3 -0
- data/lib/seabass/feature_consumer.rb +24 -0
- data/lib/seabass/feature_packager.rb +45 -0
- data/lib/seabass/website_deploy_verifier.rb +38 -0
- data/rakefile.rb +1 -13
- data/specs/sample_data/deploys/aspnet_failed.html +110 -0
- data/specs/sample_data/deploys/aspnet_success.html +101 -0
- data/specs/specs.rb +6 -0
- data/specs/website_deploy_verifier_spec.rb +57 -0
- metadata +31 -5
data/VERSION
CHANGED
@@ -1,2 +1 @@
|
|
1
|
-
0.
|
2
|
-
|
1
|
+
0.2.0
|
data/install_dependencies.rb
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'ftools'
|
2
|
+
|
3
|
+
class FeatureConsumer
|
4
|
+
attr_accessor :package_dir, :consumer_dir, :application_name
|
5
|
+
|
6
|
+
def execute()
|
7
|
+
raise "The directory containing the packages has not been specified" if @package_dir.nil?
|
8
|
+
raise "The directory packages should be copied to has not been specified" if @consumer_dir.nil?
|
9
|
+
raise "The name of the application has not been specified" if @application_name.nil?
|
10
|
+
|
11
|
+
Dir[@package_dir + "/#{@application_name}/**/**"].each do |resource|
|
12
|
+
raise "Could not find the app name in the resource type" if resource.match(/.*\/#{@application_name}\/(.*)/).nil?
|
13
|
+
|
14
|
+
destination = File.expand_path(File.join(@consumer_dir, $1))
|
15
|
+
next if File.directory?(resource)
|
16
|
+
|
17
|
+
dir = File.expand_path(File.dirname(destination))
|
18
|
+
FileUtils.mkdir_p(dir) if false == File.exists?(dir)
|
19
|
+
|
20
|
+
puts "Copying #{resource} to #{destination}"
|
21
|
+
File.copy(resource, destination)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'ftools'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
class FeaturePackager
|
5
|
+
|
6
|
+
attr_accessor :source_dir, :package_dir, :valid_file_types
|
7
|
+
|
8
|
+
def initialize()
|
9
|
+
@valid_file_types = ['aspx', 'ascx', 'js', 'css', 'png', 'gif', 'jpeg', 'dll']
|
10
|
+
end
|
11
|
+
|
12
|
+
def execute()
|
13
|
+
raise "Please specify the directory where the features to package exist" if @source_dir.nil?
|
14
|
+
raise "Please specify the directory packages should be placed into" if @package_dir.nil?
|
15
|
+
|
16
|
+
Dir[@source_dir + '/**/.feature'].each do |feature|
|
17
|
+
next if File.basename(File.dirname(feature)).downcase == File.basename(@source_dir).downcase
|
18
|
+
|
19
|
+
feature_config = YAML.load(File.read(feature))
|
20
|
+
raise "The feature config does not contain the destination name" if !feature_config.has_key?('destination_name')
|
21
|
+
|
22
|
+
destination = File.expand_path(File.join(@package_dir, feature_config['destination_name']))
|
23
|
+
FileUtils.mkdir_p(destination)
|
24
|
+
|
25
|
+
feature_root = File.expand_path(File.dirname(feature) + '/../')
|
26
|
+
|
27
|
+
Dir[feature_root + '/**/**'].each do |file|
|
28
|
+
next if File.directory?(file)
|
29
|
+
next if is_not_valid_file_type(file)
|
30
|
+
file_destination = File.join(destination, file.gsub(/#{feature_root}/, ''))
|
31
|
+
FileUtils.mkdir_p(File.dirname(file_destination)) if(!File.exists?(File.dirname(file_destination)))
|
32
|
+
File.copy(file, file_destination)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def is_not_valid_file_type(file)
|
40
|
+
@valid_file_types.each do |v|
|
41
|
+
return false if !file.match(/\.#{v}$/).nil?
|
42
|
+
end
|
43
|
+
return true
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
class WebsiteDeployFailed < Exception
|
2
|
+
end
|
3
|
+
|
4
|
+
class WebsiteDeployVerifier
|
5
|
+
|
6
|
+
attr_accessor :url, :type
|
7
|
+
|
8
|
+
def initialize(downloader = Downloader.new)
|
9
|
+
@downloader = downloader
|
10
|
+
debugger
|
11
|
+
end
|
12
|
+
|
13
|
+
def execute()
|
14
|
+
debugger
|
15
|
+
raise "Url not specified" if @url.nil?
|
16
|
+
raise "Application type not specified" if @type.nil?
|
17
|
+
|
18
|
+
if (@downloader.download(@url) =~ /<title>Exception of type '.*' was thrown<\title>/) != nil
|
19
|
+
|
20
|
+
raise WebsiteDeployFailed
|
21
|
+
end
|
22
|
+
true
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class WebsiteRegexs
|
27
|
+
|
28
|
+
def self.aspnet()
|
29
|
+
"<title>Exception of type '.*' was thrown.</title>"
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
class Downloader
|
35
|
+
def download(url)
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
data/rakefile.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'lib/seabass'
|
2
|
-
|
3
1
|
namespace :specs do
|
4
2
|
require 'spec/rake/spectask'
|
5
3
|
|
@@ -12,17 +10,6 @@ namespace :specs do
|
|
12
10
|
end
|
13
11
|
end
|
14
12
|
|
15
|
-
namespace :example do
|
16
|
-
require 'rubygems'
|
17
|
-
|
18
|
-
robocopy do |r|
|
19
|
-
r.files << "foo.txt"
|
20
|
-
r.files << "bar.txt"
|
21
|
-
r.directories << "baz"
|
22
|
-
r.destination = "foo"
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
13
|
namespace :jeweler do
|
27
14
|
begin
|
28
15
|
require 'jeweler'
|
@@ -39,6 +26,7 @@ namespace :jeweler do
|
|
39
26
|
gs.add_dependency('albacore', '>= 0.1.5')
|
40
27
|
gs.add_development_dependency('rspec', '>= 1.2.8')
|
41
28
|
gs.add_development_dependency('jeweler', '>= 1.2.1')
|
29
|
+
gs.add_development_dependency('mocha', '>= 0.9.8')
|
42
30
|
end
|
43
31
|
Jeweler::GemcutterTasks.new
|
44
32
|
rescue LoadError
|
@@ -0,0 +1,110 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title>Exception of type 'System.Exception' was thrown.</title>
|
4
|
+
<style>
|
5
|
+
body {font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;}
|
6
|
+
p {font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px}
|
7
|
+
b {font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px}
|
8
|
+
H1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
|
9
|
+
H2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
|
10
|
+
pre {font-family:"Lucida Console";font-size: .9em}
|
11
|
+
.marker {font-weight: bold; color: black;text-decoration: none;}
|
12
|
+
.version {color: gray;}
|
13
|
+
.error {margin-bottom: 10px;}
|
14
|
+
.expandable { text-decoration:underline; font-weight:bold; color:navy; cursor:hand; }
|
15
|
+
</style>
|
16
|
+
</head>
|
17
|
+
|
18
|
+
<body bgcolor="white">
|
19
|
+
|
20
|
+
<span><H1>Server Error in '/' Application.<hr width=100% size=1 color=silver></H1>
|
21
|
+
|
22
|
+
<h2> <i>Exception of type 'System.Exception' was thrown.</i> </h2></span>
|
23
|
+
|
24
|
+
<font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">
|
25
|
+
|
26
|
+
<b> Description: </b>An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
|
27
|
+
|
28
|
+
<br><br>
|
29
|
+
|
30
|
+
<b> Exception Details: </b>System.Exception: Exception of type 'System.Exception' was thrown.<br><br>
|
31
|
+
|
32
|
+
<b>Source Error:</b> <br><br>
|
33
|
+
|
34
|
+
<table width=100% bgcolor="#ffffcc">
|
35
|
+
<tr>
|
36
|
+
<td>
|
37
|
+
<code><pre>
|
38
|
+
|
39
|
+
Line 19: public ActionResult Index()
|
40
|
+
Line 20: {
|
41
|
+
<font color=red>Line 21: throw new Exception();
|
42
|
+
</font>Line 22:
|
43
|
+
Line 23: if (!String.IsNullOrEmpty(UserReturnMessage))</pre></code>
|
44
|
+
|
45
|
+
</td>
|
46
|
+
</tr>
|
47
|
+
</table>
|
48
|
+
|
49
|
+
<br>
|
50
|
+
|
51
|
+
<b> Source File: </b> C:\Foo.cs<b> Line: </b> 21
|
52
|
+
<br><br>
|
53
|
+
|
54
|
+
<b>Stack Trace:</b> <br><br>
|
55
|
+
|
56
|
+
<table width=100% bgcolor="#ffffcc">
|
57
|
+
<tr>
|
58
|
+
<td>
|
59
|
+
<code><pre>
|
60
|
+
|
61
|
+
[Exception: Exception of type 'System.Exception' was thrown.]
|
62
|
+
lambda_method(ExecutionScope , ControllerBase , Object[] ) +30
|
63
|
+
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +236
|
64
|
+
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +31
|
65
|
+
System.Web.Mvc.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a() +85
|
66
|
+
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +657347
|
67
|
+
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +288
|
68
|
+
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +658084
|
69
|
+
System.Web.Mvc.Controller.ExecuteCore() +125
|
70
|
+
System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__4() +48
|
71
|
+
System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21
|
72
|
+
System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +15
|
73
|
+
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +85
|
74
|
+
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +51
|
75
|
+
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +454
|
76
|
+
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +263
|
77
|
+
</pre></code>
|
78
|
+
|
79
|
+
</td>
|
80
|
+
</tr>
|
81
|
+
</table>
|
82
|
+
|
83
|
+
<br>
|
84
|
+
|
85
|
+
<hr width=100% size=1 color=silver>
|
86
|
+
|
87
|
+
<b>Version Information:</b> Microsoft .NET Framework Version:2.0.50727.4927; ASP.NET Version:2.0.50727.4927
|
88
|
+
|
89
|
+
</font>
|
90
|
+
|
91
|
+
</body>
|
92
|
+
</html>
|
93
|
+
<!--
|
94
|
+
[Exception]: Exception of type 'System.Exception' was thrown.
|
95
|
+
at lambda_method(ExecutionScope , ControllerBase , Object[] )
|
96
|
+
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
|
97
|
+
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
|
98
|
+
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a()
|
99
|
+
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
|
100
|
+
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
|
101
|
+
at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
|
102
|
+
at System.Web.Mvc.Controller.ExecuteCore()
|
103
|
+
at System.Web.Mvc.MvcHandler.<>c__DisplayClass8.<BeginProcessRequest>b__4()
|
104
|
+
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0()
|
105
|
+
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _)
|
106
|
+
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
|
107
|
+
at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
|
108
|
+
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
|
109
|
+
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
|
110
|
+
-->
|
@@ -0,0 +1,101 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
4
|
+
<html id="ctl00_pageHtmlTag" xmlns:og="http://opengraphprotocol.org/schema/" xmlns:fb="http://www.facebook.com/2008/fbml" xmlns="http://www.w3.org/1999/xhtml" lang="en-GB" xml:lang="en-GB">
|
5
|
+
<head id="ctl00_pageHtmlHead"><title>
|
6
|
+
toptable - Restaurants, Reviews, Offers and Restaurant Booking
|
7
|
+
</title><link rel="canonical" href="http://toptable.com/" /><link href="styles/tt-styles.css?ver=19.0" rel="stylesheet" type="text/css" media="screen, print" /><link href="styles/print-min.css?ver=19.0" rel="stylesheet" type="text/css" media="print" />
|
8
|
+
<!--[if IE 6]>
|
9
|
+
<link href="styles/ie6.css?ver=19.0" rel="stylesheet" type="text/css" media="screen, print" />
|
10
|
+
<![endif]-->
|
11
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta id="ctl00_metaDescription" name="description" content="UK and Europe's leading restaurant reservation site - diner reviews, special offers and online booking. All free, fast and confirmed." /><meta id="ctl00_metaKeywords" name="keywords" content="venue, restaurant, bar, club, reviews, booking, online" /><meta name="verify-v1" content="s8S0ny2OsScY8FTcpYDNVcYaVdTURdJ6kReJCa2itCI=" /><meta name="msvalidate.01" content="284B9E010AE04E7A5C7709C5425A6605" /><link rel="apple-touch-icon" href="images/icons/iphone-homescreen.png" /><link href="/home/WebResource.axd?d=pPyiEUtn0pvBAnLkfcFmsCBZpn10hZQ-g7SR3D8ta3UkzGvlLexhSxaX6eQlLiY6ouSNL9_ncb0xOjJNL_XOJg2&t=634158490690898055" type="text/css" rel="stylesheet" /></head>
|
12
|
+
<body id="ctl00_pageBody">
|
13
|
+
<form name="aspnetForm" method="post" action="" id="aspnetForm">
|
14
|
+
|
15
|
+
</form>
|
16
|
+
<script type="text/javascript">
|
17
|
+
//<![CDATA[
|
18
|
+
var theForm = document.forms['aspnetForm'];
|
19
|
+
if (!theForm) {
|
20
|
+
theForm = document.aspnetForm;
|
21
|
+
}
|
22
|
+
function __doPostBack(eventTarget, eventArgument) {
|
23
|
+
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
|
24
|
+
theForm.__EVENTTARGET.value = eventTarget;
|
25
|
+
theForm.__EVENTARGUMENT.value = eventArgument;
|
26
|
+
theForm.submit();
|
27
|
+
}
|
28
|
+
}
|
29
|
+
//]]>
|
30
|
+
</script><script src="/home/WebResource.axd?d=0Yz8OC54vhz2Jy161N8JaQ2&t=634051148591131846" type="text/javascript"></script><script src="/home/ScriptResource.axd?d=L7YJV0cjjBPfOr6_DGJalUrlxsTKFiRDXlkcd4hpxFUULEuvcUcSBvQfQjTod7UQi6JqYoKFV2hl2TXkBjBhgw2&t=1fdc34a" type="text/javascript"></script><script type="text/javascript">
|
31
|
+
//<![CDATA[
|
32
|
+
var __cultureInfo = '{"name":"en-GB","numberFormat":{"CurrencyDecimalDigits":2,"CurrencyDecimalSeparator":".","IsReadOnly":false,"CurrencyGroupSizes":[3],"NumberGroupSizes":[3],"PercentGroupSizes":[3],"CurrencyGroupSeparator":",","CurrencySymbol":"£","NaNSymbol":"NaN","CurrencyNegativePattern":1,"NumberNegativePattern":1,"PercentPositivePattern":0,"PercentNegativePattern":0,"NegativeInfinitySymbol":"-Infinity","NegativeSign":"-","NumberDecimalDigits":2,"NumberDecimalSeparator":".","NumberGroupSeparator":",","CurrencyPositivePattern":0,"PositiveInfinitySymbol":"Infinity","PositiveSign":"+","PercentDecimalDigits":2,"PercentDecimalSeparator":".","PercentGroupSeparator":",","PercentSymbol":"%","PerMilleSymbol":"‰","NativeDigits":["0","1","2","3","4","5","6","7","8","9"],"DigitSubstitution":1},"dateTimeFormat":{"AMDesignator":"AM","Calendar":{"MinSupportedDateTime":"\/Date(-62135596800000)\/","MaxSupportedDateTime":"\/Date(253402300799999)\/","AlgorithmType":1,"CalendarType":1,"Eras":[1],"TwoDigitYearMax":2029,"IsReadOnly":false},"DateSeparator":"/","FirstDayOfWeek":1,"CalendarWeekRule":0,"FullDateTimePattern":"dd MMMM yyyy HH:mm:ss","LongDatePattern":"dd MMMM yyyy","LongTimePattern":"HH:mm:ss","MonthDayPattern":"dd MMMM","PMDesignator":"PM","RFC1123Pattern":"ddd, dd MMM yyyy HH\u0027:\u0027mm\u0027:\u0027ss \u0027GMT\u0027","ShortDatePattern":"dd/MM/yyyy","ShortTimePattern":"HH:mm","SortableDateTimePattern":"yyyy\u0027-\u0027MM\u0027-\u0027dd\u0027T\u0027HH\u0027:\u0027mm\u0027:\u0027ss","TimeSeparator":":","UniversalSortableDateTimePattern":"yyyy\u0027-\u0027MM\u0027-\u0027dd HH\u0027:\u0027mm\u0027:\u0027ss\u0027Z\u0027","YearMonthPattern":"MMMM yyyy","AbbreviatedDayNames":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"ShortestDayNames":["Su","Mo","Tu","We","Th","Fr","Sa"],"DayNames":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"AbbreviatedMonthNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthNames":["January","February","March","April","May","June","July","August","September","October","November","December",""],"IsReadOnly":false,"NativeCalendarName":"Gregorian Calendar","AbbreviatedMonthGenitiveNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthGenitiveNames":["January","February","March","April","May","June","July","August","September","October","November","December",""]}}';//]]>
|
33
|
+
</script><script src="/home/ScriptResource.axd?d=ZG1M1St-ywb86nnEsfeOp7azf1boTqFFmfIA7xocGDMUsPlGKsPqeGJp8yyEeG9XppBp7WpW2e-VhFzMJIAIRLX6EeBFYcp06RU6lMUvFbg1&t=ffffffff8766d9d2" type="text/javascript"></script><script src="/home/ScriptResource.axd?d=ZG1M1St-ywb86nnEsfeOp7azf1boTqFFmfIA7xocGDMUsPlGKsPqeGJp8yyEeG9XuZpt3NZMe5IKbT2GfKzQ7Noufk_XxeYTiX-pYn0Z2PY1&t=ffffffff8766d9d2" type="text/javascript"></script><script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script><script type="text/javascript" src="http://toptable.com/script/scripts.ashx?js=a%2cb%2cc%2ce%2cj%2cl%2cp%2cq%2cr%2cs%2ct"></script><script src="Externals/Scripts/InternationalLocLinks-min.js?ver=19.0" type="text/javascript"></script><script src="Externals/Scripts/NavLoginControl-min.js?ver=19.0" type="text/javascript"></script><script src="/home/ScriptResource.axd?d=hz4xdQOOkPjRWBuK1G4_3wRnCnr4BI8LNqyCu6j4Q6xb__Efphuq_YSfOflZEBVZxPucBlgzSMYu4hoY1g32GA2&t=ffffffff982386eb" type="text/javascript"></script><script src="/home/ScriptResource.axd?d=hz4xdQOOkPjRWBuK1G4_3wRnCnr4BI8LNqyCu6j4Q6xkGg_h3M5ZvBiUMzT1ryuhC8L7KkEKwe2x_XFZDigZ21Jqr2K9vfxnnD2W1MjwqAE1&t=ffffffff982386eb" type="text/javascript"></script><script src="/home/ScriptResource.axd?d=hz4xdQOOkPjRWBuK1G4_3wRnCnr4BI8LNqyCu6j4Q6w3KtD_IEaeArNxmBjvVRuOOemzfdEsh7kU1h7lsCvy6owJY0q4geXy0jbVvtqXGfY1&t=ffffffff982386eb" type="text/javascript"></script><script src="/home/ScriptResource.axd?d=hz4xdQOOkPjRWBuK1G4_3wRnCnr4BI8LNqyCu6j4Q6wdcfXZp0aoQTVbT4ql2REFMPa23Fur_Sap52NkxgYyt2-XPa9ronF0KPobfDZZwUHKPjIIg2RIvDe-aGJ_Za_o0&t=ffffffff982386eb" type="text/javascript"></script><script src="/home/ScriptResource.axd?d=hz4xdQOOkPjRWBuK1G4_3wRnCnr4BI8LNqyCu6j4Q6xmZOrYJ7592dxYu4xsKbY2B1c6v4Yobi2dQivrPqPUOQ2&t=ffffffff982386eb" type="text/javascript"></script><script src="/home/ScriptResource.axd?d=hz4xdQOOkPjRWBuK1G4_3wRnCnr4BI8LNqyCu6j4Q6zqlu2BSSzowEyBaTzcN-UOUFeLPN3DC6F8vasgKspyDw2&t=ffffffff982386eb" type="text/javascript"></script><script src="/home/ScriptResource.axd?d=hz4xdQOOkPjRWBuK1G4_3wRnCnr4BI8LNqyCu6j4Q6zqlu2BSSzowEyBaTzcN-UOe5vMHgZBD6orIKSPZ5x9gRRf9y4ui-a6RP9ndskqXiQ1&t=ffffffff982386eb" type="text/javascript"></script><script src="/home/ScriptResource.axd?d=hz4xdQOOkPjRWBuK1G4_3wRnCnr4BI8LNqyCu6j4Q6y1e0NVCLTNzpKJJHDpfU_7dJrGTMusB5qMzNG4Lzz6sHVGNgHPJM1uONpWudINAX81&t=ffffffff982386eb" type="text/javascript"></script><script src="/home/ScriptResource.axd?d=hz4xdQOOkPjRWBuK1G4_3wRnCnr4BI8LNqyCu6j4Q6wFY7R7nue-wCtnr2Az2diFwuCQKYtC9JCwpnQOQtgIjZJ4aPtrZ-bIfLuxJdTJ3Jo1&t=ffffffff982386eb" type="text/javascript"></script><script src="webservices/freetextsearch.svc/js" type="text/javascript"></script><script src="webservices/VenueAvailability.svc/js" type="text/javascript"></script><script type="text/javascript">
|
34
|
+
//<![CDATA[
|
35
|
+
function WebForm_OnSubmit() {
|
36
|
+
if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false) return false;
|
37
|
+
return true;
|
38
|
+
}
|
39
|
+
//]]>
|
40
|
+
</script><script type="text/javascript">
|
41
|
+
//<![CDATA[
|
42
|
+
Sys.WebForms.PageRequestManager._initialize('ctl00$ScriptManager$ScriptManagerControl', document.getElementById('aspnetForm'));
|
43
|
+
Sys.WebForms.PageRequestManager.getInstance()._updateControls([], [], [], 90);
|
44
|
+
//]]>
|
45
|
+
</script><script type="text/javascript">showPanelBlock1(document.getElementById('tab1'), 'tabPanel1');</script><script type="text/javascript">showPanelBlock2(document.getElementById('tab3'), 'tabPanel3');</script><script type="text/javascript">
|
46
|
+
var _gaq = _gaq || [];
|
47
|
+
_gaq.push(['_setAccount', 'UA-2621903-4']);
|
48
|
+
_gaq.push(['_setDomainName', 'none']);
|
49
|
+
_gaq.push(['_setAllowLinker', true]);
|
50
|
+
_gaq.push(['_trackPageview']);
|
51
|
+
</script><script type="text/javascript">
|
52
|
+
(function() {
|
53
|
+
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
54
|
+
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
55
|
+
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
56
|
+
})();
|
57
|
+
</script><script type="text/javascript">
|
58
|
+
//<![CDATA[
|
59
|
+
var Page_ValidationSummaries = new Array(document.getElementById("ctl00_SearchBox_QuickSearchValidationSummary"));
|
60
|
+
var Page_Validators = new Array(document.getElementById("ctl00_Body_VenueFinderControl_DatePickerControl_DateCustomValidator"));
|
61
|
+
//]]>
|
62
|
+
</script><script type="text/javascript">
|
63
|
+
//<![CDATA[
|
64
|
+
var ctl00_SearchBox_QuickSearchValidationSummary = document.all ? document.all["ctl00_SearchBox_QuickSearchValidationSummary"] : document.getElementById("ctl00_SearchBox_QuickSearchValidationSummary");
|
65
|
+
ctl00_SearchBox_QuickSearchValidationSummary.validationGroup = "QuickSearch";
|
66
|
+
var ctl00_Body_VenueFinderControl_DatePickerControl_DateCustomValidator = document.all ? document.all["ctl00_Body_VenueFinderControl_DatePickerControl_DateCustomValidator"] : document.getElementById("ctl00_Body_VenueFinderControl_DatePickerControl_DateCustomValidator");
|
67
|
+
ctl00_Body_VenueFinderControl_DatePickerControl_DateCustomValidator.display = "None";
|
68
|
+
ctl00_Body_VenueFinderControl_DatePickerControl_DateCustomValidator.validationGroup = "VenueFinder";
|
69
|
+
ctl00_Body_VenueFinderControl_DatePickerControl_DateCustomValidator.evaluationfunction = "CustomValidatorEvaluateIsValid";
|
70
|
+
//]]>
|
71
|
+
</script><script type="text/javascript">
|
72
|
+
//<![CDATA[
|
73
|
+
|
74
|
+
document.getElementById('ctl00_SearchBox_QuickSearchValidationSummary').dispose = function() {
|
75
|
+
Array.remove(Page_ValidationSummaries, document.getElementById('ctl00_SearchBox_QuickSearchValidationSummary'));
|
76
|
+
}
|
77
|
+
|
78
|
+
var Page_ValidationActive = false;
|
79
|
+
if (typeof(ValidatorOnLoad) == "function") {
|
80
|
+
ValidatorOnLoad();
|
81
|
+
}
|
82
|
+
|
83
|
+
function ValidatorOnSubmit() {
|
84
|
+
if (Page_ValidationActive) {
|
85
|
+
return ValidatorCommonOnSubmit();
|
86
|
+
}
|
87
|
+
else {
|
88
|
+
return true;
|
89
|
+
}
|
90
|
+
}
|
91
|
+
Sys.Application.initialize();
|
92
|
+
Sys.Application.add_init(function() {
|
93
|
+
$create(AjaxControlToolkit.DropDownBehavior, {"dropArrowBackgroundColor":"Transparent","dropArrowImageUrl":"images/blank.png","dropDownControl":$get("ctl00_LanguageSelector_OptionsPanel"),"dynamicServicePath":"/Home/default.aspx","highlightBackgroundColor":"White","highlightBorderColor":"#CCCCCC","id":"ctl00_LanguageSelector_LanguagesExtender"}, null, null, $get("ctl00_LanguageSelector_languagescontainer"));
|
94
|
+
});
|
95
|
+
|
96
|
+
document.getElementById('ctl00_Body_VenueFinderControl_DatePickerControl_DateCustomValidator').dispose = function() {
|
97
|
+
Array.remove(Page_Validators, document.getElementById('ctl00_Body_VenueFinderControl_DatePickerControl_DateCustomValidator'));
|
98
|
+
}
|
99
|
+
//]]>
|
100
|
+
</script></body>
|
101
|
+
</html>
|
data/specs/specs.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/specs'
|
2
|
+
|
3
|
+
describe "When I verify an asp.net application which has NOT successfully been deployed" do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
@downloader = mock()
|
7
|
+
@downloader.expects(:download).returns(Deploys.aspnet_failed)
|
8
|
+
@verifier = WebsiteDeployVerifier.new(@downloader)
|
9
|
+
@verifier.type = "aspnet"
|
10
|
+
@verifier.url = "http://foo.com"
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should it should raise an exception" do
|
14
|
+
|
15
|
+
lambda { @verifier.execute }.should raise_exception(WebsiteDeployFailed)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "When I do not specify a url to verify" do
|
20
|
+
|
21
|
+
before(:all) do
|
22
|
+
@verifier = WebsiteDeployVerifier.new(mock())
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should raise an error" do
|
26
|
+
lambda { @verifier.execute }.should raise_exception
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "When I verify an asp.net application which has successfully been deployed" do
|
31
|
+
before(:all) do
|
32
|
+
@downloader = mock()
|
33
|
+
@downloader.expects(:download).returns(Deploys.aspnet_success)
|
34
|
+
@verifier = WebsiteDeployVerifier.new(@downloader)
|
35
|
+
@verifier.url = "http://foo.com"
|
36
|
+
@verifier.type = "aspnet"
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should it return true" do
|
40
|
+
@verifier.execute.should == true
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
class Deploys
|
46
|
+
def self.method_missing(m, *args)
|
47
|
+
return load(m)
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def self.load(name)
|
53
|
+
return File.read(File.dirname(__FILE__) + "/sample_data/deploys/#{name}.html")
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: seabass
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 0.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- James Hollingworth
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-10-24 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -82,6 +82,22 @@ dependencies:
|
|
82
82
|
version: 1.2.1
|
83
83
|
type: :development
|
84
84
|
version_requirements: *id004
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: mocha
|
87
|
+
prerelease: false
|
88
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ">="
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
hash: 43
|
94
|
+
segments:
|
95
|
+
- 0
|
96
|
+
- 9
|
97
|
+
- 8
|
98
|
+
version: 0.9.8
|
99
|
+
type: :development
|
100
|
+
version_requirements: *id005
|
85
101
|
description: Easily deploy your .NET solutions with Ruby and Rake, using this suite of Rake tasks.
|
86
102
|
email: jamiehollingworth@gmail.com
|
87
103
|
executables: []
|
@@ -93,11 +109,17 @@ extra_rdoc_files:
|
|
93
109
|
files:
|
94
110
|
- VERSION
|
95
111
|
- install_dependencies.rb
|
112
|
+
- lib/rake/feature_consumer_task.rb
|
113
|
+
- lib/rake/feature_packager_task.rb
|
96
114
|
- lib/rake/robocopy_task.rb
|
115
|
+
- lib/rake/website_deploy_verifyication_task.rb
|
97
116
|
- lib/seabass.rb
|
98
117
|
- lib/seabass/env.rb
|
118
|
+
- lib/seabass/feature_consumer.rb
|
119
|
+
- lib/seabass/feature_packager.rb
|
99
120
|
- lib/seabass/log.rb
|
100
121
|
- lib/seabass/robocopy.rb
|
122
|
+
- lib/seabass/website_deploy_verifier.rb
|
101
123
|
- lib/tools/robocopy.exe
|
102
124
|
- rakefile.rb
|
103
125
|
- readme.textile
|
@@ -105,6 +127,10 @@ files:
|
|
105
127
|
- specs/mocks/mock_executor.rb
|
106
128
|
- specs/mocks/mock_robocopy.rb
|
107
129
|
- specs/robocopy_spec.rb
|
130
|
+
- specs/sample_data/deploys/aspnet_failed.html
|
131
|
+
- specs/sample_data/deploys/aspnet_success.html
|
132
|
+
- specs/specs.rb
|
133
|
+
- specs/website_deploy_verifier_spec.rb
|
108
134
|
has_rdoc: true
|
109
135
|
homepage: http://github.com/jhollingworth/seabass
|
110
136
|
licenses: []
|