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