lib/clomp/track.rb in clomp-0.0.3 vs lib/clomp/track.rb in clomp-0.0.4

- old
+ new

@@ -1,34 +1,49 @@ module Clomp class Track include Clomp::CommonStates - attr_reader :name, :block, :track_options, :state, :error + attr_reader :name, :block, :track_options, :state, :error, :track_from VALID_TRACK_TYPES = %I(track failed_track finally catch) - def initialize(name: (raise Errors::NoTrackProvided), track_options: {}, track_type: VALID_TRACK_TYPES.first, &block) + def initialize(name: (raise Errors::NoTrackProvided), track_options: {}, track_type: VALID_TRACK_TYPES.first, track_from: nil, &block) raise UnknownTrackType, 'Please provide a valid track type' unless VALID_TRACK_TYPES.include?(track_type) @name = name + @track_from = track_from @block = block @track_options = track_options @type = track_type @state = 'pending' @error = nil end + def type + @type + end + + VALID_TRACK_TYPES.each do |track_type| + define_method "#{track_type}?" do + @type == track_type + end + end + + def track? + @type == :track + end + # Track#exec! executes the steps defined in the operation class def exec!(object, options) mark_as_failure! # going to execute! set to failure initially if object.method(name.to_sym).arity > 1 mark_as_success! if object.public_send(name.to_sym, options, **options) != false else mark_as_success! if object.public_send(name.to_sym, options) != false end - @block.(options) if success? && @block + @block.(options) if failure? && @block self rescue => e @error = e.message \ No newline at end of file