Class: OrigenDocHelpers::GuideIndex
- Inherits:
- 
      Object
      
        - Object
- OrigenDocHelpers::GuideIndex
 
- Defined in:
- lib/origen_doc_helpers/guide_index.rb
Overview
Provides an API to programatically construct an index hash as used by the Searchable Documents helper - origen-sdk.org/doc_helpers/helpers/searchable/intro/#The_Document_Index
Instance Method Summary collapse
- 
  
    
      #force_pending  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Force any pending sections and pages into the index, these will be added at the end since their :after/:before reference is not valid. 
- 
  
    
      #initialize  ⇒ GuideIndex 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    A new instance of GuideIndex. 
- #page(id, options = {}) ⇒ Object
- #section(id, options = {}) {|_self| ... } ⇒ Object
- #to_h ⇒ Object
Constructor Details
#initialize ⇒ GuideIndex
Returns a new instance of GuideIndex.
| 6 7 8 9 10 11 | # File 'lib/origen_doc_helpers/guide_index.rb', line 6 def initialize @index = {} @section_keys = {} @pending_sections = [] @pending_pages = [] end | 
Instance Method Details
#force_pending ⇒ Object
Force any pending sections and pages into the index, these will be added at the end since their :after/:before reference is not valid
| 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | # File 'lib/origen_doc_helpers/guide_index.rb', line 15 def force_pending @force_pending = true @pending_sections.each do |id, opts, blk| section(id, opts, &blk) end @pending_pages.each do |section_id, id, opts| @current_section_id = section_id @current_section = @index[section_key] page(id, opts) end @force_pending = nil self end | 
#page(id, options = {}) ⇒ Object
| 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | # File 'lib/origen_doc_helpers/guide_index.rb', line 82 def page(id, = {}) unless @current_section fail 'page can only be called from within a section block!' end @current_topic_id = id value = [:heading] || id value = value.to_s if value page_pending = false if [:after] && !@force_pending if has_key?(:@current_section, topic_key([:after])) insert_after(:@current_section, topic_key, topic_key([:after]), value) else @pending_pages << [@current_section_id, id, .dup] unless @no_page_pending page_pending = true end elsif [:before] && !@force_pending if has_key?(:@current_section, topic_key([:before])) insert_before(:@current_section, topic_key, topic_key([:before]), value) else @pending_pages << [@current_section_id, id, .dup] unless @no_page_pending page_pending = true end else @current_section[topic_key] = value end # Update the parent reference, required if before or after was used to create a new # @current_section hash @index[section_key] = @current_section unless page_pending # See if any pending pages can now be inserted unless @no_page_pending || @force_pending @pending_pages.each do |section_id, id, opts| @no_page_pending = true page(id, opts) @no_page_pending = false end end self end | 
#section(id, options = {}) {|_self| ... } ⇒ Object
| 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | # File 'lib/origen_doc_helpers/guide_index.rb', line 30 def section(id, = {}, &block) @current_section_id = id if [:heading] # This is to handle the corner case where an id reference was originally supplied # without the heading, then a later reference added the heading if @section_keys[id] if @section_keys[id] != [:heading] change_key(:@index, @section_keys[id], [:heading]) @section_keys[id] = [:heading] end else @section_keys[id] = [:heading] end else @section_keys[id] ||= id end @section_keys[id] ||= @section_keys[id].to_s if @section_keys[id] section_pending = false unless @index[section_key] if [:after] && !@force_pending if has_key?(:@index, section_key([:after])) insert_after(:@index, section_key, section_key([:after]), {}) else @pending_sections << [id, .dup, block] unless @no_pending section_pending = true end elsif [:before] && !@force_pending if has_key?(:@index, section_key([:before])) insert_before(:@index, section_key, section_key([:before]), {}) else @pending_sections << [id, .dup, block] unless @no_pending section_pending = true end else @index[section_key] = {} end end @current_section = @index[section_key] yield self unless section_pending @current_section = nil # See if any pending sections can now be inserted unless @no_pending || @force_pending @pending_sections.each do |id, opts, blk| @no_pending = true section(id, opts, &blk) @no_pending = false end end self end | 
#to_h ⇒ Object
| 123 124 125 | # File 'lib/origen_doc_helpers/guide_index.rb', line 123 def to_h @index end |