Sha256: 81a5adf89a13b70a422b7a79bc5b0a373d99e07210edc212ce9d6774e822cafb

Contents?: true

Size: 977 Bytes

Versions: 1

Compression:

Stored size: 977 Bytes

Contents

class NarrativeMethodCommand < DevSystem::Command
  class Error < StandardError; end
  class Invalid < Error; end

  def self.call(args)
    log "args = #{args.inspect}"
    new.call(args)
  end

  # instance methods

  def call(args)
    @args = args
    log "@args = #{args.inspect}"
    return help if args.empty?

    validate
    perform
  rescue StandardError => error
    @error = error
    handle
  ensure
    @result
  end

  def validate
    raise NotImplementedError
  end

  def perform
    raise NotImplementedError
  end

  def handle
    log render(:error, format: :txt)
  end

  def help
    log render(:help, format: :txt)
  end
end

__END__

# view success.txt.erb

RESULT:

class      <%= @result.class %>
value      <%= @result %>

# view error.txt.erb

ERROR:

class      <%= @error.class %>
message    <%= @error.message %>
backtrace  <%= @error.backtrace.select { |s| @stop = true if s.include?("/exe/lizarb:"); !defined? @stop }.join "\n           " %>

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
lizarb-1.0.5 examples/command/app/dev/commands/narrative_method_command.rb