service_record 1.2.2 → 1.3.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/README.md +3 -1
- data/lib/rails/generators/service/service_generator.rb +7 -0
- data/lib/service_record/base.rb +18 -4
- data/lib/service_record/callbacks.rb +3 -0
- data/lib/service_record/failure.rb +3 -0
- data/lib/service_record/version.rb +3 -1
- data/lib/service_record.rb +2 -1
- metadata +157 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3af5f714dc3195cb0877476b9d1a7c048549cd9c19ba40ab59a30d67a3d92ff0
|
4
|
+
data.tar.gz: fc6cf02ec07809395a782754a3416bafcaf26e59c3a8af911233a69958585cf2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ad3d7ab806691128d9790ea1f4d5e40f47b99435d0b68421b24d7c049af01783d942b2b39a9bf8357116e16d0d1bf728ce69ef73013b32dcc9630e1fe2d7ae54
|
7
|
+
data.tar.gz: 46d7eecfa6bdfcb4b323ea6f5858c19e56689c160b1ef0265c49ff9633eaf3789a27b7bce1de7b8809127502109e66b95c961ae946f4f4cfc23f132c392d229b
|
data/README.md
CHANGED
@@ -64,7 +64,9 @@ The returned response from a service will have the following useful attributes/m
|
|
64
64
|
* `success?` contains true if service was performed without any errors, false otherwise
|
65
65
|
* `failure?` contains opposite of success?
|
66
66
|
* `result` contains returned value of service perform function
|
67
|
-
* `errors` contains details about issues that occurr while performing the service
|
67
|
+
* `errors` contains details about issues that occurr while performing the service
|
68
|
+
|
69
|
+
There is a **perform!** (with a bang !) method which will raise **ServiceRecord::Failure** in case of service failure.
|
68
70
|
|
69
71
|
|
70
72
|
|
@@ -1,7 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rails/generators/named_base'
|
2
4
|
|
3
5
|
module Rails
|
4
6
|
module Generators
|
7
|
+
# Create AppicationService and SubService classes using Rails generators.
|
8
|
+
#
|
9
|
+
# E.g:
|
10
|
+
# bin/rails service my_service
|
11
|
+
#
|
5
12
|
class ServiceGenerator < Rails::Generators::NamedBase
|
6
13
|
desc 'This generator creates a service file at app/services'
|
7
14
|
|
data/lib/service_record/base.rb
CHANGED
@@ -1,13 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_model'
|
1
4
|
require 'service_record/failure'
|
2
5
|
require 'service_record/callbacks'
|
3
6
|
|
4
7
|
module ServiceRecord
|
8
|
+
# Base class to be extended by all service classes
|
9
|
+
#
|
10
|
+
# class MyService < ServiceRecord
|
11
|
+
# end
|
12
|
+
#
|
5
13
|
class Base
|
6
14
|
include Callbacks
|
7
15
|
include ActiveModel::Attributes
|
8
16
|
include ActiveModel::Validations
|
9
17
|
include ActiveModel::AttributeAssignment
|
10
18
|
|
19
|
+
attr_accessor :result
|
20
|
+
|
21
|
+
# Wrapper around the *perform* instance method that runs all the validations
|
22
|
+
# and callbacks before eventually calling *perform*.
|
11
23
|
def self.perform(args = {})
|
12
24
|
new.tap do |service|
|
13
25
|
service.attributes = args
|
@@ -15,27 +27,29 @@ module ServiceRecord
|
|
15
27
|
|
16
28
|
service.run_callbacks :perform do
|
17
29
|
service.result = service.perform
|
18
|
-
service.result = nil if service.failure?
|
19
30
|
end
|
20
31
|
end
|
21
32
|
end
|
22
33
|
|
34
|
+
# Wapper around the *perform* class method that raises exception if service fails
|
23
35
|
def self.perform!(args = {})
|
24
36
|
service = perform(args)
|
37
|
+
return service if service.success?
|
25
38
|
|
26
|
-
raise Failure, service
|
39
|
+
raise Failure, service
|
27
40
|
end
|
28
41
|
|
29
|
-
|
30
|
-
|
42
|
+
# Checks the service for errors. Returns +true+ if no errors are found, +false+ otherwise.
|
31
43
|
def success?
|
32
44
|
errors.empty?
|
33
45
|
end
|
34
46
|
|
47
|
+
# Checks the service for errors. Returns +false+ if no errors are found, +true+ otherwise.
|
35
48
|
def failure?
|
36
49
|
!success?
|
37
50
|
end
|
38
51
|
|
52
|
+
# Each subclass must define the *perform* method
|
39
53
|
def perform
|
40
54
|
raise NotImplementedError
|
41
55
|
end
|
data/lib/service_record.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: service_record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Muhammad Usman
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-01-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -24,6 +24,156 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '6.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: appraisal
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.3'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '2.3'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '13.0'
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: 13.0.1
|
51
|
+
type: :development
|
52
|
+
prerelease: false
|
53
|
+
version_requirements: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - "~>"
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '13.0'
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 13.0.1
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: rspec
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '3.9'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '3.9'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: rubocop-packaging
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: 0.5.1
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: 0.5.1
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: rubocop-performance
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - "~>"
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '1.8'
|
96
|
+
- - ">="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: 1.8.1
|
99
|
+
type: :development
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - "~>"
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '1.8'
|
106
|
+
- - ">="
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: 1.8.1
|
109
|
+
- !ruby/object:Gem::Dependency
|
110
|
+
name: rubocop-rails
|
111
|
+
requirement: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - "~>"
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '2.8'
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: 2.8.1
|
119
|
+
type: :development
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - "~>"
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '2.8'
|
126
|
+
- - ">="
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: 2.8.1
|
129
|
+
- !ruby/object:Gem::Dependency
|
130
|
+
name: rubocop-rake
|
131
|
+
requirement: !ruby/object:Gem::Requirement
|
132
|
+
requirements:
|
133
|
+
- - "~>"
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: 0.5.1
|
136
|
+
type: :development
|
137
|
+
prerelease: false
|
138
|
+
version_requirements: !ruby/object:Gem::Requirement
|
139
|
+
requirements:
|
140
|
+
- - "~>"
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: 0.5.1
|
143
|
+
- !ruby/object:Gem::Dependency
|
144
|
+
name: rubocop-rspec
|
145
|
+
requirement: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - ">="
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: 1.44.1
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '2.0'
|
153
|
+
type: :development
|
154
|
+
prerelease: false
|
155
|
+
version_requirements: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: 1.44.1
|
160
|
+
- - "~>"
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
version: '2.0'
|
163
|
+
- !ruby/object:Gem::Dependency
|
164
|
+
name: simplecov
|
165
|
+
requirement: !ruby/object:Gem::Requirement
|
166
|
+
requirements:
|
167
|
+
- - "~>"
|
168
|
+
- !ruby/object:Gem::Version
|
169
|
+
version: 0.17.1
|
170
|
+
type: :development
|
171
|
+
prerelease: false
|
172
|
+
version_requirements: !ruby/object:Gem::Requirement
|
173
|
+
requirements:
|
174
|
+
- - "~>"
|
175
|
+
- !ruby/object:Gem::Version
|
176
|
+
version: 0.17.1
|
27
177
|
description: ActiveRecord lookalike but for business model requirements
|
28
178
|
email:
|
29
179
|
- uxman.sherwani@gmail.com
|
@@ -49,8 +199,9 @@ licenses:
|
|
49
199
|
metadata:
|
50
200
|
homepage_uri: https://github.com/uxxman/service_record
|
51
201
|
source_code_uri: https://github.com/uxxman/service_record
|
202
|
+
rubygems_mfa_required: 'true'
|
52
203
|
changelog_uri: https://github.com/uxxman/service_record/releases
|
53
|
-
post_install_message:
|
204
|
+
post_install_message:
|
54
205
|
rdoc_options: []
|
55
206
|
require_paths:
|
56
207
|
- lib
|
@@ -65,8 +216,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
65
216
|
- !ruby/object:Gem::Version
|
66
217
|
version: '0'
|
67
218
|
requirements: []
|
68
|
-
rubygems_version: 3.
|
69
|
-
signing_key:
|
219
|
+
rubygems_version: 3.3.3
|
220
|
+
signing_key:
|
70
221
|
specification_version: 4
|
71
222
|
summary: Service objects for rails
|
72
223
|
test_files: []
|