class LuxAssets::Element

Public Class Methods

new(source) click to toggle source
# File lib/lux_assets/element.rb, line 7
def initialize source
  @source = @cache_source = Pathname.new source

  @target  = source.sub(/^\.\//, '').sub(/^\//, '').gsub('/', '-')
  @target  = '%s-%s' % [@production ? :p : :d, @target] if content_type == 'text/css'
  @cache  = Pathname.new './tmp/assets/%s' % @target
end

Public Instance Methods

compile(force:nil, production:nil) click to toggle source

use LuxAsset.compile if possible

# File lib/lux_assets/element.rb, line 21
def compile force:nil, production:nil
  @production = production || false
  method_name = 'compile_%s' % @source.to_s.split('.').last.downcase

  if respond_to?(method_name, true)
    (!force && cached) || ( process_erb; send(method_name))
  else
    @source.read
  end
end
content_type() click to toggle source
# File lib/lux_assets/element.rb, line 15
def content_type
  @ext ||= @source.to_s.split('.').last.to_sym
  [:css, :scss].include?(@ext) ? 'text/css' : 'text/javascript'
end

Private Instance Methods

cached() click to toggle source
# File lib/lux_assets/element.rb, line 36
def cached
  @cache.exist? && (@cache.ctime > @cache_source.ctime) ? @cache.read : false
end
compile_coffee() click to toggle source
# File lib/lux_assets/element.rb, line 49
def compile_coffee
  coffee_path = './node_modules/coffeescript/bin/coffee'
  coffee_opts = @production ? '-cp' : '-Mcp --no-header'

  if LuxAssets::Cli.run("#{coffee_path} #{coffee_opts} '#{@source}' > '#{@cache}'", cache_file: @cache, message: "Compile Coffee: #{@source}")
    data = @cache.read
    data = data.gsub(%r{//#\ssourceURL=[\w\-\.\/]+/app/assets/}, '//# sourceURL=/raw_asset/')

    @cache.write data

    data
  else
    nil
  end
end
compile_css()
Alias for: compile_sass
compile_js() click to toggle source
# File lib/lux_assets/element.rb, line 74
def compile_js
  ";\n%s\n;" % @source.read
end
compile_sass()
Also aliased as: compile_css
Alias for: compile_scss
compile_scss() click to toggle source
# File lib/lux_assets/element.rb, line 65
def compile_scss
  node_sass = './node_modules/node-sass/bin/node-sass'
  node_opts = @production ? '--output-style compressed' : '--source-comments'
  LuxAssets::Cli.run "#{node_sass} #{node_opts} '#{@source}' '#{@cache}'", cache_file: @cache, message: "Compile SCSS: #{@source}"
  @cache.read
end
Also aliased as: compile_sass
compile_ts() click to toggle source
# File lib/lux_assets/element.rb, line 78
def compile_ts
  LuxAssets::Cli.run "./node_modules/typescript/.bin/tsc --outFile '#{@cache}' '#{@source}'", cache_file: @cache, message: "Compile TypeScript: #{@source}"
end
process_erb() click to toggle source
# File lib/lux_assets/element.rb, line 40
def process_erb
  data = @source.read
  if data.include?('<%=') && data.include?('%>')
    LuxAssets::Cli.info 'Compile ERB: %s' % @source
    @source = Pathname.new './tmp/assets/erb-' + @target
    @source.write ERB.new(data).result
  end
end