web_resource_bundler 0.0.13 → 0.0.14

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/README CHANGED
@@ -5,6 +5,7 @@ Content:
5
5
  2. Functional description
6
6
  3. Installation
7
7
  4. Usage
8
+ 5. Recommendations
8
9
 
9
10
  =================== 1. Purpose ===============================================
10
11
 
@@ -98,7 +99,6 @@ use <%= web_resource_bundler_process do %>
98
99
 
99
100
  And as result you'll have
100
101
 
101
-
102
102
  <link href="/cache/base64_style_d880a502addaa493b889c0970616430b.css?1290594873" media="screen" rel="stylesheet" type="text/css" />
103
103
  <script src="/cache/script_275d311037da40e9c9b8c919a8c08b55.js?1290594873" type="text/javascript"></script>
104
104
 
@@ -107,7 +107,7 @@ And as result you'll have
107
107
  <![endif]-->
108
108
 
109
109
  <!--[if lte IE 7]>
110
- <link type="text/css" rel="stylesheet" href="/cache/base64_style_ad801w02addaa493b889c0970616430b"/>
110
+ <link type="text/css" rel="stylesheet" href="/cache/base64_style_ad801w02addaa493b889c0970616430b.css?1290594873"/>
111
111
  <![endif]-->
112
112
 
113
113
  !!!
@@ -116,3 +116,28 @@ Don't forget to clean your cache directory after deploy to clean old bundles
116
116
 
117
117
  To disable bundling and see raw results add no_bundler param
118
118
  mysite.com/?no_bundler=1
119
+ ================= 5. Recommendations ===================================
120
+
121
+ 1. Be mindful while organazing and linking your resource files
122
+ WebResourceBundler combines all resource file in one. This resulted file could be huge.
123
+ a. Don't link all resources in layouts!
124
+ Be sure to link resources (css\js) only for pages that using them, in other case your users will be forced
125
+ to download huge css\js files with unused content.
126
+ b. One css for one page.
127
+ Try to slice you css files - separate file for each particular page.
128
+ c. Separate bundle block for crucial resources
129
+ To make crucial resources (basic styles\scripts for user can see basic page layout ASAP) load first - just bundle them in separate web_resource_bundler_process block and put this block at the top of your head block.
130
+
131
+ 2. Don't set max_image_size to big values.
132
+ The main reason of using Base64 filter is to avoid unnecessary server requests and minimize load time,
133
+ but when encoded image is very big, traffic overhead time (encoded image base64 code is bigger for apprx. 30% than source image size) could be bigger than request time. In this case your site could be even slower than without a WebResourceBundler.
134
+ Recommended max_image_size value is 1..20kbytes
135
+
136
+ 3. Be careful with third party scripts.
137
+ Some third party javascript libs can load another script file on the fly, relative path for this file computed
138
+ on the client side. But your scripts are bundled and their relative path changed (cache folder), that's why such script
139
+ won't be able to compute loaded file path correctly. You should avoid bundling such tricky javascripts.
140
+
141
+ 4. Unexistent resources handling
142
+ a. Be sure to link in html only existent resource files, otherwise bundler won't work.
143
+ b. If you have unexistent images in css, bundler will work but you've got info messages in log.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.13
1
+ 0.0.14
@@ -5,24 +5,18 @@ module WebResourceBundler
5
5
  attr_reader :settings
6
6
 
7
7
  def initialize(settings, file_manager)
8
- @settings = Settings.new(settings)
8
+ @settings = settings
9
9
  @file_manager = file_manager
10
10
  end
11
11
 
12
12
  def set_settings(settings)
13
- @settings.set(settings)
13
+ @settings = settings
14
14
  end
15
15
 
16
16
  def apply(block_data = nil)
17
17
  #applies filter to block_data
18
18
  end
19
19
 
20
- #resource is hash {:css => ResourceBundle::Data, :js => ResourceBundle::Data}
21
- def change_resulted_files!(resource = nil)
22
- #this method changes resource file names to resulted files paths
23
- #used to determine if resulted files exist on disk
24
- end
25
-
26
20
  end
27
21
  end
28
22
  end
@@ -30,16 +30,16 @@ module WebResourceBundler::Filters::BundleFilter
30
30
 
31
31
  def get_md5(files)
32
32
  items = [(files.map {|f| f.path }).sort]
33
- items += @settings.md5_additional_data if @settings.md5_additional_data
33
+ items += @settings[:md5_additional_data] if @settings[:md5_additional_data]
34
34
  Digest::MD5.hexdigest(items.flatten.join('|'))
35
35
  end
36
36
 
37
37
  def bundle_filepath(type, files)
38
38
  unless files.empty?
39
39
  items = [type[:name] + '_' + get_md5(files)]
40
- items += @settings.filename_additional_data if @settings.filename_additional_data
40
+ items += @settings[:filename_additional_data] if @settings[:filename_additional_data]
41
41
  items << type[:ext]
42
- return File.join(@settings.cache_dir, items.join('.'))
42
+ return File.join(@settings[:cache_dir], items.join('.'))
43
43
  else
44
44
  return nil
45
45
  end
@@ -13,16 +13,16 @@ module WebResourceBundler::Filters::CdnFilter
13
13
  end
14
14
 
15
15
  def new_filepath(path)
16
- File.join(@settings.cache_dir, 'cdn_' + File.basename(path))
16
+ File.join(@settings[:cache_dir], 'cdn_' + File.basename(path))
17
17
  end
18
18
 
19
19
  #insures that image linked to one particular host
20
20
  def host_for_image(image_url)
21
21
  #hosts are different depending on protocol
22
- if @settings.protocol == 'https'
23
- hosts = @settings.https_hosts
22
+ if @settings[:protocol] == 'https'
23
+ hosts = @settings[:https_hosts]
24
24
  else
25
- hosts = @settings.http_hosts
25
+ hosts = @settings[:http_hosts]
26
26
  end
