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