Sha256: 5a9eccf87455874219d9b08de08cc16f0a075b8bc9a6443d1567f7123090fda8
Contents?: true
Size: 1.17 KB
Versions: 1
Compression:
Stored size: 1.17 KB
Contents
require 'active_support' module LightOperations class Core include ::ActiveSupport::Rescuable include ::ActiveSupport MissingDependency = Class.new(StandardError) attr_reader :dependencies, :params, :subject def initialize(params = {}, dependencies = {}) @params, @dependencies = params, dependencies end # do not override this method def run @subject = execute self rescue => exception rescue_with_handler(exception) || raise ensure self end def on_success(&block) block.call(subject) if success? self end def on_fail(&block) block.call(subject, errors) unless success? self end def errors @errors ||= (subject.respond_to?(:errors) ? subject.errors : []) end def fail? !success? end def success? errors.respond_to?(:empty?) ? errors.empty? : !errors end protected def execute fail 'Not implemented yet' end def fail!(errors = []) @errors = errors end def dependency(name) dependencies.fetch(name) rescue KeyError => e raise MissingDependency, e.message end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
light_operations-0.0.1 | lib/light_operations/core.rb |