light-service 0.3.4 → 0.3.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/.rspec +1 -0
- data/README.md +5 -1
- data/lib/light-service/action.rb +2 -2
- data/lib/light-service/context.rb +0 -7
- data/lib/light-service/context_key_verifier.rb +25 -21
- data/lib/light-service/version.rb +1 -1
- data/spec/action_promised_keys_spec.rb +37 -27
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c74e129f4aa196c42077e14704239de1e3cdafec
|
4
|
+
data.tar.gz: 47f5b3dd133c2ceec5b66ecf513a9dbd78559708
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 496f22c177d5b14d0ba7d33fb6b54700e1a150e6a8683d29be30b7ec0304b24fb9daa8adac00f934c6b1f956e94d0330d020014a18450cbf89b98751b184f7f6
|
7
|
+
data.tar.gz: 24f9965dcf22ec98ed9ebb9a3083111cce43f30e438d607ccecf2d7290ee1a61c0a6e400f935ea318708b883c0eefc56bd87c86dcf94bfb6830af7021f6e91bd
|
data/.rspec
CHANGED
data/README.md
CHANGED
@@ -273,12 +273,16 @@ For further examples, please visit the project's [Wiki](https://github.com/adomo
|
|
273
273
|
Huge thanks to the [contributors](https://github.com/adomokos/light-service/graphs/contributors)!
|
274
274
|
|
275
275
|
## Release Notes
|
276
|
+
### 0.3.5
|
277
|
+
* remove previously deprecated method Context#context_hash
|
278
|
+
* [Skipping](https://github.com/adomokos/light-service/commit/d2bd05455a7e4f78aa448db1ea1d692f7b8b67d3) the promised keys check in the context when the context is in failure state
|
279
|
+
|
276
280
|
### 0.3.4
|
277
281
|
* The method call `with` is [now optional](https://github.com/adomokos/light-service/blob/master/spec/organizer_spec.rb#L18) in case you have nothing to put into the context.
|
278
282
|
* Action name is being displayed in the error message when the expected or promised key is not in the context.
|
279
283
|
|
280
284
|
### 0.3.3
|
281
|
-
* Switching the promises and expects
|
285
|
+
* Switching the promises and expects key accessors from Action to Context
|
282
286
|
|
283
287
|
### 0.3.2
|
284
288
|
* Fixing documentation and using separate arguments instead of a hash when setting the context to failure with error code
|
data/lib/light-service/action.rb
CHANGED
@@ -28,14 +28,14 @@ module LightService
|
|
28
28
|
return action_context if action_context.stop_processing?
|
29
29
|
action = self
|
30
30
|
|
31
|
-
|
31
|
+
Context::KeyVerifier.verify_expected_keys_are_in_context(action_context, action)
|
32
32
|
|
33
33
|
action_context.define_accessor_methods_for_keys(expected_keys)
|
34
34
|
action_context.define_accessor_methods_for_keys(promised_keys)
|
35
35
|
|
36
36
|
yield(action_context)
|
37
37
|
|
38
|
-
|
38
|
+
Context::KeyVerifier.verify_promised_keys_are_in_context(action_context, action)
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
@@ -26,13 +26,6 @@ module LightService
|
|
26
26
|
self.merge! values
|
27
27
|
end
|
28
28
|
|
29
|
-
# It's really there for testing and debugging
|
30
|
-
# Deprecated: Please use `to_hash` instead
|
31
|
-
def context_hash
|
32
|
-
warn 'DEPRECATED: Please use `to_hash` instead'
|
33
|
-
self.dup
|
34
|
-
end
|
35
|
-
|
36
29
|
def success?
|
37
30
|
@outcome == ::LightService::Outcomes::SUCCESS
|
38
31
|
end
|
@@ -2,35 +2,39 @@ module LightService
|
|
2
2
|
class ExpectedKeysNotInContextError < StandardError; end
|
3
3
|
class PromisedKeysNotInContextError < StandardError; end
|
4
4
|
|
5
|
-
class
|
6
|
-
class
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
class Context
|
6
|
+
class KeyVerifier
|
7
|
+
class << self
|
8
|
+
def verify_expected_keys_are_in_context(context, action)
|
9
|
+
verify_keys_are_in_context(context, action.expected_keys) do |not_found_keys|
|
10
|
+
fail ExpectedKeysNotInContextError, "expected #{format_keys(not_found_keys)} to be in the context during #{action}"
|
11
|
+
end
|
10
12
|
end
|
11
|
-
end
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
14
|
+
def verify_promised_keys_are_in_context(context, action)
|
15
|
+
return context if context.failure?
|
16
|
+
|
17
|
+
verify_keys_are_in_context(context, action.promised_keys) do |not_found_keys|
|
18
|
+
fail PromisedKeysNotInContextError, "promised #{format_keys(not_found_keys)} to be in the context during #{action}"
|
19
|
+
end
|
16
20
|
end
|
17
|
-
end
|
18
21
|
|
19
|
-
|
22
|
+
private
|
20
23
|
|
21
|
-
|
22
|
-
|
24
|
+
def verify_keys_are_in_context(context, keys)
|
25
|
+
keys ||= context.keys
|
23
26
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
27
|
+
not_found_keys = keys - context.keys
|
28
|
+
unless not_found_keys.empty?
|
29
|
+
yield not_found_keys
|
30
|
+
end
|
28
31
|
|
29
|
-
|
30
|
-
|
32
|
+
context
|
33
|
+
end
|
31
34
|
|
32
|
-
|
33
|
-
|
35
|
+
def format_keys(keys)
|
36
|
+
keys.map { |k| ":#{k}"}.join(', ')
|
37
|
+
end
|
34
38
|
end
|
35
39
|
end
|
36
40
|
end
|
@@ -5,52 +5,62 @@ module LightService
|
|
5
5
|
class DummyActionForKeysToPromise
|
6
6
|
include LightService::Action
|
7
7
|
expects :tea, :milk
|
8
|
-
promises :milk_tea
|
8
|
+
promises :milk_tea
|
9
9
|
|
10
|
-
executed do |context|
|
11
|
-
context[:some_tea] = "#{context.tea} - #{context.milk}"
|
12
|
-
end
|
13
10
|
end
|
14
11
|
|
15
12
|
context "when the promised key is not in the context" do
|
16
13
|
it "raises an ArgumentError" do
|
17
|
-
|
14
|
+
class DummyActionForKeysToPromise
|
15
|
+
executed do |context|
|
16
|
+
context[:some_tea] = "#{context.tea} - #{context.milk}"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
exception_error_text = "promised :milk_tea to be in the context during LightService::DummyActionForKeysToPromise"
|
18
21
|
expect {
|
19
22
|
DummyActionForKeysToPromise.execute(:tea => "black", :milk => "full cream")
|
20
23
|
}.to raise_error(PromisedKeysNotInContextError, exception_error_text)
|
21
24
|
end
|
22
|
-
end
|
23
25
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
executed do |context|
|
31
|
-
context.milk_tea = "#{context.tea} - #{context.milk}"
|
32
|
-
context.milk_tea += " hello"
|
26
|
+
it "fails the context without fulfilling its promise" do
|
27
|
+
class DummyActionForKeysToPromise
|
28
|
+
executed do |context|
|
29
|
+
context.fail!("Sorry, something bad has happened.")
|
30
|
+
end
|
33
31
|
end
|
32
|
+
|
33
|
+
result_context = DummyActionForKeysToPromise.execute(:tea => "black",
|
34
|
+
:milk => "full cream")
|
35
|
+
|
36
|
+
expect(result_context).to be_failure
|
37
|
+
expect(result_context.keys).not_to include(:milk_tea)
|
34
38
|
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context "when the promised key is in the context" do
|
35
42
|
it "sets in the context if it was set with not nil" do
|
36
|
-
|
43
|
+
class DummyActionForKeysToPromise
|
44
|
+
executed do |context|
|
45
|
+
context.milk_tea = "#{context.tea} - #{context.milk}"
|
46
|
+
context.milk_tea += " hello"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
result_context = DummyActionForKeysToPromise.execute(:tea => "black",
|
37
51
|
:milk => "full cream")
|
38
52
|
expect(result_context).to be_success
|
39
53
|
expect(result_context[:milk_tea]).to eq("black - full cream hello")
|
40
54
|
end
|
41
55
|
|
42
|
-
class DummyActionNilNotSetInContext
|
43
|
-
include LightService::Action
|
44
|
-
expects :tea, :milk
|
45
|
-
promises :milk_tea
|
46
|
-
|
47
|
-
executed do |context|
|
48
|
-
context.milk_tea = nil
|
49
|
-
end
|
50
|
-
end
|
51
56
|
it "sets in the context if it was set with nil" do
|
52
|
-
|
53
|
-
|
57
|
+
class DummyActionForKeysToPromise
|
58
|
+
executed do |context|
|
59
|
+
context.milk_tea = nil
|
60
|
+
end
|
61
|
+
end
|
62
|
+
result_context = DummyActionForKeysToPromise.execute(:tea => "black",
|
63
|
+
:milk => "full cream")
|
54
64
|
expect(result_context).to be_success
|
55
65
|
expect(result_context[:milk_tea]).to be_nil
|
56
66
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: light-service
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Attila Domokos
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-06-
|
11
|
+
date: 2014-06-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|