bbservices 0.0.1 → 2.1.0
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/lib/bbservices.rb +2 -6
- data/lib/bbservices/service.rb +203 -0
- data/lib/bbservices/service_provider.rb +42 -0
- metadata +54 -10
- data/lib/base/service.rb +0 -147
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a49db154b10753f348203bbc19442fd51843284a04e234d979987d0112350ba1
|
4
|
+
data.tar.gz: a2bfd7d600dbb1e8532c991aa2fe21f2f6a60d8d80e2e7defc97398f7d6fcb8e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 55fda5b3d407d2a47cc311a849d12dcc6653bda3af5ee9b9b148b9a4400f7df7ace55c1739cb0f4d2310cd182768e7d42ee70c7189d1b2cc3c8d3d02b1753c64
|
7
|
+
data.tar.gz: e29fab244b847f80eaa751a4c54120cbb8ad4e8edcec1ca597dbdfcc2a697c51218b471f32106e1fdf7c22b2b23be41e95dd35f0be837facfa5e94d263538a15
|
data/lib/bbservices.rb
CHANGED
@@ -1,6 +1,2 @@
|
|
1
|
-
require_relative
|
2
|
-
require_relative
|
3
|
-
require_relative "rails/new"
|
4
|
-
require_relative "rails/destroy"
|
5
|
-
require_relative "rails/create"
|
6
|
-
require_relative "rails/create_transactioned"
|
1
|
+
require_relative 'bbservices/service'
|
2
|
+
require_relative 'bbservices/service_provider'
|
@@ -0,0 +1,203 @@
|
|
1
|
+
|
2
|
+
module BBServices
|
3
|
+
##
|
4
|
+
# The base class for all services. Handles the basic run loop and general accessors
|
5
|
+
class Service
|
6
|
+
attr_reader :params, :object, :errors
|
7
|
+
|
8
|
+
##
|
9
|
+
# Creates a new service class, then calls run
|
10
|
+
def self.run(params = {}, &block)
|
11
|
+
self.new(params).tap do |service|
|
12
|
+
service.run(&block)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
##
|
17
|
+
# Creates a new service class, then calls run!
|
18
|
+
def self.run!(params = {}, &block)
|
19
|
+
self.new(params).tap do |service|
|
20
|
+
service.run!(&block)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
##
|
25
|
+
# Sets the service class
|
26
|
+
def self.service_class(klass)
|
27
|
+
@service_class = klass
|
28
|
+
end
|
29
|
+
|
30
|
+
##
|
31
|
+
# Gets the service class
|
32
|
+
def self.get_service_class
|
33
|
+
@service_class
|
34
|
+
end
|
35
|
+
|
36
|
+
def initialize(params = {})
|
37
|
+
##
|
38
|
+
# The object which will be assigned to the service
|
39
|
+
@object = nil
|
40
|
+
|
41
|
+
##
|
42
|
+
# The state of success, was the service successful
|
43
|
+
@successful = false
|
44
|
+
|
45
|
+
##
|
46
|
+
# The state of the run, has the service being ran
|
47
|
+
@ran = false
|
48
|
+
|
49
|
+
##
|
50
|
+
# The errors which are returned by the service
|
51
|
+
@errors = nil
|
52
|
+
|
53
|
+
##
|
54
|
+
# The service class stored on the instance. This will override the
|
55
|
+
# service class set statically
|
56
|
+
@service_class = nil
|
57
|
+
|
58
|
+
##
|
59
|
+
# The params passed to the resource
|
60
|
+
@params = params
|
61
|
+
end
|
62
|
+
|
63
|
+
##
|
64
|
+
# This runs the safe version of the service. E.g. Will rescue on exception
|
65
|
+
# and set the error attribute
|
66
|
+
def run(&block)
|
67
|
+
set_ran
|
68
|
+
begin
|
69
|
+
initialize_service
|
70
|
+
run_service
|
71
|
+
rescue StandardError => e
|
72
|
+
set_successful(false)
|
73
|
+
set_error(e)
|
74
|
+
ensure
|
75
|
+
call_block(&block)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
##
|
80
|
+
# This runs the unsafe version of the service. E.g. Exceptions will be thrown
|
81
|
+
def run!(&block)
|
82
|
+
set_ran
|
83
|
+
begin
|
84
|
+
initialize_service
|
85
|
+
run_service!
|
86
|
+
call_block(&block)
|
87
|
+
rescue StandardError => e
|
88
|
+
set_successful(false)
|
89
|
+
set_error(e)
|
90
|
+
raise e
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def set_service_class(value)
|
95
|
+
@service_class = value
|
96
|
+
end
|
97
|
+
|
98
|
+
##
|
99
|
+
# Sets the service_class instance variable
|
100
|
+
def service_class=(value)
|
101
|
+
set_service_class(value)
|
102
|
+
end
|
103
|
+
|
104
|
+
##
|
105
|
+
# Gets the service_class. This will go instance first, then static
|
106
|
+
def service_class
|
107
|
+
@service_class || self.class.get_service_class
|
108
|
+
end
|
109
|
+
|
110
|
+
def set_params(value)
|
111
|
+
@params = value
|
112
|
+
end
|
113
|
+
|
114
|
+
def params=(value)
|
115
|
+
set_params(value)
|
116
|
+
end
|
117
|
+
|
118
|
+
def param_for(key)
|
119
|
+
param(key)
|
120
|
+
end
|
121
|
+
|
122
|
+
def param(key)
|
123
|
+
@params[key] if @params
|
124
|
+
end
|
125
|
+
|
126
|
+
def number_of_params
|
127
|
+
@params ? @params.length : 0
|
128
|
+
end
|
129
|
+
|
130
|
+
def ran?
|
131
|
+
@ran
|
132
|
+
end
|
133
|
+
|
134
|
+
def succeeded?
|
135
|
+
(@successful && !errors?)
|
136
|
+
end
|
137
|
+
|
138
|
+
def successful?
|
139
|
+
(@successful && !errors?)
|
140
|
+
end
|
141
|
+
|
142
|
+
def failed?
|
143
|
+
!succeeded?
|
144
|
+
end
|
145
|
+
|
146
|
+
def success(&block)
|
147
|
+
call_block(&block) if succeeded?
|
148
|
+
end
|
149
|
+
|
150
|
+
def failure(&block)
|
151
|
+
call_block(&block) if failed?
|
152
|
+
end
|
153
|
+
|
154
|
+
def errors?
|
155
|
+
!!(@errors && @errors.length.positive?)
|
156
|
+
end
|
157
|
+
|
158
|
+
def params?
|
159
|
+
!!@params
|
160
|
+
end
|
161
|
+
|
162
|
+
protected
|
163
|
+
|
164
|
+
def initialize_service() end
|
165
|
+
|
166
|
+
def run_service
|
167
|
+
set_successful
|
168
|
+
set_object(nil)
|
169
|
+
end
|
170
|
+
|
171
|
+
def run_service!
|
172
|
+
set_successful
|
173
|
+
set_object(nil)
|
174
|
+
end
|
175
|
+
|
176
|
+
def set_object(obj)
|
177
|
+
@object = obj
|
178
|
+
end
|
179
|
+
|
180
|
+
def set_error(error)
|
181
|
+
set_errors([]) unless @errors
|
182
|
+
@errors << error
|
183
|
+
end
|
184
|
+
|
185
|
+
def set_errors(errors)
|
186
|
+
@errors = errors
|
187
|
+
end
|
188
|
+
|
189
|
+
def set_successful(successful = true)
|
190
|
+
@successful = successful
|
191
|
+
end
|
192
|
+
|
193
|
+
def set_ran(ran = true)
|
194
|
+
@ran = ran
|
195
|
+
end
|
196
|
+
|
197
|
+
private
|
198
|
+
|
199
|
+
def call_block
|
200
|
+
yield(self) if block_given?
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
|
2
|
+
module BBServices
|
3
|
+
##
|
4
|
+
#
|
5
|
+
module ServiceProvider
|
6
|
+
def self.included(base)
|
7
|
+
base.extend ClassMethods
|
8
|
+
base.class_eval do
|
9
|
+
|
10
|
+
##
|
11
|
+
# Creates a brand new service of a given type
|
12
|
+
def service(service_type, service_params = {})
|
13
|
+
service_type.new.tap do |service|
|
14
|
+
service.set_params(service_params)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
##
|
19
|
+
# Creates and runs a brand new service using the safe method
|
20
|
+
def run_service(service_type, service_params = {}, &block)
|
21
|
+
service(service_type, service_params).tap do |service|
|
22
|
+
service.set_service_class(service_type)
|
23
|
+
service.run(&block)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
##
|
28
|
+
# Creates and runs a brand new service using the unsafe method
|
29
|
+
def run_service!(service_type, service_params = {}, &block)
|
30
|
+
service(service_type, service_params).tap do |service|
|
31
|
+
service.set_service_class(service_type)
|
32
|
+
service.run!(&block)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
module ClassMethods
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
metadata
CHANGED
@@ -1,28 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bbservices
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stuart Farnaby, Big Bear Studios
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
13
|
-
|
14
|
-
|
11
|
+
date: 2021-02-18 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.9.0
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 3.9.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rubocop
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.86.0
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.86.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: simplecov
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.18.5
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.18.5
|
55
|
+
description:
|
56
|
+
email:
|
15
57
|
executables: []
|
16
58
|
extensions: []
|
17
59
|
extra_rdoc_files: []
|
18
60
|
files:
|
19
|
-
- lib/base/service.rb
|
20
61
|
- lib/bbservices.rb
|
62
|
+
- lib/bbservices/service.rb
|
63
|
+
- lib/bbservices/service_provider.rb
|
21
64
|
homepage: https://gitlab.com/big-bear-studios-open-source/bbservices
|
22
65
|
licenses:
|
23
66
|
- MIT
|
24
67
|
metadata: {}
|
25
|
-
post_install_message:
|
68
|
+
post_install_message:
|
26
69
|
rdoc_options: []
|
27
70
|
require_paths:
|
28
71
|
- lib
|
@@ -38,7 +81,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
38
81
|
version: '0'
|
39
82
|
requirements: []
|
40
83
|
rubygems_version: 3.0.1
|
41
|
-
signing_key:
|
84
|
+
signing_key:
|
42
85
|
specification_version: 4
|
43
|
-
summary: A simple service library for Ruby
|
86
|
+
summary: A simple service library for Ruby. Please see BBActiveRecordServices for
|
87
|
+
a Rails / AR service library
|
44
88
|
test_files: []
|
data/lib/base/service.rb
DELETED
@@ -1,147 +0,0 @@
|
|
1
|
-
module BBServices
|
2
|
-
|
3
|
-
##
|
4
|
-
# This class handles the building of a basic / generic service
|
5
|
-
class Service
|
6
|
-
|
7
|
-
def self.service_class(klass)
|
8
|
-
@service_class = klass
|
9
|
-
end
|
10
|
-
|
11
|
-
def initialize
|
12
|
-
|
13
|
-
@object = nil
|
14
|
-
|
15
|
-
@successful = false
|
16
|
-
|
17
|
-
@errors = nil
|
18
|
-
|
19
|
-
@service_class = nil
|
20
|
-
end
|
21
|
-
|
22
|
-
def service_class=(klass)
|
23
|
-
@service_class = klass
|
24
|
-
end
|
25
|
-
|
26
|
-
def service_class
|
27
|
-
@service_class ? @service_class : self.class.instance_variable_get(:@service_class)
|
28
|
-
end
|
29
|
-
|
30
|
-
def run(&block)
|
31
|
-
begin
|
32
|
-
initialize_service
|
33
|
-
run_service
|
34
|
-
rescue StandardError => e
|
35
|
-
set_successful(false)
|
36
|
-
set_error(e)
|
37
|
-
ensure
|
38
|
-
call_block(&block)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def run!(&block)
|
43
|
-
begin
|
44
|
-
initialize_service
|
45
|
-
run_service!
|
46
|
-
rescue StandardError => e
|
47
|
-
set_successful(false)
|
48
|
-
set_error(e)
|
49
|
-
raise e
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def params=(params)
|
54
|
-
@params = params
|
55
|
-
end
|
56
|
-
|
57
|
-
def associated_params=(params)
|
58
|
-
@associated_params = params
|
59
|
-
end
|
60
|
-
|
61
|
-
def params
|
62
|
-
@params
|
63
|
-
end
|
64
|
-
|
65
|
-
def associated_params
|
66
|
-
@associated_params
|
67
|
-
end
|
68
|
-
|
69
|
-
def param_for(key)
|
70
|
-
if @params
|
71
|
-
@params[key]
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
def associated_param_for(key)
|
76
|
-
if @associated_params
|
77
|
-
@associated_params[key]
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
def succeeded?
|
82
|
-
(@successful && !has_errors? )
|
83
|
-
end
|
84
|
-
|
85
|
-
def failed?
|
86
|
-
!succeeded?
|
87
|
-
end
|
88
|
-
|
89
|
-
def success(&block)
|
90
|
-
if succeeded?
|
91
|
-
yield
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
def failure(&block)
|
96
|
-
if failed?
|
97
|
-
yield
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
def object
|
102
|
-
@object
|
103
|
-
end
|
104
|
-
|
105
|
-
def errors
|
106
|
-
@errors
|
107
|
-
end
|
108
|
-
|
109
|
-
def has_errors?
|
110
|
-
@errors && @errors.length > 0
|
111
|
-
end
|
112
|
-
|
113
|
-
protected
|
114
|
-
|
115
|
-
def initialize_service
|
116
|
-
|
117
|
-
end
|
118
|
-
|
119
|
-
def run_service
|
120
|
-
@successful = true
|
121
|
-
end
|
122
|
-
|
123
|
-
def run_service!
|
124
|
-
@successful = true
|
125
|
-
end
|
126
|
-
|
127
|
-
def set_error(error)
|
128
|
-
if !@errors
|
129
|
-
@errors = []
|
130
|
-
end
|
131
|
-
|
132
|
-
@errors << error
|
133
|
-
end
|
134
|
-
|
135
|
-
def set_successful(successful = true)
|
136
|
-
@successful = successful
|
137
|
-
end
|
138
|
-
|
139
|
-
private
|
140
|
-
|
141
|
-
def call_block(&block)
|
142
|
-
if block_given?
|
143
|
-
yield(self)
|
144
|
-
end
|
145
|
-
end
|
146
|
-
end
|
147
|
-
end
|