simple_service 1.4.1 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,3 @@
1
1
  module SimpleService
2
- VERSION = '1.4.1'
2
+ VERSION = '2.1.0'
3
3
  end
@@ -1,5 +1,180 @@
1
1
  require 'spec_helper'
2
+ require_relative 'support/basic_service'
3
+ require_relative 'support/looping_service'
2
4
 
3
- describe SimpleService do
5
+ RSpec.describe SimpleService do
4
6
 
7
+ let(:params) do
8
+ {
9
+ foo: 'asdf',
10
+ bar: 'qwer',
11
+ command_one_success: true,
12
+ command_two_success: true,
13
+ }
14
+ end
15
+
16
+ let(:result) do
17
+ BasicService.call(params)
18
+ end
19
+
20
+ before do
21
+ SimpleService.configure do |config|
22
+ config.verbose_tracking = false
23
+ end
24
+ end
25
+
26
+ context '#call is successful' do
27
+ it 'returns a result object' do
28
+ expect(result).to be_a SimpleService::Result
29
+ end
30
+
31
+ it 'returns success' do
32
+ expect(result.success?).to eq true
33
+ end
34
+
35
+ it 'returns the correct result value' do
36
+ expect(result.value).to eq(
37
+ combined_foo_bar: 'combined modified FOO modified BAR'
38
+ )
39
+ end
40
+ end
41
+
42
+ context '#call that fails on step one' do
43
+ let(:result) do
44
+ BasicService.call(params.merge(command_one_success: false))
45
+ end
46
+
47
+ it 'returns a result object' do
48
+ expect(result).to be_a SimpleService::Result
49
+ end
50
+
51
+ it 'returns failure' do
52
+ expect(result.success?).to eq false
53
+ expect(result.failure?).to eq true
54
+ end
55
+
56
+ it 'returns the correct result value' do
57
+ expect(result.value).to eq(
58
+ message: 'stuff went wrong with command one'
59
+ )
60
+ end
61
+ end
62
+
63
+ context '#call that fails on step two' do
64
+ it 'returns the correct result value' do
65
+ result = BasicService.call(params.merge(command_two_success: false))
66
+ expect(result.value).to eq(
67
+ message: 'stuff went wrong with command two'
68
+ )
69
+ end
70
+ end
71
+
72
+ context 'LoopingService' do
73
+ it 'returns a result object' do
74
+ expect(LoopingService.call(count: 0)).to be_a SimpleService::Result
75
+ end
76
+
77
+ it 'returns a result object' do
78
+ expect(LoopingService.call(count: 0).value).to eq(count: 3)
79
+ end
80
+ end
81
+
82
+ context 'record commands' do
83
+ it 'records normal command execution' do
84
+ expect(result.recorded_commands).to eq(
85
+ [
86
+ {
87
+ class_name: 'BasicService',
88
+ command_name: :command_one,
89
+ success: true,
90
+ },
91
+ {
92
+ class_name: 'BasicService',
93
+ command_name: :command_two,
94
+ success: true,
95
+ },
96
+ {
97
+ class_name: 'CommandOne',
98
+ command_name: :modify_foo_bar,
99
+ success: true,
100
+ },
101
+ {
102
+ class_name: 'CommandTwo',
103
+ command_name: :combine_foo_bar,
104
+ success: true,
105
+ },
106
+ ]
107
+ )
108
+ end
109
+
110
+ it 'records verbose command execution' do
111
+ SimpleService.configure do |config|
112
+ config.verbose_tracking = true
113
+ end
114
+
115
+ expect(result.recorded_commands).to eq(
116
+ [
117
+ {
118
+ class_name: 'BasicService',
119
+ command_name: :command_one,
120
+ received_args: {
121
+ foo: 'asdf',
122
+ bar: 'qwer',
123
+ command_one_success: true,
124
+ command_two_success: true
125
+ },
126
+ success: {
127
+ foo: 'FOO',
128
+ bar: 'qwer',
129
+ command_one_success: true,
130
+ command_two_success: true,
131
+ },
132
+ },
133
+ {
134
+ class_name: 'BasicService',
135
+ command_name: :command_two,
136
+ received_args: {
137
+ foo: 'FOO',
138
+ bar: 'qwer',
139
+ command_one_success: true,
140
+ command_two_success: true
141
+ },
142
+ success: {
143
+ foo: 'FOO',
144
+ bar: 'BAR',
145
+ command_one_success: true,
146
+ command_two_success: true,
147
+ },
148
+ },
149
+ {
150
+ class_name: 'CommandOne',
151
+ command_name: :modify_foo_bar,
152
+ received_args: {
153
+ foo: 'FOO',
154
+ bar: 'BAR',
155
+ command_one_success: true,
156
+ command_two_success: true,
157
+ },
158
+ success: {
159
+ modified_foo: 'modified FOO',
160
+ modified_bar: 'modified BAR',
161
+ command_two_success: true,
162
+ },
163
+ },
164
+ {
165
+ class_name: 'CommandTwo',
166
+ command_name: :combine_foo_bar,
167
+ received_args: {
168
+ modified_foo: 'modified FOO',
169
+ modified_bar: 'modified BAR',
170
+ command_two_success: true,
171
+ },
172
+ success: {
173
+ combined_foo_bar: 'combined modified FOO modified BAR',
174
+ },
175
+ },
176
+ ]
177
+ )
178
+ end
179
+ end
5
180
  end
@@ -0,0 +1,19 @@
1
+ require_relative 'command_one'
2
+ require_relative 'command_two'
3
+
4
+ class BasicService
5
+ include SimpleService
6
+
7
+ command :command_one
8
+ command :command_two
9
+ commands CommandOne, CommandTwo
10
+
11
+ def command_one(**kwargs)
12
+ success(kwargs.merge(foo: 'FOO'))
13
+ end
14
+
15
+ def command_two(**kwargs)
16
+ success(kwargs.merge(bar: 'BAR'))
17
+ end
18
+ end
19
+
@@ -0,0 +1,21 @@
1
+ class CommandOne
2
+ include SimpleService
3
+
4
+ command :modify_foo_bar
5
+
6
+ def modify_foo_bar(foo:, bar:, command_one_success:, command_two_success:)
7
+ modified_foo = "modified #{foo}"
8
+ modified_bar = "modified #{bar}"
9
+
10
+ if command_one_success
11
+ success(
12
+ modified_foo: modified_foo,
13
+ modified_bar: modified_bar,
14
+ command_two_success: command_two_success,
15
+ )
16
+ else
17
+ failure(message: 'stuff went wrong with command one')
18
+ end
19
+ end
20
+ end
21
+
@@ -0,0 +1,15 @@
1
+ class CommandTwo
2
+ include SimpleService
3
+
4
+ command :combine_foo_bar
5
+
6
+ def combine_foo_bar(modified_foo:, modified_bar:, command_two_success:)
7
+ combined_foo_bar = "combined #{modified_foo} #{modified_bar}"
8
+
9
+ if command_two_success
10
+ success(combined_foo_bar: combined_foo_bar)
11
+ else
12
+ failure(message: 'stuff went wrong with command two')
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,20 @@
1
+ class LoopingService
2
+ include SimpleService
3
+
4
+ commands :add_one
5
+
6
+ def call(kwargs)
7
+ count = kwargs
8
+
9
+ 3.times do
10
+ count = super(count)
11
+ end
12
+
13
+ count
14
+ end
15
+
16
+ def add_one(count:)
17
+ success(count: count + 1)
18
+ end
19
+ end
20
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_service
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.1
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jarrod Spillers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-02 00:00:00.000000000 Z
11
+ date: 2017-10-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -110,30 +110,17 @@ files:
110
110
  - LICENSE.txt
111
111
  - README.md
112
112
  - Rakefile
113
- - example/hello_world.rb
114
- - example/nested_organizer.rb
115
- - example/nested_services.rb
116
- - example/override_organizer_call_method.rb
117
113
  - lib/simple_service.rb
118
- - lib/simple_service/command.rb
119
- - lib/simple_service/commands/validates_commands_not_empty.rb
120
- - lib/simple_service/commands/validates_commands_properly_inherit.rb
121
- - lib/simple_service/commands/validates_expected_keys.rb
122
- - lib/simple_service/context.rb
123
- - lib/simple_service/ensure_organizer_is_valid.rb
124
- - lib/simple_service/exceptions.rb
125
- - lib/simple_service/organizer.rb
126
- - lib/simple_service/service_base.rb
114
+ - lib/simple_service/configuration.rb
115
+ - lib/simple_service/result.rb
127
116
  - lib/simple_service/version.rb
128
117
  - simple_service.gemspec
129
- - spec/lib/command_spec.rb
130
- - spec/lib/commands/validates_commands_not_empty_spec.rb
131
- - spec/lib/commands/validates_commands_properly_inherit_spec.rb
132
- - spec/lib/commands/validates_expected_keys_spec.rb
133
- - spec/lib/ensure_organizer_is_valid_spec.rb
134
- - spec/lib/organizer_spec.rb
135
118
  - spec/simple_service_spec.rb
136
119
  - spec/spec_helper.rb
120
+ - spec/support/basic_service.rb
121
+ - spec/support/command_one.rb
122
+ - spec/support/command_two.rb
123
+ - spec/support/looping_service.rb
137
124
  homepage: https://github.com/jspillers/simple_service
138
125
  licenses:
139
126
  - MIT
