lib/octopress-docs.rb in octopress-docs-0.0.4 vs lib/octopress-docs.rb in octopress-docs-0.0.5
- old
+ new
@@ -1,12 +1,14 @@
require "octopress"
require "jekyll"
require "octopress-escape-code"
require "octopress-hooks"
+require "find"
require "octopress-docs/version"
require "octopress-docs/command"
+require "octopress-docs/page"
require "octopress-docs/doc"
require "octopress-docs/tag"
require "octopress-docs/hooks"
module Octopress
@@ -25,18 +27,19 @@
def self.pages
@docs.values.flatten.map {|d| d.page }
end
def self.pages_info
- plugin_docs = []
- @docs.keys.each { |slug|
- plugin_docs << {
- "name" => @docs[slug].first.plugin_name,
- "docs" => plugin_docs(@docs[slug])
+ docs = @docs.clone
+ docs.each { |slug, pages|
+ docs[slug] = {
+ "name" => pages.first.plugin_name,
+ "docs" => plugin_docs(pages)
}
}
- { 'plugin_docs' => plugin_docs }
+
+ { 'plugin_docs' => docs }
end
def self.plugin_docs(pages)
pages.clone.map { |d|
page = d.page
@@ -51,40 +54,71 @@
# Sort by depth of url
i['url'].split('/').size
}
end
- def self.add_plugin_docs(plugin, dir, files)
- pages = []
- options = plugin_options(plugin).merge({
- dir: File.join(plugin.assets_path, dir),
- })
-
- files.each do |doc|
+ def self.add_plugin_docs(plugin)
+ plugin_doc_pages = []
+ options = plugin_options(plugin)
+ find_doc_pages(options).each do |doc|
unless doc =~ /^_/
- opts = options.merge({file: doc})
- pages << add_doc_page(opts)
+ opts = options.merge({file: doc, dir: options[:docs_path]})
+ plugin_doc_pages << add_doc_page(opts)
end
end
- pages
+ # If there is no docs index page, set the reame as the index page
+ has_index = !plugin_doc_pages.select {|d| d.file =~ /^index/ }.empty?
+ plugin_doc_pages << add_root_plugin_doc(plugin, 'readme', index: !has_index)
+
+ plugin_doc_pages << add_root_plugin_doc(plugin, 'changelog')
+
+ plugin_doc_pages
end
def self.plugin_options(plugin)
{
name: plugin.name,
slug: plugin.slug,
type: plugin.type,
- base_url: plugin.docs_base_url,
- dir: plugin.path
+ base_url: plugin.docs_url,
+ dir: plugin.path,
+ docs_path: File.join(plugin.assets_path, 'docs'),
+ docs: %w{readme changelog}
}
end
+ def self.default_options(options)
+ options[:type] ||= 'plugin'
+ options[:slug] = slug(options)
+ options[:base_url] = base_url(options)
+ options[:dir] ||= '.'
+ end
+
+ def self.slug(options)
+ slug = options[:slug] || options[:name]
+ options[:type] == 'theme' ? 'theme' : Jekyll::Utils.slugify(slug)
+ end
+
+ def self.base_url(options)
+ options[:base_url] || if options[:type] == 'theme'
+ File.join('docs', 'theme')
+ else
+ File.join('docs', 'plugins', options[:slug])
+ end
+ end
+
def self.add(options)
+ options[:docs] ||= %w{readme changelog}
+ options[:docs_path] ||= File.join(options[:dir], 'assets', 'docs')
+ docs = []
+ docs.concat add_root_docs(options)
+ docs.concat
+ end
+ def self.add_root_docs(options)
root_docs = []
- options[:docs] ||= %w{readme changelog}
options[:docs].each do |doc|
if doc =~ /readme/
root_docs << add_root_doc(doc, options.merge({index: true}))
else
root_docs << add_root_doc(doc, options)
@@ -100,20 +134,37 @@
end
end
def self.add_root_plugin_doc(plugin, filename, options={})
options = plugin_options(plugin).merge(options)
+
+ require 'pry-byebug'; binding.pry
add_root_doc(filename, options)
end
def self.add_doc_page(options)
page = Docs::Doc.new(options)
@docs[options[:slug]] ||= []
@docs[options[:slug]] << page
page
end
+ private
+
+ def self.find_doc_pages(options)
+ full_dir = options[:docs_path]
+ glob_assets(full_dir).map do |file|
+ file.sub(full_dir+'/', '')
+ end
+ end
+
+ def self.glob_assets(dir)
+ return [] unless Dir.exist? dir
+ Find.find(dir).to_a.reject {|f| File.directory? f }
+ end
+
def self.select_first(dir, match)
Dir.new(dir).select { |f| f =~/#{match}/i}.first
end
+
end
end