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 +27 -2
- data/VERSION +1 -1
- data/lib/web_resource_bundler/filters/base_filter.rb +2 -8
- data/lib/web_resource_bundler/filters/bundle_filter.rb +3 -3
- data/lib/web_resource_bundler/filters/cdn_filter.rb +4 -4
- data/lib/web_resource_bundler/filters/image_encode_filter/css_generator.rb +5 -5
- data/lib/web_resource_bundler/filters/image_encode_filter/image_data.rb +3 -3
- data/lib/web_resource_bundler/filters/image_encode_filter.rb +3 -3
- data/lib/web_resource_bundler.rb +54 -57
- data/spec/sample_block_helper.rb +1 -1
- data/spec/spec_helper.rb +6 -10
- data/spec/web_resource_bundler/content_management/block_parser_spec.rb +2 -1
- data/spec/web_resource_bundler/file_manager_spec.rb +6 -6
- data/spec/web_resource_bundler/filters/bundle_filter/filter_spec.rb +3 -3
- data/spec/web_resource_bundler/filters/bundle_filter/resource_packager_spec.rb +2 -2
- data/spec/web_resource_bundler/filters/cdn_filter_spec.rb +2 -2
- data/spec/web_resource_bundler/filters/image_encode_filter/css_generator_spec.rb +7 -7
- data/spec/web_resource_bundler/filters/image_encode_filter/filter_spec.rb +7 -7
- data/spec/web_resource_bundler/filters/image_encode_filter/image_data_spec.rb +2 -2
- data/spec/web_resource_bundler/web_resource_bundler_spec.rb +54 -17
- data/web_resource_bundler.gemspec +2 -5
- metadata +3 -6
- data/lib/web_resource_bundler/settings.rb +0 -46
- data/spec/web_resource_bundler/settings_spec.rb +0 -45
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.
|
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 =
|
8
|
+
@settings = settings
|
9
9
|
@file_manager = file_manager
|
10
10
|
end
|
11
11
|
|
12
12
|
def set_settings(settings)
|
13
|
-
@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
|
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
|
40
|
+
items += @settings[:filename_additional_data] if @settings[:filename_additional_data]
|
41
41
|
items << type[:ext]
|
42
|
-
return File.join(@settings
|
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
|
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
|
23
|
-
hosts = @settings
|
22
|
+
if @settings[:protocol] == 'https'
|
23
|
+
hosts = @settings[:https_hosts]
|
24
24
|
else
|
25
|
-
hosts = @settings
|
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
|
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
|
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
|
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
|
50
|
-
if !url.empty? and data.exist and data.size <= @settings
|
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
|
39
|
-
result
|
40
|
-
result
|
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
|
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
|
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
|
52
|
+
File.join(@settings[:cache_dir], MHTML_FILE_PREFIX + File.basename(base_file_path))
|
53
53
|
end
|
54
54
|
|
55
55
|
end
|
data/lib/web_resource_bundler.rb
CHANGED
@@ -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 =
|
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 =
|
40
|
-
if @settings
|
41
|
-
|
42
|
-
|
43
|
-
|
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
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
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
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
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
|
107
|
-
:cache_dir => settings
|
113
|
+
:resource_dir => settings[:resource_dir],
|
114
|
+
:cache_dir => settings[:cache_dir]
|
108
115
|
}
|
109
|
-
#used to
|
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(
|
136
|
+
def create_logger(logfile_path)
|
133
137
|
begin
|
134
|
-
|
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: #{
|
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
|
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
|
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
|
data/spec/sample_block_helper.rb
CHANGED
@@ -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
|
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
|
47
|
+
settings[:bundle_filter].merge(common_settings)
|
52
48
|
end
|
53
49
|
|
54
50
|
def cdn_settings
|
55
|
-
settings
|
51
|
+
settings[:cdn_filter].merge(common_settings)
|
56
52
|
end
|
57
53
|
|
58
54
|
def base64_settings
|
59
|
-
settings
|
55
|
+
settings[:base64_filter].merge(common_settings)
|
60
56
|
end
|
61
57
|
|
62
58
|
def common_settings
|
63
|
-
{:resource_dir => settings
|
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
|
78
|
-
log_path = File.expand_path('../log', settings
|
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
|
-
@
|
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
|
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
|
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
|
17
|
+
@bundle_path = File.join(@settings[:resource_dir], @bundle_url)
|
18
18
|
create_stub_file(@bundle_url)
|
19
|
-
@manager = FileManager.new(@settings
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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 =
|
6
|
-
@generator = CssGenerator.new(@settings, FileManager.new(@settings
|
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/
|
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
|
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
|
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
|
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
|
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
|
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
|
45
|
-
generated_files.include?(File.join(@settings
|
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
|
66
|
-
generated_files.include?(File.join(@settings
|
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
|
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
|
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 =
|
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
|
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
|
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
|
55
|
+
@bundler.filters[:base64_filter].settings[:max_image_size].should == 90
|
25
56
|
end
|
26
57
|
end
|
27
|
-
|
28
|
-
|
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 =
|
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
|
38
|
-
@bundler.settings
|
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
|
-
|
45
|
-
@bundler.send("create_logger",
|
46
|
-
|
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(
|
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(
|
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(
|
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
|
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.
|
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-
|
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
|
-
-
|
9
|
-
version: 0.0.
|
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-
|
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
|
-
|