@@ -160,12 +147,9 @@ specification_version: 4
160
147
  summary: A minimal service object composer with support for individual commands and
161
148
  top level organizer objects
162
149
  test_files:
163
- - spec/lib/command_spec.rb
164
- - spec/lib/commands/validates_commands_not_empty_spec.rb
165
- - spec/lib/commands/validates_commands_properly_inherit_spec.rb
166
- - spec/lib/commands/validates_expected_keys_spec.rb
167
- - spec/lib/ensure_organizer_is_valid_spec.rb
168
- - spec/lib/organizer_spec.rb
169
150
  - spec/simple_service_spec.rb
170
151
  - spec/spec_helper.rb
171
- has_rdoc:
152
+ - spec/support/basic_service.rb
153
+ - spec/support/command_one.rb
154
+ - spec/support/command_two.rb
155
+ - spec/support/looping_service.rb
@@ -1,29 +0,0 @@
1
- require 'rubygems'
2
- require 'simple_service'
3
-
4
- class ConcatName < SimpleService::Command
5
- expects :first_name, :last_name
6
- returns :name
7
-
8
- def call
9
- self.name = "#{first_name} #{last_name}"
10
- end
11
- end
12
-
13
- class CreateHelloString < SimpleService::Command
14
- expects :name
15
- returns :hello
16
-
17
- def call
18
- self.hello = "#{name}, say hello world!"
19
- end
20
- end
21
-
22
- class SayHello < SimpleService::Organizer
23
- expects :first_name, :last_name
24
- returns :hello
25
- commands ConcatName, CreateHelloString
26
- end
27
-
28
- result = SayHello.new(first_name: 'Ruby', last_name: 'Gem').call
29
- puts result[:hello]
@@ -1,29 +0,0 @@
1
- require 'rubygems'
2
- require 'simple_service'
3
-
4
- class Increment < SimpleService::Command
5
- expects :counter
6
- returns :counter
7
-
8
- def call
9
- self.counter += 1
10
- end
11
- end
12
-
13
- class IncrementCounter < SimpleService::Organizer
14
- expects :counter
15
- returns :counter
16
- commands Increment, Increment, Increment
17
- end
18
-
19
- class ReallyIncrementThatCounter < SimpleService::Organizer
20
- expects :counter
21
- returns :counter
22
- commands IncrementCounter, IncrementCounter, IncrementCounter
23
- end
24
-
25
- result = IncrementCounter.new(counter: 0).call
26
- puts "IncrementCounter: #{result[:counter]}"
27
-
28
- result = ReallyIncrementThatCounter.new(counter: 0).call
29
- puts "ReallyIncrementThatCounter: #{result[:counter]}"
@@ -1,29 +0,0 @@
1
- require 'rubygems'
2
- require 'simple_service'
3
-
4
- class Increment < SimpleService::Command
5
- expects :counter
6
- returns :counter
7
-
8
- def execute
9
- self.counter += 1
10
- end
11
- end
12
-
13
- class IncrementCounter < SimpleService::Organizer
14
- expects :counter
15
- returns :counter
16
- commands Increment, Increment, Increment
17
- end
18
-
19
- class ReallyIncrementThatCounter < SimpleService::Organizer
20
- expects :counter
21
- returns :counter
22
- commands IncrementCounter, IncrementCounter, IncrementCounter
23
- end
24
-
25
- result = IncrementCounter.new(counter: 0).execute
26
- puts "IncrementCounter: #{result[:counter]}"
27
-
28
- result = ReallyIncrementThatCounter.new(counter: 0).execute
29
- puts "ReallyIncrementThatCounter: #{result[:counter]}"
@@ -1,39 +0,0 @@
1
- require 'rubygems'
2
- require 'simple_service'
3
-
4
- class ConcatAnotherName < SimpleService::Command
5
- expects :first_name, :last_name
6
- returns :name
7
-
8
- def call
9
- self.name = "#{first_name} #{last_name}"
10
- end
11
- end
12
-
13
- class CreateAnotherHelloString < SimpleService::Command
14
- expects :name
15
- returns :hello
16
-
17
- def call
18
- self.hello ||= ''
19
- self.hello += "#{name}, say hello world!"
20
- end
21
- end
22
-
23
- class SayHelloMultipleTimes < SimpleService::Organizer
24
- expects :first_name, :last_name, :num_times
25
- returns :hello
26
- commands ConcatAnotherName, CreateAnotherHelloString
27
-
28
- # overriding the #call method on the organizer allows
29
- # you to do things like loop and call the service commands
30
- # multiple times
31
- def call
32
- num_times.times do
33
- super
34
- end
35
- end
36
- end
37
-
38
- result = SayHelloMultipleTimes.new(first_name: 'Ruby', last_name: 'Gem', num_times: 3).call
39
- puts result[:hello]