simple_service 1.3.1 → 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d7f97f4de9f329a4f7188fb1bb5b29e05552f7fc
4
- data.tar.gz: 4ec23950462d5ead39a0011da3bb8faa34f3c46b
3
+ metadata.gz: 7e5f8250d7c8ab14b2d10bea01d8c411f45971b3
4
+ data.tar.gz: 142559ae98f856791cd1a42abaf2a6159fc74f0b
5
5
  SHA512:
6
- metadata.gz: e5294419ccca5e623bd821a414cd646cd5542e741421c6ebc2168a4fc96e59da8fa3059477283e9ebe105ea009d099fb64e601a65e133e3a47d798dbe9191096
7
- data.tar.gz: 15eeeb65864d2c0e42f4d218f4929d6ccaac2c5691049559c8a42b85a8c3e897e2e818533ac9a9c38da29f86133c0fdc75c739db27aeaa464022ce5343c67d70
6
+ metadata.gz: 5993861fe94469b479220a9621d331381878e709108be079127d39e83062344fb08d390b62983cae2390988d4a864c24051cbe9fe9f242dbeed035a0bb073a68
7
+ data.tar.gz: 8041a351c27b68708f3e2bb9daf1aa6d392224d0bfd60d7a45847cc0a49cd257d2fe41d045fcef37cb44caac5c15339c4d2cca65f3f9893e987094eeaaedb122
@@ -25,8 +25,25 @@ module SimpleService
25
25
  def call
26
26
  with_validation do |_commands|
27
27
  _commands.each do |command|
28
+
29
+ # halt further command calls if success has been set to false
30
+ # in a previously called command
28
31
  break if context[:success] == false
29
- new_context = command.new(context).call
32
+
33
+ # if command class defines "expects" then only feed the command
34
+ # those keys, otherwise just give it the entire context
35
+ _context = if command.get_expects.any?
36
+ {}.tap do |c|
37
+ command.get_expects.each {|key| c[key] = context[key] }
38
+ end
39
+ else
40
+ context
41
+ end
42
+
43
+ # instantiate and call the command
44
+ new_context = command.new(_context).call
45
+
46
+ # update the master context with the results of the command
30
47
  @context.merge!(new_context)
31
48
  end
32
49
  end
@@ -40,6 +57,10 @@ module SimpleService
40
57
 
41
58
  private
42
59
 
60
+ def failed?
61
+ !successful?
62
+ end
63
+
43
64
  def successful?
44
65
  context[:success] == true
45
66
  end
@@ -47,10 +68,18 @@ module SimpleService
47
68
  def with_validation
48
69
  add_validation_keys_to_context unless skip_validation
49
70
 
71
+ # ensure that the organizer and commands are setup correctly
72
+ # by injecting an internal service organizer into the stack of
73
+ # commands to be executed. Only include this if skip_validation is
74
+ # not set. Since both user defined and internal services use this code
75
+ # the skip_validation avoids an infinite loop
50
76
  _commands = skip_validation ? commands : [EnsureOrganizerIsValid] + commands
51
77
 
52
78
  yield(_commands)
53
79
 
80
+ # cleanup context keys that are used by the validation so the final
81
+ # return is clean even if the user does not define "returns" in their
82
+ # organizer
54
83
  remove_validation_keys_from_context unless skip_validation
55
84
  end
56
85
 
@@ -6,10 +6,18 @@ module SimpleService
6
6
  @expects = args
7
7
  end
8
8
 
9
+ def get_expects
10
+ @expects || []
11
+ end
12
+
9
13
  def returns(*args)
10
14
  @returns = args
11
15
  end
12
16
 
17
+ def get_returns
18
+ @returns || []
19
+ end
20
+
13
21
  def skip_validation(skip=true)
14
22
  @skip_validation = skip
15
23
  end
@@ -57,7 +65,7 @@ module SimpleService
57
65
 
58
66
  # only automatically set context[:success] on Organizers and only if its not already set
59
67
  # by a command calling #failure!
60
- if !_context.has_key?(:success) && self.class.ancestors.include?(SimpleService::Organizer)
68
+ if !_context.has_key?(:success) && organizer?
61
69
  _context[:success] = true
62
70
  end
63
71
 
@@ -65,7 +73,7 @@ module SimpleService
65
73
  end
66
74
 
67
75
  def find_specified_return_keys
68
- if returns.nil? || returns.empty?
76
+ if returns.nil? || returns.empty? || (organizer? && failed?)
69
77
  context
70
78
  else
71
79
  returns.inject({}) do |to_return, return_param|
@@ -82,11 +90,11 @@ module SimpleService
82
90
  end
83
91
 
84
92
  def expects
85
- self.class.instance_variable_get('@expects') || []
93
+ self.class.get_expects
86
94
  end
87
95
 
88
96
  def returns
89
- self.class.instance_variable_get('@returns') || []
97
+ self.class.get_returns
90
98
  end
91
99
 
92
100
  def skip_validation
@@ -97,6 +105,10 @@ module SimpleService
97
105
  (expects + returns + ['message', 'success']).uniq
98
106
  end
99
107
 
108
+ def organizer?
109
+ self.class.ancestors.include?(SimpleService::Organizer)
110
+ end
111
+
100
112
  def failure!(message = nil)
101
113
  context[:success] = false
102
114
  context[:message] = message || 'There was a problem'
@@ -1,3 +1,3 @@
1
1
  module SimpleService
2
- VERSION = '1.3.1'
2
+ VERSION = '1.3.2'
3
3
  end
@@ -24,11 +24,13 @@ describe SimpleService::Command do
24
24
  end
25
25
 
26
26
  describe '.call' do
27
+
27
28
  it 'returns the correct keys when using class method' do
28
29
  expect(
29
30
  ValidCommand.call(foo: 'blah', bar: 'meh')
30
31
  ).to eql(bar: 'modified', baz: 'blah')
31
32
  end
33
+
32
34
  end
33
35
 
34
36
  describe '#call' do
@@ -83,4 +85,20 @@ describe SimpleService::Command do
83
85
 
84
86
  end
85
87
 
88
+ describe '.get_expects' do
89
+
90
+ it 'returns an array of expected keys' do
91
+ expect(ValidCommand.get_expects.sort).to eql([:foo, :bar].sort)
92
+ end
93
+
94
+ end
95
+
96
+ describe '.get_returns' do
97
+
98
+ it 'returns an array of keys to return' do
99
+ expect(ValidCommand.get_returns.sort).to eql([:baz, :bar].sort)
100
+ end
101
+
102
+ end
103
+
86
104
  end
@@ -105,9 +105,17 @@ describe SimpleService::Organizer do
105
105
  ).to eql({ baz: 'baz', success: true })
106
106
  end
107
107
 
108
+ describe '.get_expects' do
109
+
110
+ it 'returns an array of expected keys' do
111
+ expect(GetterSetterOrganizer.get_expects.sort).to eql [:bar, :foo]
112
+ end
113
+
114
+ end
115
+
108
116
  end
109
117
 
110
- context 'service with command that calls fail_and_return' do
118
+ context 'service with command that calls failure!' do
111
119
 
112
120
  class FailAndReturnErrorMessage < SimpleService::Command
113
121
  def call
@@ -122,6 +130,7 @@ describe SimpleService::Organizer do
122
130
  end
123
131
 
124
132
  class FailAndReturn < SimpleService::Organizer
133
+ returns :something_not_set
125
134
  commands FailAndReturnErrorMessage, ShouldNotRun
126
135
  end
127
136
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_service
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jarrod Spillers