web_resource_bundler 0.0.21 → 0.0.22

Sign up to get free protection for your applications and to get access to all the features.
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
-