27
27
  #getting host based on image url hash
28
28
  host_index = image_url.hash % hosts.size
@@ -13,7 +13,7 @@ module WebResourceBundler
13
13
  end
14
14
 
15
15
  def set_settings(settings)
16
- @settings.set(settings)
16
+ @settings = settings
17
17
  end
18
18
 
19
19
  #construct mhtml head of css file with definition of image data in base64
@@ -24,7 +24,7 @@ module WebResourceBundler
24
24
  result << 'Content-Type: multipart/related; boundary="' << SEPARATOR << '"' << "\n\n"
25
25
  #each image found in css should be defined in header with base64 encoded content
26
26
  images.each_key do |key|
27
- result += images[key].construct_mhtml_image_data('--' + SEPARATOR)
27
+ result << images[key].construct_mhtml_image_data('--' + SEPARATOR)
28
28
  end
29
29
  result << "\n" << '--' << SEPARATOR << '--' << "\n"
30
30
  result << "*/"
@@ -34,7 +34,7 @@ module WebResourceBundler
34
34
 
35
35
  #creates mhtml link to use in css tags instead of image url
36
36
  def construct_mhtml_link(filepath)
37
- "#{@settings.protocol}://#{File.join(@settings.domain, filepath)}"
37
+ "#{@settings[:protocol]}://#{File.join(@settings[:domain], filepath)}"
38
38
  end
39
39
 
40
40
  #iterates through all tags found in css
@@ -46,8 +46,8 @@ module WebResourceBundler
46
46
  new_content = content.gsub!(PATTERN) do |s|
47
47
  tag, url = $1, $3
48
48
  #this constructor will write in log if image doesn't exist
49
- data = ImageData.new(url, @settings.resource_dir)
50
- if !url.empty? and data.exist and data.size <= @settings.max_image_size and block_given?
49
+ data = ImageData.new(url, @settings[:resource_dir])
50
+ if !url.empty? and data.exist and data.size <= @settings[:max_image_size] and block_given?
51
51
  #using image url as key to prevent one image be encoded many times
52
52
  images[data.url] = data unless images[data.path]
53
53
  #changing string using provided block
@@ -35,9 +35,9 @@ module WebResourceBundler
35
35
  def construct_mhtml_image_data(separator)
36
36
  if @exist
37
37
  result = separator + "\n"
38
- result += "Content-Location:" + @id + "\n"
39
- result += "Content-Transfer-Encoding:base64" + "\n\n"
40
- result += encoded + "\n\n"
38
+ result << 'Content-Location:' << @id << "\n"
39
+ result << 'Content-Transfer-Encoding:base64' << "\n\n"
40
+ result << encoded << "\n\n"
41
41
  end
42
42
  end
43
43
 
@@ -39,17 +39,17 @@ module WebResourceBundler::Filters::ImageEncodeFilter
39
39
 
40
40
  #path of a new file with images encoded
41
41
  def encoded_filepath(base_file_path)
42
- File.join(@settings.cache_dir, FILE_PREFIX + File.basename(base_file_path))
42
+ File.join(@settings[:cache_dir], FILE_PREFIX + File.basename(base_file_path))
43
43
  end
44
44
 
45
45
  #path of a new file for IE with images encoded
46
46
  def encoded_filepath_for_ie(base_file_path)
47
- File.join(@settings.cache_dir, IE_FILE_PREFIX + File.basename(base_file_path))
47
+ File.join(@settings[:cache_dir], IE_FILE_PREFIX + File.basename(base_file_path))
48
48
  end
49
49
 
50
50
  #filepath of mhtml file for IE
51
51
  def mhtml_filepath(base_file_path)
52
- File.join(@settings.cache_dir, MHTML_FILE_PREFIX + File.basename(base_file_path))
52
+ File.join(@settings[:cache_dir], MHTML_FILE_PREFIX + File.basename(base_file_path))
53
53
  end
54
54
 
55
55
  end
@@ -4,7 +4,6 @@ require 'content_management/block_data'
4
4
  require 'content_management/css_url_rewriter'
5
5
  require 'content_management/resource_file'
6
6
 
7
- require 'settings'
8
7
  require 'file_manager'
9
8
  require 'logger'
10
9
  require 'filters'
@@ -26,7 +25,7 @@ module WebResourceBundler
26
25
  def initialize
27
26
  @filters = {}
28
27
  @settings = nil
29
- @file_manager = nil
28
+ @file_manager = FileManager.new('','')
30
29
  @parser = BlockParser.new
31
30
  @@logger = nil
32
31
  @settings_correct = false
@@ -36,22 +35,28 @@ module WebResourceBundler
36
35
  def set_settings(settings)
37
36
  #all methods user call from rails should not raise any exception
38
37
  begin
39
- @settings = Settings.new settings
40
- if @settings.resource_dir
41
- @@logger = create_logger(@settings)
42
- unless @settings.cache_dir
43
- @settings.cache_dir = 'cache'
38
+ @settings = settings
39
+ if @settings[:resource_dir]
40
+
41
+ #creating default log file in rails log directory called web_resource_bundler.log
42
+ unless @settings[:log_path]
43
+ log_dir = File.expand_path('../log', @settings[:resource_dir])
44
+ log_name = 'web_resource_bundler.log'
45
+ @settings[:log_path] = File.join(log_dir, log_name)
46
+ Dir.mkdir(log_dir) unless File.exist?(log_dir)
44
47
  end
45
- #if file manager is nil it should be created
46
- unless @file_manager
47
- @file_manager = FileManager.new(@settings.resource_dir, @settings.cache_dir)
48
- else
49
- #if manager already exist than its settings chaged
50
- @file_manager.resource_dir, @file_manager.cache_dir = @settings.resource_dir, @settings.cache_dir
48
+ @@logger = create_logger(@settings[:log_path]) unless @@logger
49
+
50
+ unless @settings[:cache_dir]
51
+ @settings[:cache_dir] = 'cache'
51
52
  end
