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