web_resource_bundler 0.0.21 → 0.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Rakefile CHANGED
@@ -1,29 +1,21 @@
1
1
  require 'rake'
2
2
  require 'spec/rake/spectask'
3
- require 'rubygems'
4
3
 
5
- begin
6
- require 'jeweler'
7
- Jeweler::Tasks.new do |gem|
8
- gem.name = "web_resource_bundler"
9
- gem.summary = %Q{lib for css and js content bundling and managment}
10
- gem.description = %Q{this lib could bundle you css/js files in single file, encode images in base64, rewrite images urls to your cdn hosts}
11
- gem.email = "anotheroneman@yahoo.com"
12
- gem.homepage = "https://github.com/railsware/web-bundler"
13
- gem.authors = ["gregolsen"]
14
- gem.add_development_dependency "rspec", "1.3.1"
15
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
16
- end
17
- Jeweler::GemcutterTasks.new
18
- rescue LoadError
19
- puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
4
+ require File.join(File.dirname(__FILE__), "version.rb")
5
+
6
+ task :build do
7
+ system "gem build web_resource_bundler.gemspec"
8
+ end
9
+
10
+ task :install => :build do
11
+ system "sudo gem install web_resource_bundler-#{WebResourceBundler::VERSION}.gem"
20
12
  end
21
13
 
22
- namespace :spec do
14
+ task :release => :build do
15
+ system "gem push web_resource_bundler-#{WebResourceBundler::VERSION}.gem"
16
+ end
23
17
 
24
- desc "Run specs with RCov"
25
- Spec::Rake::SpecTask.new('rcov' ) do |t|
26
- t.spec_files = FileList['spec/**/*_spec.rb' ]
27
- t.rcov = true
28
- end
18
+ desc "Run all specs"
19
+ Spec::Rake::SpecTask.new('spec' ) do |t|
20
+ t.spec_files = FileList['spec/**/*_spec.rb' ]
29
21
  end
data/Readme.md CHANGED
@@ -16,6 +16,14 @@ and other browsers created. Conditional comments (like `<!--[if IE 6]>`) also
16
16
  supported. You can use external image hosts to server images in css:
17
17
  cdn filter can rewrite image urls for you. Resulted filename is a md5(filenames.sort)
18
18
 
19
+ Filters
20
+ -------
21
+
22
+ + Base64 image encoding
23
+ + CDN url rewriter
24
+ + CSS/JS compress (in master)
25
+ + uses yui-compressor, which requires jre
26
+
19
27
  Installation
20
28
  ---------------------
21
29
 
@@ -30,24 +38,20 @@ Declare web_resource_bundler in your Gemfile like this:
30
38
 
31
39
  Add this two lines in your application.rb file on rails config dir:
32
40
 
33
- WebResourceBundler::Bundler.instance.setup(Rails.root, Rails.env)
41
+ WebResourceBundler::Bundler.setup(Rails.root, Rails.env)
34
42
  ActionView::Base.send(:include, WebResourceBundler::RailsAppHelpers)
35
43
 
36
44
  Now in your view files you can call **`web_resource_bundler_process`** helper like this:
37
45
 
38
46
  <head>
39
- <% web_resource_bundler_process do %>
47
+
48
+ <%= web_resource_bundler_process do %>
40
49
 
41
50
  <%= stylesheet_link_tag :scaffold %>
42
51
  <%= javascript_include_tag :defaults %>
43
- <link type="text/css" rel="stylesheet" href="/stylesheets/somestyle.css"/>
44
- <%=yield :head %>
45
- <!--[if lte IE 7]>
46
- <link type="text/css" rel="stylesheet" href="/stylesheets/ie7fix.css"/>
47
- <link type="text/css" rel="stylesheet" href="/stylesheets/pngfix.css"/>
48
- <![endif]-->
49
52
 
50
53
  <% end %>
54
+
51
55
  </head>
52
56
 
53
57
  Notice:
@@ -59,18 +63,18 @@ And For Rails >= 3
59
63
  use **`<%= web_resource_bundler_process do %>`**
60
64
 
61
65
 
62
- And as result you'll have
63
-
64
- <link href="/cache/base64_style_d880a502addaa493b889c0970616430b.css?1290594873" media="screen" rel="stylesheet" type="text/css" />
65
- <script src="/cache/script_275d311037da40e9c9b8c919a8c08b55.js?1290594873" type="text/javascript"></script>
66
+ And as result you'll got something like this:
66
67
 
67
- <!--[if lte IE 7]>
68
- <link href="/cache/base64_ie_style_d880a502addaa493b889c0970616430b.css?1290594873" media="screen" rel="stylesheet" type="text/css" />
69
- <![endif]-->
70
-
71
- <!--[if lte IE 7]>
72
- <link type="text/css" rel="stylesheet" href="/cache/base64_style_ad801w02addaa493b889c0970616430b.css?1290594873"/>
73
- <![endif]-->
68
+ <head>
69
+ <!--[if (!IE)|(gte IE 8)]>
70
+ <link href="/cache/cdn_base64_style_03fc490ab76c3c79d908c11cd03684ff.css?1298969608" media="screen" rel="stylesheet" type="text/css" />
71
+ <script src="/cache/script_4fd3a6705e370f98957d625976c96f64.js?1292848219" type="text/javascript"></script>
72
+ <![endif]-->
73
+ <!--[if lte IE 7]>
74
+ <link href="/cache/cdn_base64_ie_style_03fc490ab76c3c79d908c11cd03684ff.css?1298969608" media="screen" rel="stylesheet" type="text/css" />
75
+ <link href="/cache/mhtml_style_03fc490ab76c3c79d908c11cd03684ff.mhtml?1298969608" media="screen" rel="stylesheet" type="text/css" />
76
+ <![endif]-->
77
+ </head>
74
78
 
75
79
  !!!
