bbservices 0.1.0 → 1.0.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/service.rb +197 -0
- data/lib/service_provider.rb +33 -0
- metadata +53 -14
- 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: 7ee91579b2f457ed0687174765d23e878309fcd40547d011027fe26670318764
|
4
|
+
data.tar.gz: 97015a7d4a299974376dca8ce00bc5d1ab13b20d9f1f316b346ca1862174bde0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 344df6233478ad174c3f328349b3b249bffcc3462e0b0ce600a9b375a0c403b52b71a27e6bd1638b781271e0e9d037d5b4b2bcc8528f82e110e69e413a5d87d4
|
7
|
+
data.tar.gz: 6350275bf4736f3538fbe271990730348d92cc62729d397782feb7b4b19530610b4dde4e9e072d1e9d39083f15e9bf520d6c6ebf042dbcd09b2c85dee865cc2e
|
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 'service'
|
2
|
+
require_relative 'service_provider'
|
data/lib/service.rb
ADDED
@@ -0,0 +1,197 @@
|
|
1
|
+
##
|
2
|
+
# The base class for all services. Handles the basic run loop and general accessors
|
3
|
+
class Service
|
4
|
+
attr_reader :params, :object, :errors
|
5
|
+
|
6
|
+
##
|
7
|
+
# Creates a new service class, then calls run
|
8
|
+
def self.run(params = nil, &block)
|
9
|
+
self.new(params).tap do |service|
|
10
|
+
service.run(&block)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
##
|
15
|
+
# Creates a new service class, then calls run!
|
16
|
+
def self.run!(params = nil, &block)
|
17
|
+
self.new(params).tap do |service|
|
18
|
+
service.run!(&block)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.service_class(klass)
|
23
|
+
@service_class = klass
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.get_service_class
|
27
|
+
@service_class
|
28
|
+
end
|
29
|
+
|
30
|
+
def initialize(params = nil)
|
31
|
+
##
|
32
|
+
# The object which will be assigned to the service
|
33
|
+
@object = nil
|
34
|
+
|
35
|
+
##
|
36
|
+
# The state of success, was the service successful
|
37
|
+
@successful = false
|
38
|
+
|
39
|
+
##
|
40
|
+
# The state of the run, has the service being ran
|
41
|
+
@ran = false
|
42
|
+
|
43
|
+
##
|
44
|
+
# The errors which are returned by the service
|
45
|
+
@errors = nil
|
46
|
+
|
47
|
+
##
|
48
|
+
# The service class stored on the instance. This will override the
|
49
|
+
# service class set statically
|
50
|
+
@service_class = nil
|
51
|
+
|
52
|
+
##
|
53
|
+
# The params passed to the resource
|
54
|
+
@params = params
|
55
|
+
end
|
56
|
+
|
57
|
+
##
|
58
|
+
# This runs the safe version of the service. E.g. Will rescue on exception
|
59
|
+
def run(&block)
|
60
|
+
set_ran
|
61
|
+
begin
|
62
|
+
initialize_service
|
63
|
+
internal_validation
|
64
|
+
run_service
|
65
|
+
rescue StandardError => e
|
66
|
+
set_successful(false)
|
67
|
+
set_error(e)
|
68
|
+
ensure
|
69
|
+
call_block(&block)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
##
|
74
|
+
# This runs the unsafe version of the service. E.g. Exceptions will be thrown
|
75
|
+
def run!(&block)
|
76
|
+
set_ran
|
77
|
+
begin
|
78
|
+
initialize_service
|
79
|
+
internal_validation
|
80
|
+
run_service!
|
81
|
+
call_block(&block)
|
82
|
+
rescue StandardError => e
|
83
|
+
set_successful(false)
|
84
|
+
set_error(e)
|
85
|
+
raise e
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def set_service_class(value)
|
90
|
+
@service_class = value
|
91
|
+
end
|
92
|
+
|
93
|
+
##
|
94
|
+
# Sets the service_class instance variable
|
95
|
+
def service_class=(value)
|
96
|
+
set_service_class(value)
|
97
|
+
end
|
98
|
+
|
99
|
+
##
|
100
|
+
# Gets the service_class. This will go instance first, then static
|
101
|
+
def service_class
|
102
|
+
@service_class || self.class.get_service_class
|
103
|
+
end
|
104
|
+
|
105
|
+
def set_params(value)
|
106
|
+
@params = value
|
107
|
+
end
|
108
|
+
|
109
|
+
def params=(value)
|
110
|
+
set_params(value)
|
111
|
+
end
|
112
|
+
|
113
|
+
def param_for(key)
|
114
|
+
param(key)
|
115
|
+
end
|
116
|
+
|
117
|
+
def param(key)
|
118
|
+
@params[key] if @params
|
119
|
+
end
|
120
|
+
|
121
|
+
def ran?
|
122
|
+
@ran
|
123
|
+
end
|
124
|
+
|
125
|
+
def succeeded?
|
126
|
+
(@successful && !errors?)
|
127
|
+
end
|
128
|
+
|
129
|
+
def successful?
|
130
|
+
(@successful && !errors?)
|
131
|
+
end
|
132
|
+
|
133
|
+
def failed?
|
134
|
+
!succeeded?
|
135
|
+
end
|
136
|
+
|
137
|
+
def success(&block)
|
138
|
+
call_block(&block) if succeeded?
|
139
|
+
end
|
140
|
+
|
141
|
+
def failure(&block)
|
142
|
+
call_block(&block) if failed?
|
143
|
+
end
|
144
|
+
|
145
|
+
def errors?
|
146
|
+
!!(@errors && @errors.length.positive?)
|
147
|
+
end
|
148
|
+
|
149
|
+
def params?
|
150
|
+
!!@params
|
151
|
+
end
|
152
|
+
|
153
|
+
protected
|
154
|
+
|
155
|
+
def initialize_service() end
|
156
|
+
|
157
|
+
def run_service
|
158
|
+
set_successful
|
159
|
+
set_object(nil)
|
160
|
+
end
|
161
|
+
|
162
|
+
def run_service!
|
163
|
+
set_successful
|
164
|
+
set_object(nil)
|
165
|
+
end
|
166
|
+
|
167
|
+
def set_object(obj)
|
168
|
+
@object = obj
|
169
|
+
end
|
170
|
+
|
171
|
+
def set_error(error)
|
172
|
+
set_errors([]) unless @errors
|
173
|
+
@errors << error
|
174
|
+
end
|
175
|
+
|
176
|
+
def set_errors(errors)
|
177
|
+
@errors = errors
|
178
|
+
end
|
179
|
+
|
180
|
+
def set_successful(successful = true)
|
181
|
+
@successful = successful
|
182
|
+
end
|
183
|
+
|
184
|
+
def set_ran(ran = true)
|
185
|
+
@ran = ran
|
186
|
+
end
|
187
|
+
|
188
|
+
private
|
189
|
+
|
190
|
+
def internal_validation
|
191
|
+
set_params({}) unless params?
|
192
|
+
end
|
193
|
+
|
194
|
+
def call_block
|
195
|
+
yield(self) if block_given?
|
196
|
+
end
|
197
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module ServiceProvider
|
2
|
+
def self.included(base)
|
3
|
+
base.extend ClassMethods
|
4
|
+
base.class_eval do
|
5
|
+
|
6
|
+
##
|
7
|
+
# Creates a brand new service of a given type
|
8
|
+
def service(service_type, service_params = {})
|
9
|
+
service_type.new.tap do |service|
|
10
|
+
service.set_params(service_params)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def run_service(service_type, service_params = {}, &block)
|
15
|
+
service(service_type, service_params).tap do |service|
|
16
|
+
service.set_service_class(service_type)
|
17
|
+
service.run(&block)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def run_service!(service_type, service_params = {}, &block)
|
22
|
+
service(service_type, service_params).tap do |service|
|
23
|
+
service.set_service_class(service_type)
|
24
|
+
service.run!(&block)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
module ClassMethods
|
31
|
+
|
32
|
+
end
|
33
|
+
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: 1.0.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
11
|
date: 2020-06-16 00:00:00.000000000 Z
|
12
|
-
dependencies:
|
13
|
-
|
14
|
-
|
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/service.rb
|
63
|
+
- lib/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