dwradcliffe/simple_site

View on GitHub
lib/simple_site/site.rb

Summary

Maintainability
A
0 mins
Test Coverage
module SimpleSite
  class Site
    
    attr_reader :options
    
    def initialize(options = {})
      @options = {}
      @options[:buckets] ||= [options.delete(:bucket)].compact
      options[:buckets].each {|bucket| @options[:buckets] << bucket } unless options[:buckets].nil?
      @options.merge!(options)
      @options[:js_files] ||= Dir['_js/*.js']
    end
    
    def js_files=(files)
      @options[:js_files] = files
    end

    def bucket=(bucket)
      @options[:buckets] = [bucket]
    end
    
    def buckets=(buckets)
      @options[:buckets] = buckets
    end
    
    def generate_html
      engine = Haml::Engine.new(File.read('_src/index.haml'))
      File.open('public/index.html', 'w') {|f| f.write(engine.render(SimpleSite::HamlContext.new)) }
      puts "Regenerated html!"
    end
    
    def generate_css
      return unless File.exists? '_sass/style.sass'
      system "sass _sass/style.sass public/css/style.css"
      puts "Regenerated css!"
    end
    
    def generate_js
      return if @options[:js_files].empty?
      system 'mkdir -p _tmp; touch _tmp/js.js; :> _tmp/js.js'
      @options[:js_files].each do |f|
        system "cat _js/#{f} >> _tmp/js.js"
      end
      File.open('public/js/script.js', 'w') {|f| f.write(Uglifier.compile(File.read('_tmp/js.js'))) }
      system 'rm _tmp/js.js'
      puts "Regenerated js!"
    end
    
    def deploy!
      Dir.chdir('public')
      Dir['**/*'].select { |f| File.file?(f) }.each do |file|
        deploy file
      end
    end
    
    def deploy_file!
      Dir.chdir('public')
      ENV['FILES'].split(",").select { |f| File.file?(f) }.each do |file|
        deploy file
      end
    end
    
    
    private
      def deploy(file)
        age = 7*24*60*60
        options = {
          :access => :public_read,
          :cache_control => "max-age=#{age}"
          # :expires => age.from_now.httpdate
        }
        puts "  --> #{file}"
        @options[:buckets].each do |bucket|
          AWS::S3::S3Object.store(file, open(file), bucket, options)
        end
      end
    
  end
end