76
80
  Don't forget to clean your cache directory after deploy to clean old bundles
@@ -92,6 +96,9 @@ To configure bundler by your self you can create your custom config file - web_r
92
96
  :use: false
93
97
  :http_hosts: ['http://localhost:3000']
94
98
  :https_hosts: ['https://localhost:3000']
99
+ :compress_filter:
100
+ :use: true
101
+ :obfuscate_js: true
95
102
 
96
103
  Recommendations
97
104
  --------------------
@@ -13,6 +13,9 @@ require 'rails_app_helpers'
13
13
  require 'yaml'
14
14
  require 'digest/md5'
15
15
  require 'uri'
16
+ require 'yui/compressor'
17
+
18
+ require 'railtie' if defined?(Rails)
16
19
 
17
20
  module WebResourceBundler
18
21
  class Bundler
@@ -25,7 +28,6 @@ module WebResourceBundler
25
28
  def setup(rails_root, rails_env)
26
29
  settings = Settings.create_settings(rails_root, rails_env)
27
30
  return false unless Settings.correct?
28
- @logger = create_logger(settings[:log_path]) unless @logger
29
31
  @file_manager = FileManager.new(settings)
30
32
  @filters = set_filters({}, @file_manager)
31
33
  end
@@ -40,7 +42,7 @@ module WebResourceBundler
40
42
  @file_manager.set_settings(settings)
41
43
  true
42
44
  rescue Exception => e
43
- @logger.error("Error occured while trying to change settings")
45
+ logger_error("Error occured while trying to change settings")
44
46
  false
45
47
  end
46
48
  end
@@ -62,17 +64,29 @@ module WebResourceBundler
62
64
  read_resources!(block_data)
63
65
  block_data.apply_filters(filters)
64
66
  write_files_on_disk(block_data)
65
- @logger.info("files written on disk")
67
+ logger_info("files written on disk")
66
68
  return block_data
67
69
  end
68
70
  block_data.apply_filters(filters)
69
71
  block_data
70
72
  rescue Exception => e
71
- @logger.error("Error occured: " + e.to_s)
73
+ logger_error("Error occured: " + e.to_s)
72
74
  nil
73
75
  end
74
76
  end
75
77
 
78
+ def logger
79
+ defined?(Rails) ? Rails.logger : Logger.new(STDOUT)
80
+ end
81
+
82
+ def logger_info(message)
83
+ logger.info("[web_resource_bundler]: #{message}")
84
+ end
85
+
86
+ def logger_error(message)
87
+ logger.error("[web_resource_bundler]: #{message}")
88
+ end
89
+
76
90
  private
77
91
 
78
92
  def set_filters_request_specific_data!(filters, domain, protocol)
@@ -84,7 +98,7 @@ module WebResourceBundler
84
98
  #giving filters array in right sequence (bundle filter should be first)
85
99
  def filters_array(filters_hash)
86
100
  filters = []
87
- [:bundle_filter, :base64_filter, :cdn_filter].each do |name|
101
+ [:bundle_filter, :compress_filter, :base64_filter, :cdn_filter].each do |name|
88
102
  filters << filters_hash[name] if Settings.filter_used?(name) && filters_hash[name]
89
103
  end
90
104
  filters
@@ -101,21 +115,6 @@ module WebResourceBundler
101
115
  filters
102
116
  end
103
117
 
104
- #creates logger object with new log file in rails_app/log
105
- #or appends to existing log file, log dir also created
106
- #all exception catched
107
- def create_logger(log_path)
108
- begin
109
- log_dir = File.dirname(log_path)
110
- Dir.mkdir(log_dir) unless File.exist?(log_dir)
111
- file = File.open(log_path, File::WRONLY | File::APPEND | File::CREAT)
112
- logger = Logger.new(file)
113
- rescue Exception => e
114
- raise WebResourceBundler::Exceptions::LogCreationError.new(log_path, e.to_s)
115
- end
116
- logger
117
- end
118
-
119
118
  #creates a clone of block_data to calculate resulted file names
120
119
  #all filters applied to block_data
121
120
  #if resulted bundle files exists - we considering bundle up to date
@@ -1,8 +1,8 @@
1
1
  module WebResourceBundler
2
2
  module BlockParser
3
3
 
4
- CONDITIONAL_BLOCK_PATTERN = /<!--\s*\[\s*if[^>]*IE\s*\d*[^>]*\]\s*>(.*?)<!\s*\[\s*endif\s*\]\s*-->/
5
- CONDITION_PATTERN = /<!--\s*(\[[^<]*\])\s*>/
4
+ CONDITIONAL_BLOCK_PATTERN = /<!--\s*\[\s*if[^>]*IE\s*\d*[^>]*\]\s*>(.*?)<!\s*\[\s*endif\s*\]\s*-->/xmi
5
+ CONDITION_PATTERN = /<!--\s*(\[[^<]*\])\s*>/xmi
6
6
  LINK_PATTERN = /(<(link|script[^>]*?src\s*=).*?(><\/script>|>))/i
