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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '03479ca02ab6eaffed82c33de851d1ccdf9dba180bbdc714714d87d310a32fbc'
4
- data.tar.gz: d6b34a3997176265f292a1ab7a506913b3847aca362480336fda7c564b1344bf
3
+ metadata.gz: eb139ce38f9275e297b0b15a40f27e64fb88d7fe5f63255f095ffe9ab2e19814
4
+ data.tar.gz: 590919391b918930ceaa0a6968f8fbead4d334d23fe5a2aabe3260a590a4ea5b
5
5
  SHA512:
6
- metadata.gz: eb16aea144f7309b73fd3c39474af38be7ef273d0c48cc617ca76c3e164cab7ca0f900a38dfb73988b520cf7c37e16ed84baad7267b2d8111eaabd3084b3bcd5
7
- data.tar.gz: 941725e415c5a6c7809494851af8e69a5ddd78f8965afbc148bad2f9454d28d3f459b355d0f33b94284d78b29bd8a9dd48b450e45bb61339bdda9a7475bff9af
6
+ metadata.gz: 5197a6279cf2f38a87b42530d5a63f0990f38b9f19a3492f0157ff27bca43121f76fd4d231c22e6318672d6b62ddaa62c77388e5e3f4e7be6d52dc52f1734c73
7
+ data.tar.gz: 73ce49c4123c57aa057176c407e45daaeb4dec8c7f9f5c67cffcfd0aeefcb8134eac5fc4c25afae1474bf48d022c64919749597ab334330dca94ab8a40b71f14
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,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: 0.1.0
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: 2020-06-16 00:00:00.000000000 Z
12
- dependencies: []
13
- description:
14
- email:
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/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/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 / Rails
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
@@ -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