bilgerat 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +2 -0
- data/Gemfile.lock +52 -0
- data/LICENSE +19 -0
- data/README.md +42 -0
- data/bilgerat.gemspec +20 -0
- data/features/error_handling.feature +21 -0
- data/features/outlines/main.feature +30 -0
- data/features/step_definitions/bilgerat_steps.rb +34 -0
- data/features/step_definitions/cucumber_steps.rb +17 -0
- data/features/support/base.rb +7 -0
- data/hipchat.yml.sample +5 -0
- data/lib/bilgerat.rb +269 -0
- metadata +127 -0
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
bilgerat (0.2.1)
|
5
|
+
cucumber (>= 1.0.0)
|
6
|
+
hipchat (~> 0.7.0)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
aruba (0.5.3)
|
12
|
+
childprocess (>= 0.3.6)
|
13
|
+
cucumber (>= 1.1.1)
|
14
|
+
rspec-expectations (>= 2.7.0)
|
15
|
+
builder (3.2.2)
|
16
|
+
childprocess (0.3.9)
|
17
|
+
ffi (~> 1.0, >= 1.0.11)
|
18
|
+
columnize (0.3.6)
|
19
|
+
cucumber (1.3.2)
|
20
|
+
builder (>= 2.1.2)
|
21
|
+
diff-lcs (>= 1.1.3)
|
22
|
+
gherkin (~> 2.12.0)
|
23
|
+
multi_json (~> 1.3)
|
24
|
+
debugger (1.2.2)
|
25
|
+
columnize (>= 0.3.1)
|
26
|
+
debugger-linecache (~> 1.1.1)
|
27
|
+
debugger-ruby_core_source (~> 1.1.5)
|
28
|
+
debugger-linecache (1.1.2)
|
29
|
+
debugger-ruby_core_source (>= 1.1.1)
|
30
|
+
debugger-ruby_core_source (1.1.7)
|
31
|
+
diff-lcs (1.2.4)
|
32
|
+
ffi (1.9.0)
|
33
|
+
gherkin (2.12.0)
|
34
|
+
multi_json (~> 1.3)
|
35
|
+
hipchat (0.7.0)
|
36
|
+
httparty
|
37
|
+
httparty
|
38
|
+
httparty (0.11.0)
|
39
|
+
multi_json (~> 1.0)
|
40
|
+
multi_xml (>= 0.5.2)
|
41
|
+
multi_json (1.7.7)
|
42
|
+
multi_xml (0.5.4)
|
43
|
+
rspec-expectations (2.13.0)
|
44
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
45
|
+
|
46
|
+
PLATFORMS
|
47
|
+
ruby
|
48
|
+
|
49
|
+
DEPENDENCIES
|
50
|
+
aruba (~> 0.5)
|
51
|
+
bilgerat!
|
52
|
+
debugger
|
data/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Copyright (c) 2013 Medidata Solutions Worldwide
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
5
|
+
in the Software without restriction, including without limitation the rights
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in
|
11
|
+
all copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
bilgerat
|
2
|
+
========
|
3
|
+
|
4
|
+
Bilgerat is a [cucumber](http://cukes.info/) output formatter that sends messages about failing scenarios to [HipChat](https://www.hipchat.com/) rooms.
|
5
|
+
|
6
|
+
|
7
|
+
usage
|
8
|
+
-----
|
9
|
+
|
10
|
+
In your Gemfile:
|
11
|
+
|
12
|
+
```ruby
|
13
|
+
gem 'bilgerat', git: 'git@github.com:mdsol/bilgerat.git'
|
14
|
+
```
|
15
|
+
|
16
|
+
On the command line:
|
17
|
+
|
18
|
+
```
|
19
|
+
cucumber --format Bilgerat --out na --format pretty
|
20
|
+
```
|
21
|
+
|
22
|
+
|
23
|
+
configuration
|
24
|
+
-----
|
25
|
+
You must supply a configuration file that contains credentials to use the HipChat API. By default Bilgerat looks for this file is config/hipchat.yml. You can override this location by setting the HIPCHAT_CONFIG_PATH environment variable.
|
26
|
+
|
27
|
+
The configuration file contains settings per context. You should set all configuration items in the default context. You can override these settings for other contexts. Use the BILGERAT_CONTEXT environment variable to choose the context.
|
28
|
+
|
29
|
+
For example our CI server runs cucumber scenarios in parallel for the first round, then reruns failing scenarios in the final round. Our config file looks like this:
|
30
|
+
|
31
|
+
```
|
32
|
+
default:
|
33
|
+
user: 'Bilge Rat #{TEST_ENV_NUMBER}'
|
34
|
+
auth_token: 'goes here'
|
35
|
+
room: 'test room'
|
36
|
+
error_color: 'red'
|
37
|
+
first_round:
|
38
|
+
error_color: 'purple'
|
39
|
+
final_round:
|
40
|
+
user: 'Final Bilge Rat'
|
41
|
+
```
|
42
|
+
|
data/bilgerat.gemspec
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = "bilgerat"
|
3
|
+
s.version = '0.2.1'
|
4
|
+
s.platform = Gem::Platform::RUBY
|
5
|
+
s.required_ruby_version = '>= 1.9.3'
|
6
|
+
s.authors = ["Joseph Shraibman"]
|
7
|
+
s.email = ["jshraibman@mdsol.com"]
|
8
|
+
s.homepage = "https://github.com/mdsol/bilgerat"
|
9
|
+
s.summary = "Cucumber output formatter that sends failure messages to Hipchat"
|
10
|
+
|
11
|
+
s.add_dependency "cucumber", ">= 1.0.0"
|
12
|
+
s.add_dependency 'hipchat', '~> 0.7.0'
|
13
|
+
|
14
|
+
s.add_development_dependency 'aruba', '~> 0.5'
|
15
|
+
s.add_development_dependency 'debugger'
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
20
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
Feature: Error handling
|
2
|
+
|
3
|
+
@announce-stderr
|
4
|
+
Scenario: Undefined steps work
|
5
|
+
And a file named "features/scenario_with_unmatched_step_def.feature" with:
|
6
|
+
"""
|
7
|
+
Feature: Outline
|
8
|
+
|
9
|
+
@tagtag
|
10
|
+
Scenario: blah blah
|
11
|
+
Given this passes
|
12
|
+
"""
|
13
|
+
And a file named "features/step_definitions/steps.rb" with:
|
14
|
+
"""
|
15
|
+
Given /^this passes$/ do
|
16
|
+
end
|
17
|
+
Given /^this passes$/ do
|
18
|
+
end
|
19
|
+
"""
|
20
|
+
When I run bilgerat with: `cucumber --format Bilgerat --out na --format pretty`
|
21
|
+
Then there should be a hipchat post matching /.*Ambiguous match of "this passes".*/
|
@@ -0,0 +1,30 @@
|
|
1
|
+
Feature: Scenario outlines
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given a standard Cucumber project directory structure
|
5
|
+
|
6
|
+
Scenario: Full information is only printed for the first example
|
7
|
+
And a file named "features/scenario_with_failing_examples.feature" with:
|
8
|
+
"""
|
9
|
+
Feature: Outline
|
10
|
+
|
11
|
+
@tagtag
|
12
|
+
Scenario Outline: blah blah
|
13
|
+
Given this <fails or passes>
|
14
|
+
Examples:
|
15
|
+
| fails or passes |
|
16
|
+
| passes |
|
17
|
+
| fails |
|
18
|
+
| fails |
|
19
|
+
"""
|
20
|
+
And a file named "features/step_definitions/steps.rb" with:
|
21
|
+
"""
|
22
|
+
Given /^this (fails|passes)$/ do |str|
|
23
|
+
str.should == 'passes'
|
24
|
+
end
|
25
|
+
"""
|
26
|
+
When I run bilgerat with: `cucumber --format Bilgerat --out na --format pretty`
|
27
|
+
Then there should be a hipchat post matching /.*@tagtag.*Example #2 failed.*/
|
28
|
+
And there should not be a hipchat post matching /@tagtag.*Example #3 failed.*/
|
29
|
+
And there should be a hipchat post matching /.*Example #3 failed.*/
|
30
|
+
|
@@ -0,0 +1,34 @@
|
|
1
|
+
def debug_file_name
|
2
|
+
'/tmp/tempfile.xml'
|
3
|
+
end
|
4
|
+
|
5
|
+
When /^I run bilgerat with: `(.*)`$/ do |cmd|
|
6
|
+
step %Q{I run `env DEBUG_BILGERAT=#{debug_file_name} #{cmd}`}
|
7
|
+
end
|
8
|
+
|
9
|
+
When /^I clear hipchat posts$/ do
|
10
|
+
File.delete(debug_file_name) if File.exists?(debug_file_name)
|
11
|
+
end
|
12
|
+
|
13
|
+
Before do
|
14
|
+
step 'I clear hipchat posts'
|
15
|
+
end
|
16
|
+
|
17
|
+
# For debugging
|
18
|
+
Then /^I print the hipchat posts$/ do
|
19
|
+
puts File.read(debug_file_name)
|
20
|
+
end
|
21
|
+
|
22
|
+
Then /^there should (not )?be a hipchat post matching \/(.*)\/$/ do |should_not, pattern|
|
23
|
+
file_text = nil
|
24
|
+
File.open(debug_file_name, 'r') do |file|
|
25
|
+
file_text = file.read
|
26
|
+
end
|
27
|
+
re = Regexp.new("<HIPPOST>#{pattern}</HIPPOST>", Regexp::MULTILINE)
|
28
|
+
|
29
|
+
if should_not
|
30
|
+
file_text.should_not match(re)
|
31
|
+
else
|
32
|
+
file_text.should match(re)
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Copied from the cucumber project
|
4
|
+
|
5
|
+
Given /^I am in (.*)$/ do |example_dir_relative_path|
|
6
|
+
@current_dir = fixtures_dir(example_dir_relative_path)
|
7
|
+
end
|
8
|
+
|
9
|
+
Given /^a standard Cucumber project directory structure$/ do
|
10
|
+
@current_dir = `mktemp -d cuc.XXXXXX`.strip
|
11
|
+
#puts "created cuc dir #{@current_dir}"
|
12
|
+
in_current_dir do
|
13
|
+
FileUtils.rm_rf 'features' if File.directory?('features')
|
14
|
+
FileUtils.mkdir_p 'features/support'
|
15
|
+
FileUtils.mkdir 'features/step_definitions'
|
16
|
+
end
|
17
|
+
end
|
data/hipchat.yml.sample
ADDED
data/lib/bilgerat.rb
ADDED
@@ -0,0 +1,269 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Based on https://github.com/cucumber/cucumber/blob/master/lib/cucumber/formatter/pretty.rb and the other cucumber
|
4
|
+
# built in formatters.
|
5
|
+
# There was no handy api so I had to reverse engineer
|
6
|
+
|
7
|
+
class Bilgerat
|
8
|
+
|
9
|
+
def initialize(step_mother, path_or_io, options)
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
def before_background(background)
|
14
|
+
@background_failed = nil
|
15
|
+
reset_scenario_info
|
16
|
+
@in_background = background
|
17
|
+
end
|
18
|
+
|
19
|
+
def after_background(background)
|
20
|
+
@in_background = nil
|
21
|
+
@background_tags = @tags
|
22
|
+
@tags = nil
|
23
|
+
end
|
24
|
+
|
25
|
+
def tag_name(tag)
|
26
|
+
(@tags ||= []) << tag
|
27
|
+
end
|
28
|
+
|
29
|
+
def scenario_name(keyword, name, file_colon_line, source_indent)
|
30
|
+
reset_scenario_info
|
31
|
+
@current_scenario_info = {keyword: keyword, name: name, file_colon_line: file_colon_line, tags: @tags}
|
32
|
+
@tags = nil
|
33
|
+
end
|
34
|
+
|
35
|
+
def after_table_row(table_row)
|
36
|
+
return unless @in_examples and Cucumber::Ast::OutlineTable::ExampleRow === table_row
|
37
|
+
@example_num += 1 if !@header_row
|
38
|
+
if table_row.exception
|
39
|
+
hipchat_exception(table_row.exception)
|
40
|
+
elsif !@header_row && table_row.failed?
|
41
|
+
hipchat_exception('<failure had no exception>')
|
42
|
+
end
|
43
|
+
@header_row = false
|
44
|
+
end
|
45
|
+
|
46
|
+
def before_examples(*args)
|
47
|
+
@in_examples = true
|
48
|
+
@header_row = true
|
49
|
+
end
|
50
|
+
|
51
|
+
def after_examples(*args)
|
52
|
+
@in_examples = false
|
53
|
+
end
|
54
|
+
|
55
|
+
def exception(exception, status)
|
56
|
+
hipchat_exception(exception)
|
57
|
+
end
|
58
|
+
|
59
|
+
# file_colon_line is new in cucumber 1.2.0. Give it default of nil to be reverse compatible
|
60
|
+
def step_name(keyword, step_match, status, source_indent, background, file_colon_line=nil)
|
61
|
+
@current_failed_step_info = nil
|
62
|
+
#TODO: detect if we are running in strict mode somehow, and if so also send a message when status == :pending
|
63
|
+
if status == :failed
|
64
|
+
@current_failed_step_info = {step_match: step_match, file_colon_line: file_colon_line, status: status}
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
# send failure report to hipchat
|
71
|
+
def hipchat_exception(exception)
|
72
|
+
# If the background fails only send one message the first time
|
73
|
+
return if @background_failed
|
74
|
+
|
75
|
+
# If this is a failing scenario output includes:
|
76
|
+
# 1a) file & line number for scenario
|
77
|
+
# 1b) all tags, including those declared on the feature
|
78
|
+
# 1c) scenario name
|
79
|
+
# 2) failing step
|
80
|
+
# 3) The exception
|
81
|
+
|
82
|
+
# If this is a failing example, then output includes:
|
83
|
+
# 1) For the first failing example in an outline the same as above, omitted for the subsequent examples
|
84
|
+
# 2) "Example #X failed:"
|
85
|
+
# 3) the exception
|
86
|
+
|
87
|
+
# If this was a failing background step:
|
88
|
+
# 1a) file & line number for background
|
89
|
+
# 1b) "Background step failed:"
|
90
|
+
# 2) failing step
|
91
|
+
# 3) the exception
|
92
|
+
|
93
|
+
sb = ''
|
94
|
+
|
95
|
+
# part 1
|
96
|
+
unless @had_failing_example
|
97
|
+
if @current_scenario_info
|
98
|
+
sb << "# #{ @current_scenario_info[:file_colon_line] }\n"
|
99
|
+
all_tags = (@background_tags || []) + (@current_scenario_info[:tags] || [])
|
100
|
+
sb << all_tags.join(' ') + "\n" if all_tags.size > 0
|
101
|
+
sb << "#{ @current_scenario_info[:keyword]}: #{ @current_scenario_info[:name]}\n"
|
102
|
+
elsif @in_background
|
103
|
+
sb << "# #{ @in_background.file_colon_line }\nBackground step failed:\n"
|
104
|
+
@background_failed = true
|
105
|
+
else
|
106
|
+
sb = 'error: no scenario info'
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
# part2
|
111
|
+
if @current_failed_step_info # Failing scenario or background, not example
|
112
|
+
sb << "#{ current_step_match_to_str } # "
|
113
|
+
fcl = @current_failed_step_info[:file_colon_line] # line in the feature file, may be nil
|
114
|
+
sb << fcl << ' → ' if fcl
|
115
|
+
sb << @current_failed_step_info[:step_match].file_colon_line << "\n"
|
116
|
+
elsif @example_num
|
117
|
+
@had_failing_example = true
|
118
|
+
sb << "Example ##{@example_num} failed:\n"
|
119
|
+
end
|
120
|
+
|
121
|
+
adapter.hip_post( "#{ sb }#{ build_exception_detail(exception) }", color: :error )
|
122
|
+
end
|
123
|
+
|
124
|
+
# Convert the step match (saved from step_name(), above into a string for outputting.
|
125
|
+
def current_step_match_to_str
|
126
|
+
current_step_match = @current_failed_step_info[:step_match]
|
127
|
+
# current_step_match might be a StepMatch or a NoStepMatch. If a NoStepMatch we must pass in dummy argument to format_args
|
128
|
+
args = current_step_match.is_a?(Cucumber::NoStepMatch)? [nil] : []
|
129
|
+
current_step_match.format_args(*args)
|
130
|
+
end
|
131
|
+
|
132
|
+
def adapter
|
133
|
+
HipchatAdapter
|
134
|
+
end
|
135
|
+
|
136
|
+
# Based on cucumber code
|
137
|
+
def build_exception_detail(exception)
|
138
|
+
return exception if exception.is_a? String
|
139
|
+
backtrace = Array.new
|
140
|
+
|
141
|
+
message = exception.message
|
142
|
+
if defined?(RAILS_ROOT) && message.include?('Exception caught')
|
143
|
+
matches = message.match(/Showing <i>(.+)<\/i>(?:.+) #(\d+)/)
|
144
|
+
backtrace += ["#{RAILS_ROOT}/#{matches[1]}:#{matches[2]}"] if matches
|
145
|
+
matches = message.match(/<code>([^(\/)]+)<\//m)
|
146
|
+
message = matches ? matches[1] : ""
|
147
|
+
end
|
148
|
+
|
149
|
+
unless exception.instance_of?(RuntimeError)
|
150
|
+
message = "#{message} (#{exception.class})"
|
151
|
+
end
|
152
|
+
|
153
|
+
message << "\n" << backtrace.join("\n")
|
154
|
+
end
|
155
|
+
|
156
|
+
def reset_scenario_info
|
157
|
+
@current_failed_step_info = @current_scenario_info = @example_num = @had_failing_example = nil
|
158
|
+
@example_num = 0
|
159
|
+
end
|
160
|
+
|
161
|
+
end
|
162
|
+
|
163
|
+
# In theory in the future there might be different adapters that can plug in to the output formatter, but for now
|
164
|
+
# there is just this one.
|
165
|
+
class HipchatAdapter
|
166
|
+
|
167
|
+
class << self
|
168
|
+
DEFAULTS = {
|
169
|
+
:message_format => 'text',
|
170
|
+
:notify => '1'
|
171
|
+
}.freeze
|
172
|
+
|
173
|
+
|
174
|
+
# Send a message to a HipChat room
|
175
|
+
# TODO: fork a thread so we don't block tests while we wait for the network. Also on the puts calls because on at
|
176
|
+
# least one occasion a call blocked and locked up cucumber.
|
177
|
+
def hip_post(message, options = {})
|
178
|
+
if ENV['DEBUG_BILGERAT']
|
179
|
+
unless @debug_file
|
180
|
+
@debug_file = File.open(ENV['DEBUG_BILGERAT'], 'w')
|
181
|
+
@debug_file.puts "<debugfile>"
|
182
|
+
at_exit { @debug_file.puts "</debugfile>" }
|
183
|
+
end
|
184
|
+
@debug_file.puts "<HIPPOST>#{ message }</HIPPOST>"
|
185
|
+
end
|
186
|
+
|
187
|
+
return unless configured?
|
188
|
+
|
189
|
+
def option(sym)
|
190
|
+
return options[sym] if options.keys.include?(sym)
|
191
|
+
DEFAULTS[sym]
|
192
|
+
end
|
193
|
+
|
194
|
+
# Replace the 'error' color with a real color
|
195
|
+
options[:color] = error_color if options[:color] == :error
|
196
|
+
|
197
|
+
begin
|
198
|
+
client[config['room']].send(username, message, DEFAULTS.merge(options))
|
199
|
+
#puts "sent msg to hipchat"
|
200
|
+
rescue => ex
|
201
|
+
STDERR.puts "Caught #{ex.class}; disabling hipchat notification"
|
202
|
+
@configured = false
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
# Config hash, from yml file
|
207
|
+
|
208
|
+
private
|
209
|
+
|
210
|
+
def error_color
|
211
|
+
@error_color ||= config['error_color'] || 'red'
|
212
|
+
end
|
213
|
+
|
214
|
+
# Returns something that looks like a hash. It returns values from the raw bash by first looking under the
|
215
|
+
# current context, then under 'default'
|
216
|
+
def config
|
217
|
+
config_file = ENV['HIPCHAT_CONFIG_PATH'] || 'config/hipchat.yml'
|
218
|
+
return nil unless File.exists?(config_file)
|
219
|
+
|
220
|
+
|
221
|
+
@config ||= Class.new do
|
222
|
+
@raw_config_yaml = YAML.load_file(config_file)
|
223
|
+
|
224
|
+
@context = ENV['BILGERAT_CONTEXT'] if ENV['BILGERAT_CONTEXT'] && ENV['BILGERAT_CONTEXT'].length > 0
|
225
|
+
|
226
|
+
def self.[](sym)
|
227
|
+
sym = sym.to_s
|
228
|
+
if @context
|
229
|
+
hash = @raw_config_yaml[@context]
|
230
|
+
return hash[sym] if hash && hash.keys.include?(sym)
|
231
|
+
end
|
232
|
+
@raw_config_yaml['default'][sym]
|
233
|
+
end
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
# Are we configured to send messages to HipChat? If not just drop messages.
|
238
|
+
def configured?
|
239
|
+
if @configured.nil?
|
240
|
+
@configured = !!(config && config['room'] && config['auth_token'])
|
241
|
+
else
|
242
|
+
@configured
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
def client
|
247
|
+
require 'hipchat'
|
248
|
+
@client ||= HipChat::Client.new(config['auth_token'])
|
249
|
+
end
|
250
|
+
|
251
|
+
# The username as we want it to appear in the HipChat room.
|
252
|
+
def username
|
253
|
+
@username ||= begin
|
254
|
+
env_var = config['user']
|
255
|
+
case env_var
|
256
|
+
when nil then
|
257
|
+
'Bilge Rat'
|
258
|
+
when Regexp.compile('#{TEST_ENV_NUMBER}') then
|
259
|
+
test_env_number = ENV['TEST_ENV_NUMBER']
|
260
|
+
test_env_number = '1' if test_env_number == ''
|
261
|
+
env_var.gsub('#{TEST_ENV_NUMBER}', test_env_number || '')
|
262
|
+
else
|
263
|
+
env_var
|
264
|
+
end
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
end
|
269
|
+
end
|
metadata
ADDED
@@ -0,0 +1,127 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bilgerat
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Joseph Shraibman
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-12-05 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: cucumber
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.0.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.0.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: hipchat
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 0.7.0
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.7.0
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: aruba
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0.5'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.5'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: debugger
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
description:
|
79
|
+
email:
|
80
|
+
- jshraibman@mdsol.com
|
81
|
+
executables: []
|
82
|
+
extensions: []
|
83
|
+
extra_rdoc_files: []
|
84
|
+
files:
|
85
|
+
- Gemfile
|
86
|
+
- Gemfile.lock
|
87
|
+
- LICENSE
|
88
|
+
- README.md
|
89
|
+
- bilgerat.gemspec
|
90
|
+
- features/error_handling.feature
|
91
|
+
- features/outlines/main.feature
|
92
|
+
- features/step_definitions/bilgerat_steps.rb
|
93
|
+
- features/step_definitions/cucumber_steps.rb
|
94
|
+
- features/support/base.rb
|
95
|
+
- hipchat.yml.sample
|
96
|
+
- lib/bilgerat.rb
|
97
|
+
homepage: https://github.com/mdsol/bilgerat
|
98
|
+
licenses: []
|
99
|
+
post_install_message:
|
100
|
+
rdoc_options: []
|
101
|
+
require_paths:
|
102
|
+
- lib
|
103
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
104
|
+
none: false
|
105
|
+
requirements:
|
106
|
+
- - ! '>='
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: 1.9.3
|
109
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
|
+
none: false
|
111
|
+
requirements:
|
112
|
+
- - ! '>='
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '0'
|
115
|
+
requirements: []
|
116
|
+
rubyforge_project:
|
117
|
+
rubygems_version: 1.8.24
|
118
|
+
signing_key:
|
119
|
+
specification_version: 3
|
120
|
+
summary: Cucumber output formatter that sends failure messages to Hipchat
|
121
|
+
test_files:
|
122
|
+
- features/error_handling.feature
|
123
|
+
- features/outlines/main.feature
|
124
|
+
- features/step_definitions/bilgerat_steps.rb
|
125
|
+
- features/step_definitions/cucumber_steps.rb
|
126
|
+
- features/support/base.rb
|
127
|
+
has_rdoc:
|