web_resource_bundler 0.0.14 → 0.0.15
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/.gitignore +1 -0
- data/Rakefile +1 -1
- data/Readme.md +141 -0
- data/VERSION +1 -1
- data/lib/web_resource_bundler/content_management/block_data.rb +3 -3
- data/lib/web_resource_bundler/content_management/block_parser.rb +2 -2
- data/lib/web_resource_bundler/content_management/resource_file.rb +11 -8
- data/lib/web_resource_bundler/exceptions.rb +6 -0
- data/lib/web_resource_bundler/filters/bundle_filter/resource_packager.rb +1 -1
- data/lib/web_resource_bundler/filters/bundle_filter.rb +3 -1
- data/lib/web_resource_bundler/filters/image_encode_filter/css_generator.rb +1 -3
- 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 -1
- data/lib/web_resource_bundler/rails_app_helpers.rb +5 -3
- data/lib/web_resource_bundler/settings_manager.rb +91 -0
- data/lib/web_resource_bundler/web_resource_bundler_init.rb +2 -16
- data/lib/web_resource_bundler.rb +36 -52
- data/spec/sample_block_helper.rb +6 -6
- data/spec/spec_helper.rb +14 -6
- data/spec/test_data/config/web_resource_bundler.yml +21 -0
- data/spec/{public → test_data/public}/foo.css +0 -0
- data/spec/{public → test_data/public}/images/good.jpg +0 -0
- data/spec/{public → test_data/public}/images/logo.jpg +0 -0
- data/spec/{public → test_data/public}/images/sdfo.jpg +0 -0
- data/spec/{public → test_data/public}/images/too_big_image.jpg +0 -0
- data/spec/{public → test_data/public}/marketing.js +0 -0
- data/spec/{public → test_data/public}/salog20.js +0 -0
- data/spec/{public → test_data/public}/sample.css +0 -0
- data/spec/{public → test_data/public}/seal.js +0 -0
- data/spec/{public → test_data/public}/set_cookies.js +0 -0
- data/spec/{public → test_data/public}/styles/boo.css +0 -0
- data/spec/{public → test_data/public}/styles/for_import.css +0 -0
- data/spec/{public → test_data/public}/temp.css +0 -0
- data/spec/{public → test_data/public}/test.css +0 -0
- data/spec/web_resource_bundler/content_management/resource_file_spec.rb +11 -3
- data/spec/web_resource_bundler/filters/bundle_filter/filter_spec.rb +4 -2
- data/spec/web_resource_bundler/filters/image_encode_filter/filter_spec.rb +17 -4
- data/spec/web_resource_bundler/settings_manager_spec.rb +88 -0
- data/spec/web_resource_bundler/web_resource_bundler_spec.rb +96 -94
- data/web_resource_bundler.gemspec +23 -23
- metadata +25 -22
- data/.bundle/config +0 -2
- data/README +0 -143
data/.gitignore
CHANGED
data/Rakefile
CHANGED
@@ -9,7 +9,7 @@ begin
|
|
9
9
|
gem.summary = %Q{lib for css and js content bundling and managment}
|
10
10
|
gem.description = %Q{this lib could bundle you css/js files in single file, encode images in base64, rewrite images urls to your cdn hosts}
|
11
11
|
gem.email = "anotheroneman@yahoo.com"
|
12
|
-
gem.homepage = "
|
12
|
+
gem.homepage = "https://github.com/railsware/web-bundler"
|
13
13
|
gem.authors = ["gregolsen"]
|
14
14
|
gem.add_development_dependency "rspec", "1.3.1"
|
15
15
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
data/Readme.md
ADDED
@@ -0,0 +1,141 @@
|
|
1
|
+
[Web Resource Bundler](http://wrb.railsware.com/) - New word in resource management
|
2
|
+
============================================
|
3
|
+
Purpose
|
4
|
+
------------------
|
5
|
+
The main purpose of WebResourceBundler gem is to minimize request & response
|
6
|
+
round-trips count. This could be done by bundling particular resource (css or js) in
|
7
|
+
one file. Encoding images in base64 and putting then in css directly.
|
8
|
+
|
9
|
+
Functional description
|
10
|
+
----------------------
|
11
|
+
WebResourceBundler parse your head html block, finding all css and js resource
|
12
|
+
files.
|
13
|
+
It can bundle resource of particular type in one single file. Base64 filter
|
14
|
+
encodes images in base64 putting them in css directly. Separate files for IE
|
15
|
+
and other browsers created. Conditional comments (like `<!--[if IE 6]>`) also
|
16
|
+
supported. You can use external image hosts to server images in css:
|
17
|
+
cdn filter can rewrite image urls for you. Resulted filename is a md5(filenames.sort)
|
18
|
+
|
19
|
+
Installation
|
20
|
+
---------------------
|
21
|
+
|
22
|
+
gem install web_resource_bundler
|
23
|
+
|
24
|
+
Usage
|
25
|
+
-------------------
|
26
|
+
|
27
|
+
Firstly you should create your settings file in config dir.
|
28
|
+
You can set separate settings for each environment
|
29
|
+
|
30
|
+
config/web_resource_bundler.yml
|
31
|
+
|
32
|
+
development:
|
33
|
+
:base64_filter:
|
34
|
+
:use: true
|
35
|
+
:max_image_size: 23
|
36
|
+
:protocol: http
|
37
|
+
:domain: localhost:3000
|
38
|
+
:bundle_filter:
|
39
|
+
:use: true
|
40
|
+
:cdn_filter:
|
41
|
+
:use: true
|
42
|
+
:http_hosts: ['http://localhost:3000']
|
43
|
+
:https_hosts: ['https://localhost:3000']
|
44
|
+
|
45
|
+
Then you should create initializer file in
|
46
|
+
/path/to/your/rails_app/config/initializers/ directory
|
47
|
+
Let's say it will be web_resource_bundler_init.rb
|
48
|
+
Then you should put content like this in it.
|
49
|
+
|
50
|
+
config/initializers/web_resource_bundler_init.rb
|
51
|
+
|
52
|
+
require 'web_resource_bundler'
|
53
|
+
require 'yaml'
|
54
|
+
root_dir = Rails.root #or RAILS_ROOT if you are using older rails version than 3
|
55
|
+
environment = Rails.env #or RAILS_ENV in case rails <= 2.3
|
56
|
+
settings = { }
|
57
|
+
settings_file_path = File.join(root_dir, 'config', 'web_resource_bundler.yml')
|
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[environment]
|
62
|
+
settings = all_settings[environment]
|
63
|
+
settings[:resource_dir] = File.join(root_dir, 'public')
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
WebResourceBundler::Bundler.instance.set_settings(settings)
|
68
|
+
ActionView::Base.send(:include, WebResourceBundler::RailsAppHelpers)
|
69
|
+
|
70
|
+
Now in your view files you can call **`web_resource_bundler_process`** helper like this:
|
71
|
+
|
72
|
+
<head>
|
73
|
+
<% web_resource_bundler_process do %>
|
74
|
+
|
75
|
+
<%= stylesheet_link_tag :scaffold %>
|
76
|
+
<%= javascript_include_tag :defaults %>
|
77
|
+
<link type="text/css" rel="stylesheet" href="/stylesheets/somestyle.css"/>
|
78
|
+
<%=yield :head %>
|
79
|
+
<!--[if lte IE 7]>
|
80
|
+
<link type="text/css" rel="stylesheet" href="/stylesheets/ie7fix.css"/>
|
81
|
+
<link type="text/css" rel="stylesheet" href="/stylesheets/pngfix.css"/>
|
82
|
+
<![endif]-->
|
83
|
+
|
84
|
+
<% end %>
|
85
|
+
</head>
|
86
|
+
|
87
|
+
Notice:
|
88
|
+
|
89
|
+
For Rails < 3
|
90
|
+
you should use **`<% web_resource_bundler_process do %>`**
|
91
|
+
|
92
|
+
And For Rails >= 3
|
93
|
+
use **`<%= web_resource_bundler_process do %>`**
|
94
|
+
|
95
|
+
|
96
|
+
And as result you'll have
|
97
|
+
|
98
|
+
<link href="/cache/base64_style_d880a502addaa493b889c0970616430b.css?1290594873" media="screen" rel="stylesheet" type="text/css" />
|
99
|
+
<script src="/cache/script_275d311037da40e9c9b8c919a8c08b55.js?1290594873" type="text/javascript"></script>
|
100
|
+
|
101
|
+
<!--[if lte IE 7]>
|
102
|
+
<link href="/cache/base64_ie_style_d880a502addaa493b889c0970616430b.css?1290594873" media="screen" rel="stylesheet" type="text/css" />
|
103
|
+
<![endif]-->
|
104
|
+
|
105
|
+
<!--[if lte IE 7]>
|
106
|
+
<link type="text/css" rel="stylesheet" href="/cache/base64_style_ad801w02addaa493b889c0970616430b.css?1290594873"/>
|
107
|
+
<![endif]-->
|
108
|
+
|
109
|
+
!!!
|
110
|
+
Don't forget to clean your cache directory after deploy to clean old bundles
|
111
|
+
|
112
|
+
|
113
|
+
To disable bundling and see raw results add no_bundler param
|
114
|
+
mysite.com/?no_bundler=1
|
115
|
+
|
116
|
+
Recommendations
|
117
|
+
--------------------
|
118
|
+
|
119
|
+
1. Be mindful while organazing and linking your resource files
|
120
|
+
WebResourceBundler combines all resource file in one. This resulted file could be huge.
|
121
|
+
a. Don't link all resources in layouts!
|
122
|
+
Be sure to link resources (css\js) only for pages that using them, in other case your users will be forced
|
123
|
+
to download huge css\js files with unused content.
|
124
|
+
b. One css for one page.
|
125
|
+
Try to slice you css files - separate file for each particular page.
|
126
|
+
c. Separate bundle block for crucial resources
|
127
|
+
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.
|
128
|
+
|
129
|
+
2. Don't set max_image_size to big values.
|
130
|
+
The main reason of using Base64 filter is to avoid unnecessary server requests and minimize load time,
|
131
|
+
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.
|
132
|
+
Recommended max_image_size value is 1..20kbytes
|
133
|
+
|
134
|
+
3. Be careful with third party scripts.
|
135
|
+
Some third party javascript libs can load another script file on the fly, relative path for this file computed
|
136
|
+
on the client side. But your scripts are bundled and their relative path changed (cache folder), that's why such script
|
137
|
+
won't be able to compute loaded file path correctly. You should avoid bundling such tricky javascripts.
|
138
|
+
|
139
|
+
4. Unexistent resources handling
|
140
|
+
a. Be sure to link in html only existent resource files, otherwise bundler won't work.
|
141
|
+
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.15
|
@@ -11,13 +11,13 @@ module WebResourceBundler
|
|
11
11
|
|
12
12
|
def styles
|
13
13
|
@files.select do |f|
|
14
|
-
[WebResourceBundler::ResourceFileType::CSS,
|
15
|
-
WebResourceBundler::ResourceFileType::IE_CSS]
|
14
|
+
!([WebResourceBundler::ResourceFileType::CSS,
|
15
|
+
WebResourceBundler::ResourceFileType::IE_CSS] & f.types).empty?
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
19
|
def scripts
|
20
|
-
@files.select {|f| f.
|
20
|
+
@files.select {|f| f.types.include?(WebResourceBundler::ResourceFileType::JS)}
|
21
21
|
end
|
22
22
|
|
23
23
|
def clone
|
@@ -45,9 +45,9 @@ module WebResourceBundler
|
|
45
45
|
unless value.include?('://')
|
46
46
|
case property
|
47
47
|
when "src"
|
48
|
-
then files << WebResourceBundler::ResourceFile.
|
48
|
+
then files << WebResourceBundler::ResourceFile.new_js_file(value) if File.extname(value) == '.js'
|
49
49
|
when "href"
|
50
|
-
then files << WebResourceBundler::ResourceFile.
|
50
|
+
then files << WebResourceBundler::ResourceFile.new_style_file(value) if File.extname(value) == '.css'
|
51
51
|
end
|
52
52
|
end
|
53
53
|
end
|
@@ -8,27 +8,30 @@ module WebResourceBundler
|
|
8
8
|
end
|
9
9
|
|
10
10
|
class ResourceFile
|
11
|
-
|
11
|
+
attr_accessor :types #array of ResourceFileType's objects
|
12
12
|
attr_accessor :path, :content
|
13
|
-
def initialize(
|
14
|
-
@
|
13
|
+
def initialize(path, content, *types)
|
14
|
+
@types = types.flatten
|
15
15
|
@content = content
|
16
16
|
@path = path
|
17
17
|
end
|
18
18
|
def self.new_js_file(path, content = "")
|
19
|
-
ResourceFile.new(
|
19
|
+
ResourceFile.new(path, content, ResourceFileType::JS)
|
20
20
|
end
|
21
21
|
def self.new_css_file(path, content = "")
|
22
|
-
ResourceFile.new(
|
22
|
+
ResourceFile.new(path, content, ResourceFileType::CSS)
|
23
23
|
end
|
24
24
|
def self.new_ie_css_file(path, content ="")
|
25
|
-
ResourceFile.new(
|
25
|
+
ResourceFile.new(path, content, ResourceFileType::IE_CSS)
|
26
|
+
end
|
27
|
+
def self.new_style_file(path, content ="")
|
28
|
+
ResourceFile.new(path, content, ResourceFileType::CSS, ResourceFileType::IE_CSS)
|
26
29
|
end
|
27
30
|
def self.new_mhtml_file(path, content = "")
|
28
|
-
ResourceFile.new(
|
31
|
+
ResourceFile.new(path, content, ResourceFileType::MHTML)
|
29
32
|
end
|
30
33
|
def clone
|
31
|
-
ResourceFile.new(self.
|
34
|
+
ResourceFile.new(self.path.dup, self.content.dup, self.types.dup)
|
32
35
|
end
|
33
36
|
end
|
34
37
|
|
@@ -23,4 +23,10 @@ module WebResourceBundler::Exceptions
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
+
class LogCreationError < WebResourceBundlerError
|
27
|
+
def initialize(log_path, original_exception)
|
28
|
+
super "Can't create log file, check log path: #{log_path}\n#{original_exception}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
26
32
|
end
|
@@ -14,7 +14,7 @@ module WebResourceBundler::Filters::BundleFilter
|
|
14
14
|
path = file.path
|
15
15
|
content = file.content
|
16
16
|
output << "/* --------- #{path} --------- */\n"
|
17
|
-
if file.
|
17
|
+
if file.types.first[:ext] == 'css'
|
18
18
|
imported_files = extract_imported_files!(content, path)
|
19
19
|
#getting imported (@import ...) files contents
|
20
20
|
imported_resource_files = []
|
@@ -15,7 +15,7 @@ module WebResourceBundler::Filters::BundleFilter
|
|
15
15
|
unless block_data.styles.empty?
|
16
16
|
new_css_filename = css_bundle_filepath(block_data.styles)
|
17
17
|
new_css_content = @packager.bundle_files(block_data.styles)
|
18
|
-
new_css_file = WebResourceBundler::ResourceFile.
|
18
|
+
new_css_file = WebResourceBundler::ResourceFile.new_style_file(new_css_filename, new_css_content)
|
19
19
|
new_files << new_css_file
|
20
20
|
end
|
21
21
|
unless block_data.scripts.empty?
|
@@ -30,6 +30,8 @@ module WebResourceBundler::Filters::BundleFilter
|
|
30
30
|
|
31
31
|
def get_md5(files)
|
32
32
|
items = [(files.map {|f| f.path }).sort]
|
33
|
+
items << @settings[:protocol]
|
34
|
+
items << @settings[:domain]
|
33
35
|
items += @settings[:md5_additional_data] if @settings[:md5_additional_data]
|
34
36
|
Digest::MD5.hexdigest(items.flatten.join('|'))
|
35
37
|
end
|
@@ -5,7 +5,6 @@ module WebResourceBundler
|
|
5
5
|
TAGS = ['background-image', 'background']
|
6
6
|
SEPARATOR = 'A_SEPARATOR'
|
7
7
|
PATTERN = /((#{TAGS.join('|')})\s*:[^\(]*)url\(\s*['|"]([^\)]*)['|"]\s*\)/
|
8
|
-
|
9
8
|
|
10
9
|
def initialize(settings, file_manager)
|
11
10
|
@settings = settings
|
@@ -14,20 +13,19 @@ module WebResourceBundler
|
|
14
13
|
|
15
14
|
def set_settings(settings)
|
16
15
|
@settings = settings
|
16
|
+
@settings[:max_image_size] = 20 unless @settings[:max_image_size]
|
17
17
|
end
|
18
18
|
|
19
19
|
#construct mhtml head of css file with definition of image data in base64
|
20
20
|
def construct_mhtml_content(images)
|
21
21
|
result = ""
|
22
22
|
unless images.empty?
|
23
|
-
result << "/* \n"
|
24
23
|
result << 'Content-Type: multipart/related; boundary="' << SEPARATOR << '"' << "\n\n"
|
25
24
|
#each image found in css should be defined in header with base64 encoded content
|
26
25
|
images.each_key do |key|
|
27
26
|
result << images[key].construct_mhtml_image_data('--' + SEPARATOR)
|
28
27
|
end
|
29
28
|
result << "\n" << '--' << SEPARATOR << '--' << "\n"
|
30
|
-
result << "*/"
|
31
29
|
end
|
32
30
|
result
|
33
31
|
end
|
@@ -16,13 +16,13 @@ module WebResourceBundler
|
|
16
16
|
else
|
17
17
|
@exist = false
|
18
18
|
end
|
19
|
-
if WebResourceBundler::Bundler.logger and !@path.include?('://') and !@exist
|
20
|
-
WebResourceBundler::Bundler.logger.info("Image not found #{@path}")
|
19
|
+
if WebResourceBundler::Bundler.instance.logger and !@path.include?('://') and !@exist
|
20
|
+
WebResourceBundler::Bundler.instance.logger.info("Image not found #{@path}")
|
21
21
|
end
|
22
22
|
if @exist
|
23
23
|
@size = File.size(@path)
|
24
24
|
name, @extension = File.basename(@path).split('.')
|
25
|
-
#id is a filename plus random number - to
|
25
|
+
#id is a filename plus random number - to provide uniqueness
|
26
26
|
@id = name + rand(MAX_RAND_FOR_ID).to_s
|
27
27
|
end
|
28
28
|
end
|
@@ -24,6 +24,8 @@ module WebResourceBundler::Filters::ImageEncodeFilter
|
|
24
24
|
#creating new mhtml file with images encoded in base64
|
25
25
|
mhtml_file = WebResourceBundler::ResourceFile.new_mhtml_file(mhtml_filepath(file.path), "")
|
26
26
|
file.path = encoded_filepath(file.path)
|
27
|
+
#we've created separate file for IE so current file should be marked as CSS only
|
28
|
+
file.types = [WebResourceBundler::ResourceFileType::CSS]
|
27
29
|
unless file.content.empty?
|
28
30
|
@generator.encode_images!(file.content)
|
29
31
|
#getting images to construct mhtml file
|
@@ -49,7 +51,7 @@ module WebResourceBundler::Filters::ImageEncodeFilter
|
|
49
51
|
|
50
52
|
#filepath of mhtml file for IE
|
51
53
|
def mhtml_filepath(base_file_path)
|
52
|
-
File.join(@settings[:cache_dir], MHTML_FILE_PREFIX + File.basename(base_file_path))
|
54
|
+
File.join(@settings[:cache_dir], MHTML_FILE_PREFIX + File.basename(base_file_path, ".*") + '.mhtml')
|
53
55
|
end
|
54
56
|
|
55
57
|
end
|
@@ -8,7 +8,7 @@ module WebResourceBundler::RailsAppHelpers
|
|
8
8
|
version = Rails::VERSION::STRING
|
9
9
|
if !params['no_bundler'] and WebResourceBundler::Bundler.instance.settings_correct
|
10
10
|
#we want to keep original string unchanged so we can return same content on error
|
11
|
-
block_data = WebResourceBundler::Bundler.instance.process(result.dup)
|
11
|
+
block_data = WebResourceBundler::Bundler.instance.process(result.dup, request.host_with_port, request.protocol.gsub(/:\/\//,''))
|
12
12
|
#if everything ok with bundling we should construct resulted html content and change result
|
13
13
|
result = construct_block(block_data, WebResourceBundler::Bundler.instance.settings) if block_data
|
14
14
|
end
|
@@ -24,10 +24,12 @@ module WebResourceBundler::RailsAppHelpers
|
|
24
24
|
result = ""
|
25
25
|
#we should include only mhtml files if browser IE 7 or 6
|
26
26
|
if mhtml_should_be_added?
|
27
|
-
styles = block_data.files.select
|
27
|
+
styles = block_data.files.select do |f|
|
28
|
+
!([WebResourceBundler::ResourceFileType::MHTML, WebResourceBundler::ResourceFileType::IE_CSS] & f.types).empty?
|
29
|
+
end
|
28
30
|
else
|
29
31
|
#it normal browser - so just including base64 css
|
30
|
-
styles = block_data.files.select {|f| f.
|
32
|
+
styles = block_data.files.select {|f| f.types.include?(WebResourceBundler::ResourceFileType::CSS)}
|
31
33
|
end
|
32
34
|
styles.each do |file|
|
33
35
|
url = File.join('/', file.path)
|
@@ -0,0 +1,91 @@
|
|
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
|