53
+
54
+ @file_manager.resource_dir, @file_manager.cache_dir = @settings[:resource_dir], @settings[:cache_dir]
52
55
  set_filters(@settings, @file_manager)
53
56
  #used to determine if bundler in correct state and could be used
54
57
  @settings_correct = true
58
+ else
59
+ @settings_correct = false
55
60
  end
56
61
  rescue Exception => e
57
62
  @@logger.error("Incorrect settings initialization, #{settings}\n#{e.to_s}") if @@logger
@@ -61,30 +66,32 @@ module WebResourceBundler
61
66
 
62
67
  #main method to process html text block
63
68
  def process(block)
64
- begin
65
- filters = filters_array
66
- #parsing html text block, creating BlockData instance
67
- block_data = @parser.parse(block)
68
- #if filters set and no bundle files exists we should process block data
69
- unless filters.empty? or bundle_upto_date?(block_data)
70
- #reading files content and populating block_data
71
- read_resources!(block_data)
72
- #applying filters to block_data
69
+ if @settings_correct
70
+ begin
71
+ filters = filters_array
72
+ #parsing html text block, creating BlockData instance
73
+ block_data = @parser.parse(block)
74
+ #if filters set and no bundle files exists we should process block data
75
+ unless filters.empty? or bundle_upto_date?(block_data)
76
+ #reading files content and populating block_data
77
+ read_resources!(block_data)
78
+ #applying filters to block_data
79
+ block_data.apply_filters(filters)
80
+ #writing resulted files with filtered content on disk
81
+ write_files_on_disk(block_data)
82
+ @@logger.info("files written on disk")
83
+ return block_data
84
+ end
85
+ #bundle up to date, returning existing block with modified file names
73
86
  block_data.apply_filters(filters)
74
- #writing resulted files with filtered content on disk
75
- write_files_on_disk(block_data)
76
- @@logger.info("files written on disk")
77
87
  return block_data
88
+ rescue Exceptions::WebResourceBundlerError => e
89
+ @@logger.error(e.to_s)
90
+ return nil
91
+ rescue Exception => e
92
+ @@logger.error(e.backtrace.join("\n") + "Unknown error occured: " + e.to_s)
93
+ return nil
78
94
  end
79
- #bundle up to date, returning existing block with modified file names
80
- block_data.apply_filters(filters)
81
- return block_data
82
- rescue Exceptions::WebResourceBundlerError => e
83
- @@logger.error(e.to_s)
84
- return nil
85
- rescue Exception => e
86
- @@logger.error(e.backtrace.join("\n") + "Unknown error occured: " + e.to_s)
87
- return nil
88
95
  end
89
96
  end
90
97
 
@@ -94,7 +101,7 @@ module WebResourceBundler
94
101
  def filters_array
95
102
  filters = []
96
103
  %w{bundle_filter base64_filter cdn_filter}.each do |key|
97
- filters << @filters[key.to_sym] if @filters[key.to_sym]
104
+ filters << @filters[key.to_sym] if @settings[key.to_sym][:use] and @filters[key.to_sym]
98
105
  end
99
106
  filters
100
107
  end
@@ -103,46 +110,36 @@ module WebResourceBundler
103
110
  def set_filters(settings, file_manager)
104
111
  #common settings same for all filters
105
112
  common_sets = {
106
- :resource_dir => settings.resource_dir,
107
- :cache_dir => settings.cache_dir
113
+ :resource_dir => settings[:resource_dir],
114
+ :cache_dir => settings[:cache_dir]
108
115
  }
109
- #used to craete filters
116
+ #used to create filters
110
117
  filters_data = {
111
118
  :bundle_filter => 'BundleFilter',
112
119
  :base64_filter => 'ImageEncodeFilter',
113
120
  :cdn_filter => 'CdnFilter'
114
121
  }
115
- filters_data.each_pair do |key, filter_class|
116
- if settings[key] and settings[key][:use]
117
- filter_settings = settings[key].merge(common_sets)
118
- if @filters[key]
122
+ filters_data.each_pair do |key, filter_class|
123
+ if settings[key] and settings[key][:use]
124
+ filter_settings = settings[key].merge(common_sets)
125
+ if @filters[key]
119
126
  @filters[key].set_settings(filter_settings)
120
127
  else
121
128
  #creating filter instance with settings
122
129
  @filters[key] = eval("Filters::" + filter_class + "::Filter").new(filter_settings, file_manager)
123
130
  end
124
- else
125
- #this filter turned off in settings so should be deleted
126
- @filters.delete(key)
127
131
  end
128
132
  end
129
133
  @filters
130
134
  end
131
135
 
132
- def create_logger(settings)
136
+ def create_logger(logfile_path)
133
137
  begin
134
- #creating default log file in rails log directory called web_resource_bundler.log
135
- unless settings.log_path
136
- log_dir = File.expand_path('../log', settings.resource_dir)
137
- log_name = 'web_resource_bundler.log'
138
- settings[:log_path] = File.join(log_dir, log_name)
139
- Dir.mkdir(log_dir) unless File.exist?(log_dir)
140
- end
141
- file = File.open(settings.log_path, File::WRONLY | File::APPEND | File::CREAT)
138
+ file = File.open(logfile_path, File::WRONLY | File::APPEND | File::CREAT)
142
139
  logger = Logger.new(file)
143
140
  rescue Exception => e
144
141
  logger = Logger.new(STDOUT)
145
- logger.error("Can't create log file, check log path: #{settings.log_path}\n#{e.to_s}")
142
+ logger.error("Can't create log file, check log path: #{logfile_path}\n#{e.to_s}")
146
143
  end
147
144
  logger
148
145
  end
@@ -158,7 +155,7 @@ module WebResourceBundler
158
155
  block_data_copy.apply_filters(filters_array)
