class ScaffoldParser::Scaffolders::XSD::Parser::Stack

Public Class Methods

new() click to toggle source
# File lib/scaffold_parser/scaffolders/xsd/parser/stack.rb, line 8
def initialize
  @stack = []
end

Public Instance Methods

clear() click to toggle source
# File lib/scaffold_parser/scaffolders/xsd/parser/stack.rb, line 39
def clear
  @stack.clear
end
push(value) click to toggle source
# File lib/scaffold_parser/scaffolders/xsd/parser/stack.rb, line 12
def push(value)
  similar_classes = @stack.select { |klass| klass.name.start_with? value.name }

  if similar_classes.any?
    same_structure_class = similar_classes.find do |kl|
      kl.namespace == value.namespace &&
        kl.methods == value.methods &&
        kl.inherit_from == value.inherit_from
    end

    if same_structure_class
      same_structure_class
    else
      name_base = value.name
      while @stack.find { |klass| klass.name == value.name }
        counter ||= 1
        value.name = "#{name_base}#{counter += 1}"
      end
      @stack.push value
      value
    end
  else
    @stack.push value
    value
  end
end
to_a() click to toggle source
# File lib/scaffold_parser/scaffolders/xsd/parser/stack.rb, line 43
def to_a
  @stack
end