error_page_assets 0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 16bbd1059b6b3587f6f2a9255a4b5b99b2c92303
4
+ data.tar.gz: 6518f7a7f144ae70e68d0b00070dadf45195ec62
5
+ SHA512:
6
+ metadata.gz: a1eeab19d61714b3f5c6205cadeec29aea56c6014a0929679cda84d92295173fb0815edc0077c1adc927b143dea9338066e77d1b043d71c051d68ec6e6cd6e12
7
+ data.tar.gz: a4eb0112a9f0dc5751572f45e1908db88fc2fa1fa1357333e21aed505ad1eb2cbfce8a01fd8871b3a3e0db2f6564274b5cc341a459dc3304bd9f506609ddaaf5
data/.gitignore ADDED
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
3
+
4
+ group :development do
5
+ gem 'guard'
6
+ gem 'guard-rspec'
7
+ gem 'guard-bundler'
8
+ end
data/Guardfile ADDED
@@ -0,0 +1,17 @@
1
+ guard :bundler do
2
+ watch('Gemfile')
3
+ watch(/^.+\.gemspec/)
4
+ end
5
+
6
+ guard :rspec, cmd: 'rspec' do
7
+ # run all specs if any Ruby file is modified
8
+ watch(%r{^lib/.+\.rb}) { "spec" }
9
+ # watch(%r{.*\.rb})
10
+ # watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
11
+
12
+ # re-run just the spec
13
+ watch(%r{^spec/.+_spec\.rb$})
14
+
15
+ # run all specs if the helper is modified
16
+ watch(%r{spec/spec_helper\.rb}) { "spec" }
17
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Scott Bronson
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,99 @@
1
+ # Error Page Assets
2
+
3
+ Let the asset pipeline generate your static error pages.
4
+
5
+ This gem lets you include Sprockets-generated CSS and JS files,
6
+ complete with cache-busting digests, in `public/404.html` and friends.
7
+ You can even use layouts.
8
+
9
+ No monkeypatching, no Rails engines, no routing, just idiomatic code.
10
+ The asset pipeline will generate static files so your
11
+ web server shows your custom error pages even when your app is down hard.
12
+
13
+
14
+ ## Installation
15
+
16
+ Add this line to your Gemfile:
17
+
18
+ ```ruby
19
+ gem 'error_page_assets'
20
+ ```
21
+
22
+ Move your error pages into the asset pipeline
23
+
24
+ ```sh
25
+ git mv public/404.html app/assets/html/404.html.erb
26
+ git mv public/422.html app/assets/html/422.html.erb
27
+ git mv public/500.html app/assets/html/500.html.erb
28
+ ```
29
+
30
+ And tell the asset pipeline to compile your error pages.
31
+ In `config/application.rb`:
32
+
33
+ ```ruby
34
+ config.assets.precompile += %w[404.html 422.html 500.html]
35
+ ```
36
+
37
+
38
+ ## Usage
39
+
40
+ Whenever assets are precompiled (i.e. during each deploy),
41
+ your error pages will be generated and dropped into `/public`.
42
+
43
+ ```sh
44
+ # public/404.html doesn't exist
45
+ rails assets:precompile
46
+ # public/404.html exists and includes your most recent code
47
+ ```
48
+
49
+ Your error pages are automatically generated along with the
50
+ rest of your assets each time you deploy.
51
+
52
+ ### Rails Helpers
53
+
54
+ Now you can update your error pages to use Rails helpers:
55
+
56
+ ```erb
57
+ old:
58
+ <link href="/css/application.css" media="all" rel="stylesheet"/>
59
+ <script src="/js/application.js"></script>
60
+ new:
61
+ <%= stylesheet_link_tag 'application', media: 'all', digest: true %>
62
+ <%= javascript_include_tag "application" %>
63
+ ```
64
+
65
+
66
+ ## Layouts
67
+
68
+ The Asset pipeline knows how to include stylesheets in your html,
69
+ but it doesn't know how to render layouts. If you'd like your
70
+ static error pages to use layouts too, use the
71
+ [render anywhere](https://github.com/yappbox/render_anywhere) gem.
72
+
73
+
74
+ ## Roadmap
75
+
76
+ * Do we still need to use digest:true?
77
+ * Use an initializer to automatically add error pages to the sprockets config?
78
+ * Rails generator to move your error pages?
79
+
80
+
81
+ ## Alternatives
82
+
83
+ * Inspired by: http://icelab.com.au/articles/precompiled-rails-static-404-and-500-pages/
84
+ * Rails Engine: https://github.com/marcusg/dynamic_error_pages
85
+ * Dynamic Route: https://github.com/eric1234/better_exception_app
86
+
87
+
88
+ ## License
89
+
90
+ Pain-free MIT.
91
+
92
+
93
+ ## Contributing
94
+
95
+ My app isn't localized so I haven't bothered with `I18n.available_locales`.
96
+ If you want localization, please file an issue.
97
+
98
+ To make this gem less imperfect, please submit your issues and patches on
99
+ [GitHub](https://github.com/bronson/error_page_assets/).
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+ task :default => ['spec']
6
+ task :test => ['spec']
@@ -0,0 +1,23 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'error_page_assets/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "error_page_assets"
7
+ spec.version = ErrorPageAssets::VERSION
8
+ spec.authors = ["Scott Bronson"]
9
+ spec.email = ["brons_errpage@rinspin.com"]
10
+ spec.summary = "Uses the asset pipeline to generate your static error pages."
11
+ # spec.description = "Uses the asset pipeline to generate your static error pages."
12
+ spec.homepage = "http://github.com/bronson/static_error_pages"
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files -z`.split("\x0")
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_development_dependency "bundler"
21
+ spec.add_development_dependency "rake"
22
+ spec.add_development_dependency "rspec"
23
+ end
@@ -0,0 +1,13 @@
1
+ require 'error_page_Assets'
2
+ require 'rails'
3
+
4
+ module ErrorPageAssets
5
+ class Railtie < Rails::Railtie
6
+ railtie_name :error_page_assets
7
+
8
+ rake_tasks do
9
+ load "tasks/error_page_assets.rake"
10
+ end
11
+ end
12
+ end
13
+
@@ -0,0 +1,3 @@
1
+ module ErrorPageAssets
2
+ VERSION = "0.1"
3
+ end
@@ -0,0 +1,3 @@
1
+ module ErrorPageAssets
2
+ require 'error_page_assets/railtie' if defined?(Rails)
3
+ end
@@ -0,0 +1,35 @@
1
+ require 'fileutils'
2
+
3
+ # Use the Asset Pipeline to generate static error pages.
4
+ # For example, /app/assets/html/404.html.erb will be compiled to /public/404.html
5
+
6
+
7
+ Rake::Task['assets:precompile'].enhance do
8
+ Rake::Task['assets:precompile:error_pages'].invoke
9
+ end
10
+
11
+ namespace :assets do
12
+ namespace :precompile do
13
+ def log msg
14
+ # try to log like Sprockets even though their stuff is all private
15
+ STDERR.puts msg
16
+ Rails.logger.info(msg) if Rails.respond_to?(:logger)
17
+ end
18
+
19
+ def copy_error_files
20
+ pattern = Rails.root.join('public', 'assets', "[0-9][0-9][0-9]*.html")
21
+ groups = Dir[pattern].group_by { |s| File.basename(s)[0..2] }
22
+ groups.sort_by { |base,_| base }.each do |base, group|
23
+ latest = group.sort_by { |f| File.mtime(f) }.last
24
+ log "copy #{latest} to public/#{base}.html"
25
+ FileUtils.cp latest, Rails.root.join('public', "#{base}.html")
26
+ end
27
+ end
28
+
29
+ desc 'Copies the newest error pages into /public'
30
+ task :error_pages do
31
+ copy_error_files
32
+ end
33
+ end
34
+ end
35
+
@@ -0,0 +1,30 @@
1
+ require 'rake'
2
+
3
+ describe 'assets:precompile:error_pages' do
4
+ before do
5
+ # load rake task
6
+ Rake.application = Rake::Application.new
7
+ Rake.application.rake_require('stub_assets_precompile', ['spec'])
8
+ Rake.application.rake_require('error_page_assets', ['lib/tasks'])
9
+
10
+ # allow rake task to call Rails.root.join
11
+ stub_const('Rails', Class.new)
12
+ allow(Rails).to receive_message_chain(:root, :join) { |*args| File.join('spec', *args) }
13
+ end
14
+
15
+ it "copies the error pages" do
16
+ # ensure the rake task uses the most recent asset file
17
+ expect(File).to receive(:mtime).with('spec/public/assets/404-digestnew.html').and_return(Time.now)
18
+ expect(File).to receive(:mtime).with('spec/public/assets/404-digestold.html').and_return(Time.now - 3600)
19
+ expect(File).to receive(:mtime).with('spec/public/assets/500.html').and_return(Time.now)
20
+
21
+ # ensure the rake task doesn't actually perform the copies
22
+ expect(FileUtils).to receive(:cp).with('spec/public/assets/404-digestnew.html', 'spec/public/404.html')
23
+ expect(FileUtils).to receive(:cp).with('spec/public/assets/500.html', 'spec/public/500.html')
24
+
25
+ # suppress our logging while testing
26
+ expect(STDERR).to receive(:puts).twice
27
+
28
+ Rake.application['assets:precompile:error_pages'].invoke
29
+ end
30
+ end
File without changes
File without changes
File without changes
@@ -0,0 +1,3 @@
1
+ RSpec.configure do |config|
2
+ config.order = 'random'
3
+ end
@@ -0,0 +1,6 @@
1
+ namespace :assets do
2
+ desc 'stubs assets:precompile for testing'
3
+ task :precompile do
4
+ puts 'precompiling'
5
+ end
6
+ end
metadata ADDED
@@ -0,0 +1,110 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: error_page_assets
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ platform: ruby
6
+ authors:
7
+ - Scott Bronson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description:
56
+ email:
57
+ - brons_errpage@rinspin.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - ".rspec"
64
+ - Gemfile
65
+ - Guardfile
66
+ - LICENSE.txt
67
+ - README.md
68
+ - Rakefile
69
+ - error_page_assets.gemspec
70
+ - lib/error_page_assets.rb
71
+ - lib/error_page_assets/railtie.rb
72
+ - lib/error_page_assets/version.rb
73
+ - lib/tasks/error_page_assets.rake
74
+ - spec/error_page_assets_spec.rb
75
+ - spec/public/assets/404-digestnew.html
76
+ - spec/public/assets/404-digestold.html
77
+ - spec/public/assets/500.html
78
+ - spec/spec_helper.rb
79
+ - spec/stub_assets_precompile.rake
80
+ homepage: http://github.com/bronson/static_error_pages
81
+ licenses:
82
+ - MIT
83
+ metadata: {}
84
+ post_install_message:
85
+ rdoc_options: []
86
+ require_paths:
87
+ - lib
88
+ required_ruby_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ required_rubygems_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ requirements: []
99
+ rubyforge_project:
100
+ rubygems_version: 2.4.5
101
+ signing_key:
102
+ specification_version: 4
103
+ summary: Uses the asset pipeline to generate your static error pages.
104
+ test_files:
105
+ - spec/error_page_assets_spec.rb
106
+ - spec/public/assets/404-digestnew.html
107
+ - spec/public/assets/404-digestold.html
108
+ - spec/public/assets/500.html
109
+ - spec/spec_helper.rb
110
+ - spec/stub_assets_precompile.rake