rack_middleware_json_error_msg 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,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: []