Class: Zine::Site

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

Overview

the site

Defined Under Namespace

Classes: MockHighlineYes

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeSite

Create a new instance of Site, called by CLI#init_site



15
16
17
18
19
# File 'lib/zine.rb', line 15

def initialize
  @templates_by_name = {}
  init_options
  clean_option_paths
end

Instance Attribute Details

#optionsObject (readonly)

Site options read from YAML during the initialisation of the class



12
13
14
# File 'lib/zine.rb', line 12

def options
  @options
end

Instance Method Details

#build_siteObject

A dry run build that generates baseline data to compare changes to during editting/preview, then generate files where the source files change. Called by CLI#build



24
25
26
27
28
29
30
# File 'lib/zine.rb', line 24

def build_site
  init_templates
  FileUtils.mkdir_p @options['directories']['build']
  # posts_and_guard is { posts: @post_array, guard: @guard }
  posts_and_guard = posts_and_headlines_without_writing
  preview posts_and_guard
end

#build_site_forcing_writesObject

Build the files of the site, generating files immeadiately, suitable for the initial build or complete rebuild. Called by CLI#force



35
36
37
38
39
40
41
42
43
# File 'lib/zine.rb', line 35

def build_site_forcing_writes
  init_templates
  FileUtils.mkdir_p @options['directories']['build']
  # posts_and_guard is { posts: @post_array, guard: @guard }
  posts_and_guard = write_posts_and_headlines
  housekeeping
  write_other_markdown_pages
  preview posts_and_guard
end

#make_template_bundle(type) ⇒ Object

Create a new instance of TemplateFiles, looking up the body template in @templates_by_name, defaults to the template named ‘default’

Called in PostsAndHeadlines.read_post_markdown_files, PostsAndHeadlines.one_new_post, PostsAndHeadlines.write_headline, PostsAndHeadlines.write_tags_and_headlines

Attributes

  • type - The name of the template used for the body eg post

Eg

make_template_bundle 'post'


60
61
62
63
64
65
66
67
68
69
70
# File 'lib/zine.rb', line 60

def make_template_bundle(type)
  TemplateFiles.new(
    if @templates_by_name.key?(type)
      @templates_by_name[type]
    else
      @templates_by_name['default']
    end,
    @templates_by_name['header_partial'],
    @templates_by_name['footer_partial']
  )
end

#notice(file) ⇒ Object

Build the site, noticing this file as having changed Called by CLI#notice TODO: common function call across other methods



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/zine.rb', line 82

def notice(file)
  # build
  init_templates
  FileUtils.mkdir_p @options['directories']['build']
  # posts_and_headlines_without_writing
  posts = Zine::PostsAndHeadlines.new self, @options # starts watcher
  posts_and_guard = posts.writeless
  guard = posts_and_guard[:guard]

  # build the file & add it to the upload array
  posts_dir = @options['directories']['posts']
  file_to_notice = File.join posts_dir, file
  path_to_notice = File.join Dir.getwd, file_to_notice

  dest_path = posts.one_new_post file_to_notice, path_to_notice
  guard.notice(dest_path)

  # TODO: everywhere
  guard.listener_array.each(&:stop)

  # preview posts_and_guard -- no preview needed...
  return if @options['upload']['method'] == 'none' ||
            (guard.delete_array.empty? && guard.upload_array.empty?)
  uploader = Zine::Upload.new @options['directories']['build'],
                              @options['upload'],
                              guard.delete_array,
                              guard.upload_array
  uploader.upload_decision MockHighlineYes
end

#write_markdown(default_name, src_dir, file) ⇒ Object



112
113
114
115
116
117
118
119
120
# File 'lib/zine.rb', line 112

def write_markdown(default_name, src_dir, file)
  dir = Pathname(File.dirname(file)).relative_path_from(Pathname(src_dir))
  file_name = "#{File.basename(file, '.*')}.html"
  dest = File.join @options['directories']['build'], dir
  FileUtils.mkdir_p dest
  page = Zine::Page.new(file, File.join(dest, file_name),
                        make_template_bundle(default_name), @options)
  page.process File
end