apocalypse-404 0.0.1

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