Sha256: 547a69eb162e807d173b454716a0cd502937cbd11427b67d6ad87fdc0967c85a
Contents?: true
Size: 1.53 KB
Versions: 2
Compression:
Stored size: 1.53 KB
Contents
# frozen_string_literal: true require_relative '../operation' module LedgerSync module Domains class Resource class Transition include LedgerSync::Domains::Operation::Mixin class Contract < LedgerSync::Ledgers::Contract params do required(:model_name).filled(:string) required(:id).filled(:integer) required(:event).value(:string) required(:attrs).maybe(:hash) required(:attrs).maybe(:array) end end private def operate if resource.present? if resource.send(guard_method, params[:attrs]) && resource.send(event_method, params[:attrs]) success else failure('Unable to transition') end else failure('Not found') end end def guard_method "may_#{params[:event]}?" end def event_method "#{params[:event]}!" end def resource @resource ||= resource_class.find_by(id: params[:id]) end def resource_class @resource_class ||= Object.const_get(params[:model_name]) end def success super( serialize(resource: resource) ) end def failure(message) super( LedgerSync::Error::OperationError.new( operation: self, message: message ) ) end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
ledger_sync-domains-1.0.0.rc2 | lib/ledger_sync/domains/operation/transition.rb |
ledger_sync-domains-1.0.0.rc1 | lib/ledger_sync/domains/operation/transition.rb |