light_service_object 0.1.6 → 0.1.11

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
2
  SHA256:
3
- metadata.gz: 6a4e68067319da840f48462ed29d2fdb32314e14c78c543f6e978b345d2d87b7
4
- data.tar.gz: 0fb567f252a98e5bef84d9d2b7db469e86b6b9bdce13038dd701f703c5be474d
3
+ metadata.gz: c4fd2db566d67b43adbc670e3cea486a0a248305526a587b86955ad6c4bd4e9f
4
+ data.tar.gz: 4c77a3985e2df9e18dad36082201289d09f7d572abc6f048b0cb0ba2d7e06cd5
5
5
  SHA512:
6
- metadata.gz: edb266a2036ce57aba328e8c7fe3925b1955accd7537c4cdf7ff8ea14111eaa1234c33c974d611909031869998a648277abff83f4e3431e4391e14443da172f3
7
- data.tar.gz: 9e6faf7bd3f116726ab2260401f7d5e9b03c41135c377bf46f37a498ad6c57026928590c147feb442c3b681cbf8c755e4207dbc00b2981869bb70a7ccafb20e0
6
+ metadata.gz: 305ff606e8c3debae5be28e8722dc2a35c165249235ef64af4cd2389368ea27057300d8ac515cec4564e032833d013219e3840526888f49b0a5064d7bcf596c0
7
+ data.tar.gz: d51c4f69fabcc2713e1bad9af775eaba99614fe9cabf4953372d9a2b7c60515af4f3e990dc4e65006b0afe44908ab1323290a5ef50a7c82de9e6861d7cb9c440
@@ -1,37 +1,37 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- light_service_object (0.1.6)
5
- dry-initializer (~> 2.0)
4
+ light_service_object (0.1.11)
5
+ dry-initializer (~> 3.0)
6
6
  dry-monads (~> 1.0)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- concurrent-ruby (1.1.5)
11
+ concurrent-ruby (1.1.6)
12
12
  diff-lcs (1.3)
13
13
  dry-core (0.4.9)
14
14
  concurrent-ruby (~> 1.0)
15
- dry-equalizer (0.2.2)
16
- dry-initializer (2.5.0)
17
- dry-monads (1.3.1)
15
+ dry-equalizer (0.3.0)
16
+ dry-initializer (3.0.3)
17
+ dry-monads (1.3.5)
18
18
  concurrent-ruby (~> 1.0)
19
19
  dry-core (~> 0.4, >= 0.4.4)
20
20
  dry-equalizer
21
- rake (10.5.0)
22
- rspec (3.8.0)
23
- rspec-core (~> 3.8.0)
24
- rspec-expectations (~> 3.8.0)
25
- rspec-mocks (~> 3.8.0)
26
- rspec-core (3.8.2)
27
- rspec-support (~> 3.8.0)
28
- rspec-expectations (3.8.4)
21
+ rake (13.0.1)
22
+ rspec (3.9.0)
23
+ rspec-core (~> 3.9.0)
24
+ rspec-expectations (~> 3.9.0)
25
+ rspec-mocks (~> 3.9.0)
26
+ rspec-core (3.9.2)
27
+ rspec-support (~> 3.9.3)
28
+ rspec-expectations (3.9.1)
29
29
  diff-lcs (>= 1.2.0, < 2.0)
30
- rspec-support (~> 3.8.0)
31
- rspec-mocks (3.8.1)
30
+ rspec-support (~> 3.9.0)
31
+ rspec-mocks (3.9.1)
32
32
  diff-lcs (>= 1.2.0, < 2.0)
33
- rspec-support (~> 3.8.0)
34
- rspec-support (3.8.2)
33
+ rspec-support (~> 3.9.0)
34
+ rspec-support (3.9.3)
35
35
 
36
36
  PLATFORMS
37
37
  ruby
@@ -39,8 +39,8 @@ PLATFORMS
39
39
  DEPENDENCIES
40
40
  bundler (~> 2.0)
41
41
  light_service_object!
42
- rake (~> 10.0)
42
+ rake (>= 12.3.3)
43
43
  rspec (~> 3.0)
44
44
 
45
45
  BUNDLED WITH
46
- 2.0.2
46
+ 2.1.4
data/README.md CHANGED
@@ -54,8 +54,8 @@ class NewServiceObject < LightServiceObject::Base
54
54
  optional :number
55
55
 
56
56
  def perform
57
- fail!("Date is too far away") if date - Date.today >= 7
58
-
57
+ fail!("Date is too far away") if date - Date.today >= 7
58
+
59
59
  number + 10
60
60
  end
61
61
  end
@@ -67,6 +67,9 @@ end
67
67
  - the last thing evaluated will be returned as the result `number + 10`
