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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 8d475628b9f7d75075a9069a45e64849402685d7
4
- data.tar.gz: 06c1e5aa4f668b258a753503c74edaaa30dcf858
2
+ SHA256:
3
+ metadata.gz: eb37f2c1aa001cef4abdfe0937e15b82c52bb845d44c9527851bc6d770bfd44d
4
+ data.tar.gz: 52344b2c5450cb137bcb743c4fe24bf543e5c22c8d61a831a063d5a4b5de7829
5
5
  SHA512:
6
- metadata.gz: ec2869750e398a401e478bc755f8d1a351f1264ffa5be853e5e79bf0441bc23f11bf4f0abd7dd5446ed222a16e7eda9148d049df013d0a0ffac7557d6c8e3ed6
7
- data.tar.gz: a77b1ad0406d8693ab31397ba307b306f627120baf0dd9ee09ca7eccbd68987b72a9b53371c0aa965797275b00bab5ef1004c3ba0dee4e80ef62d67c0c4f7a9c
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
- def self.call(*args)
3
- service = new(*args)
4
-
5
- begin
6
- can_execute_response = service.can_execute?
7
- return can_execute_response unless can_execute_response.success?
8
- service.execute!
9
- rescue => e
10
- ServicePattern::Response.new(errors: ["#{e.class.name}: #{e.message}"], success: false)
11
- end
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!(*args)
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
- raise ServicePattern::CantExecuteError, can_execute_response.errors.join(". ") unless can_execute_response.success?
19
- service.execute!
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!(*_args)
38
+ def execute(*_args)
27
39
  raise NoMethodError, "You should implement the `execute!` method on your service"
28
40
  end
29
41
  end
@@ -1,3 +1,3 @@
1
1
  module ServicePattern
2
- VERSION = "0.0.3".freeze
2
+ VERSION = "0.0.4".freeze
3
3
  end
@@ -1,7 +1,7 @@
1
1
  module ServicePattern
2
2
  path = "#{File.dirname(__FILE__)}/service_pattern"
3
3
 
4
- autoload :CantExecuteError, "#{path}/cant_execute_error"
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.3
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: 2017-07-21 00:00:00.000000000 Z
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/cant_execute_error.rb
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
- rubyforge_project:
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