serviz 0.2.0 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 177871346c263a1cd84842ef37ffa32e1fd4a398242e4d050821b2c12e5b705c
4
- data.tar.gz: 1e65d0ea46eae2a2e0914445a55b73fa32e5f256affdd4549a11d047c4cb4181
3
+ metadata.gz: 996c470857cef304582ab365344d4918e3ee35c5baacd64b2d5b068a2b323707
4
+ data.tar.gz: 3c77f8932bee0fb30543975094f8d1ce025e8455ca031e028b9b97f1a134835d
5
5
  SHA512:
6
- metadata.gz: 6ab5a8ab13a585d3d76d434b97a8ef16d2280756ecae1eadbb38c20f2a408599f0ceebe60c98a42430d1ee55889affee566ee7ab4ada8a533008a8791e0275a0
7
- data.tar.gz: 84b5f495b341bf886e68340dcac0b0ce1ff4afce744c7a6fa89e10e7c4b07bbbc7b454c79a802b794730f1c5af5fe9f50086ce74755bc7a25e6e6202e4ab22ca
6
+ metadata.gz: d5b429c64601d9a4b9f829cb723e99c995659c64cf5901eb34240047ee2611ab7b10bd2aa27a2ab54339e99c6b63466deab752d5998f3a74efd528d4d16afb9a
7
+ data.tar.gz: 7a89f2b36fe02e78d75cec00280659ae0fc7f740730a373c07e62b444534b844a784b1b828acb0291b9f8328833466d66bcbb1fd476f85337aaefab6604cc7ab
@@ -1,3 +1,3 @@
1
1
  module Serviz
2
- VERSION = "0.2.0"
2
+ VERSION = "0.4.0"
3
3
  end
data/lib/serviz.rb CHANGED
@@ -4,10 +4,18 @@ module Serviz
4
4
  class Base
5
5
  attr_accessor :errors, :result
6
6
 
7
- def self.call(*args)
8
- instance = new(*args)
7
+ def self.call(*args, **kwargs)
8
+ instance = if args.length > 0 && kwargs.length > 0
9
+ new(*args, **kwargs)
10
+ elsif kwargs.length > 0
11
+ new(**kwargs)
12
+ else
13
+ new(*args)
14
+ end
9
15
  instance.call
10
16
 
17
+ yield(instance) if block_given?
18
+
11
19
  instance
12
20
  end
13
21
 
@@ -19,12 +27,18 @@ module Serviz
19
27
  @errors ||= []
20
28
  end
21
29
 
30
+ def error_messages(separator = ", ")
31
+ errors.join(separator)
32
+ end
33
+
22
34
  def success?
23
35
  !failure?
24
36
  end
37
+ alias_method :ok?, :success?
25
38
 
26
39
  def failure?
27
40
  errors.any?
28
41
  end
42
+ alias_method :error?, :failure?
29
43
  end
30
44
  end
data/spec/scenarios.rb CHANGED
@@ -12,5 +12,16 @@ class RegisterUser < Serviz::Base
12
12
  end
13
13
  end
14
14
 
15
+ class PositionalAndKeyword < Serviz::Base
16
+ def initialize(positional, keyword:)
17
+ @positional = positional
18
+ @keyword = keyword
19
+ end
20
+
21
+ def call
22
+ self.result = [@positional, @keyword]
23
+ end
24
+ end
25
+
15
26
  class NoCall < Serviz::Base
16
27
  end
data/spec/serviz_spec.rb CHANGED
@@ -4,8 +4,10 @@ RSpec.describe Serviz::Base do
4
4
  operation = RegisterUser.call(user)
5
5
 
6
6
  expect(operation.success?).to eq true
7
+ expect(operation.ok?).to eq true
7
8
  expect(operation.failure?).to eq false
8
9
  expect(operation.errors).to be_empty
10
+ expect(operation.error_messages).to eq ''
9
11
  expect(operation.result).to eq user
10
12
  end
11
13
 
@@ -14,11 +16,26 @@ RSpec.describe Serviz::Base do
14
16
 
15
17
  expect(operation.success?).to eq false
16
18
  expect(operation.failure?).to eq true
19
+ expect(operation.error?).to eq true
17
20
  expect(operation.errors).not_to be_empty
21
+ expect(operation.error_messages).to eq 'No user!'
18
22
  expect(operation.result).to eq nil
19
23
  end
20
24
 
21
25
  it "raises exception if #call is not defined" do
22
26
  expect { NoCall.call }.to raise_error NotImplementedError
23
27
  end
28
+
29
+ it "accepts positional and keywords args" do
30
+ operation = PositionalAndKeyword.call('foo', keyword: 'bar')
31
+
32
+ expect(operation.success?).to eq true
33
+ expect(operation.result).to eq(['foo', 'bar'])
34
+ end
35
+
36
+ it "accepts a block" do
37
+ expect {
38
+ RegisterUser.call { |operation| puts 'error!' if operation.failure? }
39
+ }.to output("error!\n").to_stdout
40
+ end
24
41
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: serviz
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - markets
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-02 00:00:00.000000000 Z
11
+ date: 2024-04-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -68,7 +68,7 @@ homepage: https://github.com/markets/serviz
68
68
  licenses:
69
69
  - MIT
70
70
  metadata: {}
71
- post_install_message:
71
+ post_install_message:
72
72
  rdoc_options: []
73
73
  require_paths:
74
74
  - lib
@@ -83,8 +83,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
83
83
  - !ruby/object:Gem::Version
84
84
  version: '0'
85
85
  requirements: []
86
- rubygems_version: 3.0.3
87
- signing_key:
86
+ rubygems_version: 3.4.10
87
+ signing_key:
88
88
  specification_version: 4
89
89
  summary: Command object Interface for Ruby
90
90
  test_files: