rack_middleware_json_error_msg 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,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 210da2859cf948a81c9fc82d06c1701d2a3fc13c
4
+ data.tar.gz: 69370aca70c7a2d6f94b19a01d4c66c66794f997
5
+ SHA512:
6
+ metadata.gz: d8166d66c8bd39168803f7932986678800f111dc8621e908a542eb572d1a461146a179d4e1b3351fcc5a18655945d82ef5ad653ad88d8b859643c16f332b8ed3
7
+ data.tar.gz: 19d879c6308c774d7e8af455e8201839197b82981bda4a45147d08f80b088a86c3c28d1048cac4724aa9259bfe2b6d04db20d3ccce274c073a58ba3c7644ebe9
data/CHANGELOG ADDED
@@ -0,0 +1 @@
1
+ v0.1. initial version
data/Manifest ADDED
@@ -0,0 +1,7 @@
1
+ CHANGELOG
2
+ Manifest
3
+ README.md
4
+ Rakefile
5
+ lib/rack/middleware/json-error-msg.rb
6
+ lib/rack/middleware/json-error-msg/railtie.rb
7
+ test/test.rb
data/README.md ADDED
@@ -0,0 +1,9 @@
1
+ ### Rails rack middleware to catch JSON parse errors
2
+
3
+ Put this in your rails app's Gemfile:
4
+
5
+ gem 'rack_middleware_json_error_msg'
6
+
7
+ If ActionDispatch::ParamsParser::ParseError gets thrown, it will send back a
8
+ HTTP 400 response with a JSON-format error message.
9
+
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ require 'echoe'
2
+
3
+ Echoe.new("rack_middleware_json_error_msg") do |p|
4
+ p.author = "Andrew Snow"
5
+ p.email = 'andrew@modulus.org'
6
+ p.summary = "Rails middleware to catch JSON parse errors and return error in JSON format"
7
+ p.url = "https://github.com/andys/rack_middleware_json_error_msg"
8
+ p.runtime_dependencies = ['railties']
9
+ end
@@ -0,0 +1,32 @@
1
+ require 'json-error-msg/railtie' if defined?(Rails)
2
+
3
+ module Rack
4
+ module Middleware
5
+ class JsonErrorMsg
6
+ class Error < StandardError; end
7
+
8
+ attr_reader :app
9
+
10
+ def initialize(app)
11
+ @app = app
12
+ end
13
+
14
+ def call(env)
15
+ begin
16
+ @app.call(env)
17
+ rescue ActionDispatch::ParamsParser::ParseError => error
18
+ if env['HTTP_ACCEPT'] =~ /json/
19
+ error_output = "There was a problem in the request you submitted: #{error}"
20
+ return [
21
+ 400, { 'Content-Type' => 'application/json' },
22
+ [ { request_id: env['action_dispatch.request_id'], error: error_output }.to_json ]
23
+ ]
24
+ else
25
+ raise error
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+
@@ -0,0 +1,11 @@
1
+ module Rack
2
+ module Middleware
3
+ module JsonErrorMsg
4
+ class Railtie < Rails::Railtie
5
+ initializer "json-error-msg.configure_rails_initialization" do |app|
6
+ app.middleware.insert_before ActionDispatch::ParamsParser, "Rack::Middleware::JsonErrorMsg::JsonErrorMsg"
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,33 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # stub: rack_middleware_json_error_msg 0.1 ruby lib
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "rack_middleware_json_error_msg"
6
+ s.version = "0.1"
7
+
8
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
9
+ s.authors = ["Andrew Snow"]
10
+ s.date = "2014-02-05"
11
+ s.description = "Rails middleware to catch JSON parse errors and return error in JSON format"
12
+ s.email = "andrew@modulus.org"
13
+ s.extra_rdoc_files = ["CHANGELOG", "README.md", "lib/rack/middleware/json-error-msg.rb", "lib/rack/middleware/json-error-msg/railtie.rb"]
14
+ s.files = ["CHANGELOG", "Manifest", "README.md", "Rakefile", "lib/rack/middleware/json-error-msg.rb", "lib/rack/middleware/json-error-msg/railtie.rb", "test/test.rb", "rack_middleware_json_error_msg.gemspec"]
15
+ s.homepage = "https://github.com/andys/rack_middleware_json_error_msg"
16
+ s.rdoc_options = ["--line-numbers", "--title", "Rack_middleware_json_error_msg", "--main", "README.md"]
17
+ s.require_paths = ["lib"]
18
+ s.rubyforge_project = "rack_middleware_json_error_msg"
19
+ s.rubygems_version = "2.1.11"
20
+ s.summary = "Rails middleware to catch JSON parse errors and return error in JSON format"
21
+
22
+ if s.respond_to? :specification_version then
23
+ s.specification_version = 4
24
+
25
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
26
+ s.add_runtime_dependency(%q<railties>, [">= 0"])
27
+ else
28
+ s.add_dependency(%q<railties>, [">= 0"])
29
+ end
30
+ else
31
+ s.add_dependency(%q<railties>, [">= 0"])
32
+ end
33
+ end
data/test/test.rb ADDED
@@ -0,0 +1,41 @@
1
+ require 'minitest/unit'
2
+ require 'json'
3
+ require 'minitest/autorun'
4
+ require "rack/test"
5
+ require "#{File.dirname(__FILE__)}/../lib//rack/middleware/json-error-msg"
6
+
7
+ module ActionDispatch
8
+ module ParamsParser
9
+ class ParseError < Exception
10
+ end
11
+ end
12
+ end
13
+
14
+ class TestJsonErrorMsg < MiniTest::Unit::TestCase
15
+ include Rack::Test::Methods
16
+
17
+ def test_error
18
+ app = proc { raise ActionDispatch::ParamsParser::ParseError.new("parse error") }
19
+ request = Rack::MockRequest.new(Rack::Middleware::JsonErrorMsg.new(app))
20
+ response = request.get('/', {'HTTP_ACCEPT' => 'application/json'})
21
+ assert_equal 400, response.status
22
+ assert_match /parse error/, response.body
23
+ end
24
+
25
+ def test_no_error
26
+ app = proc { [200, {}, ['']] }
27
+ request = Rack::MockRequest.new(Rack::Middleware::JsonErrorMsg.new(app))
28
+ response = request.get('/', {'HTTP_ACCEPT' => 'application/json'})
29
+ assert_equal 200, response.status
30
+ end
31
+
32
+ def test_non_json
33
+ app = proc { raise ActionDispatch::ParamsParser::ParseError.new("parse error") }
34
+ request = Rack::MockRequest.new(Rack::Middleware::JsonErrorMsg.new(app))
35
+ assert_raises(ActionDispatch::ParamsParser::ParseError) do
36
+ request.get('/')
37
+ end
38
+ end
39
+
40
+ end
41
+
metadata ADDED
@@ -0,0 +1,74 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rack_middleware_json_error_msg
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ platform: ruby
6
+ authors:
7
+ - Andrew Snow
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-02-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: railties
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: Rails middleware to catch JSON parse errors and return error in JSON
28
+ format
29
+ email: andrew@modulus.org
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files:
33
+ - CHANGELOG
34
+ - README.md
35
+ - lib/rack/middleware/json-error-msg.rb
36
+ - lib/rack/middleware/json-error-msg/railtie.rb
37
+ files:
38
+ - CHANGELOG
39
+ - Manifest
40
+ - README.md
41
+ - Rakefile
42
+ - lib/rack/middleware/json-error-msg.rb
43
+ - lib/rack/middleware/json-error-msg/railtie.rb
44
+ - test/test.rb
45
+ - rack_middleware_json_error_msg.gemspec
46
+ homepage: https://github.com/andys/rack_middleware_json_error_msg
47
+ licenses: []
48
+ metadata: {}
49
+ post_install_message:
50
+ rdoc_options:
51
+ - --line-numbers
52
+ - --title
53
+ - Rack_middleware_json_error_msg
54
+ - --main
55
+ - README.md
56
+ require_paths:
57
+ - lib
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - '>='
66
+ - !ruby/object:Gem::Version
67
+ version: '1.2'
68
+ requirements: []
69
+ rubyforge_project: rack_middleware_json_error_msg
70
+ rubygems_version: 2.1.11
71
+ signing_key:
72
+ specification_version: 4
73
+ summary: Rails middleware to catch JSON parse errors and return error in JSON format
74
+ test_files: []