turbo-sprockets-rails3 0.2.3 → 0.2.4

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.
data/README.md CHANGED
@@ -45,7 +45,7 @@ Enjoy your lightning fast deploys!
45
45
  `turbo-sprockets-rails3` can now remove expired assets after each compile. If the environment variable `CLEAN_EXPIRED_ASSETS` is set to `true`, the `assets:clean_expired` task will be run after `assets:precompile`.
46
46
  An asset will be deleted if it is no longer referenced by `manifest.yml`, and is more than 7 days (default) older than the **previous** compiled assets.
47
47
 
48
- Before the `assets:precompile` task runs, it stores the modification time of the current `manifest.yml` in a file called `expire_assets_after.yml`. When the `assets:clean_expired` task runs, it looks up the time in `expire_assets_after.yml`, and won't expire any assets that were created more recently than that time.
48
+ Before the `assets:precompile` task runs, it stores the modification time of the current `manifest.yml` in a file called `expire_assets_after.yml`. When the `assets:clean_expired` task runs, it looks up the time in `expire_assets_after.yml`, and won't expire any assets that were created on or after than that time.
49
49
 
50
50
  To expire old assets after precompile, you should compile assets by running `CLEAN_EXPIRED_ASSETS=true rake assets:precompile`. Alternatively, you can run `rake assets:precompile assets:clean_expired`.
51
51
 
data/Rakefile CHANGED
@@ -2,6 +2,9 @@
2
2
  require 'rake/testtask'
3
3
  ENV["TEST_CORES"] = "1"
4
4
 
5
+ require 'bundler'
6
+ Bundler::GemHelper.install_tasks
7
+
5
8
  namespace :test do
6
9
  task :isolated do
7
10
  Dir["test/assets*_test.rb"].each do |file|
@@ -35,6 +35,15 @@ namespace :assets do
35
35
  end
36
36
  end
37
37
 
38
+ # Returns an array of assets recognized by config.assets.digests,
39
+ # including gzipped assets and manifests
40
+ def known_assets
41
+ assets = Rails.application.config.assets.digests.to_a.flatten.map do |asset|
42
+ [asset, "#{asset}.gz"]
43
+ end.flatten
44
+ assets + %w(manifest.yml sources_manifest.yml)
45
+ end
46
+
38
47
  desc "Compile all the assets named in config.assets.precompile"
39
48
  task :precompile do
40
49
  invoke_or_reboot_rake_task "assets:precompile:all"
@@ -61,14 +70,14 @@ namespace :assets do
61
70
  env = Rails.application.assets
62
71
  target = File.join(::Rails.public_path, config.assets.prefix)
63
72
 
64
- # Create `public/assets/expire_assets_after.yml`, containing the timestamp of the previous manifest.yml
65
- # (Only for first run)
73
+ # Before first compile, set the mtime of all current assets to current time.
74
+ # This time reflects the last time the assets were being used.
66
75
  if digest.nil?
67
- manifest_path = config.assets.manifest || target
68
- manifest_file = File.join(manifest_path, 'manifest.yml')
69
- if File.exist?(manifest_file)
70
- File.open(File.join(target, 'expire_assets_after.yml'), 'w') do |f|
71
- f.puts YAML.dump(:expire_assets_after => File.mtime(manifest_file))
76
+ ::Rails.logger.debug "Updating mtimes for current assets..."
77
+ known_assets.each do |asset|
78
+ full_path = File.join(target, asset)
79
+ if File.exist?(full_path)
80
+ File.utime(Time.now, Time.now, full_path)
72
81
  end
73
82
  end
74
83
  end
@@ -119,39 +128,26 @@ namespace :assets do
119
128
  invoke_or_reboot_rake_task "assets:clean_expired:all"
120
129
  end
121
130
 
131
+ # Remove assets that haven't been deployed since `config.assets.expire_after` (default 7 days).
132
+ # The precompile task updates the mtime of the current assets before compiling,
133
+ # which indicates when they were last in use.
134
+ #
135
+ # The current assets are ignored, which is faster than the alternative of
136
+ # setting their mtimes only to check them again.
122
137
  namespace :clean_expired do
123
138
  task :all => ["assets:environment"] do
124
- # Remove assets that aren't referenced by manifest.yml,
125
- # and are older than `config.assets.expire_after` (default 7 days),
126
- # counting from the **previous** compile.
127
139
  config = ::Rails.application.config
128
140
  expire_after = config.assets.expire_after || 7.days
129
141
  public_asset_path = File.join(::Rails.public_path, config.assets.prefix)
130
-
131
- # Also handle gzipped assets
132
- known_assets = config.assets.digests.to_a.flatten.map do |asset|
133
- [asset, "#{asset}.gz"]
134
- end.flatten
135
- known_assets += %w(manifest.yml sources_manifest.yml)
142
+ @known_assets = known_assets
136
143
 
137
144
  Dir.glob(File.join(public_asset_path, '**/*')).each do |asset|
138
145
  next if File.directory?(asset)
139
146
  logical_path = asset.sub("#{public_asset_path}/", '')
140
147
 
141
- unless logical_path.in?(known_assets)
142
- # If 'expire_assets_after.yml' file exists, use that as the base time for expire_after
143
- # Otherwise, use Time.now
144
- expire_after_base_time = Time.now
145
-
146
- expire_after_file = File.join(::Rails.public_path, config.assets.prefix, 'expire_assets_after.yml')
147
- if File.exist?(expire_after_file)
148
- if time = YAML.load_file(expire_after_file)[:expire_assets_after]
149
- expire_after_base_time = time
150
- end
151
- end
152
-
153
- # Delete asset if older than expire_after seconds
154
- if File.mtime(asset) < (expire_after_base_time - expire_after)
148
+ unless logical_path.in?(@known_assets)
149
+ # Delete asset if not used for more than expire_after seconds
150
+ if File.mtime(asset) < (Time.now - expire_after)
155
151
  ::Rails.logger.debug "Removing expired asset: #{logical_path}"
156
152
  FileUtils.rm_f asset
157
153
  end
@@ -1,3 +1,3 @@
1
1
  module TurboSprockets
2
- VERSION = "0.2.3"
2
+ VERSION = "0.2.4"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: turbo-sprockets-rails3
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -100,12 +100,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
100
100
  - - ! '>='
101
101
  - !ruby/object:Gem::Version
102
102
  version: '0'
103
+ segments:
104
+ - 0
105
+ hash: 4460991150311061382
103
106
  required_rubygems_version: !ruby/object:Gem::Requirement
104
107
  none: false
105
108
  requirements:
106
109
  - - ! '>='
107
110
  - !ruby/object:Gem::Version
108
111
  version: '0'
112
+ segments:
113
+ - 0
114
+ hash: 4460991150311061382
109
115
  requirements: []
110
116
  rubyforge_project:
111
117
  rubygems_version: 1.8.24
@@ -134,4 +140,3 @@ test_files:
134
140
  - test/assets_debugging_test.rb
135
141
  - test/sprockets_helper_with_routes_test.rb
136
142
  - test/abstract_unit.rb
137
- has_rdoc: