rescue-dog 0.0.1 → 0.0.2

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.
@@ -28,7 +28,7 @@ module Rescue
28
28
  def define_respond_method name, code
29
29
  return if method_defined?(name)
30
30
  define_method name do |e = nil|
31
- render status: code, file: "#{Rails.root}/public/#{code}.html", layout: false and return
31
+ render status: code, file: "#{Rails.root}/public/#{code}.#{request.format.to_sym}", layout: false and return
32
32
  end
33
33
  end
34
34
  end
@@ -1,3 +1,3 @@
1
1
  module Rescue
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/public/404.html ADDED
@@ -0,0 +1,11 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset='utf-8'>
5
+ <title>Error: 404 Not Found</title>
6
+ </head>
7
+ <body>
8
+ <h1>Not Found</h1>
9
+ <p>Sorry, I can not found it.</p>
10
+ </body>
11
+ </html>
data/public/404.json ADDED
@@ -0,0 +1 @@
1
+ {"errors":[{"code":404,"status":"Not Found"}]}
data/public/500.html ADDED
@@ -0,0 +1,11 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset='utf-8'>
5
+ <title>Error: 500 Server Error</title>
6
+ </head>
7
+ <body>
8
+ <h1>Server Error</h1>
9
+ <p>Sorry, I can not do it.</p>
10
+ </body>
11
+ </html>
data/public/500.json ADDED
@@ -0,0 +1 @@
1
+ {"errors":[{"code":500,"status":"Server Error"}]}
@@ -4,9 +4,47 @@ require 'spec_helper'
4
4
  describe Rescue::Controller do
5
5
 
6
6
  before do
7
- @r = UsersController.new
7
+ @r = ErrorsController.new
8
8
  end
9
9
 
10
- it { @r.methods.include?(:respond_404).should be_true }
10
+ TestCase::Controller::ERRORS.each do |name, code|
11
+ describe "#{name} exception class" do
12
+ subject { Object.const_defined? name }
13
+ it "should define '#{name}' class" do
14
+ should be_true
15
+ end
16
+
17
+ subject { Object.const_get(name).new }
18
+ it "should be a kind of StandardError" do
19
+ should be_a_kind_of StandardError
20
+ end
21
+ end
22
+
23
+ describe "respond_#{code} method" do
24
+ subject { ApplicationController.method_defined? :"respond_#{code}" }
25
+ it "should be defined in ApplicationController" do
26
+ should be_true
27
+ end
28
+
29
+ subject { @r.methods.include?(:"respond_#{code}") }
30
+ it "should be called in a subclass of ApplicationController" do
31
+ should be_true
32
+ end
33
+ end
34
+
35
+ describe "raise #{name}" do
36
+ TestCase::Controller::FORMATS.each do |format|
37
+ context "request format => #{format}" do
38
+ before do
39
+ visit "/#{name.to_s.underscore}.#{format.to_sym}"
40
+ end
41
+
42
+ subject { page }
43
+ it { should have_content name.to_s.gsub(/([A-Z]+)([A-Z][a-z])/,'\1 \2').gsub(/([a-z\d])([A-Z])/,'\1 \2') }
44
+ it { response_headers["Content-Type"].should include(format.to_s) }
45
+ end
46
+ end
47
+ end
48
+ end ## end each
11
49
 
12
50
  end
@@ -4,23 +4,26 @@ require 'action_view/railtie'
4
4
  # config
5
5
  app = Class.new Rails::Application
6
6
  app.config.active_support.deprecation = :log
7
+ app.config.secret_token = 'ccedfce890492dd9fe2908a69a8732104ae133f1e2488bf6a1e96685b05a96d7e11aeaa3da5ade27604a50c3b2c7cc8323dd03ad11bb2e52e95256fb67ef9c8a'
7
8
  app.initialize!
8
9
 
9
10
  # routing
10
11
  app.routes.draw do
11
- resources :users
12
- end
13
-
14
- # models
15
- class User
12
+ [:not_found, :server_error].each do |e|
13
+ get "/#{e}"=>"errors##{e}" ,as: e
14
+ end
16
15
  end
17
16
 
18
17
  # controllers
19
18
  class ApplicationController < ActionController::Base;
20
19
  include Rescue::Controller
21
- end
22
- class UsersController < ApplicationController
23
20
  define_errors ServerError: 500, NotFound: 404
24
21
  end
22
+ class ErrorsController < ApplicationController
23
+
24
+ def not_found ; raise NotFound ; end
25
+ def server_error ; raise ServerError ; end
26
+
27
+ end
25
28
 
26
29
  Object.const_set(:ApplicationHelper,Module.new)
data/spec/spec_helper.rb CHANGED
@@ -3,3 +3,9 @@ require 'rubygems'
3
3
  require 'rescue-dog'
4
4
 
5
5
  require File.join(File.dirname(__FILE__), 'rails_spec_app')
6
+ require File.join(File.dirname(__FILE__), 'test_case')
7
+ require 'capybara/rails'
8
+ RSpec.configure do |config|
9
+ config.mock_with :rspec
10
+ config.include Capybara::DSL
11
+ end
data/spec/test_case.rb ADDED
@@ -0,0 +1,8 @@
1
+ class TestCase
2
+
3
+ class Controller
4
+ ERRORS = { NotFound: 404, ServerError: 500 }
5
+ FORMATS = [Mime::Type.new("text/html", :html), Mime::Type.new("application/json", :json)]
6
+ end
7
+
8
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rescue-dog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-09 00:00:00.000000000 Z
12
+ date: 2013-03-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -44,10 +44,15 @@ files:
44
44
  - lib/rescue-dog.rb
45
45
  - lib/rescue/controller.rb
46
46
  - lib/rescue/version.rb
47
+ - public/404.html
48
+ - public/404.json
49
+ - public/500.html
50
+ - public/500.json
47
51
  - rescue-dog.gemspec
48
52
  - spec/controller_spec.rb
49
53
  - spec/rails_spec_app.rb
50
54
  - spec/spec_helper.rb
55
+ - spec/test_case.rb
51
56
  homepage: https://github.com/yulii/rescue-dog
52
57
  licenses: []
53
58
  post_install_message:
@@ -76,3 +81,4 @@ test_files:
76
81
  - spec/controller_spec.rb
77
82
  - spec/rails_spec_app.rb
78
83
  - spec/spec_helper.rb
84
+ - spec/test_case.rb