class Hyde::Commands::Build

Public Class Methods

build(site, options) click to toggle source
# File lib/hyde/commands/build.rb, line 14
def self.build(site, options)
  source = options['source']
  jekyll = options['template']['directory']
  jekyll_out = options['intermediary']['directory']
  destination = options['destination']['directory']
  
  Hyde.logger.info "Source:", source
  Hyde.logger.info "Jekyll input:", jekyll
  Hyde.logger.info "Jekyll output:", jekyll_out
  Hyde.logger.info "Destination:", destination
  
  Hyde.logger.info "Running Jekyll...", ""
  
  site.process
  
  Hyde.logger.info "", "done."
end
process(options) click to toggle source
# File lib/hyde/commands/build.rb, line 5
def self.process(options)
  site = Hyde::Site.new(options)
  
  options['watching'] = true if options['watch']
  
  self.build(site, options)
  self.watch(site, options) if options['watch']
end
watch(site, options) click to toggle source
# File lib/hyde/commands/build.rb, line 32
def self.watch(site, options)
  require 'listen'
  
  source = options['source']
  template = options['template']['directory']

  ignored = Array.new
  %w[intermediary destination].each do |o|
    begin
      d = Pathname.new(options[o]['directory']).relative_path_from(Pathname.new(source)).to_s
      ignored << Regexp.escape(d)
    rescue ArgumentError
      # nop
    end
  end
  
  if ignored.empty?
    ignored = nil
  else
    ignored = Regexp.new(ignored.join('|'))
  end
  
  Hyde.logger.info 'Auto-regeneration:', 'enabled'
  
  listener = Listen::Listener.new([source, template], :ignore => ignored) do |modified, added, removed|
    t = Time.now.strftime("%Y-%m-%d %H:%M:%S")
    n = modified.length + added.length + removed.length
    Hyde.logger.info "Regenerating:", "#{n} files at #{t} "
    
    site.process
    
    Hyde.logger.info "", "done."
  end
  listener.start

  unless options['serving']
    trap("INT") do
      options['watching'] = false
      
      listener.stop
      site.cleanup
      
      puts "     Halting auto-regeneration."
      exit 0
    end

    loop { sleep 1000 }
  end
end