Class: Dimples::Site

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

Overview

A class representing a single generated website.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config = {}) ⇒ Site

Returns a new instance of Site.



17
18
19
# File 'lib/dimples/site.rb', line 17

def initialize(config = {})
  @config = Config.new(config)
end

Instance Attribute Details

#configObject

Returns the value of attribute config.



11
12
13
# File 'lib/dimples/site.rb', line 11

def config
  @config
end

Class Method Details

.generate(config = {}) ⇒ Object



13
14
15
# File 'lib/dimples/site.rb', line 13

def self.generate(config = {})
  new(config).generate
end

Instance Method Details

#categoriesObject



49
50
51
52
53
54
55
56
57
58
# File 'lib/dimples/site.rb', line 49

def categories
  @categories ||= {}.tap do |categories|
    posts.each do |post|
      post.categories.each do |category|
        categories[category] ||= []
        categories[category].append(post)
      end
    end
  end
end

#generateObject



21
22
23
24
25
26
27
28
29
# File 'lib/dimples/site.rb', line 21

def generate
  prepare_output_directory

  generate_posts
  generate_categories
  generate_pages

  copy_assets
end

#layoutsObject



43
44
45
46
47
# File 'lib/dimples/site.rb', line 43

def layouts
  @layouts ||= Dir.glob(File.join(@config[:sources][:layouts], '**', '*.erb')).to_h do |path|
    [File.basename(path, '.erb'), Dimples::Sources::Layout.new(self, path)]
  end
end

#metadataObject



60
61
62
# File 'lib/dimples/site.rb', line 60

def 
   ||= .new(posts: posts, categories: categories)
end

#pagesObject



37
38
39
40
41
# File 'lib/dimples/site.rb', line 37

def pages
  @pages ||= Dir.glob(File.join(@config[:sources][:pages], '**', '*.erb')).map do |path|
    Dimples::Sources::Page.new(self, path)
  end
end

#postsObject



31
32
33
34
35
# File 'lib/dimples/site.rb', line 31

def posts
  @posts ||= Dir.glob(File.join(@config[:sources][:posts], '**', '*.markdown')).map do |path|
    Dimples::Sources::Post.new(self, path)
  end.sort_by!(&:date).reverse!
end