service_pattern 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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