Class: OrigenDocHelpers::ModelPageGenerator
- Inherits:
-
Object
- Object
- OrigenDocHelpers::ModelPageGenerator
- Defined in:
- lib/origen_doc_helpers/model_page_generator.rb
Class Attribute Summary collapse
-
.layout ⇒ Object
Returns the value of attribute layout.
-
.layout_options ⇒ Object
Returns the value of attribute layout_options.
-
.pages ⇒ Object
readonly
Returns the value of attribute pages.
-
.target_as_id ⇒ Object
Returns the value of attribute target_as_id.
Instance Attribute Summary collapse
-
#model ⇒ Object
readonly
Returns the value of attribute model.
Class Method Summary collapse
- .index_page_template ⇒ Object
- .page(options) ⇒ Object
- .run(options) {|_self| ... } ⇒ Object
- .write_index ⇒ Object
Instance Method Summary collapse
- #create_page(model, options = {}) ⇒ Object
- #heading ⇒ Object
- #id ⇒ Object
-
#initialize(options) ⇒ ModelPageGenerator
constructor
A new instance of ModelPageGenerator.
- #model_page_template ⇒ Object
- #output_path ⇒ Object
- #run ⇒ Object
- #search_id ⇒ Object
-
#temporary_file ⇒ Object
Returns a Pathname to a uniquely named temporary file.
- #write_out(file, content) ⇒ Object
Constructor Details
#initialize(options) ⇒ ModelPageGenerator
Returns a new instance of ModelPageGenerator.
57 58 59 60 61 62 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 57 def initialize() = { search_box: true }.merge() @options = @model = [:model] @search_box = [:search_box] end |
Class Attribute Details
.layout ⇒ Object
Returns the value of attribute layout.
5 6 7 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 5 def layout @layout end |
.layout_options ⇒ Object
Returns the value of attribute layout_options.
4 5 6 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 4 def @layout_options end |
.pages ⇒ Object (readonly)
Returns the value of attribute pages.
6 7 8 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 6 def pages @pages end |
.target_as_id ⇒ Object
Returns the value of attribute target_as_id.
7 8 9 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 7 def target_as_id @target_as_id end |
Instance Attribute Details
#model ⇒ Object (readonly)
Returns the value of attribute model.
55 56 57 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 55 def model @model end |
Class Method Details
.index_page_template ⇒ Object
46 47 48 49 50 51 52 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 46 def index_page_template if File.exist?("#{Origen.root}/app/") @index_page_template ||= "#{Origen.root!}/app/templates/model_index.md.erb" else @index_page_template ||= "#{Origen.root!}/templates/model_index.md.erb" end end |
.page(options) ⇒ Object
24 25 26 27 28 29 30 31 32 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 24 def page() unless [:model] fail 'The following options are required: :model' end p = new() pages[[:group]] ||= [] pages[[:group]] << p p.run end |
.run(options) {|_self| ... } ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 9 def run() @pages = {} unless [:layout] fail 'You must pass a :layout option providing an absolute path to the layout file to be used' end unless File.exist?([:layout].to_s) fail "This layout file does not exist: #{[:layout]}" end self.layout = .delete(:layout) self. = yield self write_index unless @pages.size == 0 @pages = nil end |
.write_index ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 34 def write_index f = "#{Origen.root}/web/content/models.md" Origen.log.info "Building models index page: #{f}" t = Origen.compile index_page_template, layout: layout, layout_options: , no_group_pages: pages.delete(nil), pages: pages File.write(f, t) end |
Instance Method Details
#create_page(model, options = {}) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 68 def create_page(model, = {}) base = "#{Origen.root}/web/content/#{[:path]}" output_file = base + '.md' json_file = base + '_data.json' Origen.log.info "Building model page: #{output_file}" t = Origen.compile model_page_template, layout: self.class.layout, layout_options: self.class., heading: heading, search_id: search_id, model: model, breadcrumbs: [:breadcrumbs], path: [:path], origen_path: [:origen_path], search_box: @search_box write_out(output_file, t) if @search_box Origen.log.info "Building JSON page: #{json_file}" File.open(json_file, 'w') do |f| f.puts model.to_json end end model.sub_blocks.each do |name, block| path = [:path] + "/#{name}" if [:origen_path].empty? origen_path = name.to_s else origen_path = [:origen_path] + ".#{name}" end create_page block, breadcrumbs: [:breadcrumbs] + [[name, path]], path: path, origen_path: origen_path end end |
#heading ⇒ Object
159 160 161 162 163 164 165 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 159 def heading if :target_as_id @id.upcase else model.class.to_s end end |
#id ⇒ Object
151 152 153 154 155 156 157 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 151 def id if :target_as_id @id ||= "#{Origen.target.name.downcase}" # _#{model.class.to_s.symbolize.to_s.gsub('::', '_')}" else @id ||= model.class.to_s.symbolize.to_s.gsub('::', '_') end end |
#model_page_template ⇒ Object
171 172 173 174 175 176 177 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 171 def model_page_template if File.exist?("#{Origen.root}/app/") @model_page_template ||= "#{Origen.root!}/app/templates/model_page.md.erb" else @model_page_template ||= "#{Origen.root!}/templates/model_page.md.erb" end end |
#output_path ⇒ Object
167 168 169 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 167 def output_path "models/#{id}" end |
#run ⇒ Object
64 65 66 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 64 def run create_page(@model, top: true, breadcrumbs: [['Top', output_path]], path: output_path, origen_path: '') end |
#search_id ⇒ Object
147 148 149 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 147 def search_id "model_#{id}" end |
#temporary_file ⇒ Object
Returns a Pathname to a uniquely named temporary file
142 143 144 145 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 142 def temporary_file # Ensure this is unique so that is doesn't clash with parallel compile processes Pathname.new "#{Origen.root}/tmp/model_#{id}_compiler_#{Process.pid}_#{Time.now.to_f}" end |
#write_out(file, content) ⇒ Object
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 107 def write_out(file, content) d = Pathname.new(file).dirname.to_s FileUtils.mkdir_p(d) unless File.exist?(d) yaml = '' # Remove any frontmatter inherited from the caller's layout, this is being done via disk for # large files due to previous issues with sub'ing on large files that contain many registers File.open(file, 'w') do |f| frontmatter_done = false frontmatter_open = false content.each_line do |line| if frontmatter_done f.puts line elsif frontmatter_open if line =~ /^\s*---\s*$/ frontmatter_done = true else yaml += line end else if line =~ /^\s*---\s*$/ frontmatter_open = true elsif !line.strip.empty? frontmatter_done = true end end end end # Write out an attribute file containing the search ID to pass it to nanoc yaml += "search_id: model_#{id}" File.write(file.sub(/\.[^\.]*$/, '.yaml'), yaml) end |