lukita_service 0.0.1
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 +7 -0
- data/lib/lukita_service.rb +3 -0
- data/lib/lukita_service/base.rb +94 -0
- data/lib/lukita_service/result.rb +14 -0
- metadata +46 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 7344e5a1cd618eafc197db3cd93de853661577de
|
|
4
|
+
data.tar.gz: cfe9202c02e2baa217c0762a296bcc49d0291165
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: bff96df1dbf5f3d387fcee34f4cf77c24bc0892f0443ae005e24665067f66282fc4d8f75a1f0d329d49cf985d0acc44056ec91c62faa469c84e5ac09b043eb89
|
|
7
|
+
data.tar.gz: fabb1b621b4854f76180cac2ba67799a3ff680ceea22d1548ca9228c4bd23f7f8947a43e7fe5a476d19649d03fe04d62425413556890db0c4ead37060feccb34
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
module LukitaService
|
|
2
|
+
# Base class
|
|
3
|
+
class Base
|
|
4
|
+
def self.execute; end
|
|
5
|
+
def self.execute!; end
|
|
6
|
+
|
|
7
|
+
# Run service with params
|
|
8
|
+
#
|
|
9
|
+
# Example:
|
|
10
|
+
# >> SumServiceExample.run(num1: 1, num2: 2)
|
|
11
|
+
# => #<LukitaService::Result:0x0000000368b110 @valid?=true, @result={:sum=>3}, @error=nil, @exception=nil>
|
|
12
|
+
def self.run(params = {})
|
|
13
|
+
outcome = self.execute(params)
|
|
14
|
+
outcome = self.fill_outcome(outcome)
|
|
15
|
+
|
|
16
|
+
if outcome[:valid?]
|
|
17
|
+
Result.new(valid?: outcome[:valid?], result: outcome[:result], error: nil)
|
|
18
|
+
else
|
|
19
|
+
Result.new(valid?: outcome[:valid?], result: outcome[:result], error: outcome[:error])
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Run service with params, rescue an exception if there is exception
|
|
24
|
+
#
|
|
25
|
+
# Example:
|
|
26
|
+
# >> SumServiceExample.run(num1: 1, num2: 2)
|
|
27
|
+
# => #<LukitaService::Result:0x0000000368b110 @valid?=true, @result={:sum=>3}, @error=nil, @exception=nil>
|
|
28
|
+
def self.run!(params = {})
|
|
29
|
+
ActiveRecord::Base.transaction do
|
|
30
|
+
outcome = self.execute(params)
|
|
31
|
+
end
|
|
32
|
+
outcome = self.fill_outcome(outcome)
|
|
33
|
+
|
|
34
|
+
if outcome[:valid?]
|
|
35
|
+
Result.new(valid?: outcome[:valid?], result: outcome[:result], error: nil, exception: nil)
|
|
36
|
+
else
|
|
37
|
+
Result.new(valid?: outcome[:valid?], result: outcome[:result], error: outcome[:error], exception: outcome[:exception])
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
rescue Exception => e
|
|
41
|
+
Result.new(valid?: outcome[:valid?], result: outcome[:result], error: e.message, exception: e)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Run services in pipeline
|
|
45
|
+
#
|
|
46
|
+
# Example:
|
|
47
|
+
# >> LukitaService::Base.pipe(SimpleSumService, {a: 1, b: 2}).pipe(LogService).done
|
|
48
|
+
# => #<LukitaService::Result:0x00000002af4950 @valid=true, @result={:sum=>3}, @error=nil, @exception=nil>
|
|
49
|
+
def self.pipe(service, params = {})
|
|
50
|
+
if @outcome != nil && @outcome.valid?
|
|
51
|
+
prev_result = @outcome.result
|
|
52
|
+
|
|
53
|
+
@outcome = service.run(params.merge(prev_result))
|
|
54
|
+
@outcome.result ||= {}
|
|
55
|
+
@outcome.result = prev_result.merge(@outcome.result)
|
|
56
|
+
elsif @outcome == nil
|
|
57
|
+
@outcome = service.run(params)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
self
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Run services in pipeline
|
|
64
|
+
#
|
|
65
|
+
# Example:
|
|
66
|
+
# >> LukitaService::Base.pipe(SimpleSumService, {a: 1, b: 2}).pipe(SimpleSumService, {a: 5, b: 1}).done
|
|
67
|
+
# => #<LukitaService::Result:0x00000002af4950 @valid=true, @result={:sum=>9}, @error=nil, @exception=nil>
|
|
68
|
+
def self.done
|
|
69
|
+
final_outcome = @outcome
|
|
70
|
+
@outcome = nil
|
|
71
|
+
final_outcome
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
private
|
|
75
|
+
|
|
76
|
+
def self.fill_outcome(outcome)
|
|
77
|
+
if outcome != nil && outcome.class == Hash
|
|
78
|
+
if outcome[:valid?].nil?
|
|
79
|
+
outcome[:valid?] = true
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
outcome[:result] ||= {}
|
|
83
|
+
else
|
|
84
|
+
prev_values = outcome
|
|
85
|
+
if prev_values.nil?
|
|
86
|
+
prev_values = {}
|
|
87
|
+
end
|
|
88
|
+
outcome = {valid?: true, result: prev_values}
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
outcome
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module LukitaService
|
|
2
|
+
# Result class
|
|
3
|
+
class Result
|
|
4
|
+
attr_accessor :valid, :result, :error, :exception
|
|
5
|
+
alias :valid? :valid
|
|
6
|
+
|
|
7
|
+
def initialize(params)
|
|
8
|
+
@valid = params[:valid?]
|
|
9
|
+
@result = params[:result]
|
|
10
|
+
@error = params[:error]
|
|
11
|
+
@exception = params[:exception]
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: lukita_service
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Lucas Vieira
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2017-11-16 00:00:00.000000000 Z
|
|
12
|
+
dependencies: []
|
|
13
|
+
description: A simple lib to organize your ruby project.
|
|
14
|
+
email: lucasvieira.dev@gmail.com
|
|
15
|
+
executables: []
|
|
16
|
+
extensions: []
|
|
17
|
+
extra_rdoc_files: []
|
|
18
|
+
files:
|
|
19
|
+
- lib/lukita_service.rb
|
|
20
|
+
- lib/lukita_service/base.rb
|
|
21
|
+
- lib/lukita_service/result.rb
|
|
22
|
+
homepage: http://rubygems.org/gems/lukita_service
|
|
23
|
+
licenses:
|
|
24
|
+
- MIT
|
|
25
|
+
metadata: {}
|
|
26
|
+
post_install_message:
|
|
27
|
+
rdoc_options: []
|
|
28
|
+
require_paths:
|
|
29
|
+
- lib
|
|
30
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
31
|
+
requirements:
|
|
32
|
+
- - ">="
|
|
33
|
+
- !ruby/object:Gem::Version
|
|
34
|
+
version: '0'
|
|
35
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '0'
|
|
40
|
+
requirements: []
|
|
41
|
+
rubyforge_project:
|
|
42
|
+
rubygems_version: 2.5.2
|
|
43
|
+
signing_key:
|
|
44
|
+
specification_version: 4
|
|
45
|
+
summary: Lib to organize your ruby project.
|
|
46
|
+
test_files: []
|