rails_use_case 0.0.12 → 0.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 +4 -4
- data/README.md +5 -3
- data/lib/rails/service.rb +17 -8
- data/lib/rails/use_case.rb +2 -2
- metadata +22 -50
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a18eebb6bd074cebe864e2216f1b06d8d92d84b16e5f4cc8064a8a07d36ec212
|
|
4
|
+
data.tar.gz: 38e2c7a84ddfc92f08984c9c3f319625ffe0a855e15c8436f7bbbabc4b2fa738
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 77625d46f63092ffbed4596a00c9783a9a302bb4b2d8f64d3f0c2dbde17250111f5a1011debc66a7e60533d4e0107dad52d9dcb00ef0214cd0e809ce7e00a4dd
|
|
7
|
+
data.tar.gz: 58c05e1c2c70681fdeec924bd6e8c9fa5882e17d5c5310bb81c77204bd9a91d4c0845b5c01aff8360d37ab70bcd445cb6a58da0441b421a22f02da78548e429b
|
data/README.md
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
# Rails Use Case gem
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
This gem introduces UseCases and Services to Rails which allow you to keep your Models and Controllers slim.
|
|
4
4
|
|
|
5
5
|
Read more: https://dev.to/phortx/pimp-your-rails-application-32d0
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
Clean Architecture suggests to put the business logic in UseCases which are classes, that contain reusable high
|
|
8
|
+
level business logic which otherwise would normally be located in the controller. UseCases are easy to read,
|
|
9
|
+
clean, reusable, testable and extendable.
|
|
10
|
+
Examples are: Place an item in the cart, create a new user or delete a comment.
|
|
9
11
|
|
|
10
12
|
The purpose of a Service is to contain low level non-domain code like communication with a API,
|
|
11
13
|
generating an export, upload via FTP or generating a PDF.
|
data/lib/rails/service.rb
CHANGED
|
@@ -38,7 +38,7 @@ module Rails
|
|
|
38
38
|
#
|
|
39
39
|
# @raise [RuntimeError] When no service_name is given
|
|
40
40
|
def initialize(service_name = nil)
|
|
41
|
-
raise NotImplementedError if
|
|
41
|
+
raise NotImplementedError if instance_of?(Service)
|
|
42
42
|
raise 'Please provide a service name!' if service_name.nil?
|
|
43
43
|
|
|
44
44
|
@service_name = service_name
|
|
@@ -54,7 +54,7 @@ module Rails
|
|
|
54
54
|
setup_stdout_logger
|
|
55
55
|
else
|
|
56
56
|
log_path = Rails.root.join('log', 'services')
|
|
57
|
-
FileUtils.mkdir_p(log_path)
|
|
57
|
+
FileUtils.mkdir_p(log_path)
|
|
58
58
|
|
|
59
59
|
log_file = log_path.join("#{@service_name}.log").to_s
|
|
60
60
|
|
|
@@ -67,7 +67,7 @@ module Rails
|
|
|
67
67
|
# Will setup the logger for logging to STDOUT. This can be useful for
|
|
68
68
|
# Heroku for example.
|
|
69
69
|
private def setup_stdout_logger
|
|
70
|
-
@logger = Logger.new(
|
|
70
|
+
@logger = Logger.new($stdout)
|
|
71
71
|
|
|
72
72
|
@logger.formatter = proc do |severity, datetime, progname, msg|
|
|
73
73
|
"[#{@service_name}] #{msg}"
|
|
@@ -103,15 +103,24 @@ module Rails
|
|
|
103
103
|
end
|
|
104
104
|
|
|
105
105
|
|
|
106
|
-
# Convenience method to get a secret.
|
|
106
|
+
# Convenience method to get a secret.
|
|
107
|
+
# Looks for the key `services.<service_name>.<key>` in Rails credentials.
|
|
108
|
+
# Falls back to secrets.yml (deprecated since Rails 7.2) with a warning.
|
|
107
109
|
private def secret(key)
|
|
108
110
|
key = key.to_sym
|
|
109
|
-
|
|
111
|
+
value = Rails.application.credentials.dig(:services, @service_name.to_sym, key)
|
|
110
112
|
|
|
111
|
-
|
|
112
|
-
raise "No secrets entry found for 'services.#{@service_name}.#{key}'" unless base[key]
|
|
113
|
+
return value unless value.nil?
|
|
113
114
|
|
|
114
|
-
|
|
115
|
+
# Fallback to legacy secrets.yml (deprecated in Rails 7.2)
|
|
116
|
+
if Rails.application.respond_to?(:secrets)
|
|
117
|
+
warn '[rails_use_case] DEPRECATION: Rails.application.secrets is deprecated. ' \
|
|
118
|
+
"Migrate 'services.#{@service_name}.#{key}' to Rails credentials."
|
|
119
|
+
base = Rails.application.secrets.dig(:services, @service_name.to_sym)
|
|
120
|
+
return base[key] if base&.[](key)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
raise "No credentials entry found for 'services.#{@service_name}.#{key}'"
|
|
115
124
|
end
|
|
116
125
|
|
|
117
126
|
|
data/lib/rails/use_case.rb
CHANGED
|
@@ -98,7 +98,7 @@ module Rails
|
|
|
98
98
|
fail!(code: opts[:code], message: opts[:message]) if name == :failure
|
|
99
99
|
|
|
100
100
|
# Run the lambda, when :do is set. Otherwise call the method.
|
|
101
|
-
next if opts[:do] ?
|
|
101
|
+
next if opts[:do] ? instance_exec(&opts[:do]) : send(name)
|
|
102
102
|
|
|
103
103
|
# result is false, so we have a failure.
|
|
104
104
|
fail! code: :step_false, message: "Step '#{name}' returned false"
|
|
@@ -125,7 +125,7 @@ module Rails
|
|
|
125
125
|
|
|
126
126
|
proc = step[:options][:unless]
|
|
127
127
|
result = instance_exec(&proc)
|
|
128
|
-
|
|
128
|
+
true if result
|
|
129
129
|
end
|
|
130
130
|
|
|
131
131
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rails_use_case
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0
|
|
4
|
+
version: 0.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Benjamin Klein
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-03-29 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activemodel
|
|
@@ -16,70 +16,56 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version:
|
|
19
|
+
version: '7.0'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version:
|
|
27
|
-
- !ruby/object:Gem::Dependency
|
|
28
|
-
name: railties
|
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
|
30
|
-
requirements:
|
|
31
|
-
- - ">="
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: 6.1.3
|
|
34
|
-
type: :runtime
|
|
35
|
-
prerelease: false
|
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
-
requirements:
|
|
38
|
-
- - ">="
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: 6.1.3
|
|
26
|
+
version: '7.0'
|
|
41
27
|
- !ruby/object:Gem::Dependency
|
|
42
28
|
name: bundler-audit
|
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
|
44
30
|
requirements:
|
|
45
31
|
- - "~>"
|
|
46
32
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '0.
|
|
33
|
+
version: '0.9'
|
|
48
34
|
type: :development
|
|
49
35
|
prerelease: false
|
|
50
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
37
|
requirements:
|
|
52
38
|
- - "~>"
|
|
53
39
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '0.
|
|
40
|
+
version: '0.9'
|
|
55
41
|
- !ruby/object:Gem::Dependency
|
|
56
42
|
name: fakefs
|
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
|
58
44
|
requirements:
|
|
59
45
|
- - "~>"
|
|
60
46
|
- !ruby/object:Gem::Version
|
|
61
|
-
version:
|
|
47
|
+
version: '2.0'
|
|
62
48
|
type: :development
|
|
63
49
|
prerelease: false
|
|
64
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
51
|
requirements:
|
|
66
52
|
- - "~>"
|
|
67
53
|
- !ruby/object:Gem::Version
|
|
68
|
-
version:
|
|
54
|
+
version: '2.0'
|
|
69
55
|
- !ruby/object:Gem::Dependency
|
|
70
56
|
name: pry
|
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
|
72
58
|
requirements:
|
|
73
59
|
- - "~>"
|
|
74
60
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: 0.
|
|
61
|
+
version: '0.14'
|
|
76
62
|
type: :development
|
|
77
63
|
prerelease: false
|
|
78
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
65
|
requirements:
|
|
80
66
|
- - "~>"
|
|
81
67
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: 0.
|
|
68
|
+
version: '0.14'
|
|
83
69
|
- !ruby/object:Gem::Dependency
|
|
84
70
|
name: rake
|
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -100,84 +86,70 @@ dependencies:
|
|
|
100
86
|
requirements:
|
|
101
87
|
- - "~>"
|
|
102
88
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: '3.
|
|
89
|
+
version: '3.13'
|
|
104
90
|
type: :development
|
|
105
91
|
prerelease: false
|
|
106
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
93
|
requirements:
|
|
108
94
|
- - "~>"
|
|
109
95
|
- !ruby/object:Gem::Version
|
|
110
|
-
version: '3.
|
|
96
|
+
version: '3.13'
|
|
111
97
|
- !ruby/object:Gem::Dependency
|
|
112
98
|
name: rspec-mocks
|
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|
|
114
100
|
requirements:
|
|
115
101
|
- - "~>"
|
|
116
102
|
- !ruby/object:Gem::Version
|
|
117
|
-
version: '3.
|
|
103
|
+
version: '3.13'
|
|
118
104
|
type: :development
|
|
119
105
|
prerelease: false
|
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
107
|
requirements:
|
|
122
108
|
- - "~>"
|
|
123
109
|
- !ruby/object:Gem::Version
|
|
124
|
-
version: '3.
|
|
110
|
+
version: '3.13'
|
|
125
111
|
- !ruby/object:Gem::Dependency
|
|
126
112
|
name: rubocop
|
|
127
113
|
requirement: !ruby/object:Gem::Requirement
|
|
128
114
|
requirements:
|
|
129
115
|
- - "~>"
|
|
130
116
|
- !ruby/object:Gem::Version
|
|
131
|
-
version: '
|
|
117
|
+
version: '1.65'
|
|
132
118
|
type: :development
|
|
133
119
|
prerelease: false
|
|
134
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
135
121
|
requirements:
|
|
136
122
|
- - "~>"
|
|
137
123
|
- !ruby/object:Gem::Version
|
|
138
|
-
version: '
|
|
124
|
+
version: '1.65'
|
|
139
125
|
- !ruby/object:Gem::Dependency
|
|
140
126
|
name: rubocop-rspec
|
|
141
127
|
requirement: !ruby/object:Gem::Requirement
|
|
142
128
|
requirements:
|
|
143
129
|
- - "~>"
|
|
144
130
|
- !ruby/object:Gem::Version
|
|
145
|
-
version: '
|
|
131
|
+
version: '3.3'
|
|
146
132
|
type: :development
|
|
147
133
|
prerelease: false
|
|
148
134
|
version_requirements: !ruby/object:Gem::Requirement
|
|
149
135
|
requirements:
|
|
150
136
|
- - "~>"
|
|
151
137
|
- !ruby/object:Gem::Version
|
|
152
|
-
version: '
|
|
153
|
-
- !ruby/object:Gem::Dependency
|
|
154
|
-
name: rubygems-tasks
|
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
|
156
|
-
requirements:
|
|
157
|
-
- - ">="
|
|
158
|
-
- !ruby/object:Gem::Version
|
|
159
|
-
version: '0'
|
|
160
|
-
type: :development
|
|
161
|
-
prerelease: false
|
|
162
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
163
|
-
requirements:
|
|
164
|
-
- - ">="
|
|
165
|
-
- !ruby/object:Gem::Version
|
|
166
|
-
version: '0'
|
|
138
|
+
version: '3.3'
|
|
167
139
|
- !ruby/object:Gem::Dependency
|
|
168
140
|
name: simplecov
|
|
169
141
|
requirement: !ruby/object:Gem::Requirement
|
|
170
142
|
requirements:
|
|
171
143
|
- - "~>"
|
|
172
144
|
- !ruby/object:Gem::Version
|
|
173
|
-
version: '0.
|
|
145
|
+
version: '0.22'
|
|
174
146
|
type: :development
|
|
175
147
|
prerelease: false
|
|
176
148
|
version_requirements: !ruby/object:Gem::Requirement
|
|
177
149
|
requirements:
|
|
178
150
|
- - "~>"
|
|
179
151
|
- !ruby/object:Gem::Version
|
|
180
|
-
version: '0.
|
|
152
|
+
version: '0.22'
|
|
181
153
|
description: Rails UseCase and Service classes
|
|
182
154
|
email:
|
|
183
155
|
- bk@itws.de
|
|
@@ -203,14 +175,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
203
175
|
requirements:
|
|
204
176
|
- - ">="
|
|
205
177
|
- !ruby/object:Gem::Version
|
|
206
|
-
version: '0'
|
|
178
|
+
version: '3.0'
|
|
207
179
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
208
180
|
requirements:
|
|
209
181
|
- - ">="
|
|
210
182
|
- !ruby/object:Gem::Version
|
|
211
183
|
version: '0'
|
|
212
184
|
requirements: []
|
|
213
|
-
rubygems_version: 3.
|
|
185
|
+
rubygems_version: 3.5.22
|
|
214
186
|
signing_key:
|
|
215
187
|
specification_version: 4
|
|
216
188
|
summary: Rails UseCase and Service classes
|