status_dogs 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.
- data/.gitignore +4 -0
- data/.rspec +2 -0
- data/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/README.md +69 -0
- data/Rakefile +7 -0
- data/config.ru +8 -0
- data/dogs/100.jpg +0 -0
- data/dogs/200.jpg +0 -0
- data/dogs/201.jpg +0 -0
- data/dogs/202.jpg +0 -0
- data/dogs/203.jpg +0 -0
- data/dogs/204.jpg +0 -0
- data/dogs/206.jpg +0 -0
- data/dogs/300.jpg +0 -0
- data/dogs/301.jpg +0 -0
- data/dogs/302.jpg +0 -0
- data/dogs/303.jpg +0 -0
- data/dogs/304.jpg +0 -0
- data/dogs/305.jpg +0 -0
- data/dogs/306.jpg +0 -0
- data/dogs/400.jpg +0 -0
- data/dogs/401.jpg +0 -0
- data/dogs/402.jpg +0 -0
- data/dogs/403.jpg +0 -0
- data/dogs/404.jpg +0 -0
- data/dogs/405.jpg +0 -0
- data/dogs/406.jpg +0 -0
- data/dogs/408.jpg +0 -0
- data/dogs/409.jpg +0 -0
- data/dogs/410.jpg +0 -0
- data/dogs/411.jpg +0 -0
- data/dogs/413.jpg +0 -0
- data/dogs/414.jpg +0 -0
- data/dogs/416.jpg +0 -0
- data/dogs/417.jpg +0 -0
- data/dogs/418.jpg +0 -0
- data/dogs/420.jpg +0 -0
- data/dogs/422.jpg +0 -0
- data/dogs/423.jpg +0 -0
- data/dogs/424.jpg +0 -0
- data/dogs/425.jpg +0 -0
- data/dogs/426.jpg +0 -0
- data/dogs/429.jpg +0 -0
- data/dogs/431.jpg +0 -0
- data/dogs/444.jpg +0 -0
- data/dogs/450.jpg +0 -0
- data/dogs/500.jpg +0 -0
- data/dogs/501.jpg +0 -0
- data/dogs/502.jpg +0 -0
- data/dogs/503.jpg +0 -0
- data/dogs/504.jpg +0 -0
- data/dogs/506.jpg +0 -0
- data/dogs/507.jpg +0 -0
- data/dogs/508.jpg +0 -0
- data/lib/status_dogs.rb +31 -0
- data/spec/spec_helper.rb +21 -0
- data/spec/status_dogs_spec.rb +69 -0
- data/spec/test_app.rb +11 -0
- data/status_dogs.gemspec +22 -0
- metadata +173 -0
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
# Status Dogs
|
2
|
+
|
3
|
+
Rack middleware replacing responses with relevant pictures of dogs, based on the status code.
|
4
|
+
|
5
|
+
The pictures are made/collected by [Mike Lee](https://twitter.com/mikeleeorg) on [HTTP Status Dogs](http://httpstatusdogs.com/).
|
6
|
+
|
7
|
+
This is a shameless fork of [status_cats](https://github.com/iain/status_cats) by @iain.
|
8
|
+
|
9
|
+
## Usage
|
10
|
+
|
11
|
+
Install:
|
12
|
+
|
13
|
+
``` sh
|
14
|
+
gem install status_dogs
|
15
|
+
```
|
16
|
+
|
17
|
+
Place inside your rackup file:
|
18
|
+
|
19
|
+
``` ruby
|
20
|
+
require 'status_dogs'
|
21
|
+
use StatusDogs
|
22
|
+
```
|
23
|
+
|
24
|
+
This will also replace valid responses, even `200`, basically making your application useless.
|
25
|
+
|
26
|
+
You can manage which status codes should be replaced with dogs, by using the `:only` and `:except`
|
27
|
+
options, which take arrays or ranges.
|
28
|
+
|
29
|
+
``` ruby
|
30
|
+
use StatusDogs, :only => [ 403, 404, 500 ]
|
31
|
+
|
32
|
+
# or ...
|
33
|
+
|
34
|
+
use StatusDogs, :except => 200...300
|
35
|
+
```
|
36
|
+
|
37
|
+
## Development
|
38
|
+
|
39
|
+
Install dependencies:
|
40
|
+
|
41
|
+
``` sh
|
42
|
+
bundle install
|
43
|
+
```
|
44
|
+
|
45
|
+
Run tests:
|
46
|
+
|
47
|
+
``` sh
|
48
|
+
rake
|
49
|
+
```
|
50
|
+
|
51
|
+
You can run the demo application:
|
52
|
+
|
53
|
+
``` sh
|
54
|
+
bundle exec rackup
|
55
|
+
```
|
56
|
+
|
57
|
+
The application will trigger the response code depending on the path you visit, so visiting
|
58
|
+
[http://localhost:9292/418](http://localhost:9292/418) will respond with a teapot.
|
59
|
+
|
60
|
+
|
61
|
+
## Known issues
|
62
|
+
|
63
|
+
Status codes `100` (Continue), `204` (No Content) and `304` (Not Modified) cannot have a response body. Triggering them will cause Rack to throw up.
|
64
|
+
|
65
|
+
## License
|
66
|
+
|
67
|
+
The Ruby code in this project is released under the MIT License.
|
68
|
+
|
69
|
+
The pictures of dogs are copywrited by [Mike Lee](https://twitter.com/mikeleeorg) from http://httpstatusdogs.com/
|
data/Rakefile
ADDED
data/config.ru
ADDED
data/dogs/100.jpg
ADDED
Binary file
|
data/dogs/200.jpg
ADDED
Binary file
|
data/dogs/201.jpg
ADDED
Binary file
|
data/dogs/202.jpg
ADDED
Binary file
|
data/dogs/203.jpg
ADDED
Binary file
|
data/dogs/204.jpg
ADDED
Binary file
|
data/dogs/206.jpg
ADDED
Binary file
|
data/dogs/300.jpg
ADDED
Binary file
|
data/dogs/301.jpg
ADDED
Binary file
|
data/dogs/302.jpg
ADDED
Binary file
|
data/dogs/303.jpg
ADDED
Binary file
|
data/dogs/304.jpg
ADDED
Binary file
|
data/dogs/305.jpg
ADDED
Binary file
|
data/dogs/306.jpg
ADDED
Binary file
|
data/dogs/400.jpg
ADDED
Binary file
|
data/dogs/401.jpg
ADDED
Binary file
|
data/dogs/402.jpg
ADDED
Binary file
|
data/dogs/403.jpg
ADDED
Binary file
|
data/dogs/404.jpg
ADDED
Binary file
|
data/dogs/405.jpg
ADDED
Binary file
|
data/dogs/406.jpg
ADDED
Binary file
|
data/dogs/408.jpg
ADDED
Binary file
|
data/dogs/409.jpg
ADDED
Binary file
|
data/dogs/410.jpg
ADDED
Binary file
|
data/dogs/411.jpg
ADDED
Binary file
|
data/dogs/413.jpg
ADDED
Binary file
|
data/dogs/414.jpg
ADDED
Binary file
|
data/dogs/416.jpg
ADDED
Binary file
|
data/dogs/417.jpg
ADDED
Binary file
|
data/dogs/418.jpg
ADDED
Binary file
|
data/dogs/420.jpg
ADDED
Binary file
|
data/dogs/422.jpg
ADDED
Binary file
|
data/dogs/423.jpg
ADDED
Binary file
|
data/dogs/424.jpg
ADDED
Binary file
|
data/dogs/425.jpg
ADDED
Binary file
|
data/dogs/426.jpg
ADDED
Binary file
|
data/dogs/429.jpg
ADDED
Binary file
|
data/dogs/431.jpg
ADDED
Binary file
|
data/dogs/444.jpg
ADDED
Binary file
|
data/dogs/450.jpg
ADDED
Binary file
|
data/dogs/500.jpg
ADDED
Binary file
|
data/dogs/501.jpg
ADDED
Binary file
|
data/dogs/502.jpg
ADDED
Binary file
|
data/dogs/503.jpg
ADDED
Binary file
|
data/dogs/504.jpg
ADDED
Binary file
|
data/dogs/506.jpg
ADDED
Binary file
|
data/dogs/507.jpg
ADDED
Binary file
|
data/dogs/508.jpg
ADDED
Binary file
|
data/lib/status_dogs.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'rack/file'
|
2
|
+
|
3
|
+
class StatusDogs
|
4
|
+
|
5
|
+
DOGS = [ 100, 200, 201, 202, 203, 206, 300, 301, 302, 303, 305, 306, 400, 401, 402, 403, 404, 405, 406, 408, 409, 410, 411, 413, 414, 416, 417, 418, 420, 422, 423, 424, 425, 426, 429, 431, 444, 450, 500, 501, 502, 503, 504, 506, 507, 508 ].freeze
|
6
|
+
DOGS_DIR = File.expand_path("../../dogs", __FILE__)
|
7
|
+
|
8
|
+
def initialize(app, options = {})
|
9
|
+
@app, @options = app, options
|
10
|
+
end
|
11
|
+
|
12
|
+
def call(env)
|
13
|
+
@status, @headers, @response = @app.call(env)
|
14
|
+
if display_dog?
|
15
|
+
_, @headers, @response = Rack::File.new(DOGS_DIR).call("REQUEST_METHOD" => "GET", "PATH_INFO" => "#{@status}.jpg")
|
16
|
+
end
|
17
|
+
[ @status, @headers, @response ]
|
18
|
+
end
|
19
|
+
|
20
|
+
def display_dog?
|
21
|
+
dogs = DOGS
|
22
|
+
if @options.has_key?(:only)
|
23
|
+
dogs = Array(@options[:only]) & dogs
|
24
|
+
end
|
25
|
+
if @options.has_key?(:except)
|
26
|
+
dogs = dogs - Array(@options[:except])
|
27
|
+
end
|
28
|
+
dogs.include?(@status.to_i)
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
require 'rack/test'
|
4
|
+
require 'status_dogs'
|
5
|
+
require 'test_app'
|
6
|
+
|
7
|
+
RSpec::Matchers.define :be_replaced_with_dog do |code|
|
8
|
+
match do |actual|
|
9
|
+
if code.nil?
|
10
|
+
actual.body != "Hello, World!"
|
11
|
+
else
|
12
|
+
path = File.expand_path("../../dogs/#{code}.jpg", __FILE__)
|
13
|
+
file = File.open(path, 'rb')
|
14
|
+
actual.body == file.read &&
|
15
|
+
actual.status == code &&
|
16
|
+
actual.headers["Content-Length"] == file.size.to_s &&
|
17
|
+
actual.headers["Content-Type"] == "image/jpeg"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe StatusDogs do
|
4
|
+
|
5
|
+
include Rack::Test::Methods
|
6
|
+
|
7
|
+
describe "dog responses" do
|
8
|
+
|
9
|
+
let(:app) { StatusDogs.new(TestApp.new) }
|
10
|
+
|
11
|
+
StatusDogs::DOGS.each do |code|
|
12
|
+
|
13
|
+
it "displays dog for status #{code}" do
|
14
|
+
get code.to_s
|
15
|
+
last_response.should be_replaced_with_dog(code)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
it "won't replace response with a dog if there is no file for it" do
|
21
|
+
get "600"
|
22
|
+
last_response.should_not be_replaced_with_dog
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
describe ":only" do
|
28
|
+
|
29
|
+
let(:app) { StatusDogs.new(TestApp.new, :only => 200...300) }
|
30
|
+
|
31
|
+
it "will replace response with a dog if status is within range" do
|
32
|
+
get "206"
|
33
|
+
last_response.should be_replaced_with_dog(206)
|
34
|
+
end
|
35
|
+
|
36
|
+
it "will not replace if there is no file for it" do
|
37
|
+
get "299"
|
38
|
+
last_response.should_not be_replaced_with_dog
|
39
|
+
end
|
40
|
+
|
41
|
+
it "will not replace if out of range" do
|
42
|
+
get "404"
|
43
|
+
last_response.should_not be_replaced_with_dog(404)
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
describe ":except" do
|
49
|
+
|
50
|
+
let(:app) { StatusDogs.new(TestApp.new, :except => 200...300) }
|
51
|
+
|
52
|
+
it "will replace response with a dog if status is not in range" do
|
53
|
+
get "404"
|
54
|
+
last_response.should be_replaced_with_dog(404)
|
55
|
+
end
|
56
|
+
|
57
|
+
it "will not replace response with a dog if status is in range" do
|
58
|
+
get "206"
|
59
|
+
last_response.should_not be_replaced_with_dog(206)
|
60
|
+
end
|
61
|
+
|
62
|
+
it "won't replace dogs that are not known" do
|
63
|
+
get "201"
|
64
|
+
last_response.should_not be_replaced_with_dog
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
data/spec/test_app.rb
ADDED
data/status_dogs.gemspec
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = "status_dogs"
|
5
|
+
s.version = "0.0.1"
|
6
|
+
s.authors = ["Jan Vlnas", "iain"]
|
7
|
+
s.email = ["gems@jan.vlnas.cz", "iain@iain.nl"]
|
8
|
+
s.homepage = "https://github.com/jnv/status_dogs"
|
9
|
+
s.summary = %q{Rack middleware; replaces responses with dogs}
|
10
|
+
s.description = %q{Rack middleware replacing responses with relevant pictures of dogs, based on the status code.}
|
11
|
+
|
12
|
+
s.files = `git ls-files`.split("\n")
|
13
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
14
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
15
|
+
s.require_paths = ["lib"]
|
16
|
+
|
17
|
+
# specify any dependencies here; for example:
|
18
|
+
s.add_development_dependency "rspec", ">= 2"
|
19
|
+
s.add_development_dependency "rack-test"
|
20
|
+
s.add_development_dependency "rake"
|
21
|
+
s.add_runtime_dependency "rack"
|
22
|
+
end
|
metadata
ADDED
@@ -0,0 +1,173 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: status_dogs
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Jan Vlnas
|
9
|
+
- iain
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2012-12-11 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
type: :development
|
17
|
+
name: rspec
|
18
|
+
prerelease: false
|
19
|
+
requirement: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ! '>='
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: '2'
|
24
|
+
none: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '2'
|
30
|
+
none: false
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
type: :development
|
33
|
+
name: rack-test
|
34
|
+
prerelease: false
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ! '>='
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
none: false
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
none: false
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
type: :development
|
49
|
+
name: rake
|
50
|
+
prerelease: false
|
51
|
+
requirement: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
none: false
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
none: false
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
type: :runtime
|
65
|
+
name: rack
|
66
|
+
prerelease: false
|
67
|
+
requirement: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ! '>='
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '0'
|
72
|
+
none: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
none: false
|
79
|
+
description: Rack middleware replacing responses with relevant pictures of dogs, based
|
80
|
+
on the status code.
|
81
|
+
email:
|
82
|
+
- gems@jan.vlnas.cz
|
83
|
+
- iain@iain.nl
|
84
|
+
executables: []
|
85
|
+
extensions: []
|
86
|
+
extra_rdoc_files: []
|
87
|
+
files:
|
88
|
+
- .gitignore
|
89
|
+
- .rspec
|
90
|
+
- .travis.yml
|
91
|
+
- Gemfile
|
92
|
+
- README.md
|
93
|
+
- Rakefile
|
94
|
+
- config.ru
|
95
|
+
- dogs/100.jpg
|
96
|
+
- dogs/200.jpg
|
97
|
+
- dogs/201.jpg
|
98
|
+
- dogs/202.jpg
|
99
|
+
- dogs/203.jpg
|
100
|
+
- dogs/204.jpg
|
101
|
+
- dogs/206.jpg
|
102
|
+
- dogs/300.jpg
|
103
|
+
- dogs/301.jpg
|
104
|
+
- dogs/302.jpg
|
105
|
+
- dogs/303.jpg
|
106
|
+
- dogs/304.jpg
|
107
|
+
- dogs/305.jpg
|
108
|
+
- dogs/306.jpg
|
109
|
+
- dogs/400.jpg
|
110
|
+
- dogs/401.jpg
|
111
|
+
- dogs/402.jpg
|
112
|
+
- dogs/403.jpg
|
113
|
+
- dogs/404.jpg
|
114
|
+
- dogs/405.jpg
|
115
|
+
- dogs/406.jpg
|
116
|
+
- dogs/408.jpg
|
117
|
+
- dogs/409.jpg
|
118
|
+
- dogs/410.jpg
|
119
|
+
- dogs/411.jpg
|
120
|
+
- dogs/413.jpg
|
121
|
+
- dogs/414.jpg
|
122
|
+
- dogs/416.jpg
|
123
|
+
- dogs/417.jpg
|
124
|
+
- dogs/418.jpg
|
125
|
+
- dogs/420.jpg
|
126
|
+
- dogs/422.jpg
|
127
|
+
- dogs/423.jpg
|
128
|
+
- dogs/424.jpg
|
129
|
+
- dogs/425.jpg
|
130
|
+
- dogs/426.jpg
|
131
|
+
- dogs/429.jpg
|
132
|
+
- dogs/431.jpg
|
133
|
+
- dogs/444.jpg
|
134
|
+
- dogs/450.jpg
|
135
|
+
- dogs/500.jpg
|
136
|
+
- dogs/501.jpg
|
137
|
+
- dogs/502.jpg
|
138
|
+
- dogs/503.jpg
|
139
|
+
- dogs/504.jpg
|
140
|
+
- dogs/506.jpg
|
141
|
+
- dogs/507.jpg
|
142
|
+
- dogs/508.jpg
|
143
|
+
- lib/status_dogs.rb
|
144
|
+
- spec/spec_helper.rb
|
145
|
+
- spec/status_dogs_spec.rb
|
146
|
+
- spec/test_app.rb
|
147
|
+
- status_dogs.gemspec
|
148
|
+
homepage: https://github.com/jnv/status_dogs
|
149
|
+
licenses: []
|
150
|
+
post_install_message:
|
151
|
+
rdoc_options: []
|
152
|
+
require_paths:
|
153
|
+
- lib
|
154
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - ! '>='
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '0'
|
159
|
+
none: false
|
160
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
161
|
+
requirements:
|
162
|
+
- - ! '>='
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
version: '0'
|
165
|
+
none: false
|
166
|
+
requirements: []
|
167
|
+
rubyforge_project:
|
168
|
+
rubygems_version: 1.8.23
|
169
|
+
signing_key:
|
170
|
+
specification_version: 3
|
171
|
+
summary: Rack middleware; replaces responses with dogs
|
172
|
+
test_files: []
|
173
|
+
has_rdoc:
|