Class: AssetPacker::Processor::Local::Stylesheet

Inherits:
AssetPacker::Processor::Local show all
Defined in:
lib/asset_packer/processor/local.rb

Instance Attribute Summary

Attributes inherited from AssetPacker::Processor

#asset_dir, #destination, #full_source_uri, #source_uri

Instance Method Summary collapse

Methods inherited from AssetPacker::Processor::Local

#save_asset

Methods inherited from AssetPacker::Processor

#cache, #initialize, #retrieve_asset

Constructor Details

This class inherits a constructor from AssetPacker::Processor

Instance Method Details

#call(doc) ⇒ Object



41
42
43
44
45
# File 'lib/asset_packer/processor/local.rb', line 41

def call(doc)
  doc.replace('link[rel=stylesheet]') do |link|
    link.attr(:href, save_asset(link[:href], 'css', &extract_references(link[:href])))
  end
end


65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/asset_packer/processor/local.rb', line 65

def extract_css_links(base_url)
  ->(content) do
    content.gsub(/url\(['"]?([^\)'"]*)['"]?\)/) {
      uri = URI.join(full_source_uri, base_url, $1)
      ext = File.extname($1)[1..-1]
      # TODO check for media type, not URL
      # using regex instead of checking ext because
      # google font files don't work otherwise
      block = extract_references(uri) if uri.to_s =~ /css/
      "url(../#{ save_asset(uri, ext, &block) })"
    }
  end
end

#extract_imports(base_url) ⇒ Object



54
55
56
57
58
59
60
61
62
63
# File 'lib/asset_packer/processor/local.rb', line 54

def extract_imports(base_url)
  ->(content) do
    content.gsub(/@import\s+['"]([^'"]+)['"]\s*(\w*);/) {
      path, type = $1, $2
      uri = URI.join(full_source_uri, base_url, path)
      block = extract_references(uri)
      "@import '../#{ save_asset(uri, 'css', &block) }' #{type};"
    }
  end
end

#extract_references(base_url) ⇒ Object



47
48
49
50
51
52
# File 'lib/asset_packer/processor/local.rb', line 47

def extract_references(base_url)
  ->(content) do
    content = extract_imports(base_url)[content]
    extract_css_links(base_url)[content]
  end
end