bbservices 0.1.0 → 2.2.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 +198 -0
- data/lib/bbservices/service_provider.rb +42 -0
- metadata +54 -15
- data/lib/base/service.rb +0 -147
- data/lib/rails/create.rb +0 -55
- data/lib/rails/create_transactioned.rb +0 -26
- data/lib/rails/destroy.rb +0 -0
- data/lib/rails/new.rb +0 -45
- data/lib/rails/service.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eb139ce38f9275e297b0b15a40f27e64fb88d7fe5f63255f095ffe9ab2e19814
|
4
|
+
data.tar.gz: 590919391b918930ceaa0a6968f8fbead4d334d23fe5a2aabe3260a590a4ea5b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5197a6279cf2f38a87b42530d5a63f0990f38b9f19a3492f0157ff27bca43121f76fd4d231c22e6318672d6b62ddaa62c77388e5e3f4e7be6d52dc52f1734c73
|
7
|
+
data.tar.gz: 73ce49c4123c57aa057176c407e45daaeb4dec8c7f9f5c67cffcfd0aeefcb8134eac5fc4c25afae1474bf48d022c64919749597ab334330dca94ab8a40b71f14
|
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,198 @@
|
|
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, :error
|
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 error that has been throw by the service
|
51
|
+
@error = 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 => 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 => 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?
|
136
|
+
end
|
137
|
+
|
138
|
+
def successful?
|
139
|
+
@successful
|
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 error?
|
155
|
+
!!@error
|
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
|
+
@error = error
|
182
|
+
end
|
183
|
+
|
184
|
+
def set_successful(successful = true)
|
185
|
+
@successful = successful
|
186
|
+
end
|
187
|
+
|
188
|
+
def set_ran(ran = true)
|
189
|
+
@ran = ran
|
190
|
+
end
|
191
|
+
|
192
|
+
private
|
193
|
+
|
194
|
+
def call_block
|
195
|
+
yield(self) if block_given?
|
196
|
+
end
|
197
|
+
end
|
198
|
+
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,33 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bbservices
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.2.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-19 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
|
21
|
-
- lib/
|
22
|
-
- lib/
|
23
|
-
- lib/rails/destroy.rb
|
24
|
-
- lib/rails/new.rb
|
25
|
-
- lib/rails/service.rb
|
62
|
+
- lib/bbservices/service.rb
|
63
|
+
- lib/bbservices/service_provider.rb
|
26
64
|
homepage: https://gitlab.com/big-bear-studios-open-source/bbservices
|
27
65
|
licenses:
|
28
66
|
- MIT
|
29
67
|
metadata: {}
|
30
|
-
post_install_message:
|
68
|
+
post_install_message:
|
31
69
|
rdoc_options: []
|
32
70
|
require_paths:
|
33
71
|
- lib
|
@@ -43,7 +81,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
43
81
|
version: '0'
|
44
82
|
requirements: []
|
45
83
|
rubygems_version: 3.0.1
|
46
|
-
signing_key:
|
84
|
+
signing_key:
|
47
85
|
specification_version: 4
|
48
|
-
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
|
49
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
|
data/lib/rails/create.rb
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
module BBServices
|
2
|
-
module Rails
|
3
|
-
|
4
|
-
##
|
5
|
-
# This class handles the creation of a resource with the purpose of being
|
6
|
-
# used in a 'create' controller action
|
7
|
-
class Create < New
|
8
|
-
|
9
|
-
protected
|
10
|
-
|
11
|
-
##
|
12
|
-
# Allows functionality to be added before the save of the object
|
13
|
-
def before_save
|
14
|
-
|
15
|
-
end
|
16
|
-
|
17
|
-
##
|
18
|
-
# Saves the object. When overridden should save the @object to the database
|
19
|
-
def save
|
20
|
-
@successful = @object.save
|
21
|
-
@errors = @object.errors
|
22
|
-
end
|
23
|
-
|
24
|
-
def save!
|
25
|
-
@successful = @object.save!
|
26
|
-
end
|
27
|
-
|
28
|
-
def after_save(success)
|
29
|
-
|
30
|
-
end
|
31
|
-
|
32
|
-
##
|
33
|
-
# Runs the service. This involves calling internal_build, before_save,
|
34
|
-
# save, after_save
|
35
|
-
def run_service
|
36
|
-
internal_save {
|
37
|
-
save
|
38
|
-
}
|
39
|
-
end
|
40
|
-
|
41
|
-
def run_service!
|
42
|
-
internal_save {
|
43
|
-
save!
|
44
|
-
}
|
45
|
-
end
|
46
|
-
|
47
|
-
def internal_save
|
48
|
-
internal_build
|
49
|
-
before_save
|
50
|
-
yield
|
51
|
-
after_save(@successful)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module BBServices
|
2
|
-
module Rails
|
3
|
-
class CreateTransactioned < Create
|
4
|
-
|
5
|
-
##
|
6
|
-
#
|
7
|
-
def run_service
|
8
|
-
service_class.transaction {
|
9
|
-
internal_save {
|
10
|
-
save
|
11
|
-
}
|
12
|
-
}
|
13
|
-
end
|
14
|
-
|
15
|
-
##
|
16
|
-
#
|
17
|
-
def run_service!
|
18
|
-
service_class.transaction {
|
19
|
-
internal_save {
|
20
|
-
save!
|
21
|
-
}
|
22
|
-
}
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
data/lib/rails/destroy.rb
DELETED
File without changes
|
data/lib/rails/new.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
module BBServices
|
2
|
-
module Rails
|
3
|
-
|
4
|
-
##
|
5
|
-
# This class handles the building of a resource with the purpose of being
|
6
|
-
# used in a 'new' controller action
|
7
|
-
class New < Service
|
8
|
-
|
9
|
-
protected
|
10
|
-
|
11
|
-
def initialize_service
|
12
|
-
@object = service_class.new
|
13
|
-
end
|
14
|
-
|
15
|
-
def before_build
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
def build
|
20
|
-
if @params
|
21
|
-
@object.assign_attributes(@params)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def after_build
|
26
|
-
|
27
|
-
end
|
28
|
-
|
29
|
-
def run_service
|
30
|
-
internal_build
|
31
|
-
@successful = true
|
32
|
-
end
|
33
|
-
|
34
|
-
def run_service!
|
35
|
-
run_service
|
36
|
-
end
|
37
|
-
|
38
|
-
def internal_build
|
39
|
-
before_build
|
40
|
-
build
|
41
|
-
after_build
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
data/lib/rails/service.rb
DELETED