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



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/cloudfront_asset_host.rb', line 56

def asset_host(source = nil, request = nil)
  host = cname.present? ? "http://#{self.cname}" : "http://#{self.bucket_host}"

  if source && request && CloudfrontAssetHost.gzip
    gzip_allowed  = CloudfrontAssetHost.gzip_allowed_for_source?(source)

    # Only Netscape 4 does not support gzip
    # IE masquerades as Netscape 4, so we check that as well
    user_agent = request.headers['User-Agent'].to_s
    gzip_accepted = !(user_agent =~ /^Mozilla\/4/) || user_agent =~ /\bMSIE/
    gzip_accepted &&= request.headers['Accept-Encoding'].to_s.include?('gzip')

    if gzip_accepted && gzip_allowed
      host << "/#{CloudfrontAssetHost.gzip_prefix}"
    else
      host << "/#{CloudfrontAssetHost.plain_prefix}"
    end
  else
    host << "/#{CloudfrontAssetHost.plain_prefix}"
  end

  host
end

.bucket_hostObject



88
89
90
# File 'lib/cloudfront_asset_host.rb', line 88

def bucket_host
  "#{self.bucket}.s3.amazonaws.com"
end

.cnameObject



80
81
82
83
84
85
86
# File 'lib/cloudfront_asset_host.rb', line 80

def cname
  if @@cname.is_a? Proc
    @@cname.call
  else
    @@cname
  end
end

.configure {|_self| ... } ⇒ Object

Yields:

  • (_self)

Yield Parameters:



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/cloudfront_asset_host.rb', line 37

def configure
  # default configuration
  self.bucket     = nil
  self.cname      = nil
  self.key_prefix = ""
  self.s3_config  = "#{RAILS_ROOT}/config/s3.yml"
  self.enabled    = false

  self.gzip            = true
  self.gzip_extensions = %w(js css)
  self.gzip_prefix     = "gz"

  yield(self)

  if properly_configured?
    enable!
  end
end

.enable!Object



92
93
94
95
96
97
98
# File 'lib/cloudfront_asset_host.rb', line 92

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

Returns:

  • (Boolean)


104
105
106
107
# File 'lib/cloudfront_asset_host.rb', line 104

def gzip_allowed_for_source?(source)
  extension = source.split('.').last
  CloudfrontAssetHost.gzip_extensions.include?(extension)
end

.key_for_path(path) ⇒ Object



100
101
102
# File 'lib/cloudfront_asset_host.rb', line 100

def key_for_path(path)
  key_prefix + md5sum(path)[0..8]
end