7
7
  URL_PATTERN = /(href|src) *= *["']([^"'?]+)/i
8
8
 
@@ -15,6 +15,10 @@ module WebResourceBundler
15
15
  File.join(@resource_dir, relative_path)
16
16
  end
17
17
 
18
+ def cache_path_with_prefix(prefix, path)
19
+ File.join(@cache_dir, prefix + File.basename(path))
20
+ end
21
+
18
22
  def exist?(relative_path)
19
23
  File.exist? full_path(relative_path)
20
24
  end
@@ -2,13 +2,15 @@ require 'filters/base_filter'
2
2
  require 'filters/image_encode_filter'
3
3
  require 'filters/bundle_filter'
4
4
  require 'filters/cdn_filter'
5
+ require 'filters/compress_filter'
5
6
 
6
7
  module WebResourceBundler
7
8
  module Filters
8
9
  FILTER_NAMES = {
9
- :bundle_filter => BundleFilter,
10
- :base64_filter => ImageEncodeFilter,
11
- :cdn_filter => CdnFilter
10
+ :bundle_filter => BundleFilter,
11
+ :base64_filter => ImageEncodeFilter,
12
+ :cdn_filter => CdnFilter,
13
+ :compress_filter => CompressFilter
12
14
  }
13
15
  end
14
16
  end
@@ -5,7 +5,7 @@ module WebResourceBundler
5
5
  attr_reader :settings
6
6
 
7
7
  def initialize(settings, file_manager)
8
- @settings = settings
8
+ @settings = settings
9
9
  @file_manager = file_manager
10
10
  end
11
11
 
@@ -13,8 +13,8 @@ module WebResourceBundler
13
13
  @settings = settings
14
14
  end
15
15
 
16
- def apply(block_data = nil)
17
- #applies filter to block_data
16
+ def apply!(block_data = nil)
17
+ raise NotImplementedError.new
18
18
  end
19
19
 
20
20
  end
@@ -48,7 +48,7 @@ module WebResourceBundler::Filters::BundleFilter
48
48
  items = [type[:name] + '_' + get_md5(files)]
49
49
  items += @settings[:filename_additional_data] if @settings[:filename_additional_data]
50
50
  items << type[:ext]
51
- File.join(@settings[:cache_dir], items.join('.'))
51
+ @file_manager.cache_path_with_prefix('', items.join('.'))
52
52
  end
53
53
 
54
54
  #just aliases to simplify code
@@ -40,7 +40,7 @@ module WebResourceBundler::Filters::BundleFilter
40
40
  paths = []
41
41
  content.gsub!(IMPORT_PTR) do |result|
42
42
  path = $1
43
- paths << File.join(File.dirname(base_file_path), path) if path
43
+ paths << File.join(File.dirname(base_file_path), path) if path && File.extname(path) == '.css'
44
44
  ""
45
45
  end
46
46
  paths
@@ -56,11 +56,10 @@ module WebResourceBundler::Filters::BundleFilter
56
56
 
57
57
  #created resource files using imported files paths
58
58
  def build_imported_files(imported_file_paths)
59
- files = []
60
- imported_file_paths.map do |path|
61
- files << WebResourceBundler::ResourceFile.new_css_file(path, @file_manager.get_content(path)) if File.basename(path).split('.')[-1] == 'css'
59
+ imported_file_paths.inject([]) do |files, path|
60
+ files << WebResourceBundler::ResourceFile.new_css_file(path, @file_manager.get_content(path))
61
+ files
62
62
  end
63
- files
64
63
  end
65
64
 
66
65
  end
@@ -19,7 +19,7 @@ module WebResourceBundler::Filters::CdnFilter
19
19
  private
20
20
 
21
21
  def new_filepath(path)
22
- File.join(@settings[:cache_dir], FILE_PREFIX + File.basename(path))
22
+ @file_manager.cache_path_with_prefix(FILE_PREFIX, path)
23
23
  end
24
24
 
25
25
  #insures that image linked to one particular host
@@ -0,0 +1,50 @@
1
+ module WebResourceBundler::Filters::CompressFilter
2
+ class Filter < WebResourceBundler::Filters::BaseFilter
3
+
4
+ FILE_PREFIX = 'min_'
5
+
6
+ def initialize(settings, file_manager)
7
+ super(settings, file_manager)
8
+ @js_compressor = YUI::JavaScriptCompressor.new(:munge => settings[:obfuscate_js])
9
+ @css_compressor = YUI::CssCompressor.new
10
+ end
11
+
12
+ def set_settings(settings)
13
+ if @settings[:obfuscate_js] != settings[:obfuscate_js]
14
+ @js_compressor = YUI::JavaScriptCompressor.new(:munge => settings[:obfuscate_js])
15
+ end
16
+ @settings = settings
17
+ end
18
+
19
+ def apply!(block_data)
20
+ compress_styles!(block_data.styles)
21
+ compress_scripts!(block_data.scripts)
22
+ block_data
23
+ end
24
+
25
+ protected
26
+
27
+ def compress_scripts!(scripts)
28
+ scripts.each do |file|
29
+ file.content = @js_compressor.compress(file.content) unless file.content.empty?
30
+ file.path = new_js_path(file.path)
31
+ end
32
+ end
33
+
34
+ def compress_styles!(styles)
35
+ styles.each do |file|
36
+ file.content = @css_compressor.compress(file.content) unless file.content.empty?
37
+ file.path = new_css_path(file.path)
38
+ end
39
+ end
40
+
41
+ def new_css_path(path)
42
+ @file_manager.cache_path_with_prefix(FILE_PREFIX, path)
43
+ end
44
+
45
+ def new_js_path(path)
46
+ @file_manager.cache_path_with_prefix(FILE_PREFIX, path)
47
+ end
48
+
49
+ end
50
+ end
@@ -25,7 +25,6 @@ module WebResourceBundler::Filters::ImageEncodeFilter
25
25
  #also its type changed to CSS because from this point it is valid only for
26
26
  #normal browsers and IE > 7
27
27
  def apply!(block_data)
28
- new_files = []
29
28
  block_data.styles.each do |file|
30
29
  base_name = file.path
31
30
  mhtml_css_file = create_mhtml_css_file(file)
@@ -36,8 +35,7 @@ module WebResourceBundler::Filters::ImageEncodeFilter
36
35
  images = change_images_to_mhtml_links!(mhtml_css_file, mhtml_filepath(base_name))
37
36
  mhtml_file.content = @generator.construct_mhtml_content(images.values)
38
37
  end
39
- block_data.files << mhtml_css_file
40
- block_data.files << mhtml_file
38
+ block_data.files << mhtml_css_file << mhtml_file
41
39
  end
42
40
  block_data
43
41
  end
@@ -71,13 +69,13 @@ module WebResourceBundler::Filters::ImageEncodeFilter
71
69
  end
72
70
 
73
71
  #path to new file for IE with images encoded in it
74
- def mhtml_css_filepath(base_file_path)
75
- File.join(@settings[:cache_dir], IE_FILE_PREFIX + File.basename(base_file_path))
72
+ def mhtml_css_filepath(path)
73
+ @file_manager.cache_path_with_prefix(IE_FILE_PREFIX, path)
76
74
  end
77
75
 
78
76
  #path to file with mhtml content for IE
79
77
  def mhtml_filepath(base_file_path)
80
- File.join(@settings[:cache_dir], MHTML_FILE_PREFIX + File.basename(base_file_path, '.css') + '.mhtml')
78
+ @file_manager.cache_path_with_prefix(MHTML_FILE_PREFIX, File.basename(base_file_path, '.css') + '.mhtml')
81
79
  end
82
80
 
83
81
  end
@@ -74,8 +74,8 @@ module WebResourceBundler
74
74
  def encode_images_basic!(content)
75
75
  images = {}
76
76
  content.gsub!(PATTERN) do |s|
77
- tag = $1
78
- url = $3
77
+ tag, url = $1, $3
78
+ next if URI.parse(url).absolute?
79
79
  data = ImageData.new(url, @settings[:resource_dir])
80
80
  if !url.empty? && data.exist && data.size <= image_size_limit && block_given?
81
81
  images[url] = data unless images[url]
@@ -44,9 +44,7 @@ module WebResourceBundler
44
44
  private
45
45
 
46
46
  def report_problem_if_file_not_found
47
- if WebResourceBundler::Bundler.logger && !URI.parse(@path).absolute? && !@exist
48
- WebResourceBundler::Bundler.logger.info("Image not found #{@path}")
49
- end
47
+ WebResourceBundler::Bundler.logger_error("Image not found #{@path}") unless @exist
50
48
  end
51
49
 
52
50
  end
@@ -0,0 +1,10 @@
1
+ require 'rails'
2
+
3
+ module WebResourceBundler
4
+ class Railtie < Rails::Railtie
5
+ initializer "web_resource_bundler_initializer.configure_rails_initialization" do
6
+ WebResourceBundler::Bundler.setup(Rails.root, Rails.env)
7
+ ActionView::Base.send(:include, WebResourceBundler::RailsAppHelpers)
8
+ end
9
+ end
10
+ end
@@ -1,11 +1,10 @@
1
1
  require 'yaml'
2
2
  class WebResourceBundler::Settings
3
3
 
4
- DEFAULT_LOG_PATH = 'log/web_resource_bundler.log'
5
4
  DEFAULT_RESOURCE_DIR = 'public'
6
5
  DEFAULT_SETTINGS_PATH = 'config/web_resource_bundler.yml'
7
6
  DEFAULT_CACHE_DIR = 'cache'
8
- OBLIGATORY_SETTINGS = [:resource_dir, :log_path, :cache_dir]
7
+ OBLIGATORY_SETTINGS = [:resource_dir, :cache_dir]
9
8
 
10
9
  class << self
11
10
 
@@ -71,19 +70,22 @@ class WebResourceBundler::Settings
71
70
  #creates defaults settings
72
71
  def defaults(rails_root)
73
72
  {
74
- :resource_dir => File.join(rails_root, DEFAULT_RESOURCE_DIR),
75
- :log_path => File.join(rails_root, DEFAULT_LOG_PATH),
76
- :cache_dir => DEFAULT_CACHE_DIR,
77
- :bundle_filter => {
78
- :use => true
79
- },
80
- :cdn_filter => {
81
- :use => false
82
- },
83
- :base64_filter => {
84
- :use => true,
85
- :max_image_size => 20
86
- }
73
+ :resource_dir => File.join(rails_root, DEFAULT_RESOURCE_DIR),
74
+ :cache_dir => DEFAULT_CACHE_DIR,
75
+ :bundle_filter => {
76
+ :use => true
77
+ },
78
+ :cdn_filter => {
79
+ :use => false
80
+ },
81
+ :base64_filter => {
82
+ :use => true,
83
+ :max_image_size => 20
84
+ },
85
+ :compress_filter => {
86
+ :use => false,
87
+ :obfuscate_js => true
88
+ }
87
89
  }
88
90
  end
89
91
 
data/spec/spec_helper.rb CHANGED
@@ -42,6 +42,10 @@ def settings
42
42
  :use => true,
43
43
  :http_hosts => ['http://localhost:3000'],
44
44
  :https_hosts => ['https://localhost:3000']
45
+ },
46
+ :compress_filter => {
47
+ :use => true,
48
+ :obfuscate_js => true
45
49
  }
