class MiddlemanHeadless::Extension

Public Class Methods

new(app, options_hash={}, &block) click to toggle source
Calls superclass method
# File lib/middleman-headless/extension.rb, line 22
def initialize(app, options_hash={}, &block)
  super
  require 'oauth2'

  app.before do
    extensions[:headless].clear unless app.build?
  end
end

Public Instance Methods

after_build(builder) click to toggle source
# File lib/middleman-headless/extension.rb, line 43
def after_build(builder)
  download_assets(builder) if options[:download_assets] and app.build?
end
clear() click to toggle source
# File lib/middleman-headless/extension.rb, line 39
def clear
  @interface = nil unless options.cache
end
download_assets(builder) click to toggle source
# File lib/middleman-headless/extension.rb, line 47
def download_assets(builder)
  downloads = {}
  builder.thor.say 'Downloading headless assets...'

  Middleman::Util.all_files_under(app.config[:build_dir]).each do |file|
    next unless options[:process_exts].include?(File.extname(file))

    content = File.binread(file.expand_path)

    content.gsub! /hldl:\/\/([A-z0-9=]+)\// do
      data = JSON.parse(Base64.urlsafe_decode64($1))
      hash = Digest::SHA1.hexdigest(data['addr'])[0..options[:assets_hash_length]]
      id = "#{data['name']}-#{hash}.#{data['ext']}"
      downloads[id] = data['addr']
      "/#{options[:assets_dir]}/#{id}"
    end

    File.open(file.expand_path, 'wb') { |f| f.write(content) }
    builder.thor.say_status :processed, file
  end

  downloads.each do |id, url|
    dest = Pathname(app.config[:build_dir]).join(options[:assets_dir], id)
    builder.thor.get url, dest, verbose: false
    builder.thor.say_status :downloaded, dest
  end
end
headless() click to toggle source
# File lib/middleman-headless/extension.rb, line 31
def headless
  if options.app_key.blank? or options.app_secret.blank? or options.address.blank?
    raise 'missing app_key, app_secret or address'
  end

  @interface ||= Interface.new(options, app.build?)
end