ampel_extase 0.4.0 → 0.5.0
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.
- checksums.yaml +4 -4
- data/.travis.yml +9 -0
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/ampel_extase.gemspec +9 -6
- data/lib/ampel_extase/controller.rb +6 -3
- data/lib/ampel_extase/jenkins_state_observer.rb +9 -2
- data/lib/ampel_extase/jenkins_warning_state_observer.rb +38 -0
- data/lib/ampel_extase/version.rb +1 -1
- data/spec/ampel_extase/controller_spec.rb +32 -9
- data/spec/ampel_extase/jekins_state_observer_spec.rb +3 -3
- data/spec/ampel_extase/jenkins_client_spec.rb +2 -2
- data/spec/ampel_extase/jenkins_warning_state_observer_spec.rb +60 -0
- data/spec/spec_helper.rb +4 -0
- metadata +21 -4
- data/lib/ampel_extase/jenkins_multi_state_observer.rb +0 -21
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ae725820fd3303481216d55d24f2469dbc2f71a2
|
|
4
|
+
data.tar.gz: e707f917125e83cb174c96a19db891dde8fce21b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 670dc15299ed7b16b420a33678acf4bece81fff5fbf24de671d0669e43184bf476a66d49d030f59015e822f88f6c31506a4933750dc996760ce6d91c71e5347e
|
|
7
|
+
data.tar.gz: 533e98f06fbbc95dc602c88f6607d17a47243e1e97cabcdd8c3f29a0950bb25a83bdc245578e3f92a59c6f01f6bd2afe1260e4333586fa6e22d2d68a33064a05
|
data/.travis.yml
ADDED
data/Rakefile
CHANGED
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.5.0
|
data/ampel_extase.gemspec
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
|
-
# stub: ampel_extase 0.
|
|
2
|
+
# stub: ampel_extase 0.5.0 ruby lib
|
|
3
3
|
|
|
4
4
|
Gem::Specification.new do |s|
|
|
5
5
|
s.name = "ampel_extase"
|
|
6
|
-
s.version = "0.
|
|
6
|
+
s.version = "0.5.0"
|
|
7
7
|
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
9
9
|
s.require_paths = ["lib"]
|
|
10
10
|
s.authors = ["Florian Frank"]
|
|
11
|
-
s.date = "2015-08-
|
|
11
|
+
s.date = "2015-08-27"
|
|
12
12
|
s.description = "Library to control the build traffic light. Yes, we can\u{2026}"
|
|
13
13
|
s.email = "flori@ping.de"
|
|
14
14
|
s.executables = ["ampel_control"]
|
|
15
|
-
s.extra_rdoc_files = ["README.md", "lib/ampel_extase.rb", "lib/ampel_extase/build_state.rb", "lib/ampel_extase/controller.rb", "lib/ampel_extase/jenkins_client.rb", "lib/ampel_extase/
|
|
16
|
-
s.files = [".gitignore", ".utilsrc", "Gemfile", "README.md", "Rakefile", "VERSION", "ampel_extase.gemspec", "bin/ampel_control", "lib/ampel_extase.rb", "lib/ampel_extase/build_state.rb", "lib/ampel_extase/controller.rb", "lib/ampel_extase/jenkins_client.rb", "lib/ampel_extase/
|
|
15
|
+
s.extra_rdoc_files = ["README.md", "lib/ampel_extase.rb", "lib/ampel_extase/build_state.rb", "lib/ampel_extase/controller.rb", "lib/ampel_extase/jenkins_client.rb", "lib/ampel_extase/jenkins_state_observer.rb", "lib/ampel_extase/jenkins_warning_state_observer.rb", "lib/ampel_extase/light_switcher.rb", "lib/ampel_extase/version.rb"]
|
|
16
|
+
s.files = [".gitignore", ".travis.yml", ".utilsrc", "Gemfile", "README.md", "Rakefile", "VERSION", "ampel_extase.gemspec", "bin/ampel_control", "lib/ampel_extase.rb", "lib/ampel_extase/build_state.rb", "lib/ampel_extase/controller.rb", "lib/ampel_extase/jenkins_client.rb", "lib/ampel_extase/jenkins_state_observer.rb", "lib/ampel_extase/jenkins_warning_state_observer.rb", "lib/ampel_extase/light_switcher.rb", "lib/ampel_extase/version.rb", "spec/ampel_extase/build_state_spec.rb", "spec/ampel_extase/controller_spec.rb", "spec/ampel_extase/jekins_state_observer_spec.rb", "spec/ampel_extase/jenkins_client_spec.rb", "spec/ampel_extase/jenkins_warning_state_observer_spec.rb", "spec/ampel_extase/light_switcher_spec.rb", "spec/spec_helper.rb"]
|
|
17
17
|
s.homepage = "http://github.com/flori/ampel_extase"
|
|
18
18
|
s.licenses = ["GPL-2"]
|
|
19
19
|
s.rdoc_options = ["--title", "AmpelExtase - Library to control the build traffic light", "--main", "README.md"]
|
|
20
20
|
s.rubygems_version = "2.4.8"
|
|
21
21
|
s.summary = "Library to control the build traffic light"
|
|
22
|
-
s.test_files = ["spec/ampel_extase/build_state_spec.rb", "spec/ampel_extase/controller_spec.rb", "spec/ampel_extase/jekins_state_observer_spec.rb", "spec/ampel_extase/jenkins_client_spec.rb", "spec/ampel_extase/light_switcher_spec.rb", "spec/spec_helper.rb"]
|
|
22
|
+
s.test_files = ["spec/ampel_extase/build_state_spec.rb", "spec/ampel_extase/controller_spec.rb", "spec/ampel_extase/jekins_state_observer_spec.rb", "spec/ampel_extase/jenkins_client_spec.rb", "spec/ampel_extase/jenkins_warning_state_observer_spec.rb", "spec/ampel_extase/light_switcher_spec.rb", "spec/spec_helper.rb"]
|
|
23
23
|
|
|
24
24
|
if s.respond_to? :specification_version then
|
|
25
25
|
s.specification_version = 4
|
|
@@ -29,6 +29,7 @@ Gem::Specification.new do |s|
|
|
|
29
29
|
s.add_development_dependency(%q<simplecov>, ["~> 0.9"])
|
|
30
30
|
s.add_development_dependency(%q<rspec>, ["~> 3.0"])
|
|
31
31
|
s.add_development_dependency(%q<byebug>, [">= 0"])
|
|
32
|
+
s.add_development_dependency(%q<codeclimate-test-reporter>, [">= 0"])
|
|
32
33
|
s.add_runtime_dependency(%q<tins>, ["~> 1.0"])
|
|
33
34
|
s.add_runtime_dependency(%q<term-ansicolor>, ["~> 1.0"])
|
|
34
35
|
s.add_runtime_dependency(%q<socket_switcher>, [">= 0"])
|
|
@@ -37,6 +38,7 @@ Gem::Specification.new do |s|
|
|
|
37
38
|
s.add_dependency(%q<simplecov>, ["~> 0.9"])
|
|
38
39
|
s.add_dependency(%q<rspec>, ["~> 3.0"])
|
|
39
40
|
s.add_dependency(%q<byebug>, [">= 0"])
|
|
41
|
+
s.add_dependency(%q<codeclimate-test-reporter>, [">= 0"])
|
|
40
42
|
s.add_dependency(%q<tins>, ["~> 1.0"])
|
|
41
43
|
s.add_dependency(%q<term-ansicolor>, ["~> 1.0"])
|
|
42
44
|
s.add_dependency(%q<socket_switcher>, [">= 0"])
|
|
@@ -46,6 +48,7 @@ Gem::Specification.new do |s|
|
|
|
46
48
|
s.add_dependency(%q<simplecov>, ["~> 0.9"])
|
|
47
49
|
s.add_dependency(%q<rspec>, ["~> 3.0"])
|
|
48
50
|
s.add_dependency(%q<byebug>, [">= 0"])
|
|
51
|
+
s.add_dependency(%q<codeclimate-test-reporter>, [">= 0"])
|
|
49
52
|
s.add_dependency(%q<tins>, ["~> 1.0"])
|
|
50
53
|
s.add_dependency(%q<term-ansicolor>, ["~> 1.0"])
|
|
51
54
|
s.add_dependency(%q<socket_switcher>, [">= 0"])
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
require 'term/ansicolor'
|
|
4
4
|
require 'ampel_extase/light_switcher'
|
|
5
5
|
require 'ampel_extase/jenkins_state_observer'
|
|
6
|
+
require 'ampel_extase/jenkins_warning_state_observer'
|
|
6
7
|
|
|
7
8
|
class AmpelExtase::Controller
|
|
8
9
|
include Term::ANSIColor
|
|
@@ -14,7 +15,8 @@ class AmpelExtase::Controller
|
|
|
14
15
|
sleep: 10
|
|
15
16
|
)
|
|
16
17
|
ampel_jenkins = AmpelExtase::JenkinsStateObserver.for_url(jenkins_url)
|
|
17
|
-
|
|
18
|
+
urls = warning_jenkins_url.full?(:split, ?,) || []
|
|
19
|
+
warning_jenkins = AmpelExtase::JenkinsWarningStateObserver.for_urls(*urls)
|
|
18
20
|
lights = AmpelExtase::LightSwitcher.for(serial: serial)
|
|
19
21
|
new(ampel_jenkins, warning_jenkins, lights, sleep: sleep)
|
|
20
22
|
end
|
|
@@ -27,6 +29,7 @@ class AmpelExtase::Controller
|
|
|
27
29
|
)
|
|
28
30
|
@ampel_jenkins, @warning_jenkins, @lights, @sleep =
|
|
29
31
|
ampel_jenkins, warning_jenkins, lights, sleep
|
|
32
|
+
@expire_duration = 6 * @sleep
|
|
30
33
|
check_lights
|
|
31
34
|
end
|
|
32
35
|
|
|
@@ -60,7 +63,7 @@ class AmpelExtase::Controller
|
|
|
60
63
|
@ampel_jenkins.on_state_change do |state|
|
|
61
64
|
perform_lights_switch state
|
|
62
65
|
end
|
|
63
|
-
@warning_jenkins.on_state_change do |state|
|
|
66
|
+
@warning_jenkins.on_state_change(@expire_duration) do |state|
|
|
64
67
|
perform_warning state
|
|
65
68
|
end
|
|
66
69
|
expire_warning
|
|
@@ -101,7 +104,7 @@ class AmpelExtase::Controller
|
|
|
101
104
|
end
|
|
102
105
|
|
|
103
106
|
def expire_warning
|
|
104
|
-
if
|
|
107
|
+
if @warning_jenkins.expired?(@expire_duration)
|
|
105
108
|
@lights.aux.off
|
|
106
109
|
puts info('WARNING EXPIRED')
|
|
107
110
|
end
|
|
@@ -41,10 +41,12 @@ class AmpelExtase::JenkinsStateObserver
|
|
|
41
41
|
self
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
def fetch_new_state
|
|
45
|
+
AmpelExtase::BuildState.for [ last_result, building? ]
|
|
46
|
+
end
|
|
45
47
|
|
|
46
48
|
def on_state_change
|
|
47
|
-
new_state =
|
|
49
|
+
new_state = fetch_new_state
|
|
48
50
|
if state_changed?(new_state)
|
|
49
51
|
puts "state changed from #@build_state to #{new_state} => taking action"
|
|
50
52
|
begin
|
|
@@ -55,5 +57,10 @@ class AmpelExtase::JenkinsStateObserver
|
|
|
55
57
|
else
|
|
56
58
|
puts "state did not change, is still #@build_state => do nothing"
|
|
57
59
|
end
|
|
60
|
+
self
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def expired?(duration)
|
|
64
|
+
Time.now > @state_changed_at + duration
|
|
58
65
|
end
|
|
59
66
|
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require 'ampel_extase/jenkins_state_observer'
|
|
2
|
+
|
|
3
|
+
class AmpelExtase::JenkinsWarningStateObserver
|
|
4
|
+
def self.for_urls(*jenkins_urls)
|
|
5
|
+
if urls = jenkins_urls.full?
|
|
6
|
+
new urls.map { |jenkins_url|
|
|
7
|
+
AmpelExtase::JenkinsStateObserver.for_url(jenkins_url)
|
|
8
|
+
}
|
|
9
|
+
else
|
|
10
|
+
Tins::NULL
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def initialize(observers)
|
|
15
|
+
@observers = observers
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def check
|
|
19
|
+
@observers.each(&:check)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def on_state_change(duration, &block)
|
|
23
|
+
@observers.each do |observer|
|
|
24
|
+
observer.expired?(duration) and next
|
|
25
|
+
observer.on_state_change do |state|
|
|
26
|
+
if %w[ FAILURE ABORTED ].include?(state.last_result)
|
|
27
|
+
block.(state)
|
|
28
|
+
return
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
self
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def expired?(duration)
|
|
36
|
+
@observers.all? { |observer| observer.expired?(duration) }
|
|
37
|
+
end
|
|
38
|
+
end
|
data/lib/ampel_extase/version.rb
CHANGED
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
|
3
3
|
describe AmpelExtase::Controller do
|
|
4
4
|
before do
|
|
5
5
|
allow_any_instance_of(AmpelExtase::JenkinsClient).to receive(:puts)
|
|
6
|
-
allow_any_instance_of(
|
|
6
|
+
allow_any_instance_of(described_class).to receive(:puts)
|
|
7
7
|
allow_any_instance_of(AmpelExtase::JenkinsStateObserver).to receive(:puts)
|
|
8
8
|
allow_any_instance_of(described_class).to receive(:sleep)
|
|
9
9
|
end
|
|
@@ -12,7 +12,11 @@ describe AmpelExtase::Controller do
|
|
|
12
12
|
double('AmpelExtase::JenkinsClient', url: 'http://foo/bar')
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
let :
|
|
15
|
+
let :warning_client1 do
|
|
16
|
+
double('AmpelExtase::JenkinsClient', url: 'http://foo/bar')
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
let :warning_client2 do
|
|
16
20
|
double('AmpelExtase::JenkinsClient', url: 'http://foo/bar')
|
|
17
21
|
end
|
|
18
22
|
|
|
@@ -20,8 +24,18 @@ describe AmpelExtase::Controller do
|
|
|
20
24
|
AmpelExtase::JenkinsStateObserver.new ampel_client
|
|
21
25
|
end
|
|
22
26
|
|
|
27
|
+
let :warning_jenkins1 do
|
|
28
|
+
AmpelExtase::JenkinsStateObserver.new(warning_client1)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
let :warning_jenkins2 do
|
|
32
|
+
AmpelExtase::JenkinsStateObserver.new(warning_client2)
|
|
33
|
+
end
|
|
34
|
+
|
|
23
35
|
let :warning_jenkins do
|
|
24
|
-
AmpelExtase::
|
|
36
|
+
AmpelExtase::JenkinsWarningStateObserver.new [
|
|
37
|
+
warning_jenkins1, warning_jenkins2
|
|
38
|
+
]
|
|
25
39
|
end
|
|
26
40
|
|
|
27
41
|
let :lights do
|
|
@@ -37,7 +51,7 @@ describe AmpelExtase::Controller do
|
|
|
37
51
|
end
|
|
38
52
|
|
|
39
53
|
before do
|
|
40
|
-
for client in [ ampel_client,
|
|
54
|
+
for client in [ ampel_client, warning_client1, warning_client2 ]
|
|
41
55
|
allow(client).to receive(:fetch).and_return true
|
|
42
56
|
allow(client).to receive(:fetch_build).and_return('result' => 'N/A')
|
|
43
57
|
end
|
|
@@ -97,17 +111,26 @@ describe AmpelExtase::Controller do
|
|
|
97
111
|
controller.instance_eval { perform }
|
|
98
112
|
end
|
|
99
113
|
|
|
114
|
+
let :aux do
|
|
115
|
+
double('Device', on: true)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
before do
|
|
119
|
+
controller.instance_variable_set :@lights, double('Lights', aux: aux)
|
|
120
|
+
end
|
|
121
|
+
|
|
100
122
|
it 'reacts to state changes' do
|
|
101
123
|
state = AmpelExtase::BuildState.for
|
|
102
124
|
allow(ampel_jenkins).to receive(:state_changed?).and_return true
|
|
103
125
|
expect { |b| ampel_jenkins.on_state_change(&b) }.to yield_with_args(state)
|
|
104
|
-
allow(
|
|
105
|
-
|
|
126
|
+
allow(warning_jenkins1).to receive(:state_changed?).and_return true
|
|
127
|
+
state = AmpelExtase::BuildState.for [ 'FAILURE', false ]
|
|
128
|
+
allow(warning_jenkins1).to receive(:fetch_new_state).and_return state
|
|
129
|
+
expect { |b| warning_jenkins.on_state_change(60, &b) }.to yield_with_args(state)
|
|
106
130
|
perform
|
|
107
131
|
end
|
|
108
132
|
end
|
|
109
133
|
|
|
110
|
-
|
|
111
134
|
describe '#handle_crash' do
|
|
112
135
|
let :exception do
|
|
113
136
|
raise StandardError rescue $!
|
|
@@ -226,7 +249,7 @@ describe AmpelExtase::Controller do
|
|
|
226
249
|
|
|
227
250
|
describe '#expire_warning' do
|
|
228
251
|
let :aux do
|
|
229
|
-
double('Device')
|
|
252
|
+
double('Device', on: true)
|
|
230
253
|
end
|
|
231
254
|
|
|
232
255
|
before do
|
|
@@ -239,7 +262,7 @@ describe AmpelExtase::Controller do
|
|
|
239
262
|
|
|
240
263
|
it 'expires warnings after some time' do
|
|
241
264
|
allow(controller.instance_variable_get(:@warning_jenkins)).to\
|
|
242
|
-
receive(:
|
|
265
|
+
receive(:expired?).and_return true
|
|
243
266
|
expect(aux).to receive(:off)
|
|
244
267
|
expect(controller).to receive(:info).with('WARNING EXPIRED').and_call_original
|
|
245
268
|
expire_warning
|
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
|
3
3
|
describe AmpelExtase::JenkinsStateObserver do
|
|
4
4
|
before do
|
|
5
5
|
allow_any_instance_of(AmpelExtase::JenkinsClient).to receive(:puts)
|
|
6
|
-
allow_any_instance_of(
|
|
6
|
+
allow_any_instance_of(described_class).to receive(:puts)
|
|
7
7
|
end
|
|
8
8
|
|
|
9
9
|
let :client do
|
|
@@ -80,7 +80,7 @@ describe AmpelExtase::JenkinsStateObserver do
|
|
|
80
80
|
jso
|
|
81
81
|
end
|
|
82
82
|
expect(jso.instance_variable_get(:@build_state)).to eq bs_initial
|
|
83
|
-
expect(jso.state_changed_at).to eq past
|
|
83
|
+
expect(jso.instance_variable_get(:@state_changed_at)).to eq past
|
|
84
84
|
allow(client).to receive(:fetch_build).with(:last_completed_build).
|
|
85
85
|
and_return('result' => 'SUCCESS')
|
|
86
86
|
allow(client).to receive(:fetch_build).with(:last_build).
|
|
@@ -97,7 +97,7 @@ describe AmpelExtase::JenkinsStateObserver do
|
|
|
97
97
|
}.to yield_with_args(bs_success)
|
|
98
98
|
end
|
|
99
99
|
expect(jso.instance_variable_get(:@build_state)).to eq bs_success
|
|
100
|
-
expect(jso.state_changed_at).to eq now
|
|
100
|
+
expect(jso.instance_variable_get(:@state_changed_at)).to eq now
|
|
101
101
|
allow(client).to receive(:fetch_build).with(:last_completed_build).
|
|
102
102
|
and_return('result' => 'FAILURE')
|
|
103
103
|
allow(client).to receive(:fetch_build).with(:last_build).
|
|
@@ -2,11 +2,11 @@ require 'spec_helper'
|
|
|
2
2
|
|
|
3
3
|
describe AmpelExtase::JenkinsClient do
|
|
4
4
|
before do
|
|
5
|
-
allow_any_instance_of(
|
|
5
|
+
allow_any_instance_of(described_class).to receive(:puts)
|
|
6
6
|
end
|
|
7
7
|
|
|
8
8
|
let :client do
|
|
9
|
-
|
|
9
|
+
described_class.new 'http://foo/bar'
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
let :opened_uri do
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe AmpelExtase::JenkinsWarningStateObserver do
|
|
4
|
+
let :jenkins_warning_state_observer do
|
|
5
|
+
described_class.new [ observer ]
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
let :observer do
|
|
9
|
+
double('AmpelExtase::JenkinsStateObserver')
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
describe '.for_urls' do
|
|
13
|
+
it 'returns a null object if there were no URLs passed' do
|
|
14
|
+
expect(described_class.for_urls).to be_nil
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it 'creates a jenkins_state_observer for every URL passed' do
|
|
18
|
+
expect(AmpelExtase::JenkinsStateObserver).to receive(:for_url).with('foo')
|
|
19
|
+
expect(AmpelExtase::JenkinsStateObserver).to receive(:for_url).with('bar')
|
|
20
|
+
described_class.for_urls 'foo', 'bar'
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
describe '#check' do
|
|
25
|
+
it 'delegates the check to its observers' do
|
|
26
|
+
expect(observer).to receive(:check)
|
|
27
|
+
jenkins_warning_state_observer.check
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
describe '#on_state_change' do
|
|
32
|
+
let :bs_success do
|
|
33
|
+
AmpelExtase::BuildState.for [ 'SUCCESS', true ]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
let :bs_failure do
|
|
37
|
+
AmpelExtase::BuildState.for [ 'FAILURE', true ]
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it 'skips observers that are already expired b4 duration' do
|
|
41
|
+
expect(observer).to receive(:expired?).with(666).and_return true
|
|
42
|
+
expect(observer).not_to receive(:on_state_change)
|
|
43
|
+
jenkins_warning_state_observer.on_state_change(666)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it 'skips states where the last result is not FAILURE/ABORTED' do
|
|
47
|
+
expect(observer).to receive(:expired?).with(666).and_return false
|
|
48
|
+
allow(observer).to receive(:on_state_change)
|
|
49
|
+
jenkins_warning_state_observer.on_state_change(666)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
describe '#expired?' do
|
|
54
|
+
it 'checks if all of its observers are expired' do
|
|
55
|
+
expect(observer).to receive(:expired?).with(666)
|
|
56
|
+
jenkins_warning_state_observer.expired?(666)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
data/spec/spec_helper.rb
CHANGED
|
@@ -4,6 +4,10 @@ if ENV['START_SIMPLECOV'].to_i == 1
|
|
|
4
4
|
add_filter "#{File.basename(File.dirname(__FILE__))}/"
|
|
5
5
|
end
|
|
6
6
|
end
|
|
7
|
+
if ENV['CODECLIMATE_REPO_TOKEN']
|
|
8
|
+
require "codeclimate-test-reporter"
|
|
9
|
+
CodeClimate::TestReporter.start
|
|
10
|
+
end
|
|
7
11
|
require 'rspec'
|
|
8
12
|
require 'byebug'
|
|
9
13
|
require 'ampel_extase'
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ampel_extase
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Florian Frank
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-08-
|
|
11
|
+
date: 2015-08-27 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: gem_hadar
|
|
@@ -66,6 +66,20 @@ dependencies:
|
|
|
66
66
|
- - ">="
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
68
|
version: '0'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: codeclimate-test-reporter
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - ">="
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '0'
|
|
76
|
+
type: :development
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - ">="
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '0'
|
|
69
83
|
- !ruby/object:Gem::Dependency
|
|
70
84
|
name: tins
|
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -119,12 +133,13 @@ extra_rdoc_files:
|
|
|
119
133
|
- lib/ampel_extase/build_state.rb
|
|
120
134
|
- lib/ampel_extase/controller.rb
|
|
121
135
|
- lib/ampel_extase/jenkins_client.rb
|
|
122
|
-
- lib/ampel_extase/jenkins_multi_state_observer.rb
|
|
123
136
|
- lib/ampel_extase/jenkins_state_observer.rb
|
|
137
|
+
- lib/ampel_extase/jenkins_warning_state_observer.rb
|
|
124
138
|
- lib/ampel_extase/light_switcher.rb
|
|
125
139
|
- lib/ampel_extase/version.rb
|
|
126
140
|
files:
|
|
127
141
|
- ".gitignore"
|
|
142
|
+
- ".travis.yml"
|
|
128
143
|
- ".utilsrc"
|
|
129
144
|
- Gemfile
|
|
130
145
|
- README.md
|
|
@@ -136,14 +151,15 @@ files:
|
|
|
136
151
|
- lib/ampel_extase/build_state.rb
|
|
137
152
|
- lib/ampel_extase/controller.rb
|
|
138
153
|
- lib/ampel_extase/jenkins_client.rb
|
|
139
|
-
- lib/ampel_extase/jenkins_multi_state_observer.rb
|
|
140
154
|
- lib/ampel_extase/jenkins_state_observer.rb
|
|
155
|
+
- lib/ampel_extase/jenkins_warning_state_observer.rb
|
|
141
156
|
- lib/ampel_extase/light_switcher.rb
|
|
142
157
|
- lib/ampel_extase/version.rb
|
|
143
158
|
- spec/ampel_extase/build_state_spec.rb
|
|
144
159
|
- spec/ampel_extase/controller_spec.rb
|
|
145
160
|
- spec/ampel_extase/jekins_state_observer_spec.rb
|
|
146
161
|
- spec/ampel_extase/jenkins_client_spec.rb
|
|
162
|
+
- spec/ampel_extase/jenkins_warning_state_observer_spec.rb
|
|
147
163
|
- spec/ampel_extase/light_switcher_spec.rb
|
|
148
164
|
- spec/spec_helper.rb
|
|
149
165
|
homepage: http://github.com/flori/ampel_extase
|
|
@@ -179,5 +195,6 @@ test_files:
|
|
|
179
195
|
- spec/ampel_extase/controller_spec.rb
|
|
180
196
|
- spec/ampel_extase/jekins_state_observer_spec.rb
|
|
181
197
|
- spec/ampel_extase/jenkins_client_spec.rb
|
|
198
|
+
- spec/ampel_extase/jenkins_warning_state_observer_spec.rb
|
|
182
199
|
- spec/ampel_extase/light_switcher_spec.rb
|
|
183
200
|
- spec/spec_helper.rb
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
require 'ampel_extase/jenkins_state_observer'
|
|
2
|
-
|
|
3
|
-
class AmpelExtase::JenkinsMultiStateObserver
|
|
4
|
-
def self.for_urls(*jenkins_urls)
|
|
5
|
-
new jenkins_urls.map { |jenkins_url| AmpelExtase::JenkinsStateObserver.new(jenkins_url) }
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
def initialize(observers)
|
|
9
|
-
@observers = observers
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def check
|
|
13
|
-
@observers.each(&:check)
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def on_state_change(&block)
|
|
17
|
-
@observers.each do |o|
|
|
18
|
-
o.on_state_change(&block)
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|