class Enolib::ElementBase

Public Class Methods

new(context, instruction, parent = nil) click to toggle source
# File lib/enolib/elements/element_base.rb, line 5
def initialize(context, instruction, parent = nil)
  @context = context
  @instruction = instruction
  @parent = parent
end

Public Instance Methods

comment_error(message = nil) { |comment| ... } click to toggle source
# File lib/enolib/elements/element_base.rb, line 11
def comment_error(message = nil)
  if block_given?
    message = yield(@context.comment(@instruction))
  elsif message.is_a?(Proc)
    message = message.call(@context.comment(@instruction))
  end

  unless message
    raise ArgumentError, 'A message or message function must be provided'
  end

  Errors::Validation.comment_error(@context, message, @instruction)
end
error(message = nil) { |self| ... } click to toggle source
# File lib/enolib/elements/element_base.rb, line 25
def error(message = nil)
  if block_given?
    message = yield(self)  # Revisit self in this context - problematic
  elsif message.is_a?(Proc)
    message = message.call(self)  # Revisit self in this context - problematic
  end

  unless message
    raise ArgumentError, 'A message or message function must be provided'
  end

  Errors::Validation.element_error(@context, message, @instruction)
end
key(loader = nil) click to toggle source
# File lib/enolib/elements/element_base.rb, line 39
def key(loader = nil)
  loader = Proc.new if block_given?

  @touched = true

  unless loader
    raise ArgumentError, 'A loader function must be provided'
  end

  begin
    loader.call(_key)
  rescue => message
    raise Errors::Validation.key_error(@context, message, @instruction)
  end
end
key_error(message = nil) { |_key| ... } click to toggle source

TODO: All implementations - this could be called on the document (?), via both element and section, most likely triggering erratic behavior because the error->selection chain does not handle the missing key range? (Also being able to call it and doing so does not make sense in the first place)

# File lib/enolib/elements/element_base.rb, line 59
def key_error(message = nil)
  if block_given?
    message = yield(_key)
  elsif message.is_a?(Proc)
    message = message.call(_key)
  end

  unless message
    raise ArgumentError, 'A message or message function must be provided'
  end

  Errors::Validation.key_error(@context, message, @instruction)
end
optional_comment(loader = nil) click to toggle source
# File lib/enolib/elements/element_base.rb, line 73
def optional_comment(loader = nil)
  loader = Proc.new if block_given?

  unless loader
    raise ArgumentError, 'A loader function must be provided'
  end

  _comment(loader, required: false)
end
optional_string_comment() click to toggle source
# File lib/enolib/elements/element_base.rb, line 83
def optional_string_comment
  _comment(required: false)
end
raw() click to toggle source
# File lib/enolib/elements/element_base.rb, line 87
def raw
  @context.raw(@instruction)
end
required_comment(loader = nil) click to toggle source
# File lib/enolib/elements/element_base.rb, line 91
def required_comment(loader = nil)
  loader = Proc.new if block_given?

  unless loader
    raise ArgumentError, 'A loader function must be provided'
  end

  _comment(loader, required: true)
end
required_string_comment() click to toggle source
# File lib/enolib/elements/element_base.rb, line 101
def required_string_comment
  _comment(required: true)
end
string_key() click to toggle source
# File lib/enolib/elements/element_base.rb, line 105
def string_key
  @touched = true

  _key
end
touch() click to toggle source
# File lib/enolib/elements/element_base.rb, line 111
def touch
  @touched = true
end

Private Instance Methods

_comment(loader = nil, required:) click to toggle source
# File lib/enolib/elements/element_base.rb, line 117
def _comment(loader = nil, required:)
  @touched = true

  comment = @context.comment(@instruction)

  if comment
    return comment unless loader

    begin
      loader.call(comment)
    rescue => message
      raise Errors::Validation.comment_error(@context, message, @instruction)
    end
  else
    return nil unless required

    raise Errors::Validation.missing_comment(@context, @instruction)
  end
end
_key() click to toggle source
# File lib/enolib/elements/element_base.rb, line 137
def _key
  return nil if @instruction[:type] == :document
  return @instruction[:parent][:key] if @instruction[:type] == :list_item

  @instruction[:key]
end