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 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
@@ -0,0 +1,11 @@
1
+ module Parsnip
2
+
3
+ class Railtie < Rails::Railtie
4
+
5
+ initializer 'parsnip.add_middleware' do | app |
6
+ app.config.middleware.insert_before(ActionDispatch::ParamsParser, Parsnip::Middleware)
7
+ end
8
+
9
+ end
10
+
11
+ end
@@ -1,3 +1,3 @@
1
1
  module Parsnip
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
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.1
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-07 00:00:00.000000000 Z
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: &70107460324580 !ruby/object:Gem::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: *70107460324580
24
+ version_requirements: *70130805860420
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: sinatra
27
- requirement: &70107460323420 !ruby/object:Gem::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: *70107460323420
35
+ version_requirements: *70130805858960
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: json
38
- requirement: &70107460322800 !ruby/object:Gem::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: *70107460322800
46
+ version_requirements: *70130805858060
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: nokogiri
49
- requirement: &70107460322200 !ruby/object:Gem::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: *70107460322200
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: []