68
68
  - one side note: all parameters are immutable by default
69
69
 
70
+ ### Why is it Light?
71
+
72
+ It really is just a plain-old-ruby-object (PORO) with `Dry::Initializer` throw in with some syntax grease, and returns a `Dry::Monads::Result` -- that's it.
70
73
 
71
74
  ## Contributing
72
75
 
@@ -21,7 +21,10 @@ if defined?(Ensurance)
21
21
  end
22
22
  klass = klass.klass if klass.is_a?(ActiveRecord::Relation)
23
23
 
24
- coercer = ->(value) { klass.ensure(value) }
24
+ coercer = options[:optional] ?
25
+ ->(value) { klass.ensure(value) } :
26
+ ->(value) { klass.ensure!(value) }
27
+
25
28
  options.merge(type: coercer)
26
29
  end
27
30
 
@@ -30,11 +33,12 @@ if defined?(Ensurance)
30
33
  end
31
34
 
32
35
  module LightServiceObject
36
+ class ServiceError < StandardError; end
37
+
33
38
  class Base
34
39
  extend Dry::Initializer
35
40
  include Dry::Monads::Result::Mixin
36
41
 
37
-
38
42
  ## — CLASS METHODS
39
43
  class << self
40
44
  def result_class
@@ -47,7 +51,8 @@ module LightServiceObject
47
51
 
48
52
  def option(*args, **opts, &block)
49
53
  if opts.delete(:mutable)
50
- self.send("attr_writer", args.first)
54
+ name = opts[:as] || args.first
55
+ self.send("attr_writer", name)
51
56
  end
52
57
  super(*args, **opts, &block)
53
58
  end
@@ -69,18 +74,10 @@ module LightServiceObject
69
74
  end
70
75
 
71
76
  def call(**options)
72
- begin
73
- obj = self.new(**options)
74
- rescue KeyError => e
75
- return Dry::Monads.Failure(e.message)
76
- end
77
-
78
- # Identify incoming params that weren't specified
79
- # set_params = obj.instance_variables.map{|e| e.to_s.tr("@","").to_sym }
80
- # unknown_params = (options.keys - set_params)
81
- # ap("#{self.name} > Unknown Parameters #{unknown_params}") if unknown_params.present?
82
-
83
- result = obj.call
77
+ obj = self.new(**options)
78
+ obj.call
79
+ rescue Exception => error
80
+ Dry::Monads.Failure(error.message)
84
81
  end
85
82
  end
86
83
 
@@ -103,15 +100,15 @@ module LightServiceObject
103
100
  end
104
101
  end
105
102
  Dry::Monads.Success(result)
106
- rescue StandardError => error
107
- fail!(error)
103
+ rescue Exception => error
104
+ Dry::Monads.Failure(error.message)
108
105
  end
109
106
 
110
107
  def fail!(error)
111
- error = ::StandardError.new(error.to_s) if !error.is_a?(::StandardError)
108
+ error = ServiceError.new(error.to_s) if !error.is_a?(ServiceError)
112
109
  reason = self.error_reason(error)
113
110
  self.class.failed(error)
114
- Dry::Monads.Failure(reason)
111
+ raise error
115
112
  end
116
113
 
117
114
  def error_reason(error)
@@ -1,3 +1,3 @@
1
1
  module LightServiceObject
2
- VERSION = "0.1.6"
2
+ VERSION = "0.1.11"
3
3
  end
@@ -24,9 +24,9 @@ Gem::Specification.new do |spec|
24
24
  spec.require_paths = ["lib"]
25
25
 
26
26
  spec.add_development_dependency "bundler", "~> 2.0"
27
- spec.add_development_dependency "rake", "~> 10.0"
27
+ spec.add_development_dependency "rake", ">= 12.3.3"
28
28
  spec.add_development_dependency "rspec", "~> 3.0"
29
29
 
30
- spec.add_dependency "dry-initializer", "~> 2.0"
30
+ spec.add_dependency "dry-initializer", "~> 3.0"
31
31
  spec.add_dependency "dry-monads", "~> 1.0"
32
32
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: light_service_object
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Sharpe
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-10-14 00:00:00.000000000 Z
11
+ date: 2020-06-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -28,16 +28,16 @@ dependencies:
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: 12.3.3
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: 12.3.3
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '2.0'
61
+ version: '3.0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '2.0'
68
+ version: '3.0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: dry-monads
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -121,7 +121,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
121
121
  - !ruby/object:Gem::Version
122
122
  version: '0'
123
123
  requirements: []
124
- rubygems_version: 3.0.6
124
+ rubygems_version: 3.1.3
125
125
  signing_key:
126
126
  specification_version: 4
127
127
  summary: A lightweight base service object for Rails/Ruby