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
index page template is in doc helpers, which isn’t using app/ dir.
- .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
model page template is in doc helpers, which isn’t using app/ dir.
- #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.
53 54 55 56 57 58 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 53 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.
51 52 53 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 51 def model @model end |
Class Method Details
.index_page_template ⇒ Object
index page template is in doc helpers, which isn’t using app/ dir
46 47 48 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 46 def index_page_template # index page template is in doc helpers, which isn't using app/ dir @index_page_template ||= "#{Origen.root!}/templates/model_index.md.erb" 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
64 65 66 67 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 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 64 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
155 156 157 158 159 160 161 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 155 def heading if :target_as_id @id.upcase else model.class.to_s end end |
#id ⇒ Object
147 148 149 150 151 152 153 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 147 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
model page template is in doc helpers, which isn’t using app/ dir
167 168 169 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 167 def model_page_template # model page template is in doc helpers, which isn't using app/ dir @model_page_template ||= "#{Origen.root!}/templates/model_page.md.erb" end |
#output_path ⇒ Object
163 164 165 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 163 def output_path "models/#{id}" end |
#run ⇒ Object
60 61 62 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 60 def run create_page(@model, top: true, breadcrumbs: [['Top', output_path]], path: output_path, origen_path: '') end |
#search_id ⇒ Object
143 144 145 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 143 def search_id "model_#{id}" end |
#temporary_file ⇒ Object
Returns a Pathname to a uniquely named temporary file
138 139 140 141 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 138 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
103 104 105 106 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 |
# File 'lib/origen_doc_helpers/model_page_generator.rb', line 103 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 |