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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '03479ca02ab6eaffed82c33de851d1ccdf9dba180bbdc714714d87d310a32fbc'
4
- data.tar.gz: d6b34a3997176265f292a1ab7a506913b3847aca362480336fda7c564b1344bf
3
+ metadata.gz: 7ee91579b2f457ed0687174765d23e878309fcd40547d011027fe26670318764
4
+ data.tar.gz: 97015a7d4a299974376dca8ce00bc5d1ab13b20d9f1f316b346ca1862174bde0
5
5
  SHA512:
6
- metadata.gz: eb16aea144f7309b73fd3c39474af38be7ef273d0c48cc617ca76c3e164cab7ca0f900a38dfb73988b520cf7c37e16ed84baad7267b2d8111eaabd3084b3bcd5
7
- data.tar.gz: 941725e415c5a6c7809494851af8e69a5ddd78f8965afbc148bad2f9454d28d3f459b355d0f33b94284d78b29bd8a9dd48b450e45bb61339bdda9a7475bff9af
6
+ metadata.gz: 344df6233478ad174c3f328349b3b249bffcc3462e0b0ce600a9b375a0c403b52b71a27e6bd1638b781271e0e9d037d5b4b2bcc8528f82e110e69e413a5d87d4
7
+ data.tar.gz: 6350275bf4736f3538fbe271990730348d92cc62729d397782feb7b4b19530610b4dde4e9e072d1e9d39083f15e9bf520d6c6ebf042dbcd09b2c85dee865cc2e
@@ -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 'service'
2
+ require_relative 'service_provider'
@@ -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: 0.1.0
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
- description:
14
- email:
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/rails/create.rb
22
- - lib/rails/create_transactioned.rb
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 / Rails
86
+ summary: A simple service library for Ruby. Please see BBActiveRecordServices for
87
+ a Rails / AR service library
49
88
  test_files: []
@@ -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
@@ -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
File without changes
@@ -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
@@ -1,13 +0,0 @@
1
- module BBServices
2
- module Rails
3
-
4
- ##
5
- # This class acts as the base class for all Rails / ActiveRecord variants
6
- # of the Service Class
7
- class Service < BBServices::Service
8
- def resource
9
- @object
10
- end
11
- end
12
- end
13
- end