sprockets-redirect 0.1.0 → 0.2.0

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.
@@ -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: []