lib/pyro/asset.rb in pyro-1.0.0.rc1 vs lib/pyro/asset.rb in pyro-1.0.0.rc2
- old
+ new
@@ -1,54 +1,114 @@
require 'barber'
require 'coffee-script'
require 'fileutils'
require 'sass'
+# Public: Define an Asset.
+#
+# Examples
+#
+# Asset.new(file: "#{@working_dir}/#{args[:src]}",
+# build_dir: @build_dir,
+# working_dir: @working_dir,
+# helper_args: args)
module Pyro
class Asset
attr_accessor :file, :build_dir, :working_dir, :helper_args
+ # Public: Set args to attrs on new().
+ #
+ # Examples
+ #
+ # Asset.new(file: "#{@working_dir}/#{args[:src]}",
+ # build_dir: @build_dir,
+ # working_dir: @working_dir,
+ # helper_args: args)
+ #
+ # Returns an Asset instance.
def initialize(args)
args.each { |k, v| instance_variable_set("@#{k}", v) }
end
+ # Public: Map File methods to an Asset.
+ #
+ # * Maybe Asset should inheret from File?
+ #
+ # Examples
+ #
+ # @asset.mtime
+ #
+ # * See the File class for more info.
def mtime
File.mtime file
end
-
def basename
File.basename file
end
-
def dirname
File.dirname file
end
-
def extname
File.extname file
end
+ # Public: Strip the extension from the basename.
+ #
+ # Examples
+ #
+ # @asset.name
+ #
+ # Retunrs a String of the basename without the extension.
+ # ('my_file.rb' -> 'myfile')
def name
basename.sub(extname, '')
end
+ # Public: Format the mtime as a timestamp String.
+ #
+ # Examples
+ #
+ # @asset.timestamp
+ #
+ # Returns a String.
def timestamp
mtime.strftime "%Y%m%d%H%M%S"
end
+ # Public: Find the relative target path of an Asset.
+ #
+ # Examples
+ #
+ # @asset.relative_dir
+ #
+ # Returns a path as a String.
def relative_dir
dirname.sub("#{working_dir}/", '')
end
+ # Public: Find the relative target file path of an Asset.
+ #
+ # Examples
+ #
+ # @asset.relative_file
+ #
+ # Returns a filepath as a String.
def relative_file
if helper_args[:target]
helper_args[:target]
else
"#{relative_dir}/#{name}#{compiled_ext}"
end
end
+ # Public: Determine the target extension of an Asset.
+ #
+ # Examples
+ #
+ # @asset.compiled_ext
+ #
+ # Returns a String.
def compiled_ext
case extname
when '.coffee', '.hbs', '.handlebars'
'.js'
when '.scss'
@@ -56,10 +116,17 @@
else
extname
end
end
+ # Public: Compile the contents of an Asset.
+ #
+ # Examples
+ #
+ # @asset.contents
+ #
+ # Returns the compiled contents.
def contents
contents = File.read file
case extname
when '.coffee'
contents = CoffeeScript.compile(contents, bare: true)
@@ -70,10 +137,19 @@
contents = "Ember.TEMPLATES['#{template_name}'] = #{contents}"
end
contents
end
+ # Public: Find the name to use for a Handlebars template.
+ #
+ # * Use the name: arg in the template() helper to override the default.
+ #
+ # Examples
+ #
+ # @asset.template_name
+ #
+ # Returns the relative template path and filename unless told otherwise.
def template_name
if helper_args[:name]
helper_args[:name]
elsif helper_args[:src]
name
@@ -82,14 +158,28 @@
else
'name-not-found'
end
end
+ # Public: Generate a compiled Asset.
+ #
+ # Examples
+ #
+ # @asset.generate_file
+ #
+ # Generates a compiled Asset file into a target file.
def generate_file
FileUtils.mkdir_p "#{build_dir}/#{relative_dir}"
File.open("#{build_dir}/#{relative_file}", 'a+') { |f| f.write contents }
end
+ # Public: Generate link to a generated Asset.
+ #
+ # Examples
+ #
+ # @asset.generate_link
+ #
+ # Retunrs a <script> or <link> tag.
def generate_link
case compiled_ext
when '.js'
"<script type='text/javascript' src='#{relative_file}?#{timestamp}'></script>\n"
when '.css'