light_service_object 0.1.6 → 0.1.11

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: 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