Class: Troy::Site

Inherits:
Object
  • Object
show all
Defined in:
lib/troy/site.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(root, options) ⇒ Site

Returns a new instance of Site.



7
8
9
10
11
12
13
14
# 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

Instance Attribute Details

#optionsObject

Returns the value of attribute options.



5
6
7
# File 'lib/troy/site.rb', line 5

def options
  @options
end

#rootObject

Returns the value of attribute root.



5
6
7
# File 'lib/troy/site.rb', line 5

def root
  @root
end

Instance Method Details

#configObject

A shortcut to the configuration.



125
126
127
# File 'lib/troy/site.rb', line 125

def config
  Troy.configuration
end

#exportObject



32
33
34
35
36
37
# File 'lib/troy/site.rb', line 32

def export
  remove_public_dir
  export_assets
  export_files
  export_pages
end

#export_asset(sprockets, asset_name) ⇒ Object



97
98
99
100
101
102
103
104
105
106
# 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_assetsObject



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# 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) ⇒ Object



49
50
51
52
53
54
55
# 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_filesObject



39
40
41
42
43
44
45
46
47
# 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) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# 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_configurationObject



28
29
30
# File 'lib/troy/site.rb', line 28

def load_configuration
  load root.join("config/troy.rb")
end

#load_extensionsObject



16
17
18
19
20
# File 'lib/troy/site.rb', line 16

def load_extensions
  Dir[root.join("config/**/*helpers.rb")].each do |file|
    require file
  end
end

#pagesObject

Return all pages wrapped in Troy::Page class.



120
121
122
# File 'lib/troy/site.rb', line 120

def pages
  @pages ||= source.map {|path| Page.new(self, path) }
end

#remove_public_dirObject



57
58
59
# File 'lib/troy/site.rb', line 57

def remove_public_dir
  FileUtils.rm_rf root.join("public")
end

#set_localeObject



22
23
24
25
26
# 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

#sourceObject



114
115
116
# File 'lib/troy/site.rb', line 114

def source
  Dir[root.join("source/**/*.{html,erb,md,builder,xml,txt}").to_s]
end

#uglifier_optionsObject



108
109
110
111
112
# File 'lib/troy/site.rb', line 108

def uglifier_options
  options = Uglifier::DEFAULTS.dup
  options[:output][:comments] = :none
  options
end