module Pyro::Assets::ClassMethods

Public Instance Methods

script(*args) click to toggle source
# File lib/pyro/assets.rb, line 15
def script(*args)
  tags  = ''
  find_files(args.first, 'js, coffee').each do |file|
    tags << compile(args.first, file, 'js')
  end
  tags
end
stylesheet(*args) click to toggle source
# File lib/pyro/assets.rb, line 23
def stylesheet(*args)
  tags  = ''
  find_files(args.first, 'css, scss').each do |file|
    tags << compile(args.first, file, 'css')
  end
  tags
end
template(*args) click to toggle source
# File lib/pyro/assets.rb, line 31
def template(*args)
  tags  = ''
  find_files(args.first, 'hbs, handlebars').each do |file|
    tags << compile(args.first, file, 'js')
  end
  tags
end

Private Instance Methods

compile(args, file, extension) click to toggle source
# File lib/pyro/assets.rb, line 120
def compile(args, file, extension)
  path_attrs = parse_path(args, file)
  template_name = ''

  case path_attrs[:extension]
  when 'coffee'
    path_attrs[:contents] = CoffeeScript.compile(path_attrs[:contents], bare: true)
  when 'hbs', 'handlebars'
    path_attrs[:contents] = Barber::Ember::FilePrecompiler.call(path_attrs[:contents])
    template_name = parse_name(args, file)
  when 'scss'
    path_attrs[:contents] = Sass::Engine.new( path_attrs[:contents],
                                            { style: :expanded,
                                              syntax: :scss } ).render
  end
  
  generate_file(path_attrs, extension, template_name)
  generate_link(path_attrs[:target_link], extension)
end
compress(dir) click to toggle source
# File lib/pyro/assets.rb, line 140
def compress(dir)
  Dir.glob("#{dir}/**/*.js").each do |file|
    contents = File.read(file)
    File.open(file, 'w+') do |f|
      f.write(JSMin.minify(contents).strip)
    end
  end
  
  Dir.glob("#{dir}/**/*.css").each do |file|
    contents = File.read(file)
    File.open(file, 'w+') do |f|
      f.write(Sass::Engine.new( contents, { style: :compressed,
                                           syntax: :scss } ).render)
    end
    
  end
end
find_files(args, extensions) click to toggle source
# File lib/pyro/assets.rb, line 41
def find_files(args, extensions)
  if @target == 'production'
    args[:src] = args[:prod_src] if args[:prod_src]
    args[:dir] = args[:prod_dir] if args[:prod_dir]
  end
  
  files = []
  if args[:src]
    files << "#{@working_dir}/#{args[:src]}"
  elsif args[:dir]
    Dir.glob("#{@working_dir}/#{args[:dir]}/**/*.{#{extensions}}").each do |f|
      files << f
    end
  end
  files
end
generate_file(path_attrs, extension, template_name) click to toggle source
# File lib/pyro/assets.rb, line 93
def generate_file(path_attrs, extension, template_name)
  FileUtils.mkdir_p(path_attrs[:build_path])
  File.open("#{path_attrs[:target_path]}.#{extension}", 'a+') do |f|
    if template_name == ''
      f.write(path_attrs[:contents])
    else
      f.write("Ember.TEMPLATES['#{template_name}'] = #{path_attrs[:contents]}")
    end
  end
end
parse_name(args, file) click to toggle source
# File lib/pyro/assets.rb, line 80
def parse_name(args, file)
  if args[:name]
    name = args[:name]
  elsif args[:src]
    name = f.split('/').last.split('.').first
  elsif args[:dir]
    name = file.sub("#{@working_dir}/#{args[:dir]}/", '').split('.').first
  else
    name = 'name-not-found'
  end
  name
end
parse_path(args, path) click to toggle source
# File lib/pyro/assets.rb, line 58
def parse_path(args, path)
  p = {}
  p[:contents] = File.read(path)
  p[:file_name] = path.split('/').last
  p[:extension] = path.split('.').last
  p[:name] = p[:file_name].sub(".#{p[:extension]}", '')
  p[:path] = path.sub(p[:file_name], '')
  p[:build_path] = p[:path].sub('./', "#{@build_dir}/")
  
  if args[:target]
    target_name = args[:target].split('/').last
    target_ext  = target_name.split('.').last
    args[:target] = args[:target].sub(".#{target_ext}", '')
    p[:target_path] = "#{@build_dir}/#{args[:target]}"
  else
    p[:target_path] = "#{p[:build_path]}#{p[:name]}"
  end
  
  p[:target_link] = p[:target_path].sub(@build_dir, '')
  p
end