46
50
  }
47
51
  end
@@ -26,10 +26,6 @@ describe WebResourceBundler::Filters::BundleFilter::ResourcePackager do
26
26
  styles.include?(file.path).should be_true
27
27
  end
28
28
  end
29
- it "should return empty array if paths are not css" do
30
- files = @file_packager.send(:build_imported_files, scripts)
31
- files.should be_empty
32
- end
33
29
  end
34
30
 
35
31
  describe "#bundle_files" do
@@ -0,0 +1,80 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "../../spec_helper"))
2
+ describe WebResourceBundler::Filters::CompressFilter do
3
+ before(:each) do
4
+ @styles = [WebResourceBundler::ResourceFile.new_css_file('1.css',
5
+ <<-CONTENT
6
+ a:link {
7
+ text-decoration: none;
8
+ background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA8gAAAATCAIAAADD') no-repeat 0 0;
9
+ color: red;
10
+ font-size: 12pt;
11
+ }
12
+ CONTENT
13
+ )]
14
+ @scripts = [WebResourceBundler::ResourceFile.new_css_file('1.css', '(function () { var foo={};foo["bar"]="baz"; })()')]
15
+ end
16
+
17
+ subject do
18
+ file_manager = FileManager.new(settings)
19
+ WebResourceBundler::Filters::CompressFilter::Filter.new({:obfuscate_js => false}, file_manager)
20
+ end
21
+
22
+ describe "#new_css_path" do
23
+ it "should return new css file path with prefix min" do
24
+ subject.send(:new_css_path, '/images/1.css').should == File.join(settings[:cache_dir], "min_1.css")
25
+ end
26
+ end
27
+
28
+ describe "#new_css_path" do
29
+ it "should return new js file path with prefix min" do
30
+ subject.send(:new_js_path, '/images/1.js').should == File.join(settings[:cache_dir], 'min_1.js')
31
+ end
32
+ end
33
+
34
+ describe "#compress_styles" do
35
+ it "should compress css" do
36
+ file = subject.send(:compress_styles!, @styles).first
37
+ file.content.should == "a:link{text-decoration:none;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA8gAAAATCAIAAADD') no-repeat 0 0;color:red;font-size:12pt}"
38
+ end
39
+ end
40
+
41
+ describe "#compress_scripts" do
42
+ it "should compress js" do
43
+ file = subject.send(:compress_scripts!, @scripts).first
44
+ file.content.should == "(function(){var foo={};foo.bar=\"baz\"})();"
45
+ end
46
+ end
47
+
48
+ describe "#set_settings" do
49
+
50
+ it "should change settings" do
51
+ subject.set_settings({:a => 23})
52
+ subject.settings.should == {:a => 23}
53
+ end
54
+
55
+ it "should change js filter if obfuscation changed" do
56
+ old_id = subject.instance_variable_get("@js_compressor").object_id
57
+ obfuscate = !subject.settings[:obfuscate_js]
58
+ subject.set_settings({:obfuscate_js => obfuscate})
59
+ subject.instance_variable_get("@js_compressor").object_id.should_not equal(old_id)
60
+ end
61
+
62
+ end
63
+
64
+ context "obfuscating setted to false" do
65
+
66
+ subject do
67
+ file_manager = FileManager.new(settings)
68
+ WebResourceBundler::Filters::CompressFilter::Filter.new({:obfuscate_js => true}, file_manager)
69
+ end
70
+
71
+ describe "#compress_scripts" do
72
+ it "should compress js" do
73
+ file = subject.send(:compress_scripts!, @scripts).first
74
+ file.content.should == "(function(){var a={};a.bar=\"baz\"})();"
75
+ end
76
+ end
77
+
78
+ end
79
+ end
80
+
@@ -11,7 +11,6 @@ describe WebResourceBundler::Settings do
11
11
  root = '/root'
