whereuat 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/.gitignore +21 -0
- data/LICENSE +20 -0
- data/README.rdoc +48 -0
- data/Rakefile +22 -0
- data/VERSION +1 -0
- data/lib/whereuat/configuration.rb +21 -0
- data/lib/whereuat/helpers.rb +9 -0
- data/lib/whereuat/javascript/whereuat.js +110 -0
- data/lib/whereuat/rack_app.rb +94 -0
- data/lib/whereuat/stylesheets/bg-uat.gif +0 -0
- data/lib/whereuat/stylesheets/spinner.gif +0 -0
- data/lib/whereuat/stylesheets/uat-bg.png +0 -0
- data/lib/whereuat/stylesheets/whereuat-close.png +0 -0
- data/lib/whereuat/stylesheets/whereuat-open.png +0 -0
- data/lib/whereuat/stylesheets/whereuat.css +152 -0
- data/lib/whereuat/stylesheets/whereuat.png +0 -0
- data/lib/whereuat/templates/index.haml +18 -0
- data/lib/whereuat.rb +19 -0
- data/whereuat.gemspec +66 -0
- metadata +134 -0
data/.document
ADDED
data/.gitignore
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 Plus2
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
= whereuat
|
2
|
+
|
3
|
+
Adds a slide out panel to your rails app that directs clients to test stories that have been marked as 'delivered' in Pivotal Tracker.
|
4
|
+
|
5
|
+
== Installing
|
6
|
+
|
7
|
+
Add whereuat to your Gemfile:
|
8
|
+
|
9
|
+
gem 'whereuat'
|
10
|
+
|
11
|
+
Create an initializer to add the Whereuat::RackApp to your middleware stack and configure your pivotal tracker api token and project id:
|
12
|
+
|
13
|
+
require 'whereuat'
|
14
|
+
Rails.configuration.middleware.use(Whereuat::RackApp)
|
15
|
+
|
16
|
+
Whereuat.configure do |config|
|
17
|
+
config.pivotal_tracker_token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
18
|
+
config.pivotal_tracker_project = 123456
|
19
|
+
end
|
20
|
+
|
21
|
+
Use the following helper somewhere in your application layout (we recommend at the end of the body):
|
22
|
+
|
23
|
+
= whereuat
|
24
|
+
|
25
|
+
The helper will insert a smidgeon of javascript (jquery is assumed to be available) that will add a tiny tab on the LHS
|
26
|
+
of each page.
|
27
|
+
|
28
|
+
Reload a page from your app and give it a whirl.
|
29
|
+
|
30
|
+
== Note on Patches/Pull Requests
|
31
|
+
|
32
|
+
* Fork the project.
|
33
|
+
* Make your feature addition or bug fix.
|
34
|
+
* Add tests for it. This is important so I don't break it in a
|
35
|
+
future version unintentionally.
|
36
|
+
* Commit, do not mess with rakefile, version, or history.
|
37
|
+
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
38
|
+
* Send me a pull request. Bonus points for topic branches.
|
39
|
+
|
40
|
+
== Contributors
|
41
|
+
|
42
|
+
Ben Askins
|
43
|
+
Lachie Cox
|
44
|
+
Ben Webster
|
45
|
+
|
46
|
+
== Copyright
|
47
|
+
|
48
|
+
Copyright (c) 2010 Plus2. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "whereuat"
|
8
|
+
gem.summary = %Q{Direct your clients to test delivered features}
|
9
|
+
gem.description = %Q{Adds a toolbar to your rails app that directs your clients to test stories that have been marked as 'delivered' in Pivotal Tracker }
|
10
|
+
gem.email = "ben.askins@gmail.com"
|
11
|
+
gem.homepage = "http://github.com/plus2/whereuat"
|
12
|
+
gem.authors = ["Ben Askins"]
|
13
|
+
# gem is a Gem::Specificatiohttp://www.rubygems.org/read/chapter/20 n... see http://www.rubygems.org/read/chapter/20 for additional settings
|
14
|
+
gem.add_dependency("pivotal-tracker", ">= 0.1.3")
|
15
|
+
gem.add_dependency("haml", ">= 3.0.0")
|
16
|
+
gem.add_dependency("rack", ">= 1.0.0")
|
17
|
+
end
|
18
|
+
Jeweler::GemcutterTasks.new
|
19
|
+
rescue LoadError
|
20
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
21
|
+
end
|
22
|
+
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.6
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Whereuat
|
2
|
+
|
3
|
+
class Configuration
|
4
|
+
attr_accessor :pivotal_tracker_token
|
5
|
+
attr_accessor :pivotal_tracker_project
|
6
|
+
|
7
|
+
attr_accessor :whereuat_stylesheet_url
|
8
|
+
attr_accessor :whereuat_javascript_url
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
self.whereuat_stylesheet_url = "http://github.com/plus2/whereuat/raw/master/lib/whereuat/stylesheets/whereuat.css"
|
12
|
+
self.whereuat_javascript_url = "http://github.com/plus2/whereuat/raw/master/lib/whereuat/javascript/whereuat.js"
|
13
|
+
end
|
14
|
+
|
15
|
+
def use_dev_resources!
|
16
|
+
self.whereuat_stylesheet_url = "/whereuat/whereuat.css"
|
17
|
+
self.whereuat_javascript_url = "/whereuat/whereuat.js"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
module Whereuat
|
2
|
+
module Helpers
|
3
|
+
def whereuat
|
4
|
+
"<script type='text/javascript'>var whereuat_stylesheet_url=#{Whereuat.configuration.whereuat_stylesheet_url.to_json};</script>" +
|
5
|
+
"<script type='text/javascript' src='#{Whereuat.configuration.whereuat_javascript_url}'></script>"
|
6
|
+
end
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
@@ -0,0 +1,110 @@
|
|
1
|
+
(function($) {
|
2
|
+
$(function() {
|
3
|
+
var popOver, tab;
|
4
|
+
|
5
|
+
$("body").prepend("<div id='uat-bar'><a class='go' href='#'>Show me what to test</a><div class='pop-over hide'></div></div>");
|
6
|
+
$("head").prepend("<link href='"+window.whereuat_stylesheet_url+"' media='screen' rel='stylesheet' type='text/css'>");
|
7
|
+
|
8
|
+
popOver = $("#uat-bar .pop-over");
|
9
|
+
tab = $("#uat-bar a.go");
|
10
|
+
|
11
|
+
tab.toggle(
|
12
|
+
function() {
|
13
|
+
if (popOver.find("ol").length > 0) {
|
14
|
+
slideOut();
|
15
|
+
} else {
|
16
|
+
$.ajax({
|
17
|
+
url: '/whereuat',
|
18
|
+
success: function(response) {
|
19
|
+
popOver.append(response);
|
20
|
+
slideOut();
|
21
|
+
}
|
22
|
+
});
|
23
|
+
}
|
24
|
+
},
|
25
|
+
function() {
|
26
|
+
slideIn();
|
27
|
+
}
|
28
|
+
);
|
29
|
+
|
30
|
+
function slideOut() {
|
31
|
+
popOver.show("slide", {direction: "left"}, 500);
|
32
|
+
tab.animate({left: '400px'}, 510);
|
33
|
+
}
|
34
|
+
|
35
|
+
function slideIn() {
|
36
|
+
tab.animate({left: '0px'}, 490);
|
37
|
+
popOver.hide("slide", {direction: "left"}, 500);
|
38
|
+
}
|
39
|
+
|
40
|
+
$("#uat-bar a.accept").live("click", function() {
|
41
|
+
var acceptLink, storyName, storyId, spinner, listItem;
|
42
|
+
|
43
|
+
acceptLink = $(this);
|
44
|
+
|
45
|
+
storyId = acceptLink.siblings(".story-id").html();
|
46
|
+
storyName = acceptLink.siblings("span.story");
|
47
|
+
spinner = acceptLink.siblings(".spinner");
|
48
|
+
listItem = acceptLink.parent();
|
49
|
+
|
50
|
+
spinner.fadeIn();
|
51
|
+
|
52
|
+
$.ajax({
|
53
|
+
method: "POST",
|
54
|
+
url: '/whereuat/' + storyId + '/accept',
|
55
|
+
success: function(response) {
|
56
|
+
listItem.removeClass("rejected").addClass("accepted");
|
57
|
+
spinner.fadeOut();
|
58
|
+
}
|
59
|
+
});
|
60
|
+
|
61
|
+
return false;
|
62
|
+
});
|
63
|
+
|
64
|
+
$("#uat-bar a.reject").live("click",
|
65
|
+
function() {
|
66
|
+
var rejectLink, reasonForm;
|
67
|
+
|
68
|
+
rejectLink = $(this);
|
69
|
+
|
70
|
+
reasonForm = rejectLink.siblings("form");
|
71
|
+
|
72
|
+
if (reasonForm.is(':visible')) {
|
73
|
+
reasonForm.slideUp();
|
74
|
+
} else {
|
75
|
+
reasonForm.slideDown();
|
76
|
+
}
|
77
|
+
|
78
|
+
return false;
|
79
|
+
}
|
80
|
+
);
|
81
|
+
|
82
|
+
$("#uat-bar button.reject").live("click", function() {
|
83
|
+
var button, reasonForm, storyName, storyId, spinner, listItem;
|
84
|
+
|
85
|
+
button = $(this);
|
86
|
+
|
87
|
+
reasonForm = button.parent();
|
88
|
+
storyId = reasonForm.siblings(".story-id").html();
|
89
|
+
storyName = reasonForm.siblings("span.story");
|
90
|
+
spinner = reasonForm.siblings(".spinner");
|
91
|
+
listItem = reasonForm.parent();
|
92
|
+
|
93
|
+
spinner.fadeIn();
|
94
|
+
|
95
|
+
$.ajax({
|
96
|
+
method: "POST",
|
97
|
+
url: '/whereuat/' + storyId + '/reject',
|
98
|
+
data: {reason: $(".reason").val()},
|
99
|
+
success: function(response) {
|
100
|
+
listItem.removeClass("accepted").addClass("rejected");
|
101
|
+
reasonForm.slideUp();
|
102
|
+
spinner.fadeOut();
|
103
|
+
}
|
104
|
+
});
|
105
|
+
|
106
|
+
return false;
|
107
|
+
});
|
108
|
+
|
109
|
+
});
|
110
|
+
})(jQuery);
|
@@ -0,0 +1,94 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
require 'haml'
|
3
|
+
require 'pivotal-tracker'
|
4
|
+
|
5
|
+
require 'pp'
|
6
|
+
|
7
|
+
module Whereuat
|
8
|
+
class RackApp
|
9
|
+
PT = PivotalTracker
|
10
|
+
|
11
|
+
def initialize(app)
|
12
|
+
@app = app
|
13
|
+
PT::Client.token = config.pivotal_tracker_token
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(env)
|
17
|
+
req = Rack::Request.new(env)
|
18
|
+
|
19
|
+
if env?('development') && dev_rsp = dev_mode(req)
|
20
|
+
return dev_rsp
|
21
|
+
end
|
22
|
+
|
23
|
+
case req.path
|
24
|
+
when %r{^/whereuat$}
|
25
|
+
index
|
26
|
+
when %r{^/whereuat/(.*)/accept}
|
27
|
+
accept $1
|
28
|
+
when %r{^/whereuat/(.*)/reject}
|
29
|
+
reject $1, req.params["reason"]
|
30
|
+
else
|
31
|
+
@app.call(env)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def env?(env)
|
36
|
+
(ENV['RACK_ENV'] || (defined?(Rails) && Rails.env)) == env
|
37
|
+
end
|
38
|
+
|
39
|
+
def dev_mode(req)
|
40
|
+
case req.path
|
41
|
+
when %r{^/whereuat/whereuat.css$}
|
42
|
+
[200, {"Content-Type" => "text/css"}, [ (root + 'lib/whereuat/stylesheets/whereuat.css').read ]]
|
43
|
+
|
44
|
+
when %r{^/whereuat/whereuat.js$}
|
45
|
+
[200, {"Content-Type" => "text/javascript"}, [ (root + 'lib/whereuat/javascript/whereuat.js').read ]]
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def index
|
51
|
+
@stories = project.stories.all(:current_state => "delivered")
|
52
|
+
haml "index"
|
53
|
+
end
|
54
|
+
|
55
|
+
def accept(pivotal_story_id)
|
56
|
+
story = project.stories.find(pivotal_story_id.to_i)
|
57
|
+
story.update(:current_state => 'accepted')
|
58
|
+
render "Accepted"
|
59
|
+
end
|
60
|
+
|
61
|
+
def reject(pivotal_story_id, reason=nil)
|
62
|
+
story = project.stories.find(pivotal_story_id.to_i)
|
63
|
+
story.update(:current_state => 'rejected')
|
64
|
+
story.notes.create(:text => "[rejected] #{reason}")
|
65
|
+
render "Rejected"
|
66
|
+
end
|
67
|
+
|
68
|
+
def project
|
69
|
+
@project ||= PT::Project.find(config.pivotal_tracker_project)
|
70
|
+
end
|
71
|
+
|
72
|
+
def haml(file_name, options={})
|
73
|
+
template = (template_root + "#{file_name}.haml").read
|
74
|
+
render Haml::Engine.new(template).render(self)
|
75
|
+
end
|
76
|
+
|
77
|
+
def render(html)
|
78
|
+
[200, {"Content-Type" => "text/html"}, [html]]
|
79
|
+
end
|
80
|
+
|
81
|
+
def root
|
82
|
+
@root ||= Pathname("../../../").expand_path(__FILE__)
|
83
|
+
end
|
84
|
+
|
85
|
+
def template_root
|
86
|
+
@template_root ||= root+'lib/whereuat/templates'
|
87
|
+
end
|
88
|
+
|
89
|
+
def config
|
90
|
+
Whereuat.configuration
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,152 @@
|
|
1
|
+
#uat-bar {
|
2
|
+
width: 400px;
|
3
|
+
text-align: center;
|
4
|
+
position: absolute;
|
5
|
+
top: 30%;
|
6
|
+
left: 0;
|
7
|
+
padding: 0;
|
8
|
+
z-index: 2147483647;
|
9
|
+
font-family: Helvetica, Arial, sans-serif;
|
10
|
+
}
|
11
|
+
|
12
|
+
#uat-bar a:link, #uat-bar a:visited {
|
13
|
+
color: #efefef;
|
14
|
+
text-decoration: none;
|
15
|
+
}
|
16
|
+
|
17
|
+
#uat-bar a:active, #uat-bar a:hover, #uat-bar a:focus {
|
18
|
+
color: #fff;
|
19
|
+
text-decoration: underline;
|
20
|
+
}
|
21
|
+
|
22
|
+
#uat-bar a.go {
|
23
|
+
position: absolute;
|
24
|
+
top: 0;
|
25
|
+
left: 0;
|
26
|
+
font-weight: bold;
|
27
|
+
padding: .5em;
|
28
|
+
display: block;
|
29
|
+
width: 42px;
|
30
|
+
height: 125px;
|
31
|
+
font-size: 0.001em;
|
32
|
+
text-indent: -2000em;
|
33
|
+
background: #212121 url(http://conversant.com.au/whereuat/uat-bg.png) no-repeat -4px -10px;
|
34
|
+
-moz-border-radius-bottomright: 10px;
|
35
|
+
-webkit-border-bottom-right-radius: 10px;
|
36
|
+
-moz-border-radius-topright: 10px;
|
37
|
+
-webkit-border-top-right-radius: 10px
|
38
|
+
}
|
39
|
+
|
40
|
+
#uat-bar a.go:hover {
|
41
|
+
background-position: -2px -10px;
|
42
|
+
}
|
43
|
+
|
44
|
+
#uat-bar .pop-over {
|
45
|
+
clear: right;
|
46
|
+
background: #212121;
|
47
|
+
color: #efefef;
|
48
|
+
text-align: left;
|
49
|
+
padding: 0 0 .75em 0;
|
50
|
+
-moz-border-radius-bottomright: 10px;
|
51
|
+
-webkit-border-bottom-right-radius: 10px;
|
52
|
+
}
|
53
|
+
|
54
|
+
#uat-bar .pop-over ol {
|
55
|
+
height: 450px;
|
56
|
+
overflow: auto;
|
57
|
+
list-style: none;
|
58
|
+
margin: 0 0 0;
|
59
|
+
padding: 5px 10px
|
60
|
+
}
|
61
|
+
|
62
|
+
#uat-bar .pop-over li {
|
63
|
+
padding: .9em .75em .75em 95px;
|
64
|
+
margin-bottom: 5px;
|
65
|
+
position: relative;
|
66
|
+
}
|
67
|
+
|
68
|
+
#uat-bar .pop-over li.header {font-size: 18px;font-weight:normal;border-bottom: 1px solid #2c2c2c;margin-bottom: 1em;padding-left: 0;}
|
69
|
+
|
70
|
+
#uat-bar .pop-over li.rejected {
|
71
|
+
background: #a82a30;
|
72
|
+
}
|
73
|
+
|
74
|
+
#uat-bar .pop-over li.accepted {
|
75
|
+
background: #9ec74e;
|
76
|
+
}
|
77
|
+
|
78
|
+
#uat-bar .pop-over li:hover {
|
79
|
+
background-color: #323232;
|
80
|
+
cursor: pointer
|
81
|
+
}
|
82
|
+
|
83
|
+
#uat-bar .pop-over li.header:hover {background:transparent;}
|
84
|
+
|
85
|
+
#uat-bar .hide {
|
86
|
+
display: none;
|
87
|
+
}
|
88
|
+
|
89
|
+
#uat-bar input {
|
90
|
+
clear: none;
|
91
|
+
}
|
92
|
+
|
93
|
+
#uat-bar .pop-over li a.accept {
|
94
|
+
position: absolute;
|
95
|
+
top: 0;
|
96
|
+
left: 0;
|
97
|
+
display:block;
|
98
|
+
width: 25px;
|
99
|
+
height: 28px;
|
100
|
+
background: url(http://conversant.com.au/whereuat/uat-bg.png) no-repeat -9px -204px;
|
101
|
+
font-size: 0.001em;
|
102
|
+
text-indent: -20000em;
|
103
|
+
}
|
104
|
+
|
105
|
+
#uat-bar .pop-over li a.accept:hover {
|
106
|
+
background-position: -9px -234px;
|
107
|
+
}
|
108
|
+
|
109
|
+
#uat-bar .pop-over li a.reject {
|
110
|
+
position: absolute;
|
111
|
+
top: 0;
|
112
|
+
left: 29px;
|
113
|
+
display:block;
|
114
|
+
width: 25px;
|
115
|
+
height: 30px;
|
116
|
+
background: url(http://conversant.com.au/whereuat/uat-bg.png) no-repeat -9px -136px;
|
117
|
+
font-size: 0.001em;
|
118
|
+
text-indent: -20000em;
|
119
|
+
}
|
120
|
+
|
121
|
+
#uat-bar .pop-over li a.reject:hover {
|
122
|
+
background-position: -9px -168px;
|
123
|
+
}
|
124
|
+
|
125
|
+
#uat-bar .pop-over li a.pivotal {
|
126
|
+
position: absolute;
|
127
|
+
top: 0;
|
128
|
+
left: 60px;
|
129
|
+
display:block;
|
130
|
+
width: 25px;
|
131
|
+
height: 30px;
|
132
|
+
background: url(http://conversant.com.au/whereuat/uat-bg.png) no-repeat -9px -301px;
|
133
|
+
font-size: 0.001em;
|
134
|
+
text-indent: -20000em;
|
135
|
+
}
|
136
|
+
|
137
|
+
#uat-bar .pop-over li a.pivotal:hover {
|
138
|
+
background-position: -9px -333px;
|
139
|
+
}
|
140
|
+
|
141
|
+
|
142
|
+
#uat-bar label {margin-top: 5px;padding-top:5px;display:block;font-weight:bold;border-top: 1px dashed #2c2c2c;}
|
143
|
+
#uat-bar textarea {width: 250px;height: 40px;margin-bottom: 5px;}
|
144
|
+
#uat-bar button.reject {
|
145
|
+
display:block;
|
146
|
+
width: 60px;
|
147
|
+
height: 25px;
|
148
|
+
background: url(http://conversant.com.au/whereuat/uat-bg.png) no-repeat -1px -275px;
|
149
|
+
font-size: 0.001em;
|
150
|
+
text-indent: -20000em;
|
151
|
+
border:none;
|
152
|
+
}
|
Binary file
|
@@ -0,0 +1,18 @@
|
|
1
|
+
- if @stories.length != 0
|
2
|
+
%ol
|
3
|
+
%li.header Stories for you to test
|
4
|
+
- @stories.each do |story|
|
5
|
+
%li
|
6
|
+
%a.accept{:href => "#accept", :title => "accept"} accept
|
7
|
+
%a.reject{:href => "#reject", :title => "reject"} reject
|
8
|
+
%a.pivotal{:href => story.url, :title => "View in Pivotal Tracker"} View in Pivotal Tracker
|
9
|
+
%img.hide.spinner(src="http://conversant.com.au/whereuat/spinner.gif")
|
10
|
+
%span.story= story.name
|
11
|
+
%span.story-id.hide= story.id
|
12
|
+
%form.hide
|
13
|
+
%label(for="reason") Reason for rejection
|
14
|
+
%textarea.reason(name="reason")
|
15
|
+
%button.reject Reject
|
16
|
+
- else
|
17
|
+
%ol
|
18
|
+
%li.no-stories There are no stories for you to test at this time.
|
data/lib/whereuat.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'whereuat/configuration'
|
2
|
+
require 'whereuat/rack_app'
|
3
|
+
require 'whereuat/helpers'
|
4
|
+
|
5
|
+
ActionView::Base.send :include, Whereuat::Helpers
|
6
|
+
|
7
|
+
module Whereuat
|
8
|
+
class << self
|
9
|
+
attr_writer :configuration
|
10
|
+
|
11
|
+
def configuration
|
12
|
+
@configuration ||= Configuration.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def configure
|
16
|
+
yield(configuration)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/whereuat.gemspec
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{whereuat}
|
8
|
+
s.version = "0.0.6"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Ben Askins"]
|
12
|
+
s.date = %q{2010-07-28}
|
13
|
+
s.description = %q{Adds a toolbar to your rails app that directs your clients to test stories that have been marked as 'delivered' in Pivotal Tracker }
|
14
|
+
s.email = %q{ben.askins@gmail.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE",
|
17
|
+
"README.rdoc"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
".gitignore",
|
22
|
+
"LICENSE",
|
23
|
+
"README.rdoc",
|
24
|
+
"Rakefile",
|
25
|
+
"VERSION",
|
26
|
+
"lib/whereuat.rb",
|
27
|
+
"lib/whereuat/configuration.rb",
|
28
|
+
"lib/whereuat/helpers.rb",
|
29
|
+
"lib/whereuat/javascript/whereuat.js",
|
30
|
+
"lib/whereuat/rack_app.rb",
|
31
|
+
"lib/whereuat/stylesheets/bg-uat.gif",
|
32
|
+
"lib/whereuat/stylesheets/spinner.gif",
|
33
|
+
"lib/whereuat/stylesheets/uat-bg.png",
|
34
|
+
"lib/whereuat/stylesheets/whereuat-close.png",
|
35
|
+
"lib/whereuat/stylesheets/whereuat-open.png",
|
36
|
+
"lib/whereuat/stylesheets/whereuat.css",
|
37
|
+
"lib/whereuat/stylesheets/whereuat.png",
|
38
|
+
"lib/whereuat/templates/index.haml",
|
39
|
+
"whereuat.gemspec"
|
40
|
+
]
|
41
|
+
s.homepage = %q{http://github.com/plus2/whereuat}
|
42
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
43
|
+
s.require_paths = ["lib"]
|
44
|
+
s.rubygems_version = %q{1.3.7}
|
45
|
+
s.summary = %q{Direct your clients to test delivered features}
|
46
|
+
|
47
|
+
if s.respond_to? :specification_version then
|
48
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
49
|
+
s.specification_version = 3
|
50
|
+
|
51
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
52
|
+
s.add_runtime_dependency(%q<pivotal-tracker>, [">= 0.1.3"])
|
53
|
+
s.add_runtime_dependency(%q<haml>, [">= 3.0.0"])
|
54
|
+
s.add_runtime_dependency(%q<rack>, [">= 1.0.0"])
|
55
|
+
else
|
56
|
+
s.add_dependency(%q<pivotal-tracker>, [">= 0.1.3"])
|
57
|
+
s.add_dependency(%q<haml>, [">= 3.0.0"])
|
58
|
+
s.add_dependency(%q<rack>, [">= 1.0.0"])
|
59
|
+
end
|
60
|
+
else
|
61
|
+
s.add_dependency(%q<pivotal-tracker>, [">= 0.1.3"])
|
62
|
+
s.add_dependency(%q<haml>, [">= 3.0.0"])
|
63
|
+
s.add_dependency(%q<rack>, [">= 1.0.0"])
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
metadata
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: whereuat
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 19
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 6
|
10
|
+
version: 0.0.6
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Ben Askins
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-07-28 00:00:00 +10:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: pivotal-tracker
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 29
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
- 1
|
33
|
+
- 3
|
34
|
+
version: 0.1.3
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: haml
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 7
|
46
|
+
segments:
|
47
|
+
- 3
|
48
|
+
- 0
|
49
|
+
- 0
|
50
|
+
version: 3.0.0
|
51
|
+
type: :runtime
|
52
|
+
version_requirements: *id002
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: rack
|
55
|
+
prerelease: false
|
56
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
hash: 23
|
62
|
+
segments:
|
63
|
+
- 1
|
64
|
+
- 0
|
65
|
+
- 0
|
66
|
+
version: 1.0.0
|
67
|
+
type: :runtime
|
68
|
+
version_requirements: *id003
|
69
|
+
description: "Adds a toolbar to your rails app that directs your clients to test stories that have been marked as 'delivered' in Pivotal Tracker "
|
70
|
+
email: ben.askins@gmail.com
|
71
|
+
executables: []
|
72
|
+
|
73
|
+
extensions: []
|
74
|
+
|
75
|
+
extra_rdoc_files:
|
76
|
+
- LICENSE
|
77
|
+
- README.rdoc
|
78
|
+
files:
|
79
|
+
- .document
|
80
|
+
- .gitignore
|
81
|
+
- LICENSE
|
82
|
+
- README.rdoc
|
83
|
+
- Rakefile
|
84
|
+
- VERSION
|
85
|
+
- lib/whereuat.rb
|
86
|
+
- lib/whereuat/configuration.rb
|
87
|
+
- lib/whereuat/helpers.rb
|
88
|
+
- lib/whereuat/javascript/whereuat.js
|
89
|
+
- lib/whereuat/rack_app.rb
|
90
|
+
- lib/whereuat/stylesheets/bg-uat.gif
|
91
|
+
- lib/whereuat/stylesheets/spinner.gif
|
92
|
+
- lib/whereuat/stylesheets/uat-bg.png
|
93
|
+
- lib/whereuat/stylesheets/whereuat-close.png
|
94
|
+
- lib/whereuat/stylesheets/whereuat-open.png
|
95
|
+
- lib/whereuat/stylesheets/whereuat.css
|
96
|
+
- lib/whereuat/stylesheets/whereuat.png
|
97
|
+
- lib/whereuat/templates/index.haml
|
98
|
+
- whereuat.gemspec
|
99
|
+
has_rdoc: true
|
100
|
+
homepage: http://github.com/plus2/whereuat
|
101
|
+
licenses: []
|
102
|
+
|
103
|
+
post_install_message:
|
104
|
+
rdoc_options:
|
105
|
+
- --charset=UTF-8
|
106
|
+
require_paths:
|
107
|
+
- lib
|
108
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
109
|
+
none: false
|
110
|
+
requirements:
|
111
|
+
- - ">="
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
hash: 3
|
114
|
+
segments:
|
115
|
+
- 0
|
116
|
+
version: "0"
|
117
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
118
|
+
none: false
|
119
|
+
requirements:
|
120
|
+
- - ">="
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
hash: 3
|
123
|
+
segments:
|
124
|
+
- 0
|
125
|
+
version: "0"
|
126
|
+
requirements: []
|
127
|
+
|
128
|
+
rubyforge_project:
|
129
|
+
rubygems_version: 1.3.7
|
130
|
+
signing_key:
|
131
|
+
specification_version: 3
|
132
|
+
summary: Direct your clients to test delivered features
|
133
|
+
test_files: []
|
134
|
+
|