Class: WebResourceBundler::Filters::BundleFilter::Filter

Inherits:
WebResourceBundler::Filters::BaseFilter show all
Defined in:
lib/web_resource_bundler/filters/bundle_filter.rb

Instance Attribute Summary

Attributes inherited from WebResourceBundler::Filters::BaseFilter

#settings

Instance Method Summary collapse

Methods inherited from WebResourceBundler::Filters::BaseFilter

#apply, #set_settings

Constructor Details

#initialize(settings, file_manager) ⇒ Filter

Returns a new instance of Filter.



7
8
9
10
# File 'lib/web_resource_bundler/filters/bundle_filter.rb', line 7

def initialize(settings, file_manager)
  super(settings, file_manager)
  @packager = ResourcePackager.new(@settings, @file_manager)
end

Instance Method Details

#apply!(block_data) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/web_resource_bundler/filters/bundle_filter.rb', line 12

def apply!(block_data)
  new_files = []
  unless block_data.styles.empty?
    new_css_filename = css_bundle_filepath(block_data.styles)
    new_css_content = @packager.bundle_files(block_data.styles)
    new_css_file = WebResourceBundler::ResourceFile.new_style_file(new_css_filename, new_css_content)
    new_files << new_css_file 
  end
  unless block_data.scripts.empty?
    new_js_filename = js_bundle_filepath(block_data.scripts)
    new_js_content = @packager.bundle_files(block_data.scripts)
    new_js_file = WebResourceBundler::ResourceFile.new_js_file(new_js_filename, new_js_content)
    new_files << new_js_file
  end
  block_data.files = new_files
  block_data
end

#bundle_filepath(type, files) ⇒ Object



38
39
40
41
42
43
44
45
46
47
# File 'lib/web_resource_bundler/filters/bundle_filter.rb', line 38

def bundle_filepath(type, files)
  unless files.empty?
    items = [type[:name] + '_' + get_md5(files)]
    items += @settings[:filename_additional_data] if @settings[:filename_additional_data]
    items << type[:ext]
    return File.join(@settings[:cache_dir], items.join('.'))
  else
    return nil
  end
end

#css_bundle_filepath(files) ⇒ Object

just aliases to simplify code



50
51
52
# File 'lib/web_resource_bundler/filters/bundle_filter.rb', line 50

def css_bundle_filepath(files)
  bundle_filepath(WebResourceBundler::ResourceFileType::CSS, files)
end

#get_md5(files) ⇒ Object



30
31
32
33
34
35
36
# File 'lib/web_resource_bundler/filters/bundle_filter.rb', line 30

def get_md5(files)
  items = [(files.map {|f| f.path }).sort]
  items << @settings[:protocol]
  items << @settings[:domain]
  items += @settings[:md5_additional_data] if @settings[:md5_additional_data]
  Digest::MD5.hexdigest(items.flatten.join('|'))
end

#js_bundle_filepath(files) ⇒ Object



54
55
56
# File 'lib/web_resource_bundler/filters/bundle_filter.rb', line 54

def js_bundle_filepath(files)
  bundle_filepath(WebResourceBundler::ResourceFileType::JS, files)
end