apocalypse-404 0.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,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,6 @@
1
+ require "apocalypse-404/version"
2
+ require "apocalypse-404/middleware"
3
+ require "apocalypse-404/railtie" if defined? Rails
4
+
5
+ module Apocalypse404
6
+ end
@@ -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
@@ -0,0 +1,7 @@
1
+ module Apocalypse404
2
+ class Railtie < Rails::Railtie
3
+ initializer '404apocalypse.insert_middleware' do |app|
4
+ app.config.middleware.use Rack::Apocalypse404
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,4 @@
1
+ module Apocalypse404
2
+ NAME = "apocalypse-404"
3
+ VERSION = "0.0.1"
4
+ 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: []