service_pattern 0.0.3 → 0.0.4
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 +5 -5
- data/README.md +14 -1
- data/lib/service_pattern/failed_error.rb +1 -0
- data/lib/service_pattern/service.rb +27 -15
- data/lib/service_pattern/version.rb +1 -1
- data/lib/service_pattern.rb +1 -1
- metadata +4 -5
- data/lib/service_pattern/cant_execute_error.rb +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: eb37f2c1aa001cef4abdfe0937e15b82c52bb845d44c9527851bc6d770bfd44d
|
4
|
+
data.tar.gz: 52344b2c5450cb137bcb743c4fe24bf543e5c22c8d61a831a063d5a4b5de7829
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 432e00eceea33e9f3335bcc00a5fc44f153ddbf925e11b853d3e6c698607bac1f090a6060eaa88875c5535d86863212409426b28a7ae5a1c66ad42991ceae1ca
|
7
|
+
data.tar.gz: a072a0f461b12c9e09e7a9d2c80ee593015434797cb6da32ef7825f0ab1c834e6d77caf22cc36ad264f52950980931cef6b7a6de3930a4d53280b2ef563673aa
|
data/README.md
CHANGED
@@ -21,7 +21,7 @@ end
|
|
21
21
|
Create your first service in "app/services/users/activator_service":
|
22
22
|
```ruby
|
23
23
|
class Users::ActivatorService < ApplicationService
|
24
|
-
def execute
|
24
|
+
def execute
|
25
25
|
User.all.find_each(&:activate!)
|
26
26
|
ServicePattern::Response.new(success: true)
|
27
27
|
end
|
@@ -39,5 +39,18 @@ else
|
|
39
39
|
end
|
40
40
|
```
|
41
41
|
|
42
|
+
### Returning results
|
43
|
+
|
44
|
+
You can also return a result, which will automatically make the response successfull:
|
45
|
+
```ruby
|
46
|
+
ServicePattern::Response.new(result: {message: "Hello world"})
|
47
|
+
```
|
48
|
+
|
49
|
+
You can then retrieve it like this:
|
50
|
+
```ruby
|
51
|
+
response = Users::ActivatorService.()
|
52
|
+
puts "Result: #{response.result}"
|
53
|
+
```
|
54
|
+
|
42
55
|
## License
|
43
56
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
@@ -0,0 +1 @@
|
|
1
|
+
class ServicePattern::FailedError < RuntimeError; end
|
@@ -1,29 +1,41 @@
|
|
1
1
|
class ServicePattern::Service
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
2
|
+
# The same as execute but doesn't catch FailedError so they are passed on to the parent service call
|
3
|
+
def self.chain(*args, &blk)
|
4
|
+
service = new(*args, &blk)
|
5
|
+
|
6
|
+
can_execute_response = service.can_execute?
|
7
|
+
raise ServicePattern::FailedError, can_execute_response.errors.join(". ") unless can_execute_response.success?
|
8
|
+
|
9
|
+
service.execute
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.call(*args, &blk)
|
13
|
+
execute(*args, &blk)
|
12
14
|
end
|
13
15
|
|
14
|
-
def self.execute
|
15
|
-
service = new(*args)
|
16
|
+
def self.execute(*args, &blk)
|
17
|
+
service = new(*args, &blk)
|
16
18
|
|
17
19
|
can_execute_response = service.can_execute?
|
18
|
-
|
19
|
-
|
20
|
+
return can_execute_response unless can_execute_response.success?
|
21
|
+
|
22
|
+
service.execute
|
23
|
+
rescue ServicePattern::FailedError => e
|
24
|
+
ServicePattern::Response.new(errors: [e.message])
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.execute!(*args, &blk)
|
28
|
+
response = execute(*args, &blk)
|
29
|
+
raise ServicePattern::FailedError, response.errors.join(". ") unless response.success?
|
30
|
+
|
31
|
+
response.result
|
20
32
|
end
|
21
33
|
|
22
34
|
def can_execute?
|
23
35
|
ServicePattern::Response.new(success: true)
|
24
36
|
end
|
25
37
|
|
26
|
-
def execute
|
38
|
+
def execute(*_args)
|
27
39
|
raise NoMethodError, "You should implement the `execute!` method on your service"
|
28
40
|
end
|
29
41
|
end
|
data/lib/service_pattern.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module ServicePattern
|
2
2
|
path = "#{File.dirname(__FILE__)}/service_pattern"
|
3
3
|
|
4
|
-
autoload :
|
4
|
+
autoload :FailedError, "#{path}/failed_error"
|
5
5
|
autoload :Response, "#{path}/response"
|
6
6
|
autoload :Service, "#{path}/service"
|
7
7
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: service_pattern
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kaspernj
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-10-19 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: ServicePattern for Ruby on Rails.
|
14
14
|
email:
|
@@ -21,7 +21,7 @@ files:
|
|
21
21
|
- README.md
|
22
22
|
- Rakefile
|
23
23
|
- lib/service_pattern.rb
|
24
|
-
- lib/service_pattern/
|
24
|
+
- lib/service_pattern/failed_error.rb
|
25
25
|
- lib/service_pattern/response.rb
|
26
26
|
- lib/service_pattern/service.rb
|
27
27
|
- lib/service_pattern/version.rb
|
@@ -45,8 +45,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: '0'
|
47
47
|
requirements: []
|
48
|
-
|
49
|
-
rubygems_version: 2.6.8
|
48
|
+
rubygems_version: 3.0.6
|
50
49
|
signing_key:
|
51
50
|
specification_version: 4
|
52
51
|
summary: ServicePattern for Ruby on Rails.
|
@@ -1 +0,0 @@
|
|
1
|
-
class ServicePattern::CantExecuteError < RuntimeError; end
|