cloudseed 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/Rakefile +1 -0
  2. data/lib/cloudseed.rb +22 -2
  3. metadata +29 -50
data/Rakefile CHANGED
@@ -3,5 +3,6 @@ require "rake/testtask"
3
3
  task :default => :test
4
4
 
5
5
  Rake::TestTask.new do |t|
6
+ t.libs << 'test'
6
7
  t.warning = true
7
8
  end
data/lib/cloudseed.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  module CloudSeed
2
2
  class Middleware
3
+ CDN_ASSETS = ['text/css', 'application/javascript', 'text/javascript', 'image/', 'application/pdf', 'audio/', 'video/']
3
4
  COMPRESSABLE = ["javascript", "json", "atom+xml", "xml", "pdf"].map do |f|
4
5
  "application/#{f}"
5
6
  end
@@ -13,12 +14,31 @@ module CloudSeed
13
14
  munge_version(env)
14
15
 
15
16
  status, headers, body = app.call(env)
17
+
18
+ mime = headers['Content-Type']
16
19
 
17
- if is_compressable?(headers['Content-Type'])
20
+ if status == 200 && is_compressable?(mime)
18
21
  headers['Vary'] = 'Accept-Encoding'
19
22
  end
20
23
 
21
- [status, headers, body]
24
+ if is_cloudfront_request?(env) && !headers.has_key?('Expires')
25
+ headers['Expires'] = (Time.now + (365 * 24 * 60 * 60)).utc.rfc2822
26
+ end
27
+
28
+ if !is_cloudfront_request?(env) || status == 404 || is_cdn_asset?(mime)
29
+ [status, headers, body]
30
+ else
31
+ [404, {}, ['Not found']]
32
+ end
33
+ end
34
+
35
+ def is_cloudfront_request?(env)
36
+ env['HTTP_USER_AGENT'] == 'Amazon CloudFront'
37
+ end
38
+
39
+ def is_cdn_asset?(mime)
40
+ return true unless mime
41
+ CDN_ASSETS.any?{|c| mime.start_with?(c) }
22
42
  end
23
43
 
24
44
  def is_compressable?(mime)
metadata CHANGED
@@ -1,79 +1,58 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: cloudseed
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 1
8
- - 1
9
- version: 0.1.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - Kurt Mackey
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2011-02-13 00:00:00 -06:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2011-11-15 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: rack
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &70316899590680 !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- segments:
29
- - 1
30
- - 0
31
- - 0
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
32
21
  version: 1.0.0
33
22
  type: :runtime
34
- version_requirements: *id001
35
- description: CloudSeed is a Rack-based utility to manage backend delivery of CloudFront custom origins.
23
+ prerelease: false
24
+ version_requirements: *70316899590680
25
+ description: CloudSeed is a Rack-based utility to manage backend delivery of CloudFront
26
+ custom origins.
36
27
  email: mrkurt@gmail.com
37
28
  executables: []
38
-
39
29
  extensions: []
40
-
41
30
  extra_rdoc_files: []
42
-
43
- files:
31
+ files:
44
32
  - Rakefile
45
33
  - lib/cloudseed.rb
46
- has_rdoc: true
47
34
  homepage: http://github.com/mrkurt/cloudseed/
48
35
  licenses: []
49
-
50
36
  post_install_message:
51
37
  rdoc_options: []
52
-
53
- require_paths:
38
+ require_paths:
54
39
  - lib
55
- required_ruby_version: !ruby/object:Gem::Requirement
40
+ required_ruby_version: !ruby/object:Gem::Requirement
56
41
  none: false
57
- requirements:
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- segments:
61
- - 0
62
- version: "0"
63
- required_rubygems_version: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
47
  none: false
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- segments:
69
- - 0
70
- version: "0"
48
+ requirements:
49
+ - - ! '>='
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
71
52
  requirements: []
72
-
73
53
  rubyforge_project:
74
- rubygems_version: 1.3.7
54
+ rubygems_version: 1.8.10
75
55
  signing_key:
76
56
  specification_version: 3
77
57
  summary: Rack-based helper for CloudFront custom origins
78
58
  test_files: []
79
-