class Lookbook::Page

def all

def all
  pages = Array(page_paths).map do |dir|
    Dir["#{dir}/**/*.html.*", "#{dir}/**/*.md.*"].sort.map do |page|
      Lookbook::Page.new(page, dir)
    end
  end
  sorted_pages = pages.flatten.uniq { |p| p.path }.sort_by { |page| [page.position, page.label] }
  PageCollection.new(sorted_pages)
end

def content

def content
  @content ||= strip_frontmatter(file_contents)
end

def exists?(path)

def exists?(path)
  !!find(path)
end

def file_contents

def file_contents
  File.read(full_path)
end

def find(path)

def find(path)
  all.find { |p| p.lookup_path == path }
end

def footer?

def footer?
  options[:footer] == true
end

def full_path

def full_path
  Rails.root.join(@pathname.to_s)
end

def get(key)

def get(key)
  options[key]
end

def header?

def header?
  options[:header] == true
end

def hidden?

def hidden?
  options[:hidden] == true
end

def hierarchy_depth

def hierarchy_depth
  path.split("/").size
end

def initialize(path, base_path)

def initialize(path, base_path)
  @pathname = Pathname.new path
  @base_path = base_path
end

def lookup_path

def lookup_path
  @lookup_path ||= to_lookup_path(path)
end

def markdown?

def markdown?
  options[:markdown] == true
end

def markdown_file?

def markdown_file?
  @pathname.basename(@pathname.extname).to_s.end_with?(".md")
end

def matchers

def matchers
  normalize_matchers(label)
end

def method_missing(method_name, *args, &block)

def method_missing(method_name, *args, &block)
  if args.none? && !block
    options[method_name]
  else
    super
  end
end

def name

def name
  remove_position_prefix(path_name)
end

def options

def options
  return @options if @options
  frontmatter = (get_frontmatter(file_contents) || {}).deep_symbolize_keys
  options = Lookbook.config.page_options.deep_merge(frontmatter).with_indifferent_access
  options[:id] = options[:id] ? generate_id(options[:id]) : generate_id(lookup_path)
  options[:label] ||= name.titleize
  options[:title] ||= options[:label]
  options[:hidden] ||= false
  options[:landing] ||= false
  options[:position] = options[:position] ? options[:position].to_i : get_position_prefix(path_name)
  options[:markdown] ||= markdown_file?
  options[:header] = true unless options.key? :header
  options[:footer] = true unless options.key? :footer
  @options ||= options
end

def page_paths

def page_paths
  Lookbook.config.page_paths.filter { |dir| Dir.exist? dir }
end

def parent_collections_names

def parent_collections_names
  File.dirname(path).split("/")
end

def path

def path
  rel_path = @pathname.relative_path_from(@base_path)
  (rel_path.dirname.to_s == "." ? name : "#{rel_path.dirname}/#{name}")
end

def path_name

def path_name
  @pathname.basename(@pathname.extname).to_s.gsub(/\.(html|md)$/, "")
end

def respond_to_missing?(method_name, include_private = false)

def respond_to_missing?(method_name, include_private = false)
  FRONTMATTER_FIELDS.include? method_name
end

def type

def type
  :page
end