Sha256: 5a1061c4b22e974838a2c81a03d0cefbe5be2344d6e51c68781717222510575d
Contents?: true
Size: 1.35 KB
Versions: 1
Compression:
Stored size: 1.35 KB
Contents
# frozen_string_literal: true require 'lite/errors' require 'lite/memoize' module Lite module Service class NotImplementedError < StandardError; end class ValidationError < StandardError; end module Command module ClassMethods def call(*args) klass = new(*args) klass.call klass end end attr_reader :result def self.prepended(base) base.extend(ClassMethods) end def call raise Lite::Service::NotImplementedError unless defined?(super) return @result if called? @called = true @result = super end def cache @cache ||= Lite::Memoize::Instance.new end def called? @called ||= false end def errors @errors ||= Lite::Errors::Messages.new end def errored? !errors.empty? end def fail! raise Lite::Service::ValidationError end def failure? called? && errored? end def recall! @called = false [cache, errors].each(&:clear) call end def result! result if valid? end def success? called? && !errored? end def validate! return true if success? fail! end alias valid? validate! end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
lite-service-1.0.0 | lib/lite/service/command.rb |