module HaveAPI::Fs::Components
  class ActionErrors < Directory
    component :action_errors

    class ActionError < File
      def initialize(errors)
        @errors = errors
      end

      def read
        @errors.join("\n") + "\n"
      end
    end

    def initialize(action_dir, *args)
      super(*args)
      @action_dir = action_dir
    end

    def contents
      ret = super
      return ret unless @errors
      ret.concat(@errors.keys.map(&:to_s))
      ret
    end

    def set(errors)
      changed
      @errors = errors
    end

    def title
      'Errors'
    end

    protected
    def new_child(name)
      if child = super
        child

      elsif @errors && @errors.has_key?(name)
        [ActionError, @errors[name]]

      else
        nil
      end
    end
  end
end