159
156
  #cheking if resulted files exist on disk in cache folder
160
157
  block_data_copy.files.each do |file|
161
- return false unless File.exist?(File.join(@settings.resource_dir, file.path))
158
+ return false unless File.exist?(File.join(@settings[:resource_dir], file.path))
162
159
  end
163
160
  true
164
161
  end
@@ -182,7 +179,7 @@ module WebResourceBundler
182
179
  def write_files_on_disk(block_data)
183
180
  @file_manager.create_cache_dir
184
181
  block_data.files.each do |file|
185
- File.open(File.join(@settings.resource_dir, file.path), "w") do |f|
182
+ File.open(File.join(@settings[:resource_dir], file.path), "w") do |f|
186
183
  f.print(file.content)
187
184
  end
188
185
  end
@@ -34,7 +34,7 @@ class SampleBlockHelper
34
34
  if content
35
35
  resource_file.content = content
36
36
  else
37
- resource_file.content = File.read(File.join(@settings.resource_dir, file))
37
+ resource_file.content = File.read(File.join(@settings[:resource_dir], file))
38
38
  end
39
39
  resource_file
40
40
  end
data/spec/spec_helper.rb CHANGED
@@ -20,10 +20,6 @@ def scripts
20
20
  end
21
21
 
22
22
  def settings
