class GreatPretender::MockupLocator

Attributes

view_paths[R]

Public Class Methods

new(view_paths) click to toggle source
# File lib/great_pretender/mockup_locator.rb, line 22
def initialize(view_paths)
  @view_paths = view_paths.map do |view_path|
    if view_path.is_a?(Pathname)
      view_path
    elsif view_path.respond_to?(:to_path)
      Pathname.new(view_path.to_path)
    else
      Pathname.new(view_path.to_s)
    end
  end
end

Public Instance Methods

find(slug) click to toggle source
# File lib/great_pretender/mockup_locator.rb, line 9
def find(slug)
  mockups.find {|mockup| mockup.slug == slug}
end
mockups() click to toggle source
# File lib/great_pretender/mockup_locator.rb, line 13
def mockups
  return @mockups if defined? @mockups
  mockups = []
  @view_paths.each do |view_path|
    mockups.push(*mockups_for(view_path))
  end
  @mockups = mockups
end

Private Instance Methods

extensions() click to toggle source
# File lib/great_pretender/mockup_locator.rb, line 36
def extensions
  return @extensions if defined? @extensions
  extensions = ActionView::Template.template_handler_extensions
  extensions = extensions.map(&:to_s).join(',')
  @extensions = "{#{extensions}}"
end
layout_for(slug) click to toggle source
# File lib/great_pretender/mockup_locator.rb, line 43
def layout_for(slug)
  if File.basename(slug) =~ /^_/
    # Partials (named like "_template_name") don't render inside a layout.
    # This way they can be used w/Ajax requests, etc.
    nil
  else
    # Mockups can have a layout by being in a folder named after that
    # layout; for example, "app/views/mockups/admin/index" will look for an
    # "admin" template
    layout = slug.split('/')
    layout.pop
    layout = layout.join('/')
    if layout && layout.length > 0
      @view_paths.each do |view_path|
        layout_path = view_path.join('layouts')
        layout_path = layout_path.join("#{layout}.*#{extensions}")
        return layout if Dir[layout_path].any?
      end
    end
    GreatPretender.config.default_layout
  end
end
mockup_for(view_path, root, path) click to toggle source
# File lib/great_pretender/mockup_locator.rb, line 66
def mockup_for(view_path, root, path)
  mockup = Mockup.new(path)
  mockup.path = path
  mockup.slug = slug_for(root, path)
  mockup.layout = layout_for(mockup.slug)
  mockup.template = template_for(view_path, root, mockup.slug)
  mockup
end
mockups_for(view_path) click to toggle source
# File lib/great_pretender/mockup_locator.rb, line 75
def mockups_for(view_path)
  root = view_path.join(GreatPretender.config.view_path)
  templates = Dir[root.join("**/*.#{extensions}")]
  templates.map do |path|
    mockup_for(view_path, root, path)
  end
end
slug_for(root, path) click to toggle source
# File lib/great_pretender/mockup_locator.rb, line 83
def slug_for(root, path)
  slug = path.to_s.gsub(%r{^#{root.to_s}/}, '')
  while (ext = File.extname(slug)).length > 0
    slug = slug.gsub(/#{ext}$/, '')
  end
  slug
end
template_for(view_path, root, slug) click to toggle source
# File lib/great_pretender/mockup_locator.rb, line 91
def template_for(view_path, root, slug)
  template_root = root.relative_path_from(view_path)
  template_root.join(slug).to_s
end