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.
@@ -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,3 @@
1
+ require 'active_record'
2
+ require 'lukita_service/base'
3
+ require 'lukita_service/result'
@@ -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: []