web_resource_bundler 0.0.20 → 0.0.21
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/VERSION +1 -1
- data/lib/web_resource_bundler/content_management/block_data.rb +18 -21
- data/lib/web_resource_bundler/content_management/block_parser.rb +58 -52
- data/lib/web_resource_bundler/content_management/css_url_rewriter.rb +3 -3
- data/lib/web_resource_bundler/content_management/resource_file.rb +38 -25
- data/lib/web_resource_bundler/exceptions.rb +1 -3
- data/lib/web_resource_bundler/file_manager.rb +14 -3
- data/lib/web_resource_bundler/filters/bundle_filter/resource_packager.rb +45 -27
- data/lib/web_resource_bundler/filters/bundle_filter.rb +27 -22
- data/lib/web_resource_bundler/filters/cdn_filter.rb +27 -23
- data/lib/web_resource_bundler/filters/image_encode_filter/css_generator.rb +53 -40
- data/lib/web_resource_bundler/filters/image_encode_filter/image_data.rb +22 -17
- data/lib/web_resource_bundler/filters/image_encode_filter.rb +49 -23
- data/lib/web_resource_bundler/filters.rb +6 -1
- data/lib/web_resource_bundler/rails_app_helpers.rb +56 -40
- data/lib/web_resource_bundler/settings.rb +99 -0
- data/lib/web_resource_bundler/web_resource_bundler_init.rb +1 -1
- data/lib/web_resource_bundler.rb +100 -125
- data/spec/sample_block_helper.rb +3 -3
- data/spec/web_resource_bundler/content_management/block_data_spec.rb +56 -11
- data/spec/web_resource_bundler/content_management/block_parser_spec.rb +24 -10
- data/spec/web_resource_bundler/content_management/resource_file_spec.rb +7 -15
- data/spec/web_resource_bundler/file_manager_spec.rb +12 -4
- data/spec/web_resource_bundler/filters/bundle_filter/filter_spec.rb +5 -5
- data/spec/web_resource_bundler/filters/bundle_filter/resource_packager_spec.rb +15 -2
- data/spec/web_resource_bundler/filters/cdn_filter_spec.rb +15 -7
- data/spec/web_resource_bundler/filters/image_encode_filter/css_generator_spec.rb +44 -4
- data/spec/web_resource_bundler/filters/image_encode_filter/filter_spec.rb +20 -15
- data/spec/web_resource_bundler/settings_spec.rb +77 -0
- data/spec/web_resource_bundler/web_resource_bundler_spec.rb +19 -26
- data/web_resource_bundler.gemspec +4 -4
- metadata +5 -5
- data/lib/web_resource_bundler/settings_manager.rb +0 -91
- data/spec/web_resource_bundler/settings_manager_spec.rb +0 -88
@@ -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)
|
11
11
|
@filter = Filters::CdnFilter::Filter.new(@cdn_settings, @file_manager)
|
12
12
|
end
|
13
13
|
|
@@ -15,21 +15,29 @@ describe WebResourceBundler::Filters::CdnFilter do
|
|
15
15
|
it "returns host for image using its hash" do
|
16
16
|
@cdn_settings[:http_hosts] << 'http://froogle.com'
|
17
17
|
url = '/images/1.gif'
|
18
|
-
@filter.host_for_image
|
18
|
+
@filter.send(:host_for_image, url).should == @cdn_settings[:http_hosts][url.hash % @cdn_settings[:http_hosts].size]
|
19
19
|
end
|
20
20
|
|
21
21
|
it "returns https host if request was https" do
|
22
22
|
@cdn_settings[:protocol] = 'https'
|
23
23
|
@filter = Filters::CdnFilter::Filter.new(@cdn_settings, @file_manager)
|
24
24
|
url = '/images/1.gif'
|
25
|
-
@filter.host_for_image
|
25
|
+
@filter.send(:host_for_image, url).should == @cdn_settings[:https_hosts][url.hash % @cdn_settings[:https_hosts].size]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "#url_css_tag" do
|
30
|
+
it "should return css url tag with absolute url" do
|
31
|
+
host = 'http://google.com'
|
32
|
+
url = '/styles/1.css'
|
33
|
+
@filter.send(:url_css_tag, host, url).should == "url('" + host + url + "')"
|
26
34
|
end
|
27
35
|
end
|
28
36
|
|
29
37
|
describe "#new_filename" do
|
30
38
|
it "adds cdn_ prefix to original file name" do
|
31
39
|
path = 'styles/1.css'
|
32
|
-
@filter.new_filepath
|
40
|
+
@filter.send(:new_filepath, path).should == 'cache/cdn_1.css'
|
33
41
|
end
|
34
42
|
end
|
35
43
|
|
@@ -40,14 +48,14 @@ describe WebResourceBundler::Filters::CdnFilter do
|
|
40
48
|
|
41
49
|
it "adds hosts to image urls" do
|
42
50
|
content = "background: url('../images/1.png');"
|
43
|
-
@filter.rewrite_content_urls
|
51
|
+
@filter.send(:rewrite_content_urls!, @file_path, content)
|
44
52
|
content.should == "background: url('http://boogle.com/styles/images/1.png');"
|
45
53
|
end
|
46
54
|
|
47
55
|
it "doesn't add hosts for images encoded in base64" do
|
48
56
|
content = "background:url('data:image/png;base64,iVBORw0KGg); *background:url(mhtml:http://domain.com/cache/base64_ie_style_9648c01be7e50284958eb07877c70e03.en.css!rails5804) no-repeat 0 100%;"
|
49
57
|
clon = content.dup
|
50
|
-
@filter.rewrite_content_urls
|
58
|
+
@filter.send(:rewrite_content_urls!, @file_path, content.dup)
|
51
59
|
content.should == clon
|
52
60
|
end
|
53
61
|
|
@@ -57,7 +65,7 @@ describe WebResourceBundler::Filters::CdnFilter do
|
|
57
65
|
content = "background: url('../images/1.png');background-image: url('../images/1.png');"
|
58
66
|
host = @cdn_settings[:http_hosts]['/styles/images/1.png'.hash % @cdn_settings[:http_hosts].size]
|
59
67
|
url = "#{host}/styles/images/1.png"
|
60
|
-
@filter.rewrite_content_urls
|
68
|
+
@filter.send(:rewrite_content_urls!, @file_path, content)
|
61
69
|
content.should == "background: url('#{url}');background-image: url('#{url}');"
|
62
70
|
end
|
63
71
|
end
|
@@ -3,7 +3,7 @@ module WebResourceBundler::Filters::ImageEncodeFilter
|
|
3
3
|
describe CssGenerator do
|
4
4
|
before(:each) do
|
5
5
|
@settings = base64_settings
|
6
|
-
@generator = CssGenerator.new(@settings, FileManager.new(@settings
|
6
|
+
@generator = CssGenerator.new(@settings, FileManager.new(@settings))
|
7
7
|
end
|
8
8
|
|
9
9
|
describe "#pattern" do
|
@@ -24,12 +24,43 @@ module WebResourceBundler::Filters::ImageEncodeFilter
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
27
|
+
|
28
|
+
describe "#set_settings" do
|
29
|
+
it "should set new settings" do
|
30
|
+
sets = {:key => 'value'}
|
31
|
+
@generator.set_settings(sets)
|
32
|
+
@generator.instance_variable_get("@settings").should == sets
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "#image_size_limit" do
|
37
|
+
it "should return 32kb @settings[:max_image_size] is not setted" do
|
38
|
+
settings = base64_settings
|
39
|
+
settings[:max_image_size] = nil
|
40
|
+
@generator.set_settings(settings)
|
41
|
+
@generator.send(:image_size_limit).should == CssGenerator::MAX_IMAGE_SIZE
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should return settings[:max_image_size] if it's less then 32 kb" do
|
45
|
+
settings = base64_settings
|
46
|
+
settings[:max_image_size] = 10
|
47
|
+
@generator.set_settings(settings)
|
48
|
+
@generator.send(:image_size_limit).should == 10
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should return 32kb if settings[:max_image_size] bigger than 32" do
|
52
|
+
settings = base64_settings
|
53
|
+
settings[:max_image_size] = 100
|
54
|
+
@generator.set_settings(settings)
|
55
|
+
@generator.send(:image_size_limit).should == CssGenerator::MAX_IMAGE_SIZE
|
56
|
+
end
|
57
|
+
end
|
27
58
|
|
28
59
|
describe "#encode_images_basic" do
|
29
60
|
|
30
61
|
before(:each) do
|
31
62
|
@content = "background-image: url('images/ligo.jpg'); background: url('images/logo.jpg');"
|
32
|
-
@images = @generator.encode_images_basic
|
63
|
+
@images = @generator.send(:encode_images_basic!, @content) do |image_data, tag|
|
33
64
|
tag + image_data.extension
|
34
65
|
end
|
35
66
|
end
|
@@ -88,15 +119,24 @@ module WebResourceBundler::Filters::ImageEncodeFilter
|
|
88
119
|
it "changes urls to mhtml link" do
|
89
120
|
@generator.encode_images_for_ie!(@content, 'cache/1.mhtml')
|
90
121
|
@content.include?("mhtml:#{@settings[:protocol]}://#{@settings[:domain]}/cache/1.mhtml!").should be_true
|
91
|
-
@content.include?("
|
122
|
+
@content.include?("background: #eeeeee url(mhtml:").should be_true
|
92
123
|
@content.include?("repeat-x 0 100%").should be_true
|
93
124
|
end
|
94
125
|
end
|
95
126
|
end
|
96
127
|
|
128
|
+
describe "#construct_mhtml_content" do
|
129
|
+
it "returns mhtml block for ie" do
|
130
|
+
images = [ImageData.new('images/logo.jpg', @settings[:resource_dir])]
|
131
|
+
result = @generator.construct_mhtml_content(images)
|
132
|
+
result.include?(CssGenerator::MHTML_CONTENT_TYPE).should be_true
|
133
|
+
result.include?(CssGenerator::SEPARATOR).should be_true
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
97
137
|
describe "#construct_mhtml_link" do
|
98
138
|
it "should create link without public folder" do
|
99
|
-
@generator.construct_mhtml_link
|
139
|
+
@generator.send(:construct_mhtml_link, "temp.css").should == "http://#{@settings[:domain]}/temp.css"
|
100
140
|
end
|
101
141
|
end
|
102
142
|
end
|
@@ -2,42 +2,47 @@ require File.expand_path(File.join(File.dirname(__FILE__), "../../../spec_helper
|
|
2
2
|
describe WebResourceBundler::Filters::ImageEncodeFilter::Filter do
|
3
3
|
|
4
4
|
before(:each) do
|
5
|
-
@settings
|
5
|
+
@settings = settings
|
6
6
|
@base64_settings = base64_settings
|
7
|
-
@file_prefix
|
8
|
-
@ie_file_prefix
|
9
|
-
@
|
10
|
-
@
|
7
|
+
@file_prefix = Filters::ImageEncodeFilter::Filter::FILE_PREFIX
|
8
|
+
@ie_file_prefix = Filters::ImageEncodeFilter::Filter::IE_FILE_PREFIX
|
9
|
+
@mhtml_prefix = Filters::ImageEncodeFilter::Filter::MHTML_FILE_PREFIX
|
10
|
+
@file_manager = FileManager.new(@settings)
|
11
|
+
@filter = Filters::ImageEncodeFilter::Filter.new(@base64_settings, @file_manager)
|
11
12
|
end
|
12
13
|
|
13
14
|
describe "#encoded_filepath" do
|
14
15
|
it "should return new filename for css for all browsers except IE" do
|
15
16
|
filename = "mycss.css"
|
16
|
-
@filter.
|
17
|
+
@filter.send(:css_filepath, filename).should == File.join(@settings[:cache_dir], @file_prefix + filename)
|
17
18
|
end
|
18
19
|
end
|
19
20
|
|
20
|
-
describe "#
|
21
|
+
describe "#mhtml_css_filepath" do
|
21
22
|
it "should return new filename for css for IE" do
|
22
23
|
filename = "2.css"
|
23
|
-
@filter.
|
24
|
+
@filter.send(:mhtml_css_filepath, filename).should == File.join(@settings[:cache_dir], @ie_file_prefix + filename)
|
24
25
|
end
|
25
26
|
end
|
26
27
|
|
27
28
|
describe "#mhtml_filepath" do
|
28
|
-
it "
|
29
|
-
|
29
|
+
it "should return new filename for mhtml file for IE" do
|
30
|
+
filename = "2.css"
|
31
|
+
@filter.send(:mhtml_filepath, filename).should == File.join(@settings[:cache_dir], @mhtml_prefix + '2.mhtml')
|
30
32
|
end
|
31
33
|
end
|
32
34
|
|
35
|
+
|
33
36
|
describe "#apply" do
|
34
37
|
context "block was bundled" do
|
38
|
+
|
35
39
|
before(:each) do
|
36
40
|
@bundler_filter = Filters::BundleFilter::Filter.new(@base64_settings, @file_manager)
|
37
|
-
|
41
|
+
end
|
42
|
+
|
38
43
|
it "encodes images in css and change filename" do
|
39
44
|
block_data = @sample_block_helper.sample_block_data
|
40
|
-
bundle_filepath = @bundler_filter.bundle_filepath
|
45
|
+
bundle_filepath = @bundler_filter.send(:bundle_filepath, WebResourceBundler::ResourceFileType::CSS, block_data.styles)
|
41
46
|
@bundler_filter.apply!(block_data)
|
42
47
|
@filter.apply!(block_data)
|
43
48
|
generated_files = block_data.files.map {|f| f.path}
|
@@ -47,15 +52,15 @@ describe WebResourceBundler::Filters::ImageEncodeFilter::Filter do
|
|
47
52
|
|
48
53
|
it "changes type of styles files to CSS only" do
|
49
54
|
block_data = @sample_block_helper.sample_block_data
|
50
|
-
resource_file = WebResourceBundler::ResourceFile.
|
55
|
+
resource_file = WebResourceBundler::ResourceFile.new_css_file(styles.first)
|
51
56
|
block_data.files = [resource_file]
|
52
57
|
block_data.child_blocks = []
|
53
58
|
@bundler_filter.apply!(block_data)
|
54
59
|
@filter.apply!(block_data)
|
55
60
|
block_data.files.size.should == 3
|
56
|
-
%w{
|
61
|
+
%w{BASE64_CSS MHTML_CSS MHTML}.each do |type_name|
|
57
62
|
type = eval("WebResourceBundler::ResourceFileType::" + type_name)
|
58
|
-
block_data.files.select {|f| f.
|
63
|
+
block_data.files.select {|f| f.type == type}.size.should == 1
|
59
64
|
end
|
60
65
|
end
|
61
66
|
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "../spec_helper"))
|
2
|
+
describe WebResourceBundler::Settings do
|
3
|
+
|
4
|
+
before(:each) do
|
5
|
+
@s = settings
|
6
|
+
Settings.set(@s)
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "#defaults" do
|
10
|
+
it "returns default required settings for bundler" do
|
11
|
+
root = '/root'
|
12
|
+
settings = Settings.send(:defaults, root)
|
13
|
+
settings[:resource_dir].should == File.join(root, Settings::DEFAULT_RESOURCE_DIR)
|
14
|
+
settings[:log_path].should == File.join(root, Settings::DEFAULT_LOG_PATH)
|
15
|
+
settings[:cache_dir].should == Settings::DEFAULT_CACHE_DIR
|
16
|
+
settings[:bundle_filter][:use].should == true
|
17
|
+
settings[:cdn_filter][:use].should == false
|
18
|
+
settings[:base64_filter][:use].should == true
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "#commons" do
|
23
|
+
it "returns settings common to all filters" do
|
24
|
+
settings = Settings.send(:commons, @s)
|
25
|
+
settings.keys.size.should == 2
|
26
|
+
settings[:resource_dir].should == @s[:resource_dir]
|
27
|
+
settings[:cache_dir].should == @s[:cache_dir]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "#read_from_file" do
|
32
|
+
it "loads settings from yaml file" do
|
33
|
+
rails_root = root_dir
|
34
|
+
content = File.read(File.join(root_dir, 'config/web_resource_bundler.yml'))
|
35
|
+
rails_env = 'development'
|
36
|
+
original = YAML::load(content)[rails_env]
|
37
|
+
settings = Settings.send(:read_from_file, rails_root, rails_env)
|
38
|
+
original.each_key do |key|
|
39
|
+
settings[key].should == original[key]
|
40
|
+
end
|
41
|
+
settings[:resource_dir].should == File.join(root_dir, Settings::DEFAULT_RESOURCE_DIR)
|
42
|
+
end
|
43
|
+
it "returns empty hash if file isn't exist" do
|
44
|
+
Settings.send(:read_from_file, '', '').should == {}
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "#correct?" do
|
49
|
+
it "should return true if all required keys present" do
|
50
|
+
Settings.correct?.should be_true
|
51
|
+
end
|
52
|
+
it "returns false if one of the keys isn't present" do
|
53
|
+
Settings.settings.delete(:resource_dir)
|
54
|
+
Settings.correct?.should be_false
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "filter_settings" do
|
59
|
+
it "returns filter settings merged with common settings" do
|
60
|
+
cdn_sets = Settings.filter_settings(:cdn_filter)
|
61
|
+
cdn_sets[:resource_dir].should == Settings.settings[:resource_dir]
|
62
|
+
cdn_sets[:cache_dir].should == Settings.settings[:cache_dir]
|
63
|
+
cdn_sets[:max_image_size].should be_nil
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe "#set_request_specific_data!" do
|
68
|
+
it "sets domain and protocol for settings" do
|
69
|
+
s = {}
|
70
|
+
Settings.set_request_specific_data!(s, 'google.com', 'http')
|
71
|
+
s[:domain].should == 'google.com'
|
72
|
+
s[:protocol].should == 'http'
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
@@ -4,14 +4,12 @@ module WebResourceBundler
|
|
4
4
|
|
5
5
|
before(:each) do
|
6
6
|
@s = settings
|
7
|
-
@bundler = WebResourceBundler::Bundler
|
7
|
+
@bundler = WebResourceBundler::Bundler
|
8
8
|
end
|
9
9
|
|
10
10
|
describe "#initialize" do
|
11
11
|
it "sets instance state correctly" do
|
12
12
|
@bundler.logger.should == nil
|
13
|
-
@bundler.settings.should == nil
|
14
|
-
@bundler.settings_correct.should == false
|
15
13
|
end
|
16
14
|
end
|
17
15
|
|
@@ -20,25 +18,17 @@ module WebResourceBundler
|
|
20
18
|
@bundler.setup(root_dir, 'development')
|
21
19
|
end
|
22
20
|
|
23
|
-
#describe "#set_settings" do
|
24
|
-
# it "changes settings for all filters" do
|
25
|
-
# settings = @bundler.settings.dup
|
26
|
-
# settings[:base64_filter][:use] = false
|
27
|
-
# @bundler.set_settings(settings)
|
28
|
-
# end
|
29
|
-
#end
|
30
|
-
|
31
21
|
describe "#filters_array" do
|
32
22
|
it "returns array of filters that has :use => true in settings" do
|
33
23
|
@bundler.set_settings(@s)
|
34
|
-
filters = @bundler.send("filters_array")
|
24
|
+
filters = @bundler.send("filters_array", @bundler.filters)
|
35
25
|
filters.size.should == 3
|
36
26
|
@bundler.filters.size.should == 3
|
37
27
|
i = 2
|
38
28
|
%w{cdn_filter bundle_filter base64_filter}.each do |s|
|
39
29
|
@s[s.to_sym][:use] = false
|
40
30
|
@bundler.set_settings(@s)
|
41
|
-
filters = @bundler.send("filters_array")
|
31
|
+
filters = @bundler.send("filters_array", @bundler.filters)
|
42
32
|
filters.size.should == i
|
43
33
|
@bundler.filters.size.should == 3
|
44
34
|
i -= 1
|
@@ -48,20 +38,23 @@ module WebResourceBundler
|
|
48
38
|
|
49
39
|
describe "#set_filters" do
|
50
40
|
before(:each) do
|
51
|
-
@file_manager = FileManager.new(@s
|
41
|
+
@file_manager = FileManager.new(@s)
|
52
42
|
@bundler.instance_eval "@filters={}"
|
53
43
|
end
|
54
44
|
it "inits filters if no filters were initialized before" do
|
55
45
|
@bundler.filters.should == {}
|
56
|
-
@bundler.send("set_filters", @
|
46
|
+
@bundler.send("set_filters", @bundler.filters, @bundler.instance_variable_get("@file_manager"))
|
57
47
|
@bundler.filters.size.should == 3
|
58
48
|
end
|
59
49
|
it "sets filters settings if filters already inited" do
|
60
|
-
@bundler.send("set_filters", @
|
50
|
+
@bundler.send("set_filters", @bundler.filters, @bundler.instance_variable_get("@file_manager"))
|
61
51
|
@bundler.filters[:base64_filter].settings[:max_image_size].should == @s[:base64_filter][:max_image_size]
|
62
|
-
|
63
|
-
|
64
|
-
|
52
|
+
Settings.set({:base64_filter => {
|
53
|
+
:use => true,
|
54
|
+
:max_image_size => 18
|
55
|
+
}})
|
56
|
+
@bundler.send("set_filters", @bundler.filters, @bundler.instance_variable_get("@file_manager"))
|
57
|
+
@bundler.filters[:base64_filter].settings[:max_image_size].should == 18
|
65
58
|
end
|
66
59
|
end
|
67
60
|
|
@@ -69,15 +62,15 @@ module WebResourceBundler
|
|
69
62
|
describe "#create_logger" do
|
70
63
|
|
71
64
|
it "creates log directory if it's unexistent" do
|
72
|
-
log_dir_path = File.dirname(
|
65
|
+
log_dir_path = File.dirname(Settings.settings[:log_path])
|
73
66
|
FileUtils.rm_rf(log_dir_path)
|
74
|
-
@bundler.send("create_logger",
|
67
|
+
@bundler.send("create_logger", Settings.settings[:log_path])
|
75
68
|
File.exist?(log_dir_path).should be_true
|
76
69
|
FileUtils.rm_rf(log_dir_path)
|
77
70
|
end
|
78
71
|
|
79
72
|
it "sets log_path in settings if it isn't specified" do
|
80
|
-
path =
|
73
|
+
path = Settings.settings[:log_path]
|
81
74
|
@bundler.send("create_logger", path)
|
82
75
|
File.exist?(path).should be_true
|
83
76
|
File.delete(path)
|
@@ -104,10 +97,10 @@ module WebResourceBundler
|
|
104
97
|
@bundler.set_settings(settings)
|
105
98
|
clean_cache_dir
|
106
99
|
block_text = @sample_block_helper.sample_block
|
107
|
-
block_data = BlockParser.
|
108
|
-
@bundler.send("bundle_upto_date?", block_data).should == false
|
100
|
+
block_data = BlockParser.parse(block_text.dup)
|
101
|
+
@bundler.send("bundle_upto_date?", block_data, @bundler.filters).should == false
|
109
102
|
@bundler.process(block_text, 'localhost:3000', 'http')
|
110
|
-
@bundler.send("bundle_upto_date?", block_data).should == true
|
103
|
+
@bundler.send("bundle_upto_date?", block_data, @bundler.filters).should == true
|
111
104
|
end
|
112
105
|
end
|
113
106
|
|
@@ -117,7 +110,7 @@ module WebResourceBundler
|
|
117
110
|
@bundler.set_settings(settings)
|
118
111
|
block_data = @sample_block_helper.sample_block_data
|
119
112
|
@bundler.send("read_resources!", block_data)
|
120
|
-
all_files = block_data.
|
113
|
+
all_files = block_data.all_files
|
121
114
|
all_files.each do |file|
|
122
115
|
CssUrlRewriter::rewrite_content_urls!(file.path, File.read(File.join(@s[:resource_dir], file.path))).should == file.content
|
123
116
|
end
|
@@ -5,7 +5,7 @@
|
|
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.21"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["gregolsen"]
|
@@ -34,7 +34,7 @@ Gem::Specification.new do |s|
|
|
34
34
|
"lib/web_resource_bundler/filters/image_encode_filter/css_generator.rb",
|
35
35
|
"lib/web_resource_bundler/filters/image_encode_filter/image_data.rb",
|
36
36
|
"lib/web_resource_bundler/rails_app_helpers.rb",
|
37
|
-
"lib/web_resource_bundler/
|
37
|
+
"lib/web_resource_bundler/settings.rb",
|
38
38
|
"lib/web_resource_bundler/web_resource_bundler_init.rb",
|
39
39
|
"spec/sample_block_helper.rb",
|
40
40
|
"spec/spec_helper.rb",
|
@@ -64,7 +64,7 @@ Gem::Specification.new do |s|
|
|
64
64
|
"spec/web_resource_bundler/filters/image_encode_filter/css_generator_spec.rb",
|
65
65
|
"spec/web_resource_bundler/filters/image_encode_filter/filter_spec.rb",
|
66
66
|
"spec/web_resource_bundler/filters/image_encode_filter/image_data_spec.rb",
|
67
|
-
"spec/web_resource_bundler/
|
67
|
+
"spec/web_resource_bundler/settings_spec.rb",
|
68
68
|
"spec/web_resource_bundler/web_resource_bundler_spec.rb",
|
69
69
|
"web_resource_bundler.gemspec"
|
70
70
|
]
|
@@ -86,7 +86,7 @@ Gem::Specification.new do |s|
|
|
86
86
|
"spec/web_resource_bundler/filters/image_encode_filter/css_generator_spec.rb",
|
87
87
|
"spec/web_resource_bundler/filters/image_encode_filter/filter_spec.rb",
|
88
88
|
"spec/web_resource_bundler/filters/image_encode_filter/image_data_spec.rb",
|
89
|
-
"spec/web_resource_bundler/
|
89
|
+
"spec/web_resource_bundler/settings_spec.rb",
|
90
90
|
"spec/web_resource_bundler/web_resource_bundler_spec.rb"
|
91
91
|
]
|
92
92
|
|
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
|
+
- 21
|
9
|
+
version: 0.0.21
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- gregolsen
|
@@ -62,7 +62,7 @@ files:
|
|
62
62
|
- lib/web_resource_bundler/filters/image_encode_filter/css_generator.rb
|
63
63
|
- lib/web_resource_bundler/filters/image_encode_filter/image_data.rb
|
64
64
|
- lib/web_resource_bundler/rails_app_helpers.rb
|
65
|
-
- lib/web_resource_bundler/
|
65
|
+
- lib/web_resource_bundler/settings.rb
|
66
66
|
- lib/web_resource_bundler/web_resource_bundler_init.rb
|
67
67
|
- spec/sample_block_helper.rb
|
68
68
|
- spec/spec_helper.rb
|
@@ -92,7 +92,7 @@ files:
|
|
92
92
|
- spec/web_resource_bundler/filters/image_encode_filter/css_generator_spec.rb
|
93
93
|
- spec/web_resource_bundler/filters/image_encode_filter/filter_spec.rb
|
94
94
|
- spec/web_resource_bundler/filters/image_encode_filter/image_data_spec.rb
|
95
|
-
- spec/web_resource_bundler/
|
95
|
+
- spec/web_resource_bundler/settings_spec.rb
|
96
96
|
- spec/web_resource_bundler/web_resource_bundler_spec.rb
|
97
97
|
- web_resource_bundler.gemspec
|
98
98
|
has_rdoc: true
|
@@ -141,5 +141,5 @@ test_files:
|
|
141
141
|
- spec/web_resource_bundler/filters/image_encode_filter/css_generator_spec.rb
|
142
142
|
- spec/web_resource_bundler/filters/image_encode_filter/filter_spec.rb
|
143
143
|
- spec/web_resource_bundler/filters/image_encode_filter/image_data_spec.rb
|
144
|
-
- spec/web_resource_bundler/
|
144
|
+
- spec/web_resource_bundler/settings_spec.rb
|
145
145
|
- spec/web_resource_bundler/web_resource_bundler_spec.rb
|
@@ -1,91 +0,0 @@
|
|
1
|
-
require 'yaml'
|
2
|
-
class WebResourceBundler::SettingsManager
|
3
|
-
|
4
|
-
DEFAULT_LOG_PATH = 'log/web_resource_bundler.log'
|
5
|
-
DEFAULT_RESOURCE_DIR = 'public'
|
6
|
-
DEFAULT_SETTINGS_PATH = 'config/web_resource_bundler.yml'
|
7
|
-
DEFAULT_CACHE_DIR = 'cache'
|
8
|
-
|
9
|
-
class << self
|
10
|
-
|
11
|
-
#creates settings from config file or from defaults
|
12
|
-
#if config file doesn't exists
|
13
|
-
def create_settings(rails_root, rails_env)
|
14
|
-
settings = {}
|
15
|
-
if File.exist?(rails_root)
|
16
|
-
#reading settings from file in config dir
|
17
|
-
settings = settings_from_file(rails_root, rails_env)
|
18
|
-
#building required defaults
|
19
|
-
defaults = create_default_settings(rails_root)
|
20
|
-
#merging required with read from file settings
|
21
|
-
#if there's no file settings will contain just required defaults
|
22
|
-
settings = defaults.merge(settings)
|
23
|
-
end
|
24
|
-
settings
|
25
|
-
end
|
26
|
-
|
27
|
-
#creates defaults settings
|
28
|
-
def create_default_settings(rails_root)
|
29
|
-
settings = {}
|
30
|
-
settings[:resource_dir] = File.join(rails_root, DEFAULT_RESOURCE_DIR)
|
31
|
-
settings[:log_path] = File.join(rails_root, DEFAULT_LOG_PATH)
|
32
|
-
settings[:cache_dir] = DEFAULT_CACHE_DIR
|
33
|
-
settings[:bundle_filter] = {
|
34
|
-
:use => true
|
35
|
-
}
|
36
|
-
settings[:cdn_filter] = {
|
37
|
-
:use => false
|
38
|
-
}
|
39
|
-
settings[:base64_filter] = {
|
40
|
-
:use => true,
|
41
|
-
:max_image_size => 20
|
42
|
-
}
|
43
|
-
settings
|
44
|
-
end
|
45
|
-
|
46
|
-
#settings common for all filters
|
47
|
-
def common_settings(settings)
|
48
|
-
{
|
49
|
-
:resource_dir => settings[:resource_dir],
|
50
|
-
:cache_dir => settings[:cache_dir],
|
51
|
-
}
|
52
|
-
end
|
53
|
-
|
54
|
-
#load settings from yaml file depending on environment
|
55
|
-
def settings_from_file(rails_root, rails_env)
|
56
|
-
settings = {}
|
57
|
-
settings_file_path = File.join(rails_root, DEFAULT_SETTINGS_PATH)
|
58
|
-
if File.exist?(settings_file_path)
|
59
|
-
settings_file = File.open(settings_file_path)
|
60
|
-
all_settings = YAML::load(settings_file)
|
61
|
-
if all_settings[rails_env]
|
62
|
-
settings = all_settings[rails_env]
|
63
|
-
settings[:resource_dir] = File.join(rails_root, DEFAULT_RESOURCE_DIR)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
settings
|
67
|
-
end
|
68
|
-
|
69
|
-
#ensures that settings has obligatory keys present
|
70
|
-
def settings_correct?(settings)
|
71
|
-
%w{resource_dir log_path cache_dir}.each do |key|
|
72
|
-
return false unless settings.has_key?(key.to_sym)
|
73
|
-
end
|
74
|
-
return true
|
75
|
-
end
|
76
|
-
|
77
|
-
#dynamically created methods for each filter have its own settings method
|
78
|
-
%w{base64_filter cdn_filter bundle_filter}.each do |filter_name|
|
79
|
-
define_method "#{filter_name}_settings" do |settings|
|
80
|
-
self.common_settings(settings).merge(settings[filter_name.to_sym])
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
#setting request specific settings like domain and protocol
|
85
|
-
def set_request_specific_settings!(settings, domain, protocol)
|
86
|
-
settings[:domain] = domain
|
87
|
-
settings[:protocol] = protocol
|
88
|
-
settings
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
@@ -1,88 +0,0 @@
|
|
1
|
-
require File.expand_path(File.join(File.dirname(__FILE__), "../spec_helper"))
|
2
|
-
describe WebResourceBundler::SettingsManager do
|
3
|
-
|
4
|
-
before(:each) do
|
5
|
-
@s = settings
|
6
|
-
end
|
7
|
-
|
8
|
-
describe "#create_default_settings" do
|
9
|
-
it "returns default required settings for bundler" do
|
10
|
-
root = '/root'
|
11
|
-
settings = SettingsManager.create_default_settings(root)
|
12
|
-
settings[:resource_dir].should == File.join(root, SettingsManager::DEFAULT_RESOURCE_DIR)
|
13
|
-
settings[:log_path].should == File.join(root, SettingsManager::DEFAULT_LOG_PATH)
|
14
|
-
settings[:cache_dir].should == SettingsManager::DEFAULT_CACHE_DIR
|
15
|
-
settings[:bundle_filter][:use].should == true
|
16
|
-
settings[:cdn_filter][:use].should == false
|
17
|
-
settings[:base64_filter][:use].should == true
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
describe "#common_settings" do
|
22
|
-
it "returns settings common to all filters" do
|
23
|
-
settings = SettingsManager.common_settings(@s)
|
24
|
-
settings.keys.size.should == 2
|
25
|
-
settings[:resource_dir].should == @s[:resource_dir]
|
26
|
-
settings[:cache_dir].should == @s[:cache_dir]
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe "#settings_from_file" do
|
31
|
-
it "loads settings from yaml file" do
|
32
|
-
rails_root = root_dir
|
33
|
-
content = File.read(File.join(root_dir, 'config/web_resource_bundler.yml'))
|
34
|
-
rails_env = 'development'
|
35
|
-
original = YAML::load(content)[rails_env]
|
36
|
-
settings = SettingsManager.settings_from_file(rails_root, rails_env)
|
37
|
-
original.each_key do |key|
|
38
|
-
settings[key].should == original[key]
|
39
|
-
end
|
40
|
-
settings[:resource_dir].should == File.join(root_dir, SettingsManager::DEFAULT_RESOURCE_DIR)
|
41
|
-
end
|
42
|
-
it "returns empty hash if file isn't exist" do
|
43
|
-
SettingsManager.settings_from_file('', '').should == {}
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
describe "#settings_correct?" do
|
48
|
-
it "should return true if all required keys present" do
|
49
|
-
SettingsManager.settings_correct?(@s).should be_true
|
50
|
-
end
|
51
|
-
it "returns false if one of the keys isn't present" do
|
52
|
-
@s.delete(:resource_dir)
|
53
|
-
SettingsManager.settings_correct?(@s).should be_false
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
context "dynamically created filter settings methods" do
|
58
|
-
it "properly creates methods for each filter settings" do
|
59
|
-
%w{cdn_filter_settings base64_filter_settings bundle_filter_settings}.each do |method|
|
60
|
-
if RUBY_VERSION > '1.9.0'
|
61
|
-
key = method.to_sym
|
62
|
-
else
|
63
|
-
key = method
|
64
|
-
end
|
65
|
-
SettingsManager.public_methods.include?(key).should be_true
|
66
|
-
end
|
67
|
-
end
|
68
|
-
describe "#cdn_filter_settings" do
|
69
|
-
it "returns cdn settings merged with commons" do
|
70
|
-
cdn = SettingsManager.cdn_filter_settings(@s)
|
71
|
-
cdn[:resource_dir].should == @s[:resource_dir]
|
72
|
-
cdn[:cache_dir].should == @s[:cache_dir]
|
73
|
-
cdn[:use].should == @s[:cdn_filter][:use]
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
describe "#set_request_specific_settings!" do
|
79
|
-
it "sets domain and protocol for settings" do
|
80
|
-
s = {}
|
81
|
-
SettingsManager.set_request_specific_settings!(s, 'google.com', 'http')
|
82
|
-
s[:domain].should == 'google.com'
|
83
|
-
s[:protocol].should == 'http'
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
end
|
88
|
-
|