23
- Settings.new(settings_hash)
24
- end
25
-
26
- def settings_hash
27
23
  {
28
24
  :resource_dir => File.join(File.dirname(__FILE__), '/public'),
29
25
  :cache_dir => 'cache',
@@ -48,19 +44,19 @@ def settings_hash
48
44
  end
49
45
 
50
46
  def bundle_settings
51
- settings.bundle_filter.merge(common_settings)
47
+ settings[:bundle_filter].merge(common_settings)
52
48
  end
53
49
 
54
50
  def cdn_settings
55
- settings.cdn_filter.merge(common_settings)
51
+ settings[:cdn_filter].merge(common_settings)
56
52
  end
57
53
 
58
54
  def base64_settings
59
- settings.base64_filter.merge(common_settings)
55
+ settings[:base64_filter].merge(common_settings)
60
56
  end
61
57
 
62
58
  def common_settings
63
- {:resource_dir => settings.resource_dir, :cache_dir => settings.cache_dir}
59
+ {:resource_dir => settings[:resource_dir], :cache_dir => settings[:cache_dir]}
64
60
  end
65
61
 
66
62
 
@@ -74,8 +70,8 @@ Spec::Runner.configure do |config|
74
70
  end
75
71
 
76
72
  config.after(:all) do
77
- File.delete(settings.log_path) if File.exist?(settings.log_path)
78
- log_path = File.expand_path('../log', settings.resource_dir)
73
+ File.delete(settings[:log_path]) if File.exist?(settings[:log_path])
74
+ log_path = File.expand_path('../log', settings[:resource_dir])
79
75
  FileUtils.rm_rf(log_path) if File.exist?(log_path)
80
76
  clean_cache_dir
81
77
  end
@@ -3,7 +3,8 @@ module WebResourceBundler
3
3
  describe BlockParser do
4
4
 
5
5
  before(:each) do
6
- @file_manager = FileManager.new(settings.resource_dir, settings.cache_dir)
6
+ @settings = settings
7
+ @file_manager = FileManager.new(@settings[:resource_dir], @settings[:cache_dir])
7
8
  @block_parser = BlockParser.new
8
9
  end
9
10
 
@@ -5,27 +5,27 @@ describe WebResourceBundler::FileManager do
5
5
  end
6
6
 
7
7
  def create_stub_file(name)
8
- File.open(File.join(@settings.resource_dir, name), "w") do |file|
8
+ File.open(File.join(@settings[:resource_dir], name), "w") do |file|
9
9
  file.print "hi there"
10
10
  end
11
11
  end
12
12
 
13
13
  before(:each) do
14
- temp_dir = File.join(@settings.resource_dir, 'temp')
14
+ temp_dir = File.join(@settings[:resource_dir], 'temp')
15
15
  Dir.mkdir(temp_dir) unless File.exist?(temp_dir)
16
16
  @bundle_url = 'temp/bundle.dat'
17
- @bundle_path = File.join(@settings.resource_dir, @bundle_url)
17
+ @bundle_path = File.join(@settings[:resource_dir], @bundle_url)
18
18
  create_stub_file(@bundle_url)
19
- @manager = FileManager.new(@settings.resource_dir, @settings.cache_dir)
19
+ @manager = FileManager.new(@settings[:resource_dir], @settings[:cache_dir])
20
20
  end
21
21
 
22
22
  after(:each) do
23
- FileUtils.rm_rf(File.join(@settings.resource_dir, 'temp'))
23
+ FileUtils.rm_rf(File.join(@settings[:resource_dir], 'temp'))
24
24
  end
25
25
 
26
26
  describe "#create_cache_dir" do
27
27
  it "creates cache dir if it doesn't exists" do
28
- dir_path = File.join(@settings.resource_dir, @settings.cache_dir)
28
+ dir_path = File.join(@settings[:resource_dir], @settings[:cache_dir])
29
29
  FileUtils.rm_rf(dir_path)
30
30
  @manager.create_cache_dir
31
31
  File.exist?(dir_path).should == true
@@ -4,16 +4,16 @@ describe WebResourceBundler::Filters::BundleFilter::Filter do
4
4
  clean_cache_dir
5
5
  @settings = settings
6
6
  @bundle_settings = bundle_settings
7
- @filter = Filters::BundleFilter::Filter.new(@bundle_settings, FileManager.new(@settings.resource_dir, @settings.cache_dir))
7
+ @filter = Filters::BundleFilter::Filter.new(@bundle_settings, FileManager.new(@settings[:resource_dir], @settings[:cache_dir]))
8
8
  @block_data = @sample_block_helper.sample_block_data
9
9
  css_type = ResourceFileType::CSS
10
10
  js_type = ResourceFileType::JS
11
11
  items = [@block_data.styles.map {|f| f.path}.sort] + @bundle_settings[:md5_additional_data]
12
12
  @css_md5_value = Digest::MD5.hexdigest(items.flatten.join('|'))
13
- @css_bundle_file = File.join(@settings.cache_dir, [css_type[:name] + '_' + @css_md5_value, 'en', css_type[:ext]].join('.'))
13
+ @css_bundle_file = File.join(@settings[:cache_dir], [css_type[:name] + '_' + @css_md5_value, 'en', css_type[:ext]].join('.'))
14
14
  items = [@block_data.scripts.map {|f| f.path}.sort] + @bundle_settings[:md5_additional_data]
15
15
  js_md5_value = Digest::MD5.hexdigest(items.flatten.join('|'))
16
- @js_bundle_file = File.join(@settings.cache_dir, [js_type[:name] + '_' + js_md5_value, 'en', js_type[:ext]].join('.'))
16
+ @js_bundle_file = File.join(@settings[:cache_dir], [js_type[:name] + '_' + js_md5_value, 'en', js_type[:ext]].join('.'))
17
17
  end
18
18
 
19
19
  describe "#apply" do
@@ -3,10 +3,10 @@ require 'digest/md5'
3
3
  describe WebResourceBundler::Filters::BundleFilter::ResourcePackager do
4
4
  before(:each) do
5
5
  @settings = settings
6
- file_manager = FileManager.new(@settings.resource_dir, @settings.cache_dir)
6
+ file_manager = FileManager.new(@settings[:resource_dir], @settings[:cache_dir])
7
7
  @file_packager = Filters::BundleFilter::ResourcePackager.new(@settings, file_manager)
8
8
  @file_paths = styles.map do |url|
9
- File.join(@settings.resource_dir, url)
9
+ File.join(@settings[:resource_dir], url)
10
10
  end
11
11
  end
12
12
 
@@ -7,7 +7,7 @@ describe WebResourceBundler::Filters::CdnFilter do
7
7
  @cdn_settings[:https_hosts] = ['http://froogle.com']
8
8
  @settings[:cdn_filter][:http_hosts] = @cdn_settings[:http_hosts]
9
9
  @settings[:cdn_filter][:https_hosts] = @cdn_settings[:https_hosts]
10
- @file_manager = FileManager.new(@settings.resource_dir, @settings.cache_dir)
10
+ @file_manager = FileManager.new(@settings[:resource_dir], @settings[:cache_dir])
11
11
  @filter = Filters::CdnFilter::Filter.new(@cdn_settings, @file_manager)
12
12
  end
13
13
 
@@ -68,7 +68,7 @@ describe WebResourceBundler::Filters::CdnFilter do
68
68
  block_data = BlockData.new
69
69
  block_data.files = [file]
70
70
  @filter.apply!(block_data)
71
- block_data.files.first.path.should == File.join(@settings.cache_dir, 'cdn_temp.css')
71
+ block_data.files.first.path.should == File.join(@settings[:cache_dir], 'cdn_temp.css')
72
72
  block_data.files.first.content.should == "background: url('http://boogle.com/images/1.png');background-image: url('http://boogle.com/images/1.png');"
73
73
  end
74
74
  end
@@ -2,8 +2,8 @@ require File.expand_path(File.join(File.dirname(__FILE__), "../../../spec_helper
2
2
  module WebResourceBundler::Filters::ImageEncodeFilter
3
3
  describe CssGenerator do
4
4
  before(:each) do
5
- @settings = Settings.new base64_settings
6
- @generator = CssGenerator.new(@settings, FileManager.new(@settings.resource_dir, @settings.cache_dir))
5
+ @settings = base64_settings
6
+ @generator = CssGenerator.new(@settings, FileManager.new(@settings[:resource_dir], @settings[:cache_dir]))
7
7
  end
8
8
 
9
9
  describe "#pattern" do
@@ -28,14 +28,14 @@ module WebResourceBundler::Filters::ImageEncodeFilter
28
28
  describe "#encode_images_basic" do
29
29
 
30
30
  before(:each) do
31
- @content = "background-image: url('images/logo.jpg'); background: url('images/logo.jpg');"
31
+ @content = "background-image: url('images/ligo.jpg'); background: url('images/logo.jpg');"
32
32
  @images = @generator.encode_images_basic!(@content) do |image_data, tag|
33
33
  tag + image_data.extension
34
34
  end
35
35
  end
36
36
 
37
37
  it "substitute each image tag (image should exist and has proper size) with result of a yield" do
38
- @content.should == "background-image: jpg; background: jpg;"
38
+ @content.should == "background-image: url('images/ligo.jpg'); background: jpg;"
39
39
  end
40
40
 
41
41
  it "returns hash of images found and with proper size" do
@@ -87,8 +87,8 @@ module WebResourceBundler::Filters::ImageEncodeFilter
87
87
  describe "#encode_images_for_ie" do
88
88
  it "changes urls to mhtml link" do
89
89
  @generator.encode_images_for_ie!(@content, 'cache/1.mhtml')
90
- @content.include?("mhtml:#{@settings.protocol}://#{@settings.domain}/cache/1.mhtml!").should be_true
91
- @content.include?("background: #eeeeee url(mhtml:").should be_true
90
+ @content.include?("mhtml:#{@settings[:protocol]}://#{@settings[:domain]}/cache/1.mhtml!").should be_true
91
+ @content.include?("*background: #eeeeee url(mhtml:").should be_true
92
92
  @content.include?("repeat-x 0 100%").should be_true
93
93
  end
94
94
  end
@@ -96,7 +96,7 @@ module WebResourceBundler::Filters::ImageEncodeFilter
96
96
 
97
97
  describe "#construct_mhtml_link" do
98
98
  it "should create link without public folder" do
99
- @generator.construct_mhtml_link("temp.css").should == "http://#{@settings.domain}/temp.css"
99
+ @generator.construct_mhtml_link("temp.css").should == "http://#{@settings[:domain]}/temp.css"
100
100
  end
101
101
  end
102
102
  end
@@ -6,21 +6,21 @@ describe WebResourceBundler::Filters::ImageEncodeFilter::Filter do
6
6
  @base64_settings = base64_settings
7
7
  @file_prefix = Filters::ImageEncodeFilter::Filter::FILE_PREFIX
8
8
  @ie_file_prefix = Filters::ImageEncodeFilter::Filter::IE_FILE_PREFIX
9
- @file_manager = FileManager.new(@settings.resource_dir, @settings.cache_dir)
9
+ @file_manager = FileManager.new(@settings[:resource_dir], @settings[:cache_dir])
10
10
  @filter = Filters::ImageEncodeFilter::Filter.new(@base64_settings, @file_manager)
11
11
  end
12
12
 
13
13
  describe "#encoded_filepath" do
14
14
  it "should return new filename for css for all browsers except IE" do
15
15
  filename = "mycss.css"
16
- @filter.encoded_filepath(filename).should == File.join(@settings.cache_dir, @file_prefix + filename)
16
+ @filter.encoded_filepath(filename).should == File.join(@settings[:cache_dir], @file_prefix + filename)
17
17
  end
18
18
  end
19
19
 
20
20
  describe "#new_filepath_for_ie" do
21
21
  it "should return new filename for css for IE" do
22
22
  filename = "2.css"
23
- @filter.encoded_filepath_for_ie(filename).should == File.join(@settings.cache_dir, @ie_file_prefix + filename)
23
+ @filter.encoded_filepath_for_ie(filename).should == File.join(@settings[:cache_dir], @ie_file_prefix + filename)
24
24
  end
25
25
  end
26
26
 
@@ -41,8 +41,8 @@ describe WebResourceBundler::Filters::ImageEncodeFilter::Filter do
41
41
  @bundler_filter.apply!(block_data)
42
42
  @filter.apply!(block_data)
43
43
  generated_files = block_data.files.map {|f| f.path}
44
- generated_files.include?(File.join(@settings.cache_dir, @file_prefix + File.basename(bundle_filepath))).should be_true
45
- generated_files.include?(File.join(@settings.cache_dir, @ie_file_prefix + File.basename(bundle_filepath))).should be_true
44
+ generated_files.include?(File.join(@settings[:cache_dir], @file_prefix + File.basename(bundle_filepath))).should be_true
45
+ generated_files.include?(File.join(@settings[:cache_dir], @ie_file_prefix + File.basename(bundle_filepath))).should be_true
46
46
  end
47
47
 
48
48
  end
@@ -62,8 +62,8 @@ describe WebResourceBundler::Filters::ImageEncodeFilter::Filter do
62
62
  generated_files = @block_data.styles.map {|f| f.path}
63
63
  generated_files.size.should == 2*@files.size
64
64
  @files.each do |file|
65
- generated_files.include?(File.join(@settings.cache_dir, @ie_file_prefix + File.basename(file))).should be_true
66
- generated_files.include?(File.join(@settings.cache_dir, @file_prefix + File.basename(file))).should be_true
65
+ generated_files.include?(File.join(@settings[:cache_dir], @ie_file_prefix + File.basename(file))).should be_true
66
+ generated_files.include?(File.join(@settings[:cache_dir], @file_prefix + File.basename(file))).should be_true
67
67
  end
68
68
  end
69
69
 
@@ -15,7 +15,7 @@ module WebResourceBundler::Filters::ImageEncodeFilter
15
15
 
16
16
  context "with existent small enough file" do
17
17
  before(:each) do
18
- @data = ImageData.new(image_path("logo.jpg"), settings.resource_dir)
18
+ @data = ImageData.new(image_path("logo.jpg"), settings[:resource_dir])
19
19
  end
20
20
 
21
21
  it "should exist" do
@@ -32,7 +32,7 @@ module WebResourceBundler::Filters::ImageEncodeFilter
32
32
  end
33
33
 
34
34
  it "should have unique id" do
35
- new_data = ImageData.new(image_path("good.jpg"), settings.resource_dir)
35
+ new_data = ImageData.new(image_path("good.jpg"), settings[:resource_dir])
36
36
  new_data.exist.should be_true
37
37
  @data.id.should_not equal(new_data.id)
38
38
  end
@@ -3,13 +3,44 @@ module WebResourceBundler
3
3
  describe Bundler do
4
4
 
5
5
  before(:each) do
6
- @s = Settings.new settings_hash
6
+ @s = settings
7
7
  @bundler = WebResourceBundler::Bundler.instance
8
8
  end
9
9
 
10
+ describe "#set_settings" do
11
+ it "sets settings_correct property to false if resource dir not specified" do
12
+ @bundler.set_settings({})
13
+ @bundler.settings_correct.should be_false
14
+ end
15
+ it "sets settings_correct property to true if resource dir specified" do
16
+ @bundler.set_settings({:resource_dir => @s[:resource_dir]})
17
+ @bundler.settings_correct.should be_true
18
+ end
19
+ end
20
+
21
+
22
+ describe "#filters_array" do
23
+ it "returns array of filters that has :use => true in settings" do
24
+ @bundler.set_settings(@s)
25
+ filters = @bundler.send("filters_array")
26
+ filters.size.should == 3
27
+ @bundler.filters.size.should == 3
28
+ i = 2
29
+ %w{cdn_filter bundle_filter base64_filter}.each do |s|
30
+ @s[s.to_sym][:use] = false
31
+ @bundler.set_settings(@s)
32
+ filters = @bundler.send("filters_array")
33
+ filters.size.should == i
34
+ @bundler.filters.size.should == 3
35
+ i -= 1
36
+ end
37
+ end
38
+ end
39
+
10
40
  describe "#set_filters" do
11
41
  before(:each) do
12
- @file_manager = FileManager.new(@s.resource_dir, @s.cache_dir)
42
+ @file_manager = FileManager.new(@s[:resource_dir], @s[:cache_dir])
43
+ @bundler.instance_eval "@filters={}"
13
44
  end
14
45
  it "inits filters if no filters were initialized before" do
15
46
  @bundler.filters.should == {}
@@ -18,38 +49,44 @@ module WebResourceBundler
18
49
  end
19
50
  it "sets filters settings if filters already inited" do
20
51
  @bundler.send("set_filters", @s, @file_manager)
21
- @bundler.filters[:base64_filter].settings.max_image_size.should == @s[:base64_filter][:max_image_size]
52
+ @bundler.filters[:base64_filter].settings[:max_image_size].should == @s[:base64_filter][:max_image_size]
22
53
  @s[:base64_filter][:max_image_size] = 90
23
54
  @bundler.send("set_filters", @s, @file_manager)
24
- @bundler.filters[:base64_filter].settings.max_image_size.should == 90
55
+ @bundler.filters[:base64_filter].settings[:max_image_size].should == 90
25
56
  end
26
57
  end
27
-
28
- describe "#initialize" do
29
- it "set instance to nil if resource_dir ins't specified" do
58
+ describe "#initialize" do
59
+ it "set instance to nil if resource_dir ins't specified" do
30
60
  @bundler.set_settings({})
31
61
  @bundler.settings_correct.should be_false
32
62
  end
33
63
  it "correctly inits cache dir, and log path with defaults if resource_dir specified" do
34
- res_dir = settings_hash[:resource_dir]
64
+ res_dir = settings[:resource_dir]
35
65
  @bundler.set_settings({:resource_dir => res_dir })
36
66
  @bundler.settings_correct.should be_true
37
- @bundler.settings.cache_dir.should == 'cache'
38
- @bundler.settings.log_path.should == File.expand_path('../log/web_resource_bundler.log', res_dir)
67
+ @bundler.settings[:cache_dir].should == 'cache'
68
+ @bundler.settings[:log_path].should == File.expand_path('../log/web_resource_bundler.log', res_dir)
69
+ end
70
+ it "creates log directory if it's unexistent" do
71
+ @bundler.set_settings({:resource_dir => @s[:resource_dir]})
72
+ log_dir_path = File.expand_path('../log', @s[:resource_dir])
73
+ File.exist?(log_dir_path).should be_true
74
+ Dir.delete(log_dir_path)
39
75
  end
40
76
  end
41
77
 
42
78
  describe "#create_logger" do
43
79
  it "sets log_path in settings if it isn't specified" do
44
- sets = Settings.new({:resource_dir => @s.resource_dir })
45
- @bundler.send("create_logger", sets)
46
- @bundler.settings.log_path.should == File.expand_path('../log/web_resource_bundler.log', sets.resource_dir)
80
+ path = File.expand_path('../web_resource_bundler.log', @s[:resource_dir])
81
+ @bundler.send("create_logger", path)
82
+ File.exist?(path).should be_true
83
+ File.delete(path)
47
84
  end
48
85
  end
49
86
 
50
87
  describe "#process" do
51
88
  it "returns the same filenames when bundling or just computing resulted files" do
52
- @bundler.set_settings(settings_hash)
89
+ @bundler.set_settings(settings)
53
90
  clean_cache_dir
54
91
  block_text = @sample_block_helper.sample_block
55
92
  block_data = @bundler.process(block_text)
@@ -63,7 +100,7 @@ module WebResourceBundler
63
100
 
64
101
  describe "#bundle_upto_date?" do
65
102
  it "returns true if block was already bundled and resulted files exist" do
66
- @bundler.set_settings(settings_hash)
103
+ @bundler.set_settings(settings)
67
104
  clean_cache_dir
68
105
  block_text = @sample_block_helper.sample_block
69
106
  block_data = BlockParser.new.parse(block_text.dup)
@@ -76,12 +113,12 @@ module WebResourceBundler
76
113
 
77
114
  describe "#read_resources!" do
78
115
  it "populates block_data resource files structure with files content" do
79
- @bundler.set_settings(settings_hash)
116
+ @bundler.set_settings(settings)
80
117
  block_data = @sample_block_helper.sample_block_data
81
118
  @bundler.send("read_resources!", block_data)
82
119
  all_files = block_data.styles + block_data.scripts + block_data.child_blocks[0].styles + block_data.child_blocks[0].scripts
83
120
  all_files.each do |file|
84
- CssUrlRewriter::rewrite_content_urls!(file.path, File.read(File.join(@s.resource_dir, file.path))).should == file.content
121
+ CssUrlRewriter::rewrite_content_urls!(file.path, File.read(File.join(@s[:resource_dir], file.path))).should == file.content
85
122
  end
86
123
  end
87
124
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{web_resource_bundler}
8
- s.version = "0.0.13"
8
+ s.version = "0.0.14"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["gregolsen"]
12
- s.date = %q{2010-12-04}
12
+ s.date = %q{2010-12-13}
13
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
14
  s.email = %q{anotheroneman@yahoo.com}
15
15
  s.extra_rdoc_files = [
@@ -39,7 +39,6 @@ Gem::Specification.new do |s|
39
39
  "lib/web_resource_bundler/filters/image_encode_filter/css_generator.rb",
40
40
  "lib/web_resource_bundler/filters/image_encode_filter/image_data.rb",
41
41
  "lib/web_resource_bundler/rails_app_helpers.rb",
42
- "lib/web_resource_bundler/settings.rb",
43
42
  "lib/web_resource_bundler/web_resource_bundler_init.rb",
44
43
  "spec/public/foo.css",
45
44
  "spec/public/images/good.jpg",
@@ -68,7 +67,6 @@ Gem::Specification.new do |s|
68
67
  "spec/web_resource_bundler/filters/image_encode_filter/css_generator_spec.rb",
69
68
  "spec/web_resource_bundler/filters/image_encode_filter/filter_spec.rb",
70
69
  "spec/web_resource_bundler/filters/image_encode_filter/image_data_spec.rb",
71
- "spec/web_resource_bundler/settings_spec.rb",
72
70
  "spec/web_resource_bundler/web_resource_bundler_spec.rb",
73
71
  "web_resource_bundler.gemspec"
74
72
  ]
@@ -86,7 +84,6 @@ Gem::Specification.new do |s|
86
84
  "spec/web_resource_bundler/filters/bundle_filter/resource_packager_spec.rb",
87
85
  "spec/web_resource_bundler/web_resource_bundler_spec.rb",
88
86
  "spec/web_resource_bundler/file_manager_spec.rb",
89
- "spec/web_resource_bundler/settings_spec.rb",
90
87
  "spec/web_resource_bundler/content_management/css_url_rewriter_spec.rb",
91
88
  "spec/web_resource_bundler/content_management/block_data_spec.rb",
92
89
  "spec/web_resource_bundler/content_management/resource_file_spec.rb",
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 13
9
- version: 0.0.13
8
+ - 14
9
+ version: 0.0.14
10
10
  platform: ruby
11
11
  authors:
12
12
  - gregolsen
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-12-04 00:00:00 +02:00
17
+ date: 2010-12-13 00:00:00 +02:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -64,7 +64,6 @@ files:
64
64
  - lib/web_resource_bundler/filters/image_encode_filter/css_generator.rb
65
65
  - lib/web_resource_bundler/filters/image_encode_filter/image_data.rb
66
66
  - lib/web_resource_bundler/rails_app_helpers.rb
67
- - lib/web_resource_bundler/settings.rb
68
67
  - lib/web_resource_bundler/web_resource_bundler_init.rb
69
68
  - spec/public/foo.css
70
69
  - spec/public/images/good.jpg
@@ -93,7 +92,6 @@ files:
93
92
  - spec/web_resource_bundler/filters/image_encode_filter/css_generator_spec.rb
94
93
  - spec/web_resource_bundler/filters/image_encode_filter/filter_spec.rb
95
94
  - spec/web_resource_bundler/filters/image_encode_filter/image_data_spec.rb
96
- - spec/web_resource_bundler/settings_spec.rb
97
95
  - spec/web_resource_bundler/web_resource_bundler_spec.rb
98
96
  - web_resource_bundler.gemspec
99
97
  has_rdoc: true
@@ -137,7 +135,6 @@ test_files:
137
135
  - spec/web_resource_bundler/filters/bundle_filter/resource_packager_spec.rb
138
136
  - spec/web_resource_bundler/web_resource_bundler_spec.rb
139
137
  - spec/web_resource_bundler/file_manager_spec.rb
140
- - spec/web_resource_bundler/settings_spec.rb
141
138
  - spec/web_resource_bundler/content_management/css_url_rewriter_spec.rb
142
139
  - spec/web_resource_bundler/content_management/block_data_spec.rb
143
140
  - spec/web_resource_bundler/content_management/resource_file_spec.rb
@@ -1,46 +0,0 @@
1
- module WebResourceBundler
2
- class Settings
3
- @@defaults = {
4
- :cache_dir => 'cache',
5
- :base64_filter => {
6
- :max_image_size => 23, #kbytes
7
- :protocol => 'http',
8
- :domain => 'localhost:3000'
9
- },
10
- :bundle_filter => {
11
- :md5_additional_data => []
12
- },
13
- :cdn_filter => {
14
- :http_hosts => ['http://localhost:3000'],
15
- :https_hosts => ['https://localhost:3000']
16
- }
17
- }
18
-
19
- def initialize(hash = {})
20
- @settings = hash
21
- end
22
-
23
- def set(hash)
24
- @settings.merge!(hash)
25
- end
26
-
27
- def [](i)
28
- @settings[i]
29
- end
30
-
31
- def []=(i , v)
32
- @settings[i] = v
33
- end
34
-
35
- def method_missing(m, *args, &block)
36
- m=m.to_s
37
- if /.*=\z/.match(m)
38
- @settings[m[0..-2].to_sym] = args[0]
39
- else
40
- @settings[m.to_sym]
41
- end
42
- end
43
-
44
-
45
- end
46
- end
@@ -1,45 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), "../spec_helper"))
2
- module WebResourceBundler
3
- describe Settings do
4
-
5
- before(:each) do
6
- @settings_hash = settings_hash
7
- @s = Settings.new(@settings_hash)
8
- end
9
-
10
- it "should contain proper defaults after initialization" do
11
- @settings_hash.each_key do |k|
12
- @s[k].should == @settings_hash[k]
13
- @s.send(k).should == @settings_hash[k]
14
- end
15
- end
16
-
17
- it "should set proper values using unexistent setters" do
18
- @s.domain = "new_domain"
19
- @s[:domain].should == "new_domain"
20
- end
21
-
22
- it "returns values while calling keys as methods" do
23
- @settings_hash.each_key do |k|
24
- @s.send(k).should == @settings_hash[k]
25
- end
26
- end
27
-
28
- it "returns nil on unexistent key" do
29
- @s.send("unexistent_key".to_sym).should be_nil
30
- @s["unexistent_key".to_sym].should be_nil
31
- end
32
-
33
- describe "#set" do
34
- it "merges current settings with passed hash" do
35
- @settings_hash[:domain] = "new_value"
36
- @s.set({:domain => "new_value"})
37
- @settings_hash.each do |k, v|
38
- @s.send(k).should == v
39
- end
40
- end
41
- end
42
-
43
- end
44
- end
45
-