class Glimmer::Specification::Element

Attributes

args[R]
block[R]
keyword[R]
parent[R]
title[RW]

Public Class Methods

element_class(keyword) click to toggle source
# File lib/glimmer/specification/element.rb, line 30
def element_class(keyword)
  const_get(element_class_name(keyword))
end
element_class_name(keyword) click to toggle source
# File lib/glimmer/specification/element.rb, line 34
def element_class_name(keyword)
  keyword.to_s.camelcase(:upper).to_sym
end
element_exist?(keyword) click to toggle source
# File lib/glimmer/specification/element.rb, line 26
def element_exist?(keyword)
  constants.include?(element_class_name(keyword)) && element_class(keyword).respond_to?(:new)
end
new(parent, keyword, *args, &block) click to toggle source
# File lib/glimmer/specification/element.rb, line 42
def initialize(parent, keyword, *args, &block)
  @parent = parent
  @keyword = keyword
  @args = args
  @title = @args.first
  @block = block
  @children = children
  @parent&.post_initialize_child(self)
  post_add_content if @block.nil?
end

Public Instance Methods

ancestors() click to toggle source

ancestors including self ordered from closest to farthest

# File lib/glimmer/specification/element.rb, line 77
def ancestors
  if @ancestors.nil?
    @ancestors = [self]
    current = self
    while current.parent
      current = current.parent
      @ancestors << current
    end
  end
  @ancestors
end
children() click to toggle source
# File lib/glimmer/specification/element.rb, line 53
def children
  @children ||= []
end
content(&block) click to toggle source

Enables re-opening content and adding new shapes

# File lib/glimmer/specification/element.rb, line 99
def content(&block)
  Glimmer::DSL::Engine.add_content(self, Glimmer::DSL::Specification::ElementExpression.new, @keyword, &block)
end
content_added?() click to toggle source
# File lib/glimmer/specification/element.rb, line 61
def content_added?
  @content_added
end
executable?() click to toggle source

subclasses may override (e.g. Scenario)

# File lib/glimmer/specification/element.rb, line 66
def executable?
  !!@executable
end
post_add_content() click to toggle source
# File lib/glimmer/specification/element.rb, line 93
def post_add_content
  # No Op (subclasses may override to do something at the closing of the element)
  @content_added = true
end
post_initialize_child(child) click to toggle source
# File lib/glimmer/specification/element.rb, line 89
def post_initialize_child(child)
  children << child
end
run() click to toggle source

runs children by default. subclasses may override.

# File lib/glimmer/specification/element.rb, line 104
def run
  children.each(&:run)
  @verified = children.all?(&:verified?)
  if @verified
    puts Colours::GREEN + "VERIFIED: #{to_s}"
  else
    puts Colours::RED + "NOT VERIFIED: #{to_s}"
  end
end
scenarios() click to toggle source
# File lib/glimmer/specification/element.rb, line 70
def scenarios
  children.map do |child|
    child.is_a?(Scenario) ? child : child.scenarios
  end.flatten
end
to_s() click to toggle source
# File lib/glimmer/specification/element.rb, line 114
def to_s
  ancestors.reverse.map(&:title).join(' - ')
end
verified?() click to toggle source
# File lib/glimmer/specification/element.rb, line 57
def verified?
  @verified
end