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