module KirguduBase class DynamicPages::PageElementsBlockBuilder < ::KirguduBase::DynamicPages::Builder def initialize(&block) self.builder_options[:forms] = {} self.builder_options[:lists] = {} self.builder_options[:entries] = {} self.builder_options[:tabs] = {} self.builder_options[:elements] = [] super(&block) end def form(name, &block) raise "Cannot create empty Form" unless block_given? element = ::KirguduBase::DynamicPages::FormBuilder.new(name, &block).to_element raise "Duplicate Form with name: #{element.name}" if self.builder_options[:forms][element.name] self.builder_options[:forms][element.name] = element self.builder_options[:elements] << element end def list(name, &block) #raise "Error from List. List Name: #{name}" raise "Cannot create empty List" unless block_given? element = ::KirguduBase::DynamicPages::ListBuilder.new(name, &block).to_element raise "Duplicate List with name: #{element.name}" if self.builder_options[:lists][element.name] self.builder_options[:lists][element.name] = element self.builder_options[:elements] << element end def tab(name, &block) #raise "Error from List. List Name: #{name}" element = ::KirguduBase::DynamicPages::PageTabBuilder.new(name, &block).to_element raise "Duplicate Tab with name: #{element.name}" if self.builder_options[:tabs][element.name] self.builder_options[:tabs][element.name] = element self.builder_options[:elements] << element end def group(name, &block) raise "Cannot create empty Group" unless block_given? element = ::KirguduBase::DynamicPages::GroupBuilder.new(name, ::KirguduBase::DynamicPages::Enums::ELEMENTS_FOR_PAGE, &block).to_element self.builder_options[:elements].each do |elm| if elm.is_a?(::KirguduBase::DynamicPages::Group) if elm.name == name raise "Duplicate Group with name: #{element.name}" if self.builder_options[:groups][element.name] end end end self.builder_options[:elements] << element end def entry(name, &block) #raise "Error from List. List Name: #{name}" raise "Cannot create empty Entry" unless block_given? element = ::KirguduBase::DynamicPages::EntryBuilder.new(name, &block).to_element raise "Duplicate Entry with name: #{element.name}" if self.builder_options[:entries][element.name] self.builder_options[:entries][element.name] = element self.builder_options[:elements] << element end def to_elements @elements end end end