12
12
  settings = Settings.send(:defaults, root)
13
13
  settings[:resource_dir].should == File.join(root, Settings::DEFAULT_RESOURCE_DIR)
14
- settings[:log_path].should == File.join(root, Settings::DEFAULT_LOG_PATH)
15
14
  settings[:cache_dir].should == Settings::DEFAULT_CACHE_DIR
16
15
  settings[:bundle_filter][:use].should == true
17
16
  settings[:cdn_filter][:use].should == false
@@ -7,12 +7,6 @@ module WebResourceBundler
7
7
  @bundler = WebResourceBundler::Bundler
8
8
  end
9
9
 
10
- describe "#initialize" do
11
- it "sets instance state correctly" do
12
- @bundler.logger.should == nil
13
- end
14
- end
15
-
16
10
  context "#bundler setup called" do
17
11
  before(:each) do
18
12
  @bundler.setup(root_dir, 'development')
@@ -22,15 +16,15 @@ module WebResourceBundler
22
16
  it "returns array of filters that has :use => true in settings" do
23
17
  @bundler.set_settings(@s)
24
18
  filters = @bundler.send("filters_array", @bundler.filters)
25
- filters.size.should == 3
26
- @bundler.filters.size.should == 3
27
- i = 2
28
- %w{cdn_filter bundle_filter base64_filter}.each do |s|
19
+ filters.size.should == 4
20
+ @bundler.filters.size.should == 4
21
+ i = 3
22
+ %w{cdn_filter bundle_filter base64_filter compress_filter}.each do |s|
29
23
  @s[s.to_sym][:use] = false
30
24
  @bundler.set_settings(@s)
31
25
  filters = @bundler.send("filters_array", @bundler.filters)
32
26
  filters.size.should == i
33
- @bundler.filters.size.should == 3
27
+ @bundler.filters.size.should == 4
34
28
  i -= 1
35
29
  end
36
30
  end
@@ -44,6 +38,7 @@ module WebResourceBundler
44
38
  it "inits filters if no filters were initialized before" do
45
39
  @bundler.filters.should == {}
46
40
  @bundler.send("set_filters", @bundler.filters, @bundler.instance_variable_get("@file_manager"))
41
+ #only 3 filters used by defaults
47
42
  @bundler.filters.size.should == 3
48
43
  end
49
44
  it "sets filters settings if filters already inited" do
@@ -58,26 +53,6 @@ module WebResourceBundler
58
53
  end
59
54
  end
60
55
 
61
-
62
- describe "#create_logger" do
63
-
64
- it "creates log directory if it's unexistent" do
65
- log_dir_path = File.dirname(Settings.settings[:log_path])
66
- FileUtils.rm_rf(log_dir_path)
67
- @bundler.send("create_logger", Settings.settings[:log_path])
68
- File.exist?(log_dir_path).should be_true
69
- FileUtils.rm_rf(log_dir_path)
70
- end
71
-
72
- it "sets log_path in settings if it isn't specified" do
73
- path = Settings.settings[:log_path]
74
- @bundler.send("create_logger", path)
75
- File.exist?(path).should be_true
76
- File.delete(path)
77
- end
78
-
79
- end
80
-
81
56
  describe "#process" do
