Class: LightServiceObject::Base
- Inherits:
-
Object
- Object
- LightServiceObject::Base
- Extended by:
- Dry::Initializer
- Includes:
- Dry::Monads::Result::Mixin
- Defined in:
- lib/light_service_object.rb
Class Method Summary collapse
- .call(**options) ⇒ Object
- .expected_result_class(klass) ⇒ Object
- .failed(error) ⇒ Object
- .option(*args, **opts, &block) ⇒ Object
- .optional(key, **options) ⇒ Object
- .param(key, **options) ⇒ Object
- .required(key, **options) ⇒ Object
- .result_class ⇒ Object
Instance Method Summary collapse
- #call ⇒ Object
- #error_reason(error) ⇒ Object
- #fail!(error) ⇒ Object
-
#result_class ⇒ Object
— INSTANCE METHODS.
Class Method Details
.call(**options) ⇒ Object
76 77 78 79 80 81 |
# File 'lib/light_service_object.rb', line 76 def call(**) obj = self.new(**) obj.call rescue Exception => error Dry::Monads.Failure(error.) end |
.expected_result_class(klass) ⇒ Object
71 72 73 74 |
# File 'lib/light_service_object.rb', line 71 def expected_result_class(klass) @result_class = klass @result_class = klass.constantize if klass.is_a?(String) end |
.failed(error) ⇒ Object
84 85 |
# File 'lib/light_service_object.rb', line 84 def self.failed(error) end |
.option(*args, **opts, &block) ⇒ Object
52 53 54 55 56 57 58 |
# File 'lib/light_service_object.rb', line 52 def option(*args, **opts, &block) if opts.delete(:mutable) name = opts[:as] || args.first self.send("attr_writer", name) end super(*args, **opts, &block) end |
.optional(key, **options) ⇒ Object
65 66 67 68 69 |
# File 'lib/light_service_object.rb', line 65 def optional(key, **) [:optional] = true [:private] = true option(key, **) end |
.param(key, **options) ⇒ Object
48 49 50 |
# File 'lib/light_service_object.rb', line 48 def param(key, **) raise Error.new("Do not use param in a service object") end |
.required(key, **options) ⇒ Object
60 61 62 63 |
# File 'lib/light_service_object.rb', line 60 def required(key, **) [:private] = true option(key, **) end |
.result_class ⇒ Object
44 45 46 |
# File 'lib/light_service_object.rb', line 44 def result_class @result_class end |
Instance Method Details
#call ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/light_service_object.rb', line 92 def call result = self.perform if self.result_class if !result.is_a?(self.result_class) a_name = "#{self.result_class}" a_name = %w[a e i o u y].include?(a_name.first.downcase) ? "an #{a_name}" : "a #{a_name}" fail!("#{self.name} is not returning #{a_name}") end end Dry::Monads.Success(result) rescue Exception => error Dry::Monads.Failure(error.) end |
#error_reason(error) ⇒ Object
114 115 116 117 |
# File 'lib/light_service_object.rb', line 114 def error_reason(error) # Give subclasses a chance to see errors first "[#{self.class}] #{error}" end |
#fail!(error) ⇒ Object
107 108 109 110 111 112 |
# File 'lib/light_service_object.rb', line 107 def fail!(error) error = ServiceError.new(error.to_s) if !error.is_a?(ServiceError) reason = self.error_reason(error) self.class.failed(error) raise error end |
#result_class ⇒ Object
— INSTANCE METHODS
88 89 90 |
# File 'lib/light_service_object.rb', line 88 def result_class self.class.result_class end |