class Hyde::Site

Attributes

dest[RW]
files[RW]
options[RW]
pages[RW]
posts[RW]
source[RW]
template[RW]
time[RW]

Public Class Methods

new(options) click to toggle source
# File lib/hyde/site.rb, line 8
def initialize(options)
  self.options = options
  
  self.pages = options['pages']
  self.posts = options['posts']

  self.source = File.expand_path(options['source'])
  self.template = File.expand_path(options['template']['directory'])
  self.dest = File.expand_path(options['intermediary']['directory'])
  
  self.reset
  self.setup
end

Public Instance Methods

build() click to toggle source

runs Jekyll

# File lib/hyde/site.rb, line 178
def build
  jekyll_options = Hash.new
  
  %w[safe verbose].each do |c|
    jekyll_options[c] = options[c] if options[c]
  end

  jekyll_options['destination'] = options['destination']['directory']
  jekyll_options['source'] = self.dest

  jekyll_options = Jekyll::configuration(jekyll_options)
  Jekyll::Commands::Build.process(jekyll_options)
end
cleanup() click to toggle source

cleanup

# File lib/hyde/site.rb, line 172
def cleanup
  self.files = Array.new
  FileUtils.rm_rf(self.dest) unless options['keep'] or options['watching'] or options['serving']
end
copy_template() click to toggle source
# File lib/hyde/site.rb, line 124
def copy_template
  FileUtils.cp_r(Dir[File.join(template, '*')], dest, :preserve => true)
end
directories() click to toggle source

create the Hyde-to-Jekyll output directories

# File lib/hyde/site.rb, line 90
def directories
  directories_helper(pages)
  directories_helper(posts, '_posts')
end
process() click to toggle source
# File lib/hyde/site.rb, line 22
def process
  self.reset
  self.copy_template
  self.directories
  self.read
  self.write
  self.build
  self.cleanup
end
read() click to toggle source

read files

# File lib/hyde/site.rb, line 129
def read
  self.files ||= Array.new
  
  read_files(pages) do | source, destination |
    files << Page.new(source, File.join(self.dest, destination))
  end
  read_files(posts) do | source, destination |
    files << Post.new(source, File.join(self.dest, destination))
  end
end
reset() click to toggle source

reset the time

# File lib/hyde/site.rb, line 33
def reset
  self.time = if options['time']
                Time.parse(options['time'].to_s)
              else
                Time.now
              end
end
setup() click to toggle source

copy Jekyll source files

# File lib/hyde/site.rb, line 42
def setup
  if options['destination']['branch']
    clone_directory(options['destination'])
  else
    FileUtils.rm_rf(dest)
  end
  
  clone_directory(options['template']) if options['template']['branch']
  
  FileUtils.rm_rf(dest)
  FileUtils.mkdir_p(dest)
end
write() click to toggle source

write jekyll files

# File lib/hyde/site.rb, line 165
def write
  files.each do |file|
    file.write
  end
end

Private Instance Methods

clone_directory(options) click to toggle source
# File lib/hyde/site.rb, line 57
def clone_directory(options)
  directory = options['directory']
  branch = options['branch']
  update = (options['update'] == true || options['update'] == 'true')
  
  unless File.directory?('.git')
    Hyde.logger.abort_with "Not a git repo:", "The current directory is not a git repository."
  end
  
  if File.exists?(directory)
    if File.directory?(directory)
      # if git: cd && git pull
      if File.directory?(File.join(directory, '.git')) and update
        Hyde.logger.info 'Updating directory:', "Pulling branch #{branch} in #{directory}..."
        `cd #{directory} && git pull`
        Hyde.logger.info '', 'done'
      elsif update
        Hyde.logger.warn 'Expected git repo:', "Expected #{directory} to be a git repo"
        Hyde.logger.warn '', 'as a branch was supplied to pull from.'
      end
    else
      Hyde.logger.abort_with 'Expected directory:', "#{directory} but found file"
    end
  else
    Hyde.logger.info 'Cloning template:', "Cloning branch #{branch} into #{directory}..."
    `git new-workdir . #{directory} #{branch}`
    Hyde.logger.info '', 'done.'
  end
end
directories_helper(data, dest_suffix = '') click to toggle source
# File lib/hyde/site.rb, line 97
def directories_helper(data, dest_suffix = '')
  data.each do |source, dest|
    source = File.join(self.source, source)
    dest = File.join(self.dest, dest, dest_suffix)

    unless File.exists?(source)
      Hyde.logger.warn 'File not found:', "File/directory #{source} does not exist, skipping"
      return
    end

    if File.exists?(dest)
      unless File.directory?(source) == File.directory?(dest)
        Hyde.logger.abort_with 'Illegal file:', "Expected #{dest} to be a #{File.directory?(source) ? 'directory but found file.' : 'file but found directory.'}" 
      end

      FileUtils.rm_rf(dest)
    end

    # if directory: create directory, otherwise nop
    if File.directory?(source)
      FileUtils.mkdir_p(dest)
    end
  end
end
read_directory(directory, destination) { |s,d| ... } click to toggle source
# File lib/hyde/site.rb, line 152
def read_directory(directory, destination)
  Dir[File.join(directory, '*')].sort.each do |source|
    if File.directory?(source)
      read_directory(source, destination) { |s,d| yield(s,d) }
    else
      yield(source, destination)
    end
  end
end
read_files(files) { |s,d| ... } click to toggle source
# File lib/hyde/site.rb, line 142
def read_files(files)
  files.each do | source, destination |
    if File.directory?(source)
      read_directory(source, destination) { |s,d| yield(s,d) }
    else
      yield(source, destination)
    end
  end
end