class LukitaService::Base
Base
class
Public Class Methods
done()
click to toggle source
Run services in pipeline
Example:
>> LukitaService::Base.pipe(SimpleSumService, {a: 1, b: 2}).pipe(SimpleSumService, {a: 5, b: 1}).done => #<LukitaService::Result:0x00000002af4950 @valid=true, @result={:sum=>9}, @error=nil, @exception=nil>
# File lib/lukita_service/base.rb, line 68 def self.done final_outcome = @outcome @outcome = nil final_outcome end
execute()
click to toggle source
# File lib/lukita_service/base.rb, line 4 def self.execute; end
execute!()
click to toggle source
# File lib/lukita_service/base.rb, line 5 def self.execute!; end
pipe(service, params = {})
click to toggle source
Run services in pipeline
Example:
>> LukitaService::Base.pipe(SimpleSumService, {a: 1, b: 2}).pipe(LogService).done => #<LukitaService::Result:0x00000002af4950 @valid=true, @result={:sum=>3}, @error=nil, @exception=nil>
# File lib/lukita_service/base.rb, line 49 def self.pipe(service, params = {}) if @outcome != nil && @outcome.valid? prev_result = @outcome.result @outcome = service.run(params.merge(prev_result)) @outcome.result ||= {} @outcome.result = prev_result.merge(@outcome.result) elsif @outcome == nil @outcome = service.run(params) end self end
run(params = {})
click to toggle source
Run service with params
Example:
>> SumServiceExample.run(num1: 1, num2: 2) => #<LukitaService::Result:0x0000000368b110 @valid?=true, @result={:sum=>3}, @error=nil, @exception=nil>
# File lib/lukita_service/base.rb, line 12 def self.run(params = {}) outcome = self.execute(params) outcome = self.fill_outcome(outcome) if outcome[:valid?] Result.new(valid?: outcome[:valid?], result: outcome[:result], error: nil) else Result.new(valid?: outcome[:valid?], result: outcome[:result], error: outcome[:error]) end end
run!(params = {})
click to toggle source
Run service with params, rescue an exception if there is exception
Example:
>> SumServiceExample.run(num1: 1, num2: 2) => #<LukitaService::Result:0x0000000368b110 @valid?=true, @result={:sum=>3}, @error=nil, @exception=nil>
# File lib/lukita_service/base.rb, line 28 def self.run!(params = {}) ActiveRecord::Base.transaction do outcome = self.execute(params) end outcome = self.fill_outcome(outcome) if outcome[:valid?] Result.new(valid?: outcome[:valid?], result: outcome[:result], error: nil, exception: nil) else Result.new(valid?: outcome[:valid?], result: outcome[:result], error: outcome[:error], exception: outcome[:exception]) end rescue Exception => e Result.new(valid?: outcome[:valid?], result: outcome[:result], error: e.message, exception: e) end
Private Class Methods
fill_outcome(outcome)
click to toggle source
# File lib/lukita_service/base.rb, line 76 def self.fill_outcome(outcome) if outcome != nil && outcome.class == Hash if outcome[:valid?].nil? outcome[:valid?] = true end outcome[:result] ||= {} else prev_values = outcome if prev_values.nil? prev_values = {} end outcome = {valid?: true, result: prev_values} end outcome end