class Cyborg::Assets::AssetType
Attributes
base[R]
plugin[R]
Public Class Methods
new(plugin, base)
click to toggle source
# File lib/cyborg/plugin/assets/asset.rb, line 6 def initialize(plugin, base) @base = base @plugin = plugin end
Public Instance Methods
build_failure(file)
click to toggle source
# File lib/cyborg/plugin/assets/asset.rb, line 45 def build_failure(file) msg = "\nFAILED TO BUILD" msg += ": #{local_path(file)}" if file log_error msg end
build_success(file)
click to toggle source
# File lib/cyborg/plugin/assets/asset.rb, line 41 def build_success(file) log_success "Built: #{local_path(file)}" end
change(modified, added, removed)
click to toggle source
# File lib/cyborg/plugin/assets/asset.rb, line 127 def change(modified, added, removed) return if (Time.now.to_i - @last_build) < @throttle puts "Added: #{file_event(added)}".colorize(:light_green) unless added.empty? puts "Removed: #{file_event(removed)}".colorize(:light_red) unless removed.empty? puts "Modified: #{file_event(modified)}".colorize(:light_yellow) unless modified.empty? build @last_build = Time.now.to_i end
compress(file)
click to toggle source
# File lib/cyborg/plugin/assets/asset.rb, line 145 def compress(file) return unless Cyborg.production? mtime = File.mtime(file) gz_file = "#{file}.gz" return if File.exist?(gz_file) && File.mtime(gz_file) >= mtime File.open(gz_file, "wb") do |dest| gz = Zlib::GzipWriter.new(dest, Zlib::BEST_COMPRESSION) gz.mtime = mtime.to_i IO.copy_stream(open(file), gz) gz.close end File.utime(mtime, mtime, gz_file) end
destination(path)
click to toggle source
# File lib/cyborg/plugin/assets/asset.rb, line 84 def destination(path) plugin.asset_path(versioned(path)) end
file_event(files)
click to toggle source
# File lib/cyborg/plugin/assets/asset.rb, line 138 def file_event(files) list = files.flat_map { |f| f.sub(base+'/', '') }.join(" \n") list = " \n#{files}" if 1 < files.size list end
filter_files(names)
click to toggle source
# File lib/cyborg/plugin/assets/asset.rb, line 25 def filter_files(names) # Filter names based on asset file locations find_files.select do |f| names.include? File.basename(f).sub(/(\..+)$/,'') end end
find_files()
click to toggle source
# File lib/cyborg/plugin/assets/asset.rb, line 11 def find_files if @files @files else files = Dir[File.join(base, "*.#{ext}")].reject do |f| # Filter out partials File.basename(f).start_with?('_') end @files = files if Cyborg.production? files end end
find_node_module(cmd)
click to toggle source
Determine if an NPM
module is installed by checking paths with `npm bin` Returns path to binary if installed
# File lib/cyborg/plugin/assets/asset.rb, line 61 def find_node_module(cmd) require 'open3' (@modules ||= {})[cmd] ||= begin local = "$(npm bin)/#{cmd}" global = "$(npm -g bin)/#{cmd}" if Open3.capture3(local)[2].success? local elsif Open3.capture3(global)[2].success? global end end end
local_path(file)
click to toggle source
# File lib/cyborg/plugin/assets/asset.rb, line 37 def local_path(file) destination(file).sub(plugin.root+'/','') end
log_error( msg )
click to toggle source
# File lib/cyborg/plugin/assets/asset.rb, line 55 def log_error( msg ) STDERR.puts msg.to_s.colorize(:red) end
log_success( msg )
click to toggle source
# File lib/cyborg/plugin/assets/asset.rb, line 51 def log_success( msg ) STDOUT.puts msg.to_s.colorize(:green) end
npm_command(cmd)
click to toggle source
# File lib/cyborg/plugin/assets/asset.rb, line 77 def npm_command(cmd) cmd = cmd.split(' ') if path = find_node_module(cmd.shift) system "#{path} #{cmd.join(' ')}" end end
url(path)
click to toggle source
# File lib/cyborg/plugin/assets/asset.rb, line 88 def url(path) plugin.asset_url(versioned(path)) end
urls(names=nil)
click to toggle source
# File lib/cyborg/plugin/assets/asset.rb, line 92 def urls(names=nil) # If names are passed, look at the basename minus # the extension as build files may have # different extensions than sources names = [names].flatten.compact.map do |n| File.basename(n).sub(/(\..+)$/,'') end # Return all asset urls if none were specifically chosen if names.empty? find_files.map{ |file| url(file) } # Filter files based on name else filter_files(names).map{ |file| url(file) } end end
versioned(path)
click to toggle source
# File lib/cyborg/plugin/assets/asset.rb, line 33 def versioned(path) File.basename(path).sub(/(\.\w+)$/, '-'+plugin.version+'\1') end
watch()
click to toggle source
# File lib/cyborg/plugin/assets/asset.rb, line 110 def watch @throttle = 4 @last_build = 0 puts "Watching for changes to #{base.sub(plugin.root+'/', '')}...".colorize(:light_yellow) Thread.new { listener = Listen.to(base) do |modified, added, removed| change(modified, added, removed) end listener.start # not blocking sleep } end