class Troy::Site

Attributes

options[RW]
root[RW]

Public Class Methods

new(root, options) click to toggle source
# File lib/troy/site.rb, line 7
def initialize(root, options)
  @root = Pathname.new(root).realpath
  @options = options

  load_configuration
  load_extensions
  set_locale
end

Public Instance Methods

config() click to toggle source

A shortcut to the configuration.

# File lib/troy/site.rb, line 125
def config
  Troy.configuration
end
export() click to toggle source
# File lib/troy/site.rb, line 32
def export
  remove_public_dir
  export_assets
  export_files
  export_pages
end
export_asset(sprockets, asset_name) click to toggle source
# File lib/troy/site.rb, line 97
def export_asset(sprockets, asset_name)
  asset = sprockets[asset_name]
  output_file = asset.filename.to_s
                     .gsub(root.join("assets").to_s, "")
                     .gsub(%r{^/}, "")
                     .gsub(/\.scss$/, ".css")
                     .gsub(/\.coffee$/, ".js")

  asset.write_to root.join("public/#{output_file}")
end
export_assets() click to toggle source
# File lib/troy/site.rb, line 77
def export_assets
  sprockets = Sprockets::Environment.new
  sprockets.append_path root.join("assets/javascripts")
  sprockets.append_path root.join("assets/stylesheets")

  if config.assets.compress_css
    sprockets.css_compressor = Sprockets::SassCompressor
  end

  if config.assets.compress_js
    sprockets.js_compressor = Uglifier.new(uglifier_options)
  end

  config.assets.precompile.each_slice(options[:concurrency]) do |slice|
    slice.map do |asset_name|
      Thread.new { export_asset(sprockets, asset_name) }
    end.each(&:join)
  end
end
export_file(assets, entry) click to toggle source
# File lib/troy/site.rb, line 49
def export_file(assets, entry)
  basename = entry.to_s
  return if [".", "..", "javascripts", "stylesheets"].include?(basename)

  FileUtils.rm_rf root.join("public/#{basename}")
  FileUtils.cp_r assets.join(entry), root.join("public/#{basename}")
end
export_files() click to toggle source
# File lib/troy/site.rb, line 39
def export_files
  assets = root.join("assets")

  assets.entries.each_slice(options[:concurrency]) do |slice|
    slice.map do |entry|
      Thread.new { export_file(assets, entry) }
    end.each(&:join)
  end
end
export_pages(file = nil) click to toggle source
# File lib/troy/site.rb, line 61
def export_pages(file = nil)
  file = File.expand_path(file) if file

  pages
    .select {|page| file.nil? || page.path == file }
    .each_slice(options[:concurrency]) do |slice|
      threads = slice.map do |page|
        Thread.new do
          page.save
        end
      end

      threads.each(&:join)
    end
end
load_configuration() click to toggle source
# File lib/troy/site.rb, line 28
def load_configuration
  load root.join("config/troy.rb")
end
load_extensions() click to toggle source
# File lib/troy/site.rb, line 16
def load_extensions
  Dir[root.join("config/**/*helpers.rb")].each do |file|
    require file
  end
end
pages() click to toggle source

Return all pages wrapped in Troy::Page class.

# File lib/troy/site.rb, line 120
def pages
  @pages ||= source.map {|path| Page.new(self, path) }
end
remove_public_dir() click to toggle source
# File lib/troy/site.rb, line 57
def remove_public_dir
  FileUtils.rm_rf root.join("public")
end
set_locale() click to toggle source
# File lib/troy/site.rb, line 22
def set_locale
  I18n.load_path += config.i18n.load_path
  I18n.default_locale = config.i18n.locale
  I18n.locale = config.i18n.locale
end
source() click to toggle source
# File lib/troy/site.rb, line 114
def source
  Dir[root.join("source/**/*.{html,erb,md,builder,xml,txt}").to_s]
end
uglifier_options() click to toggle source
# File lib/troy/site.rb, line 108
def uglifier_options
  options = Uglifier::DEFAULTS.dup
  options[:output][:comments] = :none
  options
end