parsnip 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.
- data/README.rdoc +21 -0
- data/lib/parsnip/railtie.rb +11 -0
- data/lib/parsnip/version.rb +1 -1
- data/lib/parsnip.rb +7 -2
- data/parsnip.gemspec +1 -1
- metadata +13 -11
data/README.rdoc
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
== Welcome to Parsnip
|
2
|
+
|
3
|
+
Parsnip is a rack middlware component primarily targeted to Rails 3.x developers
|
4
|
+
creating RESTful apis. Particularly those tired of ActionDispatch::ParamsParser
|
5
|
+
spewing internal server errors when clients supply malformed XML or JSON in the
|
6
|
+
body of PUT/POST requests. Parsnip will find unparsable XML or JSON and return
|
7
|
+
response with a status code of 400 and JSON or XML body content describing the
|
8
|
+
parsing error encountered.
|
9
|
+
|
10
|
+
|
11
|
+
== Getting Started
|
12
|
+
|
13
|
+
Rails: Parsnip uses the railties facility to work as a plug and play gem for Rails
|
14
|
+
applications (verified with Rails 3.2.x).
|
15
|
+
|
16
|
+
1. Add <tt>gem 'parsnip'</tt> to your Gemfile
|
17
|
+
|
18
|
+
2. Run <tt>bundle</tt> from your project root
|
19
|
+
|
20
|
+
3. Run <tt>rake middleware</tt> from your project root and verify that
|
21
|
+
Parsnip::Middleware appears before ActionDispatch::ParamsParser
|
data/lib/parsnip/version.rb
CHANGED
data/lib/parsnip.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'parsnip/version'
|
2
|
+
require 'parsnip/railtie' if defined? Rails
|
2
3
|
require 'sinatra/base'
|
3
4
|
require 'json'
|
4
5
|
require 'nokogiri'
|
@@ -7,6 +8,10 @@ module Parsnip
|
|
7
8
|
|
8
9
|
class Middleware < Sinatra::Base
|
9
10
|
|
11
|
+
disable :show_exceptions
|
12
|
+
|
13
|
+
enable :raise_errors
|
14
|
+
|
10
15
|
post '*' do
|
11
16
|
parse_nip(request) || pass
|
12
17
|
end
|
@@ -29,7 +34,7 @@ module Parsnip
|
|
29
34
|
def json_nip(body)
|
30
35
|
JSON.parse(body) and nil
|
31
36
|
rescue JSON::ParserError => e
|
32
|
-
nip({ error: e.to_s }.to_json, 'application/json')
|
37
|
+
nip({ error: e.to_s }.to_json, 'application/json; charset=utf-8')
|
33
38
|
end
|
34
39
|
|
35
40
|
def xml_nip(body)
|
@@ -38,7 +43,7 @@ module Parsnip
|
|
38
43
|
error = Nokogiri::XML::Builder.new(encoding: 'UTF-8') do | xml |
|
39
44
|
xml.error e.to_s
|
40
45
|
end
|
41
|
-
nip(error.to_xml, 'application/xml')
|
46
|
+
nip(error.to_xml, 'application/xml; charset=utf-8')
|
42
47
|
end
|
43
48
|
|
44
49
|
def nip(body, type)
|
data/parsnip.gemspec
CHANGED
@@ -8,6 +8,7 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.authors = ['Sean M. Duncan']
|
9
9
|
s.email = ['bitbutcher@gmail.com']
|
10
10
|
s.summary = %q{Rack Middleware that nips parsing errors in the bud before they manifest as internal server errors}
|
11
|
+
s.homepage = 'https://github.com/bitbutcher/parsnip'
|
11
12
|
|
12
13
|
s.rubyforge_project = "parsnip"
|
13
14
|
|
@@ -15,7 +16,6 @@ Gem::Specification.new do |s|
|
|
15
16
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
17
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
18
|
s.require_paths = [ 'lib' ]
|
18
|
-
|
19
19
|
|
20
20
|
s.add_development_dependency 'rspec'
|
21
21
|
s.add_runtime_dependency 'sinatra'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parsnip
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-02-
|
12
|
+
date: 2012-02-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &70130805860420 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70130805860420
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: sinatra
|
27
|
-
requirement: &
|
27
|
+
requirement: &70130805858960 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70130805858960
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: json
|
38
|
-
requirement: &
|
38
|
+
requirement: &70130805858060 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70130805858060
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: nokogiri
|
49
|
-
requirement: &
|
49
|
+
requirement: &70130805857360 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70130805857360
|
58
58
|
description:
|
59
59
|
email:
|
60
60
|
- bitbutcher@gmail.com
|
@@ -64,11 +64,13 @@ extra_rdoc_files: []
|
|
64
64
|
files:
|
65
65
|
- .gitignore
|
66
66
|
- Gemfile
|
67
|
+
- README.rdoc
|
67
68
|
- Rakefile
|
68
69
|
- lib/parsnip.rb
|
70
|
+
- lib/parsnip/railtie.rb
|
69
71
|
- lib/parsnip/version.rb
|
70
72
|
- parsnip.gemspec
|
71
|
-
homepage:
|
73
|
+
homepage: https://github.com/bitbutcher/parsnip
|
72
74
|
licenses: []
|
73
75
|
post_install_message:
|
74
76
|
rdoc_options: []
|