Class: Bluepine::Attributes::Visitor Abstract

Inherits:
Object
  • Object
show all
Includes:
Functions
Defined in:
lib/bluepine/attributes/visitor.rb

Overview

This class is abstract.

An abstract Visitor for traversing Attribute.

Sub-classes must implement the methods correspond to Attribute classes.

Examples:

Implements string visitor for StringAttribute

class SimpleVisitor < Bluepine::Attributes::Visitor
  def visit_string(attribute, *args)
    "Hello #{attribute.name}"
  end
end

# Usage
username = Attributes.create(:string, :username)
visitor  = StringVisitor.new
visitor.visit(username) # => "Hello username"

Constant Summary collapse

MethodNotFound =
Bluepine::Error.create("Cannot find method Visitor#%s")

Instance Method Summary collapse

Methods included from Functions

#compose, #compose_result, #curry, #result

Instance Method Details

#visit(attribute, *args) ⇒ Object

Traveres a visitable object and calls corresponding method based-on sub-classes’ impementations.

Examples:

When attribute is an instance of Attribute.

object = Attributes.create(:object, :user) { }
visit(object) # => visit_object

When attribute is a Symbol.

visit(:user) # => visit_user or visit_schema(attr, of: :user)

Parameters:

  • The (Attribute|Symbol)

    Attribute object or Symbol



36
37
38
39
40
# File 'lib/bluepine/attributes/visitor.rb', line 36

def visit(attribute, *args)
  method, attribute = find_method!(attribute, *args)

  send(method, attribute, *args)
end

#visit_attribute(attribute, options = {}) ⇒ Object

Performs visitor logic when no corresponding method can be found (Catch-all).

Raises:

  • (NotImplementedError)


43
44
45
# File 'lib/bluepine/attributes/visitor.rb', line 43

def visit_attribute(attribute, options = {})
  raise NotImplementedError
end

#visit_schema(attribute, options = {}) ⇒ Object

Raises:

  • (NotImplementedError)


47
48
49
# File 'lib/bluepine/attributes/visitor.rb', line 47

def visit_schema(attribute, options = {})
  raise NotImplementedError
end