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 +4 -4
- data/Gemfile.lock +20 -20
- data/README.md +5 -2
- data/lib/light_service_object.rb +16 -19
- data/lib/light_service_object/version.rb +1 -1
- data/light_service_object.gemspec +2 -2
- metadata +9 -9
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c4fd2db566d67b43adbc670e3cea486a0a248305526a587b86955ad6c4bd4e9f
|
|
4
|
+
data.tar.gz: 4c77a3985e2df9e18dad36082201289d09f7d572abc6f048b0cb0ba2d7e06cd5
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 305ff606e8c3debae5be28e8722dc2a35c165249235ef64af4cd2389368ea27057300d8ac515cec4564e032833d013219e3840526888f49b0a5064d7bcf596c0
|
|
7
|
+
data.tar.gz: d51c4f69fabcc2713e1bad9af775eaba99614fe9cabf4953372d9a2b7c60515af4f3e990dc4e65006b0afe44908ab1323290a5ef50a7c82de9e6861d7cb9c440
|
data/Gemfile.lock
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
light_service_object (0.1.
|
|
5
|
-
dry-initializer (~>
|
|
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.
|
|
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.
|
|
16
|
-
dry-initializer (
|
|
17
|
-
dry-monads (1.3.
|
|
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 (
|
|
22
|
-
rspec (3.
|
|
23
|
-
rspec-core (~> 3.
|
|
24
|
-
rspec-expectations (~> 3.
|
|
25
|
-
rspec-mocks (~> 3.
|
|
26
|
-
rspec-core (3.
|
|
27
|
-
rspec-support (~> 3.
|
|
28
|
-
rspec-expectations (3.
|
|
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.
|
|
31
|
-
rspec-mocks (3.
|
|
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.
|
|
34
|
-
rspec-support (3.
|
|
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 (
|
|
42
|
+
rake (>= 12.3.3)
|
|
43
43
|
rspec (~> 3.0)
|
|
44
44
|
|
|
45
45
|
BUNDLED WITH
|
|
46
|
-
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
|
|
data/lib/light_service_object.rb
CHANGED
|
@@ -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 =
|
|
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
|
-
|
|
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
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
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
|
|
107
|
-
|
|
103
|
+
rescue Exception => error
|
|
104
|
+
Dry::Monads.Failure(error.message)
|
|
108
105
|
end
|
|
109
106
|
|
|
110
107
|
def fail!(error)
|
|
111
|
-
error =
|
|
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
|
-
|
|
111
|
+
raise error
|
|
115
112
|
end
|
|
116
113
|
|
|
117
114
|
def error_reason(error)
|
|
@@ -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", "
|
|
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", "~>
|
|
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.
|
|
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:
|
|
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:
|
|
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:
|
|
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: '
|
|
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: '
|
|
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.
|
|
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
|