82
57
  it "returns the same filenames when bundling or just computing resulted files" do
83
58
  @bundler.set_settings(settings)
metadata CHANGED
@@ -5,16 +5,17 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 21
9
- version: 0.0.21
8
+ - 22
9
+ version: 0.0.22
10
10
  platform: ruby
11
11
  authors:
12
12
  - gregolsen
13
+ - amishyn
13
14
  autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2011-02-09 00:00:00 +02:00
18
+ date: 2011-06-29 00:00:00 +03:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
@@ -32,6 +33,21 @@ dependencies:
32
33
  version: 1.3.1
33
34
  type: :development
34
35
  version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: yui-compressor
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ segments:
45
+ - 0
46
+ - 9
47
+ - 6
48
+ version: 0.9.6
49
+ type: :runtime
50
+ version_requirements: *id002
35
51
  description: this lib could bundle you css/js files in single file, encode images in base64, rewrite images urls to your cdn hosts
36
52
  email: anotheroneman@yahoo.com
37
53
  executables: []
@@ -41,62 +57,60 @@ extensions: []
41
57
  extra_rdoc_files: []
42
58
 
43
59
  files:
44
- - Gemfile
45
- - Gemfile.lock
46
60
  - Rakefile
47
61
  - Readme.md
48
- - VERSION
49
62
  - lib/web_resource_bundler.rb
50
- - lib/web_resource_bundler/content_management/block_data.rb
51
- - lib/web_resource_bundler/content_management/block_parser.rb
52
- - lib/web_resource_bundler/content_management/css_url_rewriter.rb
53
- - lib/web_resource_bundler/content_management/resource_file.rb
54
63
  - lib/web_resource_bundler/exceptions.rb
64
+ - lib/web_resource_bundler/railtie.rb
65
+ - lib/web_resource_bundler/rails_app_helpers.rb
55
66
  - lib/web_resource_bundler/file_manager.rb
56
67
  - lib/web_resource_bundler/filters.rb
57
- - lib/web_resource_bundler/filters/base_filter.rb
58
- - lib/web_resource_bundler/filters/bundle_filter.rb
59
- - lib/web_resource_bundler/filters/bundle_filter/resource_packager.rb
68
+ - lib/web_resource_bundler/settings.rb
60
69
  - lib/web_resource_bundler/filters/cdn_filter.rb
70
+ - lib/web_resource_bundler/filters/base_filter.rb
61
71
  - lib/web_resource_bundler/filters/image_encode_filter.rb
62
72
  - lib/web_resource_bundler/filters/image_encode_filter/css_generator.rb
63
73
  - lib/web_resource_bundler/filters/image_encode_filter/image_data.rb
64
- - lib/web_resource_bundler/rails_app_helpers.rb
65
- - lib/web_resource_bundler/settings.rb
66
- - lib/web_resource_bundler/web_resource_bundler_init.rb
67
- - spec/sample_block_helper.rb
74
+ - lib/web_resource_bundler/filters/compress_filter.rb
75
+ - lib/web_resource_bundler/filters/bundle_filter.rb
76
+ - lib/web_resource_bundler/filters/bundle_filter/resource_packager.rb
77
+ - lib/web_resource_bundler/content_management/css_url_rewriter.rb
78
+ - lib/web_resource_bundler/content_management/block_data.rb
79
+ - lib/web_resource_bundler/content_management/resource_file.rb
80
+ - lib/web_resource_bundler/content_management/block_parser.rb
68
81
  - spec/spec_helper.rb
69
- - spec/test_data/config/web_resource_bundler.yml
70
- - spec/test_data/public/foo.css
71
- - spec/test_data/public/images/good.jpg
72
- - spec/test_data/public/images/logo.jpg
82
+ - spec/web_resource_bundler/web_resource_bundler_spec.rb
83
+ - spec/web_resource_bundler/settings_spec.rb
84
+ - spec/web_resource_bundler/file_manager_spec.rb
85
+ - spec/web_resource_bundler/filters/image_encode_filter/image_data_spec.rb
86
+ - spec/web_resource_bundler/filters/image_encode_filter/filter_spec.rb
87
+ - spec/web_resource_bundler/filters/image_encode_filter/css_generator_spec.rb
88
+ - spec/web_resource_bundler/filters/compress_filter_spec.rb
89
+ - spec/web_resource_bundler/filters/cdn_filter_spec.rb
90
+ - spec/web_resource_bundler/filters/bundle_filter/resource_packager_spec.rb
91
+ - spec/web_resource_bundler/filters/bundle_filter/filter_spec.rb
92
+ - spec/web_resource_bundler/content_management/resource_file_spec.rb
93
+ - spec/web_resource_bundler/content_management/block_data_spec.rb
94
+ - spec/web_resource_bundler/content_management/css_url_rewriter_spec.rb
95
+ - spec/web_resource_bundler/content_management/block_parser_spec.rb
96
+ - spec/test_data/public/sample.css
73
97
  - spec/test_data/public/images/sdfo.jpg
98
+ - spec/test_data/public/images/logo.jpg
99
+ - spec/test_data/public/images/good.jpg
74
100
  - spec/test_data/public/images/too_big_image.jpg
75
- - spec/test_data/public/marketing.js
76
- - spec/test_data/public/salog20.js
77
- - spec/test_data/public/sample.css
101
+ - spec/test_data/public/test.css
78
102
  - spec/test_data/public/seal.js
79
- - spec/test_data/public/set_cookies.js
80
- - spec/test_data/public/styles/boo.css
81
- - spec/test_data/public/styles/for_import.css
82
103
  - spec/test_data/public/temp.css
