arduino_build_notifier 0.0.1
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.
- data/.gitignore +1 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +44 -0
- data/README.md +26 -0
- data/Rakefile +1 -0
- data/arduino_build_notifier.gemspec +22 -0
- data/bin/ard-notifier +60 -0
- data/lib/arduino_build_notifier/arduino_board.rb +41 -0
- data/lib/arduino_build_notifier/cruise_control_build.rb +41 -0
- data/lib/arduino_build_notifier/notifier.rb +23 -0
- data/lib/arduino_build_notifier/version.rb +3 -0
- data/lib/arduino_build_notifier.rb +8 -0
- data/spec/lib/arduino_board_spec.rb +75 -0
- data/spec/lib/cruise_control_build_spec.rb +42 -0
- data/spec/lib/notifier_spec.rb +21 -0
- data/spec/spec_helper.rb +1 -0
- metadata +157 -0
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
pkg/
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
arduino_build_notifier (0.0.1)
|
5
|
+
celluloid
|
6
|
+
dino
|
7
|
+
gli
|
8
|
+
httparty
|
9
|
+
nokogiri
|
10
|
+
|
11
|
+
GEM
|
12
|
+
remote: http://rubygems.org/
|
13
|
+
specs:
|
14
|
+
celluloid (0.12.3)
|
15
|
+
facter (>= 1.6.12)
|
16
|
+
timers (>= 1.0.0)
|
17
|
+
diff-lcs (1.1.3)
|
18
|
+
dino (0.8)
|
19
|
+
serialport
|
20
|
+
facter (1.6.14)
|
21
|
+
gli (2.4.1)
|
22
|
+
httparty (0.9.0)
|
23
|
+
multi_json (~> 1.0)
|
24
|
+
multi_xml
|
25
|
+
multi_json (1.3.7)
|
26
|
+
multi_xml (0.5.1)
|
27
|
+
nokogiri (1.5.5)
|
28
|
+
rspec (2.11.0)
|
29
|
+
rspec-core (~> 2.11.0)
|
30
|
+
rspec-expectations (~> 2.11.0)
|
31
|
+
rspec-mocks (~> 2.11.0)
|
32
|
+
rspec-core (2.11.1)
|
33
|
+
rspec-expectations (2.11.3)
|
34
|
+
diff-lcs (~> 1.1.3)
|
35
|
+
rspec-mocks (2.11.3)
|
36
|
+
serialport (1.1.0)
|
37
|
+
timers (1.0.1)
|
38
|
+
|
39
|
+
PLATFORMS
|
40
|
+
ruby
|
41
|
+
|
42
|
+
DEPENDENCIES
|
43
|
+
arduino_build_notifier!
|
44
|
+
rspec
|
data/README.md
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# Arduino Build Notifier
|
2
|
+
|
3
|
+
A Continuous Integration Server Monitor made it over an Arduino board
|
4
|
+
|
5
|
+
# Installation
|
6
|
+
|
7
|
+
1. Install the ruby gem
|
8
|
+
|
9
|
+
gem install arduino_build_notifier
|
10
|
+
|
11
|
+
2. Wire your Arduino (Picks later)
|
12
|
+
- Success led: pin 13
|
13
|
+
- Failure led: pin 12
|
14
|
+
- Building led: pin 11
|
15
|
+
- Error led: pin 10
|
16
|
+
3. Plug the Arduino board to the computer
|
17
|
+
4. If you don't have your arduino ready to work with ruby, follow the [dino gem instructions](https://github.com/austinbv/dino#get-started-in-no-time)
|
18
|
+
5. run the command ard-notifier
|
19
|
+
|
20
|
+
Usage: ard-notifier --server 'http://...' --project foo --user foo --password bar
|
21
|
+
-s, --server SERVER CI server URL
|
22
|
+
-j, --project PROJECT Project name
|
23
|
+
-u, --user USER CI server username
|
24
|
+
-p, --password PASS CI server password
|
25
|
+
-t, --time [TIME] Request frequency (secs)
|
26
|
+
-h, --help Show this message
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,22 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = 'arduino_build_notifier'
|
3
|
+
s.version = '0.0.1'
|
4
|
+
s.date = '2012-11-08'
|
5
|
+
s.summary = "An Integration server notifier"
|
6
|
+
s.description = "like ccmenu but with Arduino"
|
7
|
+
s.authors = ["Herman Moreno"]
|
8
|
+
s.email = 'herman.moreno@crowdint.com'
|
9
|
+
s.files = `git ls-files`.split("\n")
|
10
|
+
s.homepage = 'https://github.com/supherman/arduino_build_notifier'
|
11
|
+
|
12
|
+
s.executables = ['ard-notifier']
|
13
|
+
|
14
|
+
s.add_development_dependency('rspec')
|
15
|
+
|
16
|
+
s.add_dependency('celluloid')
|
17
|
+
s.add_dependency('dino')
|
18
|
+
s.add_dependency('gli')
|
19
|
+
s.add_dependency('httparty')
|
20
|
+
s.add_dependency('nokogiri')
|
21
|
+
end
|
22
|
+
|
data/bin/ard-notifier
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bundler'
|
4
|
+
Bundler.require
|
5
|
+
require 'optparse'
|
6
|
+
|
7
|
+
options = {}
|
8
|
+
options[:time] = 10
|
9
|
+
|
10
|
+
optparse = OptionParser.new do |opts|
|
11
|
+
opts.banner = "Usage: ard-notifier --server 'http://...' --project foo --user foo --password bar"
|
12
|
+
|
13
|
+
opts.on '-s SERVER', '--server SERVER', 'CI server URL' do |url|
|
14
|
+
options[:server] = url
|
15
|
+
end
|
16
|
+
|
17
|
+
opts.on '-j PROJECT', '--project PROJECT', 'Project name' do |project|
|
18
|
+
options[:project] = project
|
19
|
+
end
|
20
|
+
|
21
|
+
opts.on '-u USER', '--user USER', 'CI server username' do |user|
|
22
|
+
options[:user] = user
|
23
|
+
end
|
24
|
+
|
25
|
+
opts.on '-p PASS', '--password PASS', 'CI server password' do |pass|
|
26
|
+
options[:pass] = pass
|
27
|
+
end
|
28
|
+
|
29
|
+
opts.on '-t [TIME]', '--time [TIME]', 'Request frequency (secs)' do |time|
|
30
|
+
options[:time] = time
|
31
|
+
end
|
32
|
+
|
33
|
+
opts.on_tail("-h", "--help", "Show this message") do
|
34
|
+
puts opts
|
35
|
+
exit
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
begin
|
41
|
+
optparse.parse!
|
42
|
+
mandatory = [:server, :project, :user, :pass]
|
43
|
+
missing = mandatory.select{ |param| options[param].nil? }
|
44
|
+
if not missing.empty?
|
45
|
+
puts "Missing options: #{missing.join(', ')}"
|
46
|
+
puts optparse
|
47
|
+
exit
|
48
|
+
end
|
49
|
+
rescue OptionParser::InvalidOption, OptionParser::MissingArgument
|
50
|
+
puts $!.to_s
|
51
|
+
puts optparse
|
52
|
+
exit
|
53
|
+
end
|
54
|
+
|
55
|
+
build = ArduinoBuildNotifier::CruiseControlBuild.new options[:server], options[:project], { username: options[:user], password: options[:pass] }
|
56
|
+
arduino = ArduinoBuildNotifier::ArduinoBoard.new
|
57
|
+
notifier = ArduinoBuildNotifier::Notifier.new build, arduino, options[:time]
|
58
|
+
notifier.start_notifications
|
59
|
+
sleep
|
60
|
+
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'dino'
|
2
|
+
|
3
|
+
module ArduinoBuildNotifier
|
4
|
+
class ArduinoBoard
|
5
|
+
def initialize
|
6
|
+
@board = Dino::Board.new(Dino::TxRx.new)
|
7
|
+
@success_led = Dino::Components::Led.new(pin: 13, board: @board)
|
8
|
+
@failure_led = Dino::Components::Led.new(pin: 12, board: @board)
|
9
|
+
@building_led = Dino::Components::Led.new(pin: 11, board: @board)
|
10
|
+
@error_led = Dino::Components::Led.new(pin: 10, board: @board)
|
11
|
+
@leds = [@success_led, @failure_led, @building_led, @error_led]
|
12
|
+
end
|
13
|
+
|
14
|
+
def success
|
15
|
+
turn_off_leds
|
16
|
+
@success_led.on
|
17
|
+
end
|
18
|
+
|
19
|
+
def failure
|
20
|
+
turn_off_leds
|
21
|
+
@failure_led.on
|
22
|
+
end
|
23
|
+
|
24
|
+
def building
|
25
|
+
turn_off_leds
|
26
|
+
@building_led.on
|
27
|
+
end
|
28
|
+
|
29
|
+
def error
|
30
|
+
turn_off_leds
|
31
|
+
@error_led.on
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def turn_off_leds
|
37
|
+
@leds.each { |led| led.off }
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
require 'nokogiri'
|
3
|
+
|
4
|
+
module ArduinoBuildNotifier
|
5
|
+
class CruiseControlBuild
|
6
|
+
attr_reader :status
|
7
|
+
|
8
|
+
def initialize(url, project, auth = {})
|
9
|
+
@url = "#{url}/XmlStatusReport.aspx"
|
10
|
+
@project = project
|
11
|
+
@auth = auth
|
12
|
+
end
|
13
|
+
|
14
|
+
def request_status
|
15
|
+
begin
|
16
|
+
response = HTTParty.get @url, basic_auth: @auth
|
17
|
+
response = parse(response)
|
18
|
+
set_status(response)
|
19
|
+
rescue
|
20
|
+
@status = :error
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def parse(response)
|
27
|
+
@response = Nokogiri.XML(response).
|
28
|
+
xpath(%(//Projects/Project[@name="#{@project}"])).first
|
29
|
+
end
|
30
|
+
|
31
|
+
def set_status(response)
|
32
|
+
@status = if response[:activity] == 'Building'
|
33
|
+
:building
|
34
|
+
else
|
35
|
+
response[:lastBuildStatus].downcase.to_sym
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'celluloid'
|
2
|
+
|
3
|
+
module ArduinoBuildNotifier
|
4
|
+
class Notifier
|
5
|
+
include Celluloid
|
6
|
+
|
7
|
+
def initialize(build, arduino, time = 10)
|
8
|
+
@time = time
|
9
|
+
@build = build
|
10
|
+
@arduino = arduino
|
11
|
+
end
|
12
|
+
|
13
|
+
def notify(status)
|
14
|
+
@arduino.send status
|
15
|
+
end
|
16
|
+
|
17
|
+
def start_notifications
|
18
|
+
every @time do
|
19
|
+
notify @build.request_status
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ArduinoBuildNotifier::ArduinoBoard do
|
4
|
+
let(:txrx) { stub }
|
5
|
+
let(:board) { stub }
|
6
|
+
let(:success) { stub }
|
7
|
+
let(:failure) { stub }
|
8
|
+
let(:building) { stub }
|
9
|
+
let(:error) { stub }
|
10
|
+
|
11
|
+
before do
|
12
|
+
Dino::TxRx.should_receive(:new).and_return txrx
|
13
|
+
Dino::Board.should_receive(:new).with(txrx).and_return board
|
14
|
+
Dino::Components::Led.should_receive(:new).with(pin: 13, board: board).and_return success
|
15
|
+
Dino::Components::Led.should_receive(:new).with(pin: 12, board: board).and_return failure
|
16
|
+
Dino::Components::Led.should_receive(:new).with(pin: 11, board: board).and_return building
|
17
|
+
Dino::Components::Led.should_receive(:new).with(pin: 10, board: board).and_return error
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#success' do
|
21
|
+
before do
|
22
|
+
subject.should_receive(:turn_off_leds)
|
23
|
+
success.should_receive :on
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'turns on success led' do
|
27
|
+
subject.success
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#failure' do
|
32
|
+
before do
|
33
|
+
subject.should_receive(:turn_off_leds)
|
34
|
+
failure.should_receive :on
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'turns on failure led' do
|
38
|
+
subject.failure
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe '#building' do
|
43
|
+
before do
|
44
|
+
subject.should_receive(:turn_off_leds)
|
45
|
+
building.should_receive :on
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'turns on building led' do
|
49
|
+
subject.building
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
describe '#error' do
|
55
|
+
before do
|
56
|
+
subject.should_receive(:turn_off_leds)
|
57
|
+
error.should_receive :on
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'turns on error led' do
|
61
|
+
subject.error
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe '#turn_off_leds' do
|
66
|
+
it 'turns off all the leds' do
|
67
|
+
success.should_receive :off
|
68
|
+
failure.should_receive :off
|
69
|
+
building.should_receive :off
|
70
|
+
error.should_receive :off
|
71
|
+
subject.send :turn_off_leds
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ArduinoBuildNotifier::CruiseControlBuild do
|
4
|
+
let(:url) { 'foo url' }
|
5
|
+
let(:project) { 'foo' }
|
6
|
+
let(:auth) { stub }
|
7
|
+
let(:response) { stub }
|
8
|
+
|
9
|
+
subject { ArduinoBuildNotifier::CruiseControlBuild.new url,project, auth }
|
10
|
+
|
11
|
+
describe '#request_status' do
|
12
|
+
before do
|
13
|
+
HTTParty.should_receive(:get).with("#{url}/XmlStatusReport.aspx", basic_auth: auth).and_return response
|
14
|
+
subject.should_receive(:parse).with(response).and_return response
|
15
|
+
subject.should_receive(:set_status).with(response)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'request for a build status' do
|
19
|
+
subject.request_status
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '#set_status' do
|
24
|
+
context 'When building' do
|
25
|
+
let(:response) { { activity: 'Building' } }
|
26
|
+
|
27
|
+
it 'returns :building' do
|
28
|
+
subject.send(:set_status, response).should eq(:building)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'When build finished' do
|
33
|
+
let(:response) { { activity: 'Waiting', lastBuildStatus: :success } }
|
34
|
+
|
35
|
+
it 'returns the build result' do
|
36
|
+
subject.send(:set_status, response).should eq(:success)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ArduinoBuildNotifier::Notifier do
|
4
|
+
let(:build) { stub }
|
5
|
+
let(:board) { stub }
|
6
|
+
|
7
|
+
subject { ArduinoBuildNotifier::Notifier.new build, board }
|
8
|
+
|
9
|
+
describe '#notify' do
|
10
|
+
it 'prints the build status' do
|
11
|
+
board.should_receive(:status)
|
12
|
+
subject.notify(:status)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#start_notifications' do
|
17
|
+
it 'request for the build status each given time' do
|
18
|
+
# TODO: Find a way to test celluloid methods
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'arduino_build_notifier'
|
metadata
ADDED
@@ -0,0 +1,157 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: arduino_build_notifier
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Herman Moreno
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-11-08 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: celluloid
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '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'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: dino
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: gli
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :runtime
|
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
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: httparty
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :runtime
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: nokogiri
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :runtime
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
description: like ccmenu but with Arduino
|
111
|
+
email: herman.moreno@crowdint.com
|
112
|
+
executables:
|
113
|
+
- ard-notifier
|
114
|
+
extensions: []
|
115
|
+
extra_rdoc_files: []
|
116
|
+
files:
|
117
|
+
- .gitignore
|
118
|
+
- Gemfile
|
119
|
+
- Gemfile.lock
|
120
|
+
- README.md
|
121
|
+
- Rakefile
|
122
|
+
- arduino_build_notifier.gemspec
|
123
|
+
- bin/ard-notifier
|
124
|
+
- lib/arduino_build_notifier.rb
|
125
|
+
- lib/arduino_build_notifier/arduino_board.rb
|
126
|
+
- lib/arduino_build_notifier/cruise_control_build.rb
|
127
|
+
- lib/arduino_build_notifier/notifier.rb
|
128
|
+
- lib/arduino_build_notifier/version.rb
|
129
|
+
- spec/lib/arduino_board_spec.rb
|
130
|
+
- spec/lib/cruise_control_build_spec.rb
|
131
|
+
- spec/lib/notifier_spec.rb
|
132
|
+
- spec/spec_helper.rb
|
133
|
+
homepage: https://github.com/supherman/arduino_build_notifier
|
134
|
+
licenses: []
|
135
|
+
post_install_message:
|
136
|
+
rdoc_options: []
|
137
|
+
require_paths:
|
138
|
+
- lib
|
139
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
140
|
+
none: false
|
141
|
+
requirements:
|
142
|
+
- - ! '>='
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0'
|
145
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
|
+
none: false
|
147
|
+
requirements:
|
148
|
+
- - ! '>='
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: '0'
|
151
|
+
requirements: []
|
152
|
+
rubyforge_project:
|
153
|
+
rubygems_version: 1.8.23
|
154
|
+
signing_key:
|
155
|
+
specification_version: 3
|
156
|
+
summary: An Integration server notifier
|
157
|
+
test_files: []
|