Module: CloudfrontAssetHost
- Defined in:
- lib/cloudfront_asset_host.rb,
lib/cloudfront_asset_host/uploader.rb,
lib/cloudfront_asset_host/css_rewriter.rb
Defined Under Namespace
Modules: CssRewriter, Uploader
Class Method Summary
collapse
Class Method Details
.asset_host(source = nil, request = nil) ⇒ Object
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
# File 'lib/cloudfront_asset_host.rb', line 64
def asset_host(source = nil, request = nil)
return '' if source && disable_cdn_for_source?(source)
cname_for_source = (self.cname =~ /%d/) ? self.cname % (source.hash % 4) : self.cname
host = cname_for_source.present? ? "http://#{ cname_for_source }" : "http://#{self.bucket_host}"
if source && request && CloudfrontAssetHost.gzip
gzip_allowed = CloudfrontAssetHost.gzip_allowed_for_source?(source)
user_agent = request.['User-Agent'].to_s
gzip_accepted = !(user_agent =~ /^Mozilla\/4/) || user_agent =~ /\bMSIE/
gzip_accepted &&= request.['Accept-Encoding'].to_s.include?('gzip')
if gzip_accepted && gzip_allowed
host << "/#{CloudfrontAssetHost.gzip_prefix}"
end
end
host
end
|
.bucket_host ⇒ Object
87
88
89
|
# File 'lib/cloudfront_asset_host.rb', line 87
def bucket_host
"#{self.bucket}.s3.amazonaws.com"
end
|
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
# File 'lib/cloudfront_asset_host.rb', line 42
def configure
self.bucket = nil
self.cname = nil
self.key_prefix = ""
self.s3_config = "#{RAILS_ROOT}/config/s3.yml"
self.enabled = false
self.asset_dirs = "images,javascripts,stylesheets"
self.exclude_pattern = nil
self.gzip = true
self.gzip_extensions = %w(js css)
self.gzip_prefix = "gz"
yield(self)
if properly_configured?
enable!
end
end
|
.disable_cdn_for_source?(source) ⇒ Boolean
108
109
110
|
# File 'lib/cloudfront_asset_host.rb', line 108
def disable_cdn_for_source?(source)
source.match(exclude_pattern) if exclude_pattern.present?
end
|
.enable! ⇒ Object
91
92
93
94
95
96
97
|
# File 'lib/cloudfront_asset_host.rb', line 91
def enable!
if enabled
ActionController::Base.asset_host = Proc.new { |source, request| CloudfrontAssetHost.asset_host(source, request) }
ActionView::Helpers::AssetTagHelper.send(:alias_method_chain, :rewrite_asset_path, :cloudfront)
ActionView::Helpers::AssetTagHelper.send(:alias_method_chain, :rails_asset_id, :cloudfront)
end
end
|
.gzip_allowed_for_source?(source) ⇒ Boolean
103
104
105
106
|
# File 'lib/cloudfront_asset_host.rb', line 103
def gzip_allowed_for_source?(source)
extension = source.split('.').last
CloudfrontAssetHost.gzip_extensions.include?(extension)
end
|
.key_for_path(path) ⇒ Object
99
100
101
|
# File 'lib/cloudfront_asset_host.rb', line 99
def key_for_path(path)
key_prefix + md5sum(path)[0..8]
end
|