83
- - spec/test_data/public/test.css
84
- - spec/web_resource_bundler/content_management/block_data_spec.rb
85
- - spec/web_resource_bundler/content_management/block_parser_spec.rb
86
- - spec/web_resource_bundler/content_management/css_url_rewriter_spec.rb
87
- - spec/web_resource_bundler/content_management/resource_file_spec.rb
88
- - spec/web_resource_bundler/file_manager_spec.rb
89
- - spec/web_resource_bundler/filters/bundle_filter/filter_spec.rb
90
- - spec/web_resource_bundler/filters/bundle_filter/resource_packager_spec.rb
91
- - spec/web_resource_bundler/filters/cdn_filter_spec.rb
92
- - spec/web_resource_bundler/filters/image_encode_filter/css_generator_spec.rb
93
- - spec/web_resource_bundler/filters/image_encode_filter/filter_spec.rb
94
- - spec/web_resource_bundler/filters/image_encode_filter/image_data_spec.rb
95
- - spec/web_resource_bundler/settings_spec.rb
96
- - spec/web_resource_bundler/web_resource_bundler_spec.rb
97
- - web_resource_bundler.gemspec
104
+ - spec/test_data/public/salog20.js
105
+ - spec/test_data/public/foo.css
106
+ - spec/test_data/public/styles/for_import.css
107
+ - spec/test_data/public/styles/boo.css
108
+ - spec/test_data/public/set_cookies.js
109
+ - spec/test_data/public/marketing.js
110
+ - spec/test_data/config/web_resource_bundler.yml
111
+ - spec/sample_block_helper.rb
98
112
  has_rdoc: true
99
- homepage: https://github.com/railsware/web-bundler
113
+ homepage: http://wrb.railsware.com/
100
114
  licenses: []
101
115
 
102
116
  post_install_message:
@@ -126,20 +140,36 @@ rubyforge_project:
126
140
  rubygems_version: 1.3.7
127
141
  signing_key:
128
142
  specification_version: 3
129
- summary: lib for css and js content bundling and managment
143
+ summary: lib for css and js content bundling and management
130
144
  test_files:
131
- - spec/sample_block_helper.rb
132
145
  - spec/spec_helper.rb
133
- - spec/web_resource_bundler/content_management/block_data_spec.rb
134
- - spec/web_resource_bundler/content_management/block_parser_spec.rb
135
- - spec/web_resource_bundler/content_management/css_url_rewriter_spec.rb
136
- - spec/web_resource_bundler/content_management/resource_file_spec.rb
146
+ - spec/web_resource_bundler/web_resource_bundler_spec.rb
147
+ - spec/web_resource_bundler/settings_spec.rb
137
148
  - spec/web_resource_bundler/file_manager_spec.rb
138
- - spec/web_resource_bundler/filters/bundle_filter/filter_spec.rb
139
- - spec/web_resource_bundler/filters/bundle_filter/resource_packager_spec.rb
140
- - spec/web_resource_bundler/filters/cdn_filter_spec.rb
141
- - spec/web_resource_bundler/filters/image_encode_filter/css_generator_spec.rb
142
- - spec/web_resource_bundler/filters/image_encode_filter/filter_spec.rb
143
149
  - spec/web_resource_bundler/filters/image_encode_filter/image_data_spec.rb
144
- - spec/web_resource_bundler/settings_spec.rb
145
- - spec/web_resource_bundler/web_resource_bundler_spec.rb
150
+ - spec/web_resource_bundler/filters/image_encode_filter/filter_spec.rb
151
+ - spec/web_resource_bundler/filters/image_encode_filter/css_generator_spec.rb
152
+ - spec/web_resource_bundler/filters/compress_filter_spec.rb
153
+ - spec/web_resource_bundler/filters/cdn_filter_spec.rb
154
+ - spec/web_resource_bundler/filters/bundle_filter/resource_packager_spec.rb
155
+ - spec/web_resource_bundler/filters/bundle_filter/filter_spec.rb
156
+ - spec/web_resource_bundler/content_management/resource_file_spec.rb
157
+ - spec/web_resource_bundler/content_management/block_data_spec.rb
158
+ - spec/web_resource_bundler/content_management/css_url_rewriter_spec.rb
159
+ - spec/web_resource_bundler/content_management/block_parser_spec.rb
160
+ - spec/test_data/public/sample.css
161
+ - spec/test_data/public/images/sdfo.jpg
162
+ - spec/test_data/public/images/logo.jpg
163
+ - spec/test_data/public/images/good.jpg
164
+ - spec/test_data/public/images/too_big_image.jpg
165
+ - spec/test_data/public/test.css
166
+ - spec/test_data/public/seal.js
167
+ - spec/test_data/public/temp.css
168
+ - spec/test_data/public/salog20.js
169
+ - spec/test_data/public/foo.css
170
+ - spec/test_data/public/styles/for_import.css
171
+ - spec/test_data/public/styles/boo.css
172
+ - spec/test_data/public/set_cookies.js
173
+ - spec/test_data/public/marketing.js
174
+ - spec/test_data/config/web_resource_bundler.yml
175
+ - spec/sample_block_helper.rb
data/Gemfile DELETED
@@ -1,2 +0,0 @@
1
- source "http://rubygems.org"
2
- gem "rspec", '1.3.1'
data/Gemfile.lock DELETED
@@ -1,10 +0,0 @@
1
- GEM
2
- remote: http://rubygems.org/
3
- specs:
4
- rspec (1.3.1)
5
-
6
- PLATFORMS
7
- ruby
8
-
9
- DEPENDENCIES
10
- rspec (= 1.3.1)
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.0.21
@@ -1,3 +0,0 @@
1
- WebResourceBundler::Bundler.setup(Rails.root, Rails.env)
2
- ActionView::Base.send(:include, WebResourceBundler::RailsAppHelpers)
3
-
@@ -1,106 +0,0 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
- # -*- encoding: utf-8 -*-
5
-
6
- Gem::Specification.new do |s|
7
- s.name = %q{web_resource_bundler}
8
- s.version = "0.0.21"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["gregolsen"]
12
- s.date = %q{2011-02-09}
13
- s.description = %q{this lib could bundle you css/js files in single file, encode images in base64, rewrite images urls to your cdn hosts}
14
- s.email = %q{anotheroneman@yahoo.com}
15
- s.files = [
16
- "Gemfile",
17
- "Gemfile.lock",
18
- "Rakefile",
19
- "Readme.md",
20
- "VERSION",
21
- "lib/web_resource_bundler.rb",
22
- "lib/web_resource_bundler/content_management/block_data.rb",
23
- "lib/web_resource_bundler/content_management/block_parser.rb",
24
- "lib/web_resource_bundler/content_management/css_url_rewriter.rb",
25
- "lib/web_resource_bundler/content_management/resource_file.rb",
26
- "lib/web_resource_bundler/exceptions.rb",
27
- "lib/web_resource_bundler/file_manager.rb",
28
- "lib/web_resource_bundler/filters.rb",
29
- "lib/web_resource_bundler/filters/base_filter.rb",
30
- "lib/web_resource_bundler/filters/bundle_filter.rb",
31
- "lib/web_resource_bundler/filters/bundle_filter/resource_packager.rb",
32
- "lib/web_resource_bundler/filters/cdn_filter.rb",
33
- "lib/web_resource_bundler/filters/image_encode_filter.rb",
34
- "lib/web_resource_bundler/filters/image_encode_filter/css_generator.rb",
35
- "lib/web_resource_bundler/filters/image_encode_filter/image_data.rb",
36
- "lib/web_resource_bundler/rails_app_helpers.rb",
37
- "lib/web_resource_bundler/settings.rb",
38
- "lib/web_resource_bundler/web_resource_bundler_init.rb",
39
- "spec/sample_block_helper.rb",
40
- "spec/spec_helper.rb",
41
- "spec/test_data/config/web_resource_bundler.yml",
42
- "spec/test_data/public/foo.css",
43
- "spec/test_data/public/images/good.jpg",
44
- "spec/test_data/public/images/logo.jpg",
45
- "spec/test_data/public/images/sdfo.jpg",
46
- "spec/test_data/public/images/too_big_image.jpg",
47
- "spec/test_data/public/marketing.js",
48
- "spec/test_data/public/salog20.js",
49
- "spec/test_data/public/sample.css",
50
- "spec/test_data/public/seal.js",
51
- "spec/test_data/public/set_cookies.js",
52
- "spec/test_data/public/styles/boo.css",
53
- "spec/test_data/public/styles/for_import.css",
54
- "spec/test_data/public/temp.css",
55
- "spec/test_data/public/test.css",
56
- "spec/web_resource_bundler/content_management/block_data_spec.rb",
57
- "spec/web_resource_bundler/content_management/block_parser_spec.rb",
58
- "spec/web_resource_bundler/content_management/css_url_rewriter_spec.rb",
59
- "spec/web_resource_bundler/content_management/resource_file_spec.rb",
60
- "spec/web_resource_bundler/file_manager_spec.rb",
61
- "spec/web_resource_bundler/filters/bundle_filter/filter_spec.rb",
62
- "spec/web_resource_bundler/filters/bundle_filter/resource_packager_spec.rb",
63
- "spec/web_resource_bundler/filters/cdn_filter_spec.rb",
64
- "spec/web_resource_bundler/filters/image_encode_filter/css_generator_spec.rb",
65
- "spec/web_resource_bundler/filters/image_encode_filter/filter_spec.rb",
66
- "spec/web_resource_bundler/filters/image_encode_filter/image_data_spec.rb",
67
- "spec/web_resource_bundler/settings_spec.rb",
68
- "spec/web_resource_bundler/web_resource_bundler_spec.rb",
69
- "web_resource_bundler.gemspec"
70
- ]
71
- s.homepage = %q{https://github.com/railsware/web-bundler}
72
- s.require_paths = ["lib"]
73
- s.rubygems_version = %q{1.3.7}
74
- s.summary = %q{lib for css and js content bundling and managment}
75
- s.test_files = [
76
- "spec/sample_block_helper.rb",
77
- "spec/spec_helper.rb",
78
- "spec/web_resource_bundler/content_management/block_data_spec.rb",
79
- "spec/web_resource_bundler/content_management/block_parser_spec.rb",
80
- "spec/web_resource_bundler/content_management/css_url_rewriter_spec.rb",
81
- "spec/web_resource_bundler/content_management/resource_file_spec.rb",
82
- "spec/web_resource_bundler/file_manager_spec.rb",
83
- "spec/web_resource_bundler/filters/bundle_filter/filter_spec.rb",
84
- "spec/web_resource_bundler/filters/bundle_filter/resource_packager_spec.rb",
85
- "spec/web_resource_bundler/filters/cdn_filter_spec.rb",
86
- "spec/web_resource_bundler/filters/image_encode_filter/css_generator_spec.rb",
87
- "spec/web_resource_bundler/filters/image_encode_filter/filter_spec.rb",
88
- "spec/web_resource_bundler/filters/image_encode_filter/image_data_spec.rb",
89
- "spec/web_resource_bundler/settings_spec.rb",
90
- "spec/web_resource_bundler/web_resource_bundler_spec.rb"
91
- ]
92
-
93
- if s.respond_to? :specification_version then
94
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
95
- s.specification_version = 3
96
-
97
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
98
- s.add_development_dependency(%q<rspec>, ["= 1.3.1"])
99
- else
100
- s.add_dependency(%q<rspec>, ["= 1.3.1"])
101
- end
102
- else
103
- s.add_dependency(%q<rspec>, ["= 1.3.1"])
104
- end
105
- end
106
-