class Amber::SiteConfiguration

Attributes

children[RW]

an array of SiteConfigurations that are attached as sub-sites to this one.

config_dir[RW]
config_file[RW]
default_locale[RW]
dest_dir[RW]
layouts_dir[RW]
locales[RW]
locales_dir[RW]
menu[RW]
menu_file[RW]
pages_dir[RW]
pagination_size[RW]
path[RW]
path_prefix[RW]
root_dir[RW]
short_paths[RW]
timestamp[RW]
title[RW]

Public Class Methods

load(site, root_dir, options={}) click to toggle source

CLASS METHODS

# File lib/amber/site_configuration.rb, line 46
def self.load(site, root_dir, options={})
  SiteConfiguration.new(site, root_dir, options)
end
new(site, root_dir, options={}) click to toggle source

accepts a file_path to a configuration file.

# File lib/amber/site_configuration.rb, line 57
def initialize(site, root_dir, options={})
  @children = []
  @path_prefix = nil
  @site = site
  @root_dir = File.expand_path(find_in_directory_tree('amber', 'config.rb', root_dir))
  if @root_dir == '/'
    puts "Could not find amber/config.rb in the directory tree. Run `amber` from inside an amber website directory"
    exit(1)
  end
  @pages_dir   = File.join(@root_dir, 'pages')
  @dest_dir    = File.join(@root_dir, 'public')
  @config_dir  = File.join(@root_dir, 'amber')
  @config_file = config_path('config.rb')
  @menu_file   = config_path('menu.txt')
  @locales_dir = config_path('locales')
  @layouts_dir = config_path('layouts')
  @title = "untitled"
  @pagination_size = 20

  @menu = Menu.new('root')
  @menu.load(@menu_file) if @menu_file

  self.eval
  @path_prefix = options[:path_prefix] if options[:path_prefix]
  self.cleanup

  reset_timestamp
  Render::Layout.load(@layouts_dir)
end

Public Instance Methods

cleanup() click to toggle source
# File lib/amber/site_configuration.rb, line 96
def cleanup
  @locale ||= I18n.default_locale
  I18n.default_locale = @locale
  @locales ||= [@locale]
  @locales.map! {|locale|
    if Amber::POSSIBLE_LANGUAGE_CODES.include?(locale.to_s)
      locale.to_sym
    else
      nil
    end
  }.compact
  if @path_prefix
    @path_prefix.gsub!(%r{^/|/$}, '')
    @path_prefix = nil if @path_prefix == ''
  end
end
config_path(file) click to toggle source
# File lib/amber/site_configuration.rb, line 121
def config_path(file)
  path = File.join(@config_dir, file)
  if File.exist?(path)
    path
  else
    nil
  end
end
eval() click to toggle source

def pages_changed?

self.changed? || @children.detect {|child| child.changed?}

end

# File lib/amber/site_configuration.rb, line 117
def eval
  self.instance_eval(File.read(@config_file), @config_file)
end
find_in_directory_tree(target_dir_name, target_file_name, directory_tree=nil) click to toggle source
# File lib/amber/site_configuration.rb, line 134
def find_in_directory_tree(target_dir_name, target_file_name, directory_tree=nil)
  search_dir = directory_tree || Dir.pwd
  while search_dir != "/"
    Dir.foreach(search_dir) do |f|
      if f == target_dir_name && File.exist?(File.join(search_dir, f,target_file_name))
        return search_dir
      end
    end
    search_dir = File.dirname(search_dir)
  end
  return search_dir
end
map(path_to_directory_source, options={}) click to toggle source

map('/path' => '../othersite')

# File lib/amber/site_configuration.rb, line 90
def map(path_to_directory_source, options={})
  path, root_dir = path_to_directory_source.to_a.first
  config = self.load(@site, root_dir, {:path_prefix => path})
  @site.add_config(config)
end
reset_timestamp() click to toggle source
# File lib/amber/site_configuration.rb, line 130
def reset_timestamp
  @timestamp = File.mtime(@pages_dir)
end