class TermUtils::AP::Walker

Represents a Result Walker.

Public Class Methods

new() click to toggle source

Constructs a new Walker.

# File lib/term_utils/ap/result.rb, line 168
def initialize
  @anonymous_parameter_hook = nil
  @anonymous_article_hook = nil
  @parameter_hooks = {}
  @finished_hook = nil
end

Public Instance Methods

article(param_id = nil, art_id = nil, &block) click to toggle source

Registers an article hook.

# File lib/term_utils/ap/result.rb, line 188
def article(param_id = nil, art_id = nil, &block)
  unless param_id
    # Anonymous article hook
    @anonymous_article_hook = block
    return
  end

  unless art_id
    # Anonymous article hook
    @parameter_hooks[param_id] = TermUtils::AP::ParameterWalkerHooks.new unless @parameter_hooks.key?(param_id)
    @parameter_hooks[param_id].anonymous_article_hook = block
    return
  end

  @parameter_hooks[param_id] = TermUtils::AP::ParameterWalkerHooks.new unless @parameter_hooks.key?(param_id)
  @parameter_hooks[param_id].article_hooks ||= {}
  @parameter_hooks[param_id].article_hooks[art_id] = block
end
finished(&block) click to toggle source

Registers a walk finished hook.

# File lib/term_utils/ap/result.rb, line 208
def finished(&block)
  @finished_hook = block
end
notify_article(article) click to toggle source

Calls article hooks.

# File lib/term_utils/ap/result.rb, line 222
def notify_article(article)
  # (1of2) ID article hook
  param_hooks = @parameter_hooks[article.parent.param_id]
  if param_hooks
    # ID article hook
    param_hooks.article_hooks[article.art_id].call(article) if param_hooks.article_hooks && param_hooks.article_hooks.key?(article.art_id)
    # Anonymous article hook
    param_hooks.anonymous_article_hook.call(article) if param_hooks.anonymous_article_hook
  end
  # (2of2) Anonymous article hook
  @anonymous_article_hook.call(article) if @anonymous_article_hook
end
notify_finished(remaining_arguments) click to toggle source

Calls finished hook.

# File lib/term_utils/ap/result.rb, line 236
def notify_finished(remaining_arguments)
  @finished_hook.call(remaining_arguments) if @finished_hook
end
notify_parameter(parameter) click to toggle source

Calls parameter hooks.

# File lib/term_utils/ap/result.rb, line 213
def notify_parameter(parameter)
  # (1of2) ID parameter hook
  param_hooks = @parameter_hooks[parameter.param_id]
  param_hooks.hook.call(parameter) if param_hooks && param_hooks.hook
  # (2of2) Anonymous parameter hook
  @anonymous_parameter_hook.call(parameter) if @anonymous_parameter_hook
end
parameter(param_id = nil, &block) click to toggle source

Registers a parameter hook.

# File lib/term_utils/ap/result.rb, line 176
def parameter(param_id = nil, &block)
  unless param_id
    # Anonymous parameter hook
    @anonymous_parameter_hook = block
    return
  end

  @parameter_hooks[param_id] = TermUtils::AP::ParameterWalkerHooks.new unless @parameter_hooks.key?(param_id)
  @parameter_hooks[param_id].hook = block
end