sprockets-redirect 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 05665c3e2fd0b0271a7ee7cdeefae5f5e0d06f47
4
+ data.tar.gz: eb0e49c4fa65361437f8909aac5eb1aa1a2a2978
5
+ SHA512:
6
+ metadata.gz: 5eb94d40046f8d64ac573c254f69a6c1b79e9b72bf134c486f33c7f43aad8d683c2e0e2bbc9589e2ea28da0de05130f84b66907324307ac1bbabc6b9d2f85f30
7
+ data.tar.gz: f9e317cf8c54c037bdd54dab20067e6c9c0317b85d038911d9f5f91b60c63a894d55f664d296ec4ccb09c9dc08e1187394dbbe444fb1f63abe6e636ab5c1348b
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- Sprockets::Redirect [![Build Status](https://secure.travis-ci.org/thoughtbot/paperclip.png?branch=master)](http://travis-ci.org/thoughtbot/paperclip)
1
+ Sprockets::Redirect [![Build Status](https://secure.travis-ci.org/sikachu/sprockets-redirect.png?branch=master)](http://travis-ci.org/sikachu/sprockets-redirect)
2
2
  ===================
3
3
 
4
4
  A Rack middleware for [Rails](https://github.com/rails/rails) >= 3.1.0 with asset pipeline and asset digest enabled. This middleware is used to redirect any request to static asset without a digest to the version with digest in its filename by reading the `manifest.yml` file generated after you run `rake assets:precompile`
@@ -75,6 +75,8 @@ Contributing
75
75
 
76
76
  If you found any bug or would like to request a feature, please use Github's [issue tracker](https://github.com/sikachu/sprockets-redirect/issues) to report them. [Pull requests](https://github.com/sikachu/sprockets-redirect/pulls) are always welcomed if you also want to help me fix it. Please make sure to include a test to make sure that I don't break it in the future.
77
77
 
78
+ Also, you should run `rake test_all` to run the test against multiple versions of Ruby. We're currently testing against Rails 3.1, 3.2 and 4.0
79
+
78
80
 
79
81
  License
80
82
  -------
@@ -2,10 +2,10 @@ require 'sprockets/redirect'
2
2
 
3
3
  module Sprockets
4
4
  class RedirectRailtie < ::Rails::Railtie
5
- initializer "my_railtie.configure_rails_initialization" do |app|
6
- if ::Rails.configuration.assets.enabled && !::Rails.configuration.assets.compile && ::Rails.configuration.assets.digest
7
- app.middleware.insert_before Rack::Lock, Sprockets::Redirect, :digests => ::Rails.configuration.assets.digests,
8
- :prefix => ::Rails.configuration.assets.prefix
5
+ initializer "insert_sprockets_redirect_middleware" do |app|
6
+ if !::Rails.configuration.assets.compile && ::Rails.configuration.assets.digest
7
+ app.middleware.insert 0, Sprockets::Redirect, ::Rails.application.assets,
8
+ :prefix => ::Rails.configuration.assets.prefix
9
9
  end
10
10
  end
11
11
  end
@@ -24,11 +24,6 @@ module Sprockets
24
24
  # E-Mail which refers to static assets in the asset pipeline, which might be
25
25
  # impossible and impractical for you to use an URL with a digest in it.
26
26
  class Redirect
27
-
28
- # Set a path to manifest file, which will be used for lookup
29
- class_attribute :manifest
30
- self.manifest = nil
31
-
32
27
  # Set this to false to disable middleware's redirection
33
28
  class_attribute :enabled
34
29
  self.enabled = true
@@ -37,38 +32,52 @@ module Sprockets
37
32
  class_attribute :redirect_status
38
33
  self.redirect_status = 302
39
34
 
40
- def initialize(app, options = {})
35
+ def initialize(app, sprockets_environment, options = {})
41
36
  @app = app
42
- @digests = options[:digests] || []
43
37
  @prefix = options[:prefix] || "/assets"
44
- if manifest = options[:manifest] || self.class.manifest
45
- @digests = YAML.load_file manifest
46
- end
38
+ @environment = sprockets_environment
47
39
  end
48
40
 
49
41
  def call(env)
50
- if self.class.enabled && !@digests.empty? && asset_match?(env)
42
+ @request = Rack::Request.new(env)
43
+
44
+ if should_redirect?
51
45
  redirect_to_digest_version(env)
52
46
  else
53
47
  @app.call(env)
54
48
  end
55
49
  end
56
50
 
57
- protected
51
+ private
52
+
53
+ def should_redirect?
54
+ self.class.enabled && asset_path_matched?
55
+ end
58
56
 
59
57
  # This will returns true if a requested path is matched in the digests hash
60
- def asset_match?(env)
61
- @request = Rack::Request.new(env)
62
- @request.path.match(/^#{@prefix}/) && @digests.has_key?(@request.path.sub(/^#{@prefix}\//, ""))
58
+ def asset_path_matched?
59
+ @request.path.start_with?(@prefix) && asset_exists?
60
+ end
61
+
62
+ def asset_exists?
63
+ @environment[logical_path]
64
+ end
65
+
66
+ def logical_path
67
+ @request.path.sub(/^#{@prefix}\//, "")
68
+ end
69
+
70
+ def digest_path
71
+ @environment[logical_path].digest_path
63
72
  end
64
73
 
65
74
  # Sends a redirect header back to browser
66
75
  def redirect_to_digest_version(env)
67
76
  url = URI(@request.url)
68
- filename = @digests[@request.path.sub("#{@prefix}/", "")]
69
- url.path = "#{@prefix}/#{filename}"
77
+ url.path = "#{@prefix}/#{digest_path}"
78
+
70
79
  headers = { 'Location' => url.to_s,
71
- 'Content-Type' => Rack::Mime.mime_type(::File.extname(filename)),
80
+ 'Content-Type' => Rack::Mime.mime_type(::File.extname(digest_path)),
72
81
  'Pragma' => 'no-cache',
73
82
  'Cache-Control' => 'no-cache; max-age=0' }
74
83
  [self.class.redirect_status, headers, [redirect_message(url.to_s)]]
metadata CHANGED
@@ -1,52 +1,131 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sprockets-redirect
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
5
- prerelease:
4
+ version: 0.2.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Prem Sichanugrist
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2011-09-15 00:00:00.000000000Z
11
+ date: 2014-01-04 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rack
16
- requirement: &70163961784520 !ruby/object:Gem::Requirement
17
- none: false
15
+ requirement: !ruby/object:Gem::Requirement
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
- version_requirements: *70163961784520
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
25
27
  - !ruby/object:Gem::Dependency
26
28
  name: activesupport
27
- requirement: &70163961783480 !ruby/object:Gem::Requirement
28
- none: false
29
+ requirement: !ruby/object:Gem::Requirement
29
30
  requirements:
30
- - - ! '>='
31
+ - - '>='
31
32
  - !ruby/object:Gem::Version
32
33
  version: 3.1.0
33
34
  type: :runtime
34
35
  prerelease: false
35
- version_requirements: *70163961783480
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: 3.1.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: appraisal
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: 1.0.0.beta2
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.0.beta2
36
55
  - !ruby/object:Gem::Dependency
37
56
  name: bundler
38
- requirement: &70163961774060 !ruby/object:Gem::Requirement
39
- none: false
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: mocha
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rack-test
99
+ requirement: !ruby/object:Gem::Requirement
40
100
  requirements:
41
- - - ! '>='
101
+ - - '>='
42
102
  - !ruby/object:Gem::Version
43
103
  version: '0'
44
104
  type: :development
45
105
  prerelease: false
46
- version_requirements: *70163961774060
47
- description: ! " Rack middleware which will look up your `public/assets/manifest.yml`
48
- and\n redirect a request with no digest in the file name to the version with\n
49
- \ digest in the file name.\n"
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rails
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ description: |2
126
+ Rack middleware which will look up your `public/assets/manifest.yml` and
127
+ redirect a request with no digest in the file name to the version with
128
+ digest in the file name.
50
129
  email: s@sikac.hu
51
130
  executables: []
52
131
  extensions: []
@@ -59,26 +138,25 @@ files:
59
138
  - README.md
60
139
  homepage: https://github.com/sikachu/sprockets-redirect
61
140
  licenses: []
141
+ metadata: {}
62
142
  post_install_message:
63
143
  rdoc_options: []
64
144
  require_paths:
65
145
  - lib
66
146
  required_ruby_version: !ruby/object:Gem::Requirement
67
- none: false
68
147
  requirements:
69
- - - ! '>='
148
+ - - '>='
70
149
  - !ruby/object:Gem::Version
71
150
  version: '0'
72
151
  required_rubygems_version: !ruby/object:Gem::Requirement
73
- none: false
74
152
  requirements:
75
- - - ! '>='
153
+ - - '>='
76
154
  - !ruby/object:Gem::Version
77
155
  version: '0'
78
156
  requirements: []
79
157
  rubyforge_project:
80
- rubygems_version: 1.8.10
158
+ rubygems_version: 2.0.14
81
159
  signing_key:
82
- specification_version: 3
160
+ specification_version: 4
83
161
  summary: Redirect assets with no digest request to a filename with digest version.
84
162
  test_files: []