stack_commander 0.0.5.pre.2 → 0.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/README.md +4 -0
- data/lib/stack_commander/command.rb +4 -30
- data/lib/stack_commander/dependency_injection.rb +4 -15
- data/lib/stack_commander/version.rb +1 -1
- data/spec/command_spec.rb +9 -36
- data/spec/dependency_injection_spec.rb +3 -18
- data/spec/stack_spec.rb +6 -2
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 595990555153b67f3183dbca5f68d2e1f10fe746
|
4
|
+
data.tar.gz: 097710148b29367a54622fc4181c22b3175edb1f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 29509d72c79c3dad4cd4fbe788eead74769472bb09ad70bfe3a6a7b66896ca32d0997ea39cf352319fc9f311d03f38552755c9acea666beae5c37b890be229d6
|
7
|
+
data.tar.gz: 420c6a813a99c4fe2f06c7b12477d755c903791ce4879363f370d67e1bf16bedad6dff237855159f4c60a1973fe86e5edfae4153ae47da171807565d612f1054
|
data/README.md
CHANGED
@@ -101,6 +101,10 @@ other command insurance
|
|
101
101
|
command insurance
|
102
102
|
```
|
103
103
|
|
104
|
+
# TODO
|
105
|
+
* figure out how to configure commands without need of subclassing
|
106
|
+
for example Command Gzip accepts a file and outputs a gzipped file, how you can use this command twice in one stack?
|
107
|
+
|
104
108
|
## Contributing
|
105
109
|
|
106
110
|
1. Fork it ( https://github.com/mikz/stack_commander/fork )
|
@@ -1,12 +1,9 @@
|
|
1
1
|
module StackCommander
|
2
2
|
module Command
|
3
|
-
def self.included(base)
|
4
|
-
base.extend(ClassMethods)
|
5
|
-
end
|
6
|
-
|
7
3
|
def call(stack)
|
8
4
|
action
|
9
5
|
stack.call
|
6
|
+
cleanup
|
10
7
|
rescue => exception
|
11
8
|
recover(exception)
|
12
9
|
raise
|
@@ -14,6 +11,9 @@ module StackCommander
|
|
14
11
|
insurance
|
15
12
|
end
|
16
13
|
|
14
|
+
def cleanup
|
15
|
+
end
|
16
|
+
|
17
17
|
def action
|
18
18
|
end
|
19
19
|
|
@@ -22,31 +22,5 @@ module StackCommander
|
|
22
22
|
|
23
23
|
def insurance
|
24
24
|
end
|
25
|
-
|
26
|
-
def configuration
|
27
|
-
self.class.configuration
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
module ClassMethods
|
33
|
-
CONFIGURATION = :@@configuration
|
34
|
-
|
35
|
-
def configuration
|
36
|
-
class_variable_get(CONFIGURATION) if class_variable_defined?(CONFIGURATION)
|
37
|
-
end
|
38
|
-
|
39
|
-
def dependency_injection(&block)
|
40
|
-
class_variable_set(:@@dependency_injection, block)
|
41
|
-
end
|
42
|
-
|
43
|
-
# Creates an anonymous subclass of current command, configured with passed value
|
44
|
-
# then all instances of that command will have the same configuration
|
45
|
-
def [](value)
|
46
|
-
subclass = Class.new(self)
|
47
|
-
subclass.class_variable_set(CONFIGURATION, value)
|
48
|
-
subclass
|
49
|
-
end
|
50
|
-
end
|
51
25
|
end
|
52
26
|
end
|
@@ -2,8 +2,6 @@ module StackCommander
|
|
2
2
|
class DependencyInjection
|
3
3
|
InvalidScope = Class.new(StandardError)
|
4
4
|
|
5
|
-
CVAR = :@@dependency_injection
|
6
|
-
|
7
5
|
def initialize(klass)
|
8
6
|
@klass = klass
|
9
7
|
end
|
@@ -17,29 +15,20 @@ module StackCommander
|
|
17
15
|
Array(parameters)
|
18
16
|
end
|
19
17
|
|
20
|
-
def
|
21
|
-
|
22
|
-
parameters && parameters.respond_to?(:to_proc) ? @klass.instance_exec(:initialize, ¶meters) : parameters
|
23
|
-
end
|
24
|
-
|
25
|
-
def parameters
|
26
|
-
configured_parameters || required_parameters
|
27
|
-
end
|
28
|
-
|
29
|
-
def matching?(scope)
|
30
|
-
parameters.all? do |param|
|
18
|
+
def matches?(scope)
|
19
|
+
required_parameters.all? do |param|
|
31
20
|
scope.respond_to?(param)
|
32
21
|
end
|
33
22
|
end
|
34
23
|
|
35
24
|
def match!(scope)
|
36
|
-
raise InvalidScope, scope unless
|
25
|
+
raise InvalidScope, scope unless matches?(scope)
|
37
26
|
end
|
38
27
|
|
39
28
|
def extract(scope)
|
40
29
|
match!(scope)
|
41
30
|
|
42
|
-
|
31
|
+
required_parameters.map do |param|
|
43
32
|
scope.public_send(param)
|
44
33
|
end
|
45
34
|
end
|
data/spec/command_spec.rb
CHANGED
@@ -11,6 +11,7 @@ describe StackCommander::Command do
|
|
11
11
|
|
12
12
|
expect_it { to respond_to(:action) }
|
13
13
|
expect_it { to respond_to(:insurance) }
|
14
|
+
expect_it { to respond_to(:cleanup) }
|
14
15
|
expect_it { to respond_to(:recover).with(1).argument }
|
15
16
|
|
16
17
|
|
@@ -26,6 +27,11 @@ describe StackCommander::Command do
|
|
26
27
|
subject.call(stack)
|
27
28
|
end
|
28
29
|
|
30
|
+
it 'calls cleanup' do
|
31
|
+
expect(subject).to receive(:cleanup)
|
32
|
+
subject.call(stack)
|
33
|
+
end
|
34
|
+
|
29
35
|
it 'calls insurance' do
|
30
36
|
expect(subject).to receive(:insurance)
|
31
37
|
subject.call(stack)
|
@@ -51,43 +57,10 @@ describe StackCommander::Command do
|
|
51
57
|
expect(subject).to receive(:recover).with(an_instance_of(StandardError))
|
52
58
|
expect{ subject.call(stack) }.to raise_error(StandardError)
|
53
59
|
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
context 'classes including command' do
|
58
|
-
subject(:command) { Class.new{ include StackCommander::Command } }
|
59
|
-
|
60
|
-
before do
|
61
|
-
stub_const('TestCommand', command)
|
62
|
-
end
|
63
|
-
|
64
|
-
it 'has name' do
|
65
|
-
expect(command.to_s).to eq('TestCommand')
|
66
|
-
end
|
67
|
-
|
68
|
-
it 'has configuration' do
|
69
|
-
expect(command.configuration).to be_nil
|
70
|
-
end
|
71
|
-
|
72
|
-
context 'with config' do
|
73
|
-
subject(:configured_command) { command[:test] }
|
74
|
-
|
75
|
-
expect_it { to be }
|
76
|
-
|
77
|
-
it 'does not have a name' do
|
78
|
-
expect(configured_command.to_s).not_to eq('TestCommand')
|
79
|
-
end
|
80
|
-
|
81
|
-
it 'has configuration' do
|
82
|
-
expect(configured_command.configuration).to eq(:test)
|
83
|
-
end
|
84
60
|
|
85
|
-
|
86
|
-
subject(:
|
87
|
-
|
88
|
-
it 'has configuration' do
|
89
|
-
expect(instance.configuration).to eq(:test)
|
90
|
-
end
|
61
|
+
it 'does not call cleanup' do
|
62
|
+
expect(subject).not_to receive(:cleanup)
|
63
|
+
expect{ subject.call(stack) }.to raise_error(StandardError)
|
91
64
|
end
|
92
65
|
end
|
93
66
|
end
|
@@ -14,7 +14,7 @@ describe StackCommander::DependencyInjection do
|
|
14
14
|
let(:scope) { double('scope', one: 'one value', two: 'two') }
|
15
15
|
|
16
16
|
it do
|
17
|
-
expect(di).to
|
17
|
+
expect(di.matches?(scope)).to be
|
18
18
|
end
|
19
19
|
|
20
20
|
it do
|
@@ -22,30 +22,15 @@ describe StackCommander::DependencyInjection do
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
context 'scope does not have
|
25
|
+
context 'scope does not have requried methods' do
|
26
26
|
let(:scope) { double('scope', one: true) }
|
27
27
|
|
28
28
|
it do
|
29
|
-
expect(di).not_to
|
29
|
+
expect(di.matches?(scope)).not_to be
|
30
30
|
end
|
31
31
|
|
32
32
|
it do
|
33
33
|
expect{ di.extract(scope) }.to raise_error(StackCommander::DependencyInjection::InvalidScope)
|
34
34
|
end
|
35
35
|
end
|
36
|
-
|
37
|
-
context 'class has configured parameters' do
|
38
|
-
before do
|
39
|
-
custom_class.class_variable_set :@@dependency_injection, proc { [:three, :four] }
|
40
|
-
end
|
41
|
-
|
42
|
-
it do
|
43
|
-
expect(di.parameters).to eq([:three, :four])
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'matches new scope' do
|
47
|
-
scope = double(three: true, four: true)
|
48
|
-
expect(di).to be_matching(scope)
|
49
|
-
end
|
50
|
-
end
|
51
36
|
end
|
data/spec/stack_spec.rb
CHANGED
@@ -49,9 +49,13 @@ describe StackCommander::Stack do
|
|
49
49
|
stack << other_command
|
50
50
|
end
|
51
51
|
|
52
|
-
it 'calls
|
52
|
+
it 'calls actions in stack manner' do
|
53
53
|
expect_any_instance_of(command).to receive(:action) do
|
54
|
-
expect_any_instance_of(other_command).to receive(:action)
|
54
|
+
expect_any_instance_of(other_command).to receive(:action) do
|
55
|
+
expect_any_instance_of(other_command).to receive(:cleanup) do
|
56
|
+
expect_any_instance_of(command).to receive(:cleanup)
|
57
|
+
end
|
58
|
+
end
|
55
59
|
end
|
56
60
|
|
57
61
|
stack.call
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stack_commander
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.5
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michal Cichra
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-05-
|
11
|
+
date: 2014-05-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -108,9 +108,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
108
108
|
version: '0'
|
109
109
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
110
|
requirements:
|
111
|
-
- - "
|
111
|
+
- - ">="
|
112
112
|
- !ruby/object:Gem::Version
|
113
|
-
version:
|
113
|
+
version: '0'
|
114
114
|
requirements: []
|
115
115
|
rubyforge_project:
|
116
116
|
rubygems_version: 2.2.2
|