pd-blender 0.4 → 0.5
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/Gemfile +0 -2
- data/blender.gemspec +1 -0
- data/lib/blender.rb +3 -4
- data/lib/blender/cli.rb +3 -2
- data/lib/blender/discovery.rb +1 -2
- data/lib/blender/handlers/doc.rb +3 -2
- data/lib/blender/job.rb +1 -2
- data/lib/blender/rspec.rb +1 -1
- data/lib/blender/scheduler.rb +27 -9
- data/lib/blender/scheduler/dsl.rb +1 -7
- data/lib/blender/scheduling_strategies/default.rb +1 -1
- data/lib/blender/scheduling_strategies/per_host.rb +2 -1
- data/lib/blender/version.rb +1 -1
- data/spec/blender/lock_spec.rb +10 -7
- data/spec/blender/scheduler_spec.rb +8 -8
- data/spec/blender/scheduling_strategies/default_spec.rb +5 -0
- data/spec/blender_spec.rb +6 -6
- metadata +16 -5
- data/lib/blender/configuration.rb +0 -56
- data/spec/blender/config_spec.rb +0 -34
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 184f4e1009b13d2f60b78a000f41a8216b5a9c8e
|
4
|
+
data.tar.gz: ef34cccbaca40a15a455e83b91a910cbe725e39e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5b4c27d394fbb4a9dff23af968a1e37781b85707e38df77b0cee6b41635543d09708f361c2f8508a55f89d7a0357cce9124292fd57df1d30d494272dc5e7fc10
|
7
|
+
data.tar.gz: 099a03a58909a2e0b93aa37c88521017ef789721d283d1c7edb0049b5e239b32d38aced5335b93685fdb0ac1121db46f78bd85ae36ea3ce81e0fa91032d0f47b
|
data/Gemfile
CHANGED
data/blender.gemspec
CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.add_dependency 'net-ssh-multi'
|
28
28
|
spec.add_dependency 'net-scp'
|
29
29
|
spec.add_dependency 'rufus-scheduler'
|
30
|
+
spec.add_dependency 'thread_safe'
|
30
31
|
|
31
32
|
spec.add_development_dependency 'bundler'
|
32
33
|
spec.add_development_dependency 'rake'
|
data/lib/blender.rb
CHANGED
@@ -20,7 +20,6 @@ require 'blender/scheduler'
|
|
20
20
|
require 'blender/log'
|
21
21
|
require 'blender/drivers/shellout'
|
22
22
|
require 'json'
|
23
|
-
require 'blender/configuration'
|
24
23
|
|
25
24
|
# Top level module that holds all blender related libraries under this namespace
|
26
25
|
module Blender
|
@@ -35,7 +34,7 @@ module Blender
|
|
35
34
|
def self.blend(name, options = {})
|
36
35
|
config_file = options.delete(:config_file)
|
37
36
|
scheduler = Scheduler.new(name, [], options)
|
38
|
-
configure(config_file) if config_file
|
37
|
+
configure(scheduler, config_file) if config_file
|
39
38
|
if block_given?
|
40
39
|
yield scheduler
|
41
40
|
else
|
@@ -45,7 +44,7 @@ module Blender
|
|
45
44
|
scheduler
|
46
45
|
end
|
47
46
|
|
48
|
-
def self.configure(file)
|
47
|
+
def self.configure(scheduler, file)
|
49
48
|
data = JSON.parse(File.read(file))
|
50
49
|
|
51
50
|
Blender::Log.level = data['log_level'].to_sym if data['log_level']
|
@@ -58,7 +57,7 @@ module Blender
|
|
58
57
|
end
|
59
58
|
if data['scheduler']
|
60
59
|
data['scheduler'].each do |key, value|
|
61
|
-
|
60
|
+
scheduler.update_config(key.to_sym, value)
|
62
61
|
end
|
63
62
|
end
|
64
63
|
end
|
data/lib/blender/cli.rb
CHANGED
@@ -55,8 +55,7 @@ module Blender
|
|
55
55
|
banner: 'Quiet mode. Disable printing running job details'
|
56
56
|
|
57
57
|
def from_file(*args)
|
58
|
-
|
59
|
-
Configuration[:arguments] = args
|
58
|
+
noop_mode = options[:noop]
|
60
59
|
des = File.read(options[:file])
|
61
60
|
$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(options[:file]), 'lib')))
|
62
61
|
scheduler_options = {
|
@@ -64,6 +63,8 @@ module Blender
|
|
64
63
|
no_doc: options[:quiet]
|
65
64
|
}
|
66
65
|
Blender.blend(options[:file], scheduler_options) do |sch|
|
66
|
+
sch.update_config(:noop, noop_mode)
|
67
|
+
sch.update_config(:arguments, args)
|
67
68
|
sch.instance_eval(des, __FILE__, __LINE__)
|
68
69
|
end
|
69
70
|
end
|
data/lib/blender/discovery.rb
CHANGED
@@ -16,7 +16,6 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
|
18
18
|
require 'blender/utils/refinements'
|
19
|
-
require 'blender/configuration'
|
20
19
|
|
21
20
|
module Blender
|
22
21
|
module Discovery
|
@@ -24,7 +23,7 @@ module Blender
|
|
24
23
|
|
25
24
|
def build_discovery(type, opts = {})
|
26
25
|
disco_klass = Blender::Discovery.const_get(camelcase(type.to_s).to_sym)
|
27
|
-
disco_opts =
|
26
|
+
disco_opts = blender_config(type).merge(opts)
|
28
27
|
disco_klass.new(symbolize(disco_opts))
|
29
28
|
end
|
30
29
|
|
data/lib/blender/handlers/doc.rb
CHANGED
@@ -16,7 +16,6 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
|
18
18
|
require 'blender/utils/ui'
|
19
|
-
require 'blender/configuration'
|
20
19
|
|
21
20
|
module Blender
|
22
21
|
module Handlers
|
@@ -32,7 +31,9 @@ module Blender
|
|
32
31
|
@task_id = 0
|
33
32
|
@job_id = 1
|
34
33
|
ui.puts_green("Run[#{scheduler.name}] started")
|
35
|
-
|
34
|
+
if scheduler.blender_config(:noop)
|
35
|
+
ui.puts_green('Running in No-Op mode, driver execution will be skipped')
|
36
|
+
end
|
36
37
|
end
|
37
38
|
|
38
39
|
def run_finished(scheduler)
|
data/lib/blender/job.rb
CHANGED
@@ -17,7 +17,6 @@
|
|
17
17
|
|
18
18
|
require 'blender/exceptions'
|
19
19
|
require 'blender/log'
|
20
|
-
require 'blender/configuration'
|
21
20
|
|
22
21
|
module Blender
|
23
22
|
# A job represent encapsulates an array of tasks to be performed
|
@@ -40,7 +39,7 @@ module Blender
|
|
40
39
|
end
|
41
40
|
|
42
41
|
def run
|
43
|
-
driver.execute(tasks, hosts)
|
42
|
+
driver.execute(tasks, hosts)
|
44
43
|
end
|
45
44
|
|
46
45
|
def to_s
|
data/lib/blender/rspec.rb
CHANGED
@@ -52,10 +52,10 @@ module Blender
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def noop_scheduler_from_file(file)
|
55
|
-
Blender::Configuration[:noop] = true
|
56
55
|
des = File.read(file)
|
57
56
|
$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(file), 'lib')))
|
58
57
|
Blender.blend(file) do |sch|
|
58
|
+
sch.update_config(:noop, true)
|
59
59
|
sch.lock_options(nil)
|
60
60
|
sch.instance_eval(des, __FILE__, __LINE__)
|
61
61
|
end
|
data/lib/blender/scheduler.rb
CHANGED
@@ -16,7 +16,6 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
|
18
18
|
require 'blender/log'
|
19
|
-
require 'blender/configuration'
|
20
19
|
require 'blender/utils/thread_pool'
|
21
20
|
require 'blender/exceptions'
|
22
21
|
require 'blender/scheduling_strategies/default'
|
@@ -27,6 +26,7 @@ require 'blender/scheduler/dsl'
|
|
27
26
|
require 'blender/event_dispatcher'
|
28
27
|
require 'blender/handlers/doc'
|
29
28
|
require 'blender/tasks/base'
|
29
|
+
require 'thread_safe'
|
30
30
|
|
31
31
|
module Blender
|
32
32
|
class Scheduler
|
@@ -38,10 +38,17 @@ module Blender
|
|
38
38
|
attr_reader :events, :tasks
|
39
39
|
attr_reader :lock_properties
|
40
40
|
|
41
|
-
|
41
|
+
# options
|
42
|
+
# noop: true/false - No-Op mode, dont invoke job.run
|
43
|
+
# arguments: array or any stock data
|
44
|
+
# rest everything gets merged as metadata
|
45
|
+
def initialize(name, tasks = ThreadSafe::Array.new, options = {})
|
42
46
|
@name = name
|
43
47
|
@tasks = tasks
|
44
48
|
@events = Blender::EventDispatcher.new
|
49
|
+
@config = ThreadSafe::Hash.new{ ThreadSafe::Hash.new }
|
50
|
+
@config[:noop] = options[:noop] || false
|
51
|
+
@config[:arguments] = options[:arguments] || []
|
45
52
|
unless options.delete(:no_doc)
|
46
53
|
events.register(Blender::Handlers::Doc.new)
|
47
54
|
end
|
@@ -92,7 +99,9 @@ module Blender
|
|
92
99
|
def run_job(job)
|
93
100
|
events.job_started(job)
|
94
101
|
Log.debug("Running job #{job.name}")
|
95
|
-
|
102
|
+
unless blender_config(:noop)
|
103
|
+
job.run
|
104
|
+
end
|
96
105
|
events.job_finished(job)
|
97
106
|
rescue StandardError => e
|
98
107
|
events.job_failed(job, e)
|
@@ -103,13 +112,22 @@ module Blender
|
|
103
112
|
end
|
104
113
|
end
|
105
114
|
|
115
|
+
def blender_config(key)
|
116
|
+
@config[key]
|
117
|
+
end
|
118
|
+
|
119
|
+
def update_config(key, value)
|
120
|
+
@config[key] = value
|
121
|
+
@config
|
122
|
+
end
|
123
|
+
|
106
124
|
def default_metadata
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
125
|
+
temp = ThreadSafe::Hash.new
|
126
|
+
temp[:ignore_failure] = false
|
127
|
+
temp[:concurrency] = 0
|
128
|
+
temp[:handlers] = ThreadSafe::Array.new
|
129
|
+
temp[:members] = ThreadSafe::Array.new
|
130
|
+
temp
|
113
131
|
end
|
114
132
|
end
|
115
133
|
end
|
@@ -40,7 +40,7 @@ module Blender
|
|
40
40
|
include Blender::Discovery
|
41
41
|
|
42
42
|
def config(type, opts = {})
|
43
|
-
|
43
|
+
update_config(type, opts)
|
44
44
|
end
|
45
45
|
|
46
46
|
alias :init :config
|
@@ -176,11 +176,5 @@ module Blender
|
|
176
176
|
end
|
177
177
|
|
178
178
|
alias_method :task, :shell_task
|
179
|
-
|
180
|
-
private
|
181
|
-
|
182
|
-
def blender_config(key)
|
183
|
-
Blender::Configuration[key]
|
184
|
-
end
|
185
179
|
end
|
186
180
|
end
|
@@ -26,8 +26,9 @@ module Blender
|
|
26
26
|
if hosts_list.size != 1
|
27
27
|
raise UnsupportedFeature, 'PerHost strategy does not support scheduling tasks with different memebers'
|
28
28
|
end
|
29
|
-
job_id =
|
29
|
+
job_id = 0
|
30
30
|
jobs = hosts_list.first.map do |host|
|
31
|
+
job_id = job_id + 1
|
31
32
|
Job.new(job_id, Blender::Driver::Compound.new, tasks, [host])
|
32
33
|
end
|
33
34
|
Log.debug("Total jobs : #{jobs.size}")
|
data/lib/blender/version.rb
CHANGED
data/spec/blender/lock_spec.rb
CHANGED
@@ -2,9 +2,11 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Blender::Lock do
|
4
4
|
context 'File based locking' do
|
5
|
-
it '
|
5
|
+
it 'not allow two blender run with same lockfile to run at the same time', fork: true do
|
6
6
|
pid1 = fork do
|
7
|
-
|
7
|
+
STDOUT.reopen(File::NULL)
|
8
|
+
STDERR.reopen(File::NULL)
|
9
|
+
Blender.blend('test-1', no_doc: true) do |sched|
|
8
10
|
sched.lock_options('flock')
|
9
11
|
sched.members(['localhost'])
|
10
12
|
sched.ruby_task('date') do
|
@@ -17,8 +19,9 @@ describe Blender::Lock do
|
|
17
19
|
end
|
18
20
|
|
19
21
|
pid2 = fork do
|
22
|
+
STDOUT.reopen(File::NULL)
|
20
23
|
STDERR.reopen(File::NULL)
|
21
|
-
Blender.blend('test-1') do |sched|
|
24
|
+
Blender.blend('test-1', no_doc: true) do |sched|
|
22
25
|
sched.lock_options('flock')
|
23
26
|
sched.members(['localhost'])
|
24
27
|
sched.ruby_task('date') do
|
@@ -35,7 +38,7 @@ describe Blender::Lock do
|
|
35
38
|
expect(status2.last.exitstatus).to_not eq(0)
|
36
39
|
end
|
37
40
|
|
38
|
-
it '
|
41
|
+
it 'allow two blender run with different lock file to run at the same time', fork: true do
|
39
42
|
pid1 = fork do
|
40
43
|
Blender.blend('test-1') do |sched|
|
41
44
|
sched.lock_options('flock')
|
@@ -50,7 +53,7 @@ describe Blender::Lock do
|
|
50
53
|
end
|
51
54
|
|
52
55
|
pid2 = fork do
|
53
|
-
Blender.blend('test-2') do |sched|
|
56
|
+
Blender.blend('test-2', no_doc: true) do |sched|
|
54
57
|
sched.lock_options('flock')
|
55
58
|
sched.members(['localhost'])
|
56
59
|
sched.ruby_task('date') do
|
@@ -66,7 +69,7 @@ describe Blender::Lock do
|
|
66
69
|
expect(status2.last.exitstatus).to eq(0)
|
67
70
|
end
|
68
71
|
|
69
|
-
it '
|
72
|
+
it 'raise lock acquisition error when times out', fork: true do
|
70
73
|
pid1 = fork do
|
71
74
|
Blender.blend('test-1') do |sched|
|
72
75
|
sched.lock_options('flock')
|
@@ -98,7 +101,7 @@ describe Blender::Lock do
|
|
98
101
|
expect(status2.last.exitstatus).to_not eq(0)
|
99
102
|
end
|
100
103
|
|
101
|
-
it '
|
104
|
+
it 'not raise lock acquisition error when able to acquire lock within timeout period', fork: true do
|
102
105
|
pid1 = fork do
|
103
106
|
Blender.blend('test-1') do |sched|
|
104
107
|
sched.lock_options('flock')
|
@@ -29,13 +29,13 @@ describe Blender::Scheduler do
|
|
29
29
|
before do
|
30
30
|
scheduler.task('whoa')
|
31
31
|
end
|
32
|
-
it '
|
32
|
+
it 'belong to base class' do
|
33
33
|
expect(task).to be_kind_of(Blender::Task::Base)
|
34
34
|
end
|
35
|
-
it '
|
35
|
+
it 'use shellout driver' do
|
36
36
|
expect(task.driver).to be_kind_of(Blender::Driver::ShellOut)
|
37
37
|
end
|
38
|
-
it '
|
38
|
+
it 'contain only one task' do
|
39
39
|
expect(scheduler.tasks.size).to eq(1)
|
40
40
|
end
|
41
41
|
end
|
@@ -46,21 +46,21 @@ describe Blender::Scheduler do
|
|
46
46
|
execute('ls -l')
|
47
47
|
end
|
48
48
|
end
|
49
|
-
it '
|
49
|
+
it 'have correct hosts list' do
|
50
50
|
expect(task.hosts).to eq(['a'])
|
51
51
|
end
|
52
|
-
it '
|
52
|
+
it 'have correct command' do
|
53
53
|
expect(task.command).to eq('ls -l')
|
54
54
|
end
|
55
|
-
it '
|
55
|
+
it 'use ssh task subclass' do
|
56
56
|
expect(task).to be_kind_of(Blender::Task::Ssh)
|
57
57
|
end
|
58
|
-
it '
|
58
|
+
it 'use the ssh driver' do
|
59
59
|
expect(task.driver).to be_kind_of(Blender::Driver::Ssh)
|
60
60
|
end
|
61
61
|
end
|
62
62
|
describe '#on' do
|
63
|
-
it '
|
63
|
+
it 'invoke custom block on specific events', fork: true do
|
64
64
|
test = 1
|
65
65
|
Blender.blend('do it') do |sched|
|
66
66
|
sched.on :run_finished do |x|
|
@@ -49,6 +49,11 @@ describe Blender::SchedulingStrategy do
|
|
49
49
|
it 'all jobs should have all task' do
|
50
50
|
expect(jobs.map(&:tasks).map(&:size).uniq).to eq([tasks.size])
|
51
51
|
end
|
52
|
+
it 'assigns correct job id' do
|
53
|
+
hosts.size.times do |n|
|
54
|
+
expect(jobs[n].id).to eq(n+1)
|
55
|
+
end
|
56
|
+
end
|
52
57
|
end
|
53
58
|
describe Blender::SchedulingStrategy::PerTask do
|
54
59
|
before do
|
data/spec/blender_spec.rb
CHANGED
@@ -20,12 +20,12 @@ require 'blender/cli'
|
|
20
20
|
|
21
21
|
describe Blender do
|
22
22
|
describe '#blend' do
|
23
|
-
it '
|
23
|
+
it 'invoke a local command is no block is given' do
|
24
24
|
cmd = double(Mixlib::ShellOut, exitstatus: 0).as_null_object
|
25
25
|
expect(Mixlib::ShellOut).to receive(:new).with('foo', {}).and_return(cmd)
|
26
26
|
described_class.blend('foo')
|
27
27
|
end
|
28
|
-
it '
|
28
|
+
it 'yield a scheduler object when block passed' do
|
29
29
|
x = 1
|
30
30
|
described_class.blend('test') do |sched|
|
31
31
|
sched.ruby_task 'foo' do
|
@@ -35,11 +35,11 @@ describe Blender do
|
|
35
35
|
expect(x).to eq(100)
|
36
36
|
end
|
37
37
|
context 'CLI' do
|
38
|
-
it '
|
39
|
-
Blender::CLI.start(%w{-f spec/data/example.rb -x -y -z})
|
40
|
-
expect(
|
38
|
+
it 'store additional arguments in config', fork: true do
|
39
|
+
sched = Blender::CLI.start(%w{-q -f spec/data/example.rb -x -y -z})
|
40
|
+
expect(sched.blender_config(:arguments)).to eq(%w{-x -y -z})
|
41
41
|
end
|
42
|
-
it '
|
42
|
+
it 'store additional arguments in config', fork: true do
|
43
43
|
expect(Blender::Handlers::Doc).to_not receive(:new)
|
44
44
|
Blender::CLI.start(%w{-q -f spec/data/example.rb})
|
45
45
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pd-blender
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.5'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ranjib Dey
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: highline
|
@@ -122,6 +122,20 @@ dependencies:
|
|
122
122
|
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: thread_safe
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
140
|
name: bundler
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -239,7 +253,6 @@ files:
|
|
239
253
|
- blender.gemspec
|
240
254
|
- lib/blender.rb
|
241
255
|
- lib/blender/cli.rb
|
242
|
-
- lib/blender/configuration.rb
|
243
256
|
- lib/blender/discovery.rb
|
244
257
|
- lib/blender/drivers/base.rb
|
245
258
|
- lib/blender/drivers/compound.rb
|
@@ -276,7 +289,6 @@ files:
|
|
276
289
|
- lib/blender/utils/ui.rb
|
277
290
|
- lib/blender/version.rb
|
278
291
|
- spec/blender/blender_rspec.rb
|
279
|
-
- spec/blender/config_spec.rb
|
280
292
|
- spec/blender/discovery_spec.rb
|
281
293
|
- spec/blender/drivers/scp_spec.rb
|
282
294
|
- spec/blender/drivers/ssh_multi_spec.rb
|
@@ -320,7 +332,6 @@ specification_version: 4
|
|
320
332
|
summary: A modular orchestration engine
|
321
333
|
test_files:
|
322
334
|
- spec/blender/blender_rspec.rb
|
323
|
-
- spec/blender/config_spec.rb
|
324
335
|
- spec/blender/discovery_spec.rb
|
325
336
|
- spec/blender/drivers/scp_spec.rb
|
326
337
|
- spec/blender/drivers/ssh_multi_spec.rb
|
@@ -1,56 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Ranjib Dey (<ranjib@pagerduty.com>)
|
3
|
-
# Copyright:: Copyright (c) 2014 PagerDuty, Inc.
|
4
|
-
# License:: Apache License, Version 2.0
|
5
|
-
#
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
-
# you may not use this file except in compliance with the License.
|
8
|
-
# You may obtain a copy of the License at
|
9
|
-
#
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
#
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
-
# See the License for the specific language governing permissions and
|
16
|
-
# limitations under the License.
|
17
|
-
|
18
|
-
require 'singleton'
|
19
|
-
require 'thread'
|
20
|
-
|
21
|
-
module Blender
|
22
|
-
class Configuration
|
23
|
-
include Singleton
|
24
|
-
|
25
|
-
attr_reader :data, :mutex
|
26
|
-
|
27
|
-
def initialize
|
28
|
-
@mutex = Mutex.new
|
29
|
-
reset!
|
30
|
-
end
|
31
|
-
|
32
|
-
def self.[]=(key, value)
|
33
|
-
instance.mutex.synchronize do
|
34
|
-
instance.data[key] = value
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def self.[](key)
|
39
|
-
instance.mutex.synchronize do
|
40
|
-
instance.data[key]
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def self.reset!
|
45
|
-
instance.mutex.synchronize do
|
46
|
-
instance.reset!
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def reset!
|
51
|
-
@data = Hash.new{|h, k| h[k] = Hash.new}
|
52
|
-
@data[:noop] = false
|
53
|
-
@data[:arguments] = []
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
data/spec/blender/config_spec.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Ranjib Dey (<ranjib@pagerduty.com>)
|
3
|
-
# Copyright:: Copyright (c) 2014 PagerDuty, Inc.
|
4
|
-
# License:: Apache License, Version 2.0
|
5
|
-
#
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
-
# you may not use this file except in compliance with the License.
|
8
|
-
# You may obtain a copy of the License at
|
9
|
-
#
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
#
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
-
# See the License for the specific language governing permissions and
|
16
|
-
# limitations under the License.
|
17
|
-
|
18
|
-
require 'spec_helper'
|
19
|
-
|
20
|
-
describe Blender::Configuration do
|
21
|
-
it 'should populate argments and noop key' do
|
22
|
-
expect(Blender::Configuration[:noop]).to be(false)
|
23
|
-
expect(Blender::Configuration[:argments]).to be_empty
|
24
|
-
end
|
25
|
-
it 'should set configs globally' do
|
26
|
-
Blender::Configuration[:x] = 1
|
27
|
-
expect(Blender::Configuration[:x]).to eq(1)
|
28
|
-
end
|
29
|
-
it 'should reset config' do
|
30
|
-
Blender::Configuration[:x] = 1
|
31
|
-
Blender::Configuration.reset!
|
32
|
-
expect(Blender::Configuration[:x]).to be_empty
|
33
|
-
end
|
34
|
-
end
|