apocalypse-404 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/README.md +37 -0
- data/lib/apocalypse-404.rb +6 -0
- data/lib/apocalypse-404/middleware.rb +24 -0
- data/lib/apocalypse-404/railtie.rb +7 -0
- data/lib/apocalypse-404/version.rb +4 -0
- data/lib/html/404.html +28 -0
- metadata +92 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZjgxMzVmZmU2M2U1NGVhZmNjN2E1ZDc5YzRhOTZjNDU4OGYzNjE4MA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MzE1N2YxYjA5MWIxYzI0MGQ5OWE1YzJjZWQ1NTMwMTJiMGY4YTQwMw==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
YTg0OWQxYmVmOWM4YzY1MzM5ZDRmYzk2MzIxM2ZhYWU0MjFkNzVkMGYzN2Q1
|
10
|
+
Mjc1OWJmNzYyYzU3YTVhZGVkMDdmMzdlZTg3MTQxZGZkMjEwMGI1YWEzODI0
|
11
|
+
NGFhZmEwYWEzNjRlMGI4N2M4ODA1ZWQzNjAzYmM5NDhmYzI0ZGI=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ZTI0ZmFjZDg3ZTM2MTA2ZDY5OTQyMTZmM2FlYWIzYTJhMTM0ZDM1YTRlMTdh
|
14
|
+
ZTQ2ZjJiNWZhYjcyZjMxYWNjMTYwMmViMzZmOWM0NzlhNmVmM2Q2MjljMjU0
|
15
|
+
OGFjMzRjZmRlZjFmNGQyNDE0MDY3YmU4Yjg3YmQ5YmVkODE0ZDk=
|
data/README.md
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# Apocalypse404
|
2
|
+
|
3
|
+
Generates an apocalyptic message for any 400/500 responses on your app
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'apocalypse404'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install apocalypse404
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
Sinatra:
|
22
|
+
|
23
|
+
require 'apocalypse-404'
|
24
|
+
use Rack::Apocalypse404
|
25
|
+
|
26
|
+
Rails:
|
27
|
+
|
28
|
+
- For Rails 3> simply including the gem should automatically include the middleware for rack
|
29
|
+
- To manually include it `config.middleware.use Rack::Apocalypse404`
|
30
|
+
|
31
|
+
## Contributing
|
32
|
+
|
33
|
+
1. Fork it
|
34
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
35
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
36
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
37
|
+
5. Create new Pull Request
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'rack'
|
2
|
+
|
3
|
+
class Rack::Apocalypse404
|
4
|
+
def initialize(app)
|
5
|
+
@app = app
|
6
|
+
end
|
7
|
+
|
8
|
+
def call(env)
|
9
|
+
status, headers, response = @app.call(env)
|
10
|
+
|
11
|
+
if status.to_i > 400
|
12
|
+
puts " -- #{status} -- Redirecting to apocalyptic message...."
|
13
|
+
|
14
|
+
spec = Gem::Specification.find_by_name("apocalypse-404")
|
15
|
+
filename = File.join( spec.gem_dir, 'lib', 'html' ) + "/404.html"
|
16
|
+
response = [File.read( filename ).gsub!(/!!MESSAGE/, status.to_s )]
|
17
|
+
|
18
|
+
headers = { "Content-Length" => response[0].length.to_s,
|
19
|
+
"Content-Type" => 'text/html;charset=utf-8' }
|
20
|
+
end
|
21
|
+
|
22
|
+
[ status, headers, response ]
|
23
|
+
end
|
24
|
+
end
|
data/lib/html/404.html
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<meta charset="UTF-8">
|
4
|
+
<style>
|
5
|
+
body{width:100%;height:100%;background-color:#000;margin:0;padding:0}
|
6
|
+
canvas{position:fixed;left:0;top:0;width:100%;height:100%;}
|
7
|
+
.text{position:fixed;left:0;top:0;width:100%;padding-top:20%;font-size:600%;color:#ff0505;text-align:center;text-shadow:2px 2px 5px #000, 0 0 15px #fff}
|
8
|
+
#canvas1{
|
9
|
+
background: #000777; /* Old browsers */
|
10
|
+
background: -moz-linear-gradient(top, #000777 7%, #916228 68%, #9b2b2b 85%); /* FF3.6+ */
|
11
|
+
background: -webkit-gradient(linear, left top, left bottom, color-stop(7%,#000777), color-stop(68%,#916228), color-stop(85%,#9b2b2b)); /* Chrome,Safari4+ */
|
12
|
+
background: -webkit-linear-gradient(top, #000777 7%,#916228 68%,#9b2b2b 85%); /* Chrome10+,Safari5.1+ */
|
13
|
+
background: -o-linear-gradient(top, #000777 7%,#916228 68%,#9b2b2b 85%); /* Opera 11.10+ */
|
14
|
+
background: -ms-linear-gradient(top, #000777 7%,#916228 68%,#9b2b2b 85%); /* IE10+ */
|
15
|
+
background: linear-gradient(to bottom, #000777 7%,#916228 68%,#9b2b2b 85%); /* W3C */
|
16
|
+
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#000777', endColorstr='#9b2b2b',GradientType=0 ); /* IE6-9 */
|
17
|
+
}
|
18
|
+
</style>
|
19
|
+
</head>
|
20
|
+
<body>
|
21
|
+
<canvas id="canvas1"></canvas>
|
22
|
+
<div class="text">Panic!!<br/>!!MESSAGE</div>
|
23
|
+
</body>
|
24
|
+
<script>
|
25
|
+
stars=function(){function e(e,t,n){this.x=t;this.y=n;this.size=e;this.frame=0;this.explosion=null}function n(e,n){this.x=e;this.y=n;this.sparks=[];this.frame=0;for(t=0;t<20;t++){spark=new r(this.x,this.y);this.sparks.push(spark)}}function r(e,t){this.base=t;this.x1=e;this.y1=t;this.x2=e;this.y2=t;this.x_speed=s(-10,10)*100;this.y_speed=s(-10,-5)*100}function i(e){this.id=e;this.pause=s(1,100)*100;this.distance=0}function s(e,t){return Math.floor(Math.random()*(t-e)+e)/100}function o(e){e.setAttribute("width",total_width);e.setAttribute("height",total_height);e.getContext("2d").width=total_width;e.getContext("2d").height=total_height;return e.getContext("2d")}function u(){total_width=document.body.clientWidth;total_height=document.body.clientHeight;boundary_bottom=total_height*.75;boundary_left=0;canvas=o(document.getElementById("canvas1"));bg_img=new Image;bg_img.src=p();for(t=0;t<NUMBER_ORBS;t++){cur=new i(t);stars_a.push(cur)}a()}function a(){l();star_val=setInterval(function(){f()},SPEED*5)}function f(){canvas.clearRect(0,0,total_width,total_height);for(h=0;h<NUMBER_ORBS;h++){if(stars_a[h].distance<DISTANCE_TO_FRONT)stars_a[h].animate()}canvas.drawImage(bg_img,0,0,total_width,total_height);for(h=0;h<NUMBER_ORBS;h++){if(stars_a[h].distance>=DISTANCE_TO_FRONT)stars_a[h].animate()}}function l(){window.clearInterval(star_val)}function c(e){e=e||window.event;if(e.keyCode===32)l()}function p(){return"data:image/png;base64,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"}star_val=null;stars_a=new Array;NUMBER_ORBS=75;NUMBER_TRAILS=45;SPEED=6;total_width=0;total_height=0;colors=["#ffff00","#ffc601","#ff7801","#c36c07"];canvas=null;background=null;GRAVITY=.3;INERTIA=.1;DISTANCE_TO_FRONT=.45;e.prototype.animate=function(){if(this.frame>NUMBER_TRAILS)return-1;backgroundColor=this.frame>3?"rgba(95, 95, 95, "+(1-this.frame/NUMBER_TRAILS)+")":colors[this.frame];width=this.frame>3?this.size*.7:(1-this.frame/15)*this.size;canvas.beginPath();canvas.arc(this.x,this.y,width,0,Math.PI*2,true);canvas.closePath();canvas.fillStyle=backgroundColor;canvas.fill();this.frame+=1};n.prototype.animate=function(){this.frame++;console.log(this.frame);if(this.frame>35)return-1;canvas.beginPath();canvas.arc(this.x,this.y,5+this.frame*2,0,Math.PI,true);canvas.closePath();canvas.fillStyle="rgba(255, 163, 0, "+(35-this.frame)/35+")";canvas.fill();canvas.beginPath();for(t=this.sparks.length-1;t>=0;t--){spark=this.sparks[t];spark.x2=spark.x1;spark.y2=spark.y1;spark.x_speed+=spark.x_speed>0?INERTIA*-1:INERTIA;spark.y_speed+=GRAVITY;spark.x1+=spark.x_speed*.5;spark.y1+=spark.y_speed*.5;canvas.moveTo(spark.x1,spark.y1);canvas.lineTo(spark.x2,spark.y2)}canvas.lineWidth=3;canvas.strokeStyle="#FFFF00";canvas.stroke()};i.prototype.init=function(){this.generate()};i.prototype.generate=function(){this.trails=[];if(this.id<NUMBER_ORBS*.4)this.distance=s(5,15);else if(this.id<NUMBER_ORBS*.75)this.distance=s(10,25);else this.distance=s(18,65);this.x=total_width*s(1,130);this.y=total_height*.2*(.6-this.distance);speed=3*this.distance*4;this.speed={x:speed*s(80,160),y:speed};this.size=Math.floor(18*this.distance);this.explosion=null;this.trails.push(new e(this.size,this.x,this.y))};i.prototype.animate=function(){if(this.pause>0){this.pause--;if(this.pause<1)this.init()}else{if(this.x>boundary_left&&this.y<boundary_bottom){trail=new e(this.size,this.x,this.y);this.trails.push(trail);this.x-=this.speed.x;this.y+=this.speed.y}if(this.distance>DISTANCE_TO_FRONT&&this.y>boundary_bottom&&this.x>boundary_left&&this.explosion!=="finished"){if(this.explosion===null)this.explosion=new n(this.x,this.y);if(this.explosion.animate()===-1)this.explosion="finished"}if(this.trails.length>0){for(t=this.trails.length-1;t>=0;t--){res=this.trails[t].animate();if(res===-1)this.trails.splice(t,1)}}if(this.trails.length===0&&(this.explosion===null||this.explosion==="finished")){this.pause=s(1,20)*100}}};window.onload=function(){u();a()};document.onkeydown=c}()
|
26
|
+
</script>
|
27
|
+
</html>
|
28
|
+
|
metadata
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: apocalypse-404
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- John Ratcliff
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-08-31 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: '1.3'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
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: rack
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: 404/500, panick!
|
56
|
+
email:
|
57
|
+
- john.w.ratcliff@biola.edu
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- README.md
|
63
|
+
- lib/apocalypse-404/middleware.rb
|
64
|
+
- lib/apocalypse-404/railtie.rb
|
65
|
+
- lib/apocalypse-404/version.rb
|
66
|
+
- lib/apocalypse-404.rb
|
67
|
+
- lib/html/404.html
|
68
|
+
homepage: http://ratcliffs.info
|
69
|
+
licenses:
|
70
|
+
- MIT
|
71
|
+
metadata: {}
|
72
|
+
post_install_message:
|
73
|
+
rdoc_options: []
|
74
|
+
require_paths:
|
75
|
+
- lib
|
76
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - ! '>='
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
requirements: []
|
87
|
+
rubyforge_project:
|
88
|
+
rubygems_version: 2.0.7
|
89
|
+
signing_key:
|
90
|
+
specification_version: 4
|
91
|
+
summary: 404/500 pages for a rack based app
|
92
|
+
test_files: []
|