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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 22aeb43995310deb16fea74f6252366b8ca9317fbbcbba4a11f14d6043c9ece5
4
- data.tar.gz: bb7f6388efc24fc4aa503979947572073a2971c81004484daedff1af7b12a903
3
+ metadata.gz: a49db154b10753f348203bbc19442fd51843284a04e234d979987d0112350ba1
4
+ data.tar.gz: a2bfd7d600dbb1e8532c991aa2fe21f2f6a60d8d80e2e7defc97398f7d6fcb8e
5
5
  SHA512:
6
- metadata.gz: 021d855f30e314293d71a97ac2ff52cdf42cea8b1de756e40ecfa813c31c42a9ada46ceb81f133ebefd9d258fe495ac2f4bb65c31439885a60f6c30d96bec754
7
- data.tar.gz: 4c3f86baaa06b0b34e7c6d3b17b7ddf650539c15ca3f107c6082891701e3816299b9610b8a3458997c9cbd9d299784457323c89e507fca55545fd2ac63190195
6
+ metadata.gz: 55fda5b3d407d2a47cc311a849d12dcc6653bda3af5ee9b9b148b9a4400f7df7ace55c1739cb0f4d2310cd182768e7d42ee70c7189d1b2cc3c8d3d02b1753c64
7
+ data.tar.gz: e29fab244b847f80eaa751a4c54120cbb8ad4e8edcec1ca597dbdfcc2a697c51218b471f32106e1fdf7c22b2b23be41e95dd35f0be837facfa5e94d263538a15
data/lib/bbservices.rb CHANGED
@@ -1,6 +1,2 @@
1
- require_relative "base/service"
2
- require_relative "rails/service"
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: 0.0.1
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: 2020-06-16 00:00:00.000000000 Z
12
- dependencies: []
13
- description:
14
- email:
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 / Rails
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