daredevil 0.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.
Files changed (59) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +18 -0
  4. data/config/locales/daredevil.yml +14 -0
  5. data/lib/daredevil.rb +60 -0
  6. data/lib/daredevil/configuration.rb +22 -0
  7. data/lib/daredevil/engine.rb +6 -0
  8. data/lib/daredevil/errors.rb +41 -0
  9. data/lib/daredevil/responder.rb +126 -0
  10. data/lib/daredevil/responder/actions.rb +92 -0
  11. data/lib/daredevil/responder/responses.rb +30 -0
  12. data/lib/daredevil/responder/sanitizers.rb +18 -0
  13. data/lib/daredevil/utils/rack_helper.rb +13 -0
  14. data/lib/daredevil/version.rb +3 -0
  15. data/test/daredevil_test.rb +15 -0
  16. data/test/dummy/README.rdoc +28 -0
  17. data/test/dummy/Rakefile +6 -0
  18. data/test/dummy/app/controllers/application_controller.rb +4 -0
  19. data/test/dummy/app/controllers/posts_controller.rb +44 -0
  20. data/test/dummy/app/models/application_record.rb +3 -0
  21. data/test/dummy/app/models/post.rb +3 -0
  22. data/test/dummy/app/serializers/kustom_post_serializer.rb +3 -0
  23. data/test/dummy/app/serializers/post_serializer.rb +3 -0
  24. data/test/dummy/app/views/posts/_post.json.jbuilder +1 -0
  25. data/test/dummy/app/views/posts/index.json.jbuilder +5 -0
  26. data/test/dummy/app/views/posts/show.json.jbuilder +4 -0
  27. data/test/dummy/bin/bundle +3 -0
  28. data/test/dummy/bin/rails +4 -0
  29. data/test/dummy/bin/rake +4 -0
  30. data/test/dummy/bin/setup +29 -0
  31. data/test/dummy/config.ru +4 -0
  32. data/test/dummy/config/application.rb +14 -0
  33. data/test/dummy/config/boot.rb +5 -0
  34. data/test/dummy/config/database.yml +25 -0
  35. data/test/dummy/config/environment.rb +5 -0
  36. data/test/dummy/config/environments/development.rb +41 -0
  37. data/test/dummy/config/environments/test.rb +42 -0
  38. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  39. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  40. data/test/dummy/config/initializers/session_store.rb +3 -0
  41. data/test/dummy/config/initializers/to_time_preserves_timezone.rb +10 -0
  42. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  43. data/test/dummy/config/locales/en.yml +23 -0
  44. data/test/dummy/config/routes.rb +3 -0
  45. data/test/dummy/config/secrets.yml +22 -0
  46. data/test/dummy/db/development.sqlite3 +0 -0
  47. data/test/dummy/db/migrate/20170713181802_create_posts.rb +8 -0
  48. data/test/dummy/db/schema.rb +20 -0
  49. data/test/dummy/db/test.sqlite3 +0 -0
  50. data/test/dummy/log/development.log +12878 -0
  51. data/test/dummy/log/test.log +5 -0
  52. data/test/factories/posts.rb +6 -0
  53. data/test/post_jbuilder_test.rb +27 -0
  54. data/test/post_test.rb +77 -0
  55. data/test/reports/TEST-DaredevilTest.xml +9 -0
  56. data/test/reports/TEST-PostJbuilderTest.xml +7 -0
  57. data/test/reports/TEST-PostTest.xml +17 -0
  58. data/test/test_helper.rb +20 -0
  59. metadata +174 -0
@@ -0,0 +1,5 @@
1
+  (0.1ms) begin transaction
2
+ -------------------------
3
+ DaredevilTest: test_truth
4
+ -------------------------
5
+  (0.0ms) rollback transaction
@@ -0,0 +1,6 @@
1
+ FactoryGirl.define do
2
+ factory :post do
3
+ title 'I love ruby a lot'
4
+ body 'On a scale from 1 to 10 it is certainly a unicorn.'
5
+ end
6
+ end
@@ -0,0 +1,27 @@
1
+ require 'test_helper'
2
+
3
+ class PostJbuilderTest < ActionDispatch::IntegrationTest
4
+ setup do
5
+ @post = create(:post)
6
+ @params = { params: { format: :json } }
7
+ end
8
+
9
+ test 'normal success response' do
10
+ get posts_url, @params
11
+ r = JSON.parse(response.body)
12
+ assert r.is_a?(Array)
13
+
14
+ sample = r.first
15
+ assert sample['id'].present?
16
+ assert_equal 'I love ruby a lot', sample['title']
17
+ assert_response :success
18
+ end
19
+
20
+ test 'show response' do
21
+ get post_path(@post), @params
22
+ r = JSON.parse(response.body)
23
+ assert r['id'].present?
24
+ assert_equal 'I love ruby a lot', r['title']
25
+ assert_response :success
26
+ end
27
+ end
@@ -0,0 +1,77 @@
1
+ require 'test_helper'
2
+
3
+ class PostTest < ActionDispatch::IntegrationTest
4
+ # Setup by setting serializers as the responder type
5
+ # Must teardown after this test class runs to reset to default
6
+ setup do
7
+ Daredevil.config.config.responder_type = :serializers
8
+ @post = create(:post)
9
+ @params = { params: { format: :json } }
10
+ end
11
+
12
+ teardown do
13
+ Daredevil.config.config.responder_type = :jbuilder
14
+ end
15
+
16
+ test 'normal success response' do
17
+ get posts_url, @params
18
+ assert_response :success
19
+ end
20
+
21
+ test 'serializer response show' do
22
+ get post_path(@post), @params
23
+ r = JSON.parse(response.body)
24
+ assert r['id'].present?
25
+ assert_equal 'I love ruby a lot', r['title']
26
+ assert_response :success
27
+ end
28
+
29
+ test 'custom serializer response show' do
30
+ skip
31
+ PostsController.stubs(:respond_with).with(@post, serializer: KustomPostSerializer)
32
+ get post_path(@post), @params
33
+ r = JSON.parse(response.body)
34
+ refute r['id'].present?
35
+ assert_equal 'I love ruby a lot', r['title']
36
+ assert_response :success
37
+ end
38
+
39
+ test 'rescue RecordNotFound' do
40
+ assert_nothing_raised do
41
+ get post_path(2), @params
42
+ end
43
+
44
+ r = JSON.parse(response.body)
45
+ assert_response :not_found
46
+ assert_equal 404, r['status']
47
+ assert_equal 'Not found', r['message']
48
+ assert_equal 'Post', r['resource']
49
+ end
50
+
51
+ test 'rescue ParameterMissing' do
52
+ assert_nothing_raised do
53
+ post posts_path, @params
54
+ end
55
+
56
+ r = JSON.parse(response.body)
57
+ assert_equal 422, r['status']
58
+ assert_equal 'Missing Parameter', r['message']
59
+ assert_equal 'post', r['resource']
60
+ assert_equal 'Please supply the post param', r['detail']
61
+ end
62
+
63
+ test 'post create with blank attribute' do
64
+ @post = attributes_for(:post, title: nil)
65
+ post posts_path, params: { post: @post, format: :json }
66
+ assert_response :unprocessable_entity
67
+
68
+ r = JSON.parse(response.body)
69
+ assert_equal 422, r['status']
70
+ assert_equal 'Invalid Attribute', r['message']
71
+ assert_equal 1, r['errors'].size
72
+ assert_equal 'Post', r['errors'][0]['resource']
73
+ assert_equal 'title', r['errors'][0]['field']
74
+ assert_equal 'can\'t be blank', r['errors'][0]['reason']
75
+ assert_equal 'Title can\'t be blank', r['errors'][0]['detail']
76
+ end
77
+ end
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <testsuite time='0.001125' skipped='0' failures='0' errors='0' name="DaredevilTest" assertions='3' tests='3'>
3
+ <testcase time='0.000523' file="test/daredevil_test.rb" name="test_configuration_defaults_to_jbuilder" assertions='1'>
4
+ </testcase>
5
+ <testcase time='0.000286' file="test/daredevil_test.rb" name="test_it_has_a_gem_version" assertions='1'>
6
+ </testcase>
7
+ <testcase time='0.000316' file="test/daredevil_test.rb" name="test_Daredevil_is_actually_a_thing" assertions='1'>
8
+ </testcase>
9
+ </testsuite>
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <testsuite time='0.024558' skipped='0' failures='0' errors='0' name="PostJbuilderTest" assertions='7' tests='2'>
3
+ <testcase time='0.014719' file="test/post_jbuilder_test.rb" name="test_normal_success_response" assertions='4'>
4
+ </testcase>
5
+ <testcase time='0.009839' file="test/post_jbuilder_test.rb" name="test_show_response" assertions='3'>
6
+ </testcase>
7
+ </testsuite>
@@ -0,0 +1,17 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <testsuite time='0.182819' skipped='1' failures='0' errors='0' name="PostTest" assertions='20' tests='6'>
3
+ <testcase time='0.148914' file="test/post_test.rb" name="test_normal_success_response" assertions='1'>
4
+ </testcase>
5
+ <testcase time='0.001733' file="test/post_test.rb" name="test_custom_serializer_response_show" assertions='0'>
6
+ <skipped type='Minitest::Skip' message="Skipped, no message given">
7
+ </skipped>
8
+ </testcase>
9
+ <testcase time='0.012014' file="test/post_test.rb" name="test_rescue_RecordNotFound" assertions='4'>
10
+ </testcase>
11
+ <testcase time='0.009188' file="test/post_test.rb" name="test_rescue_ParameterMissing" assertions='4'>
12
+ </testcase>
13
+ <testcase time='0.005293' file="test/post_test.rb" name="test_serializer_response_show" assertions='3'>
14
+ </testcase>
15
+ <testcase time='0.005677' file="test/post_test.rb" name="test_post_create_with_blank_attribute" assertions='8'>
16
+ </testcase>
17
+ </testsuite>
@@ -0,0 +1,20 @@
1
+ require File.expand_path("../../test/dummy/config/environment.rb", __FILE__)
2
+ ActiveRecord::Migrator.migrations_paths = [File.expand_path("../../test/dummy/db/migrate", __FILE__)]
3
+
4
+ require "rails/test_help"
5
+ require 'mocha/mini_test'
6
+ require 'minitest/reporters'
7
+
8
+ # Filter out Minitest backtrace while allowing backtrace from other libraries
9
+ # to be shown.
10
+ Minitest.backtrace_filter = Minitest::BacktraceFilter.new
11
+
12
+ # Load support files
13
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
14
+
15
+ reporter_options = { color: true }
16
+ Minitest::Reporters.use! [Minitest::Reporters::DefaultReporter.new(reporter_options)]
17
+
18
+ class ActiveSupport::TestCase
19
+ include FactoryGirl::Syntax::Methods
20
+ end
metadata ADDED
@@ -0,0 +1,174 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: daredevil
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Kevin Brown
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-08-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 4.2.8
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 4.2.8
27
+ - !ruby/object:Gem::Dependency
28
+ name: sqlite3
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: Daredevil provides insight into JSON API errors with friendly messages,
42
+ verbose error details, and it's dead simple.
43
+ email:
44
+ - chevinbrown@gmail.com
45
+ executables: []
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - MIT-LICENSE
50
+ - Rakefile
51
+ - config/locales/daredevil.yml
52
+ - lib/daredevil.rb
53
+ - lib/daredevil/configuration.rb
54
+ - lib/daredevil/engine.rb
55
+ - lib/daredevil/errors.rb
56
+ - lib/daredevil/responder.rb
57
+ - lib/daredevil/responder/actions.rb
58
+ - lib/daredevil/responder/responses.rb
59
+ - lib/daredevil/responder/sanitizers.rb
60
+ - lib/daredevil/utils/rack_helper.rb
61
+ - lib/daredevil/version.rb
62
+ - test/daredevil_test.rb
63
+ - test/dummy/README.rdoc
64
+ - test/dummy/Rakefile
65
+ - test/dummy/app/controllers/application_controller.rb
66
+ - test/dummy/app/controllers/posts_controller.rb
67
+ - test/dummy/app/models/application_record.rb
68
+ - test/dummy/app/models/post.rb
69
+ - test/dummy/app/serializers/kustom_post_serializer.rb
70
+ - test/dummy/app/serializers/post_serializer.rb
71
+ - test/dummy/app/views/posts/_post.json.jbuilder
72
+ - test/dummy/app/views/posts/index.json.jbuilder
73
+ - test/dummy/app/views/posts/show.json.jbuilder
74
+ - test/dummy/bin/bundle
75
+ - test/dummy/bin/rails
76
+ - test/dummy/bin/rake
77
+ - test/dummy/bin/setup
78
+ - test/dummy/config.ru
79
+ - test/dummy/config/application.rb
80
+ - test/dummy/config/boot.rb
81
+ - test/dummy/config/database.yml
82
+ - test/dummy/config/environment.rb
83
+ - test/dummy/config/environments/development.rb
84
+ - test/dummy/config/environments/test.rb
85
+ - test/dummy/config/initializers/cookies_serializer.rb
86
+ - test/dummy/config/initializers/filter_parameter_logging.rb
87
+ - test/dummy/config/initializers/session_store.rb
88
+ - test/dummy/config/initializers/to_time_preserves_timezone.rb
89
+ - test/dummy/config/initializers/wrap_parameters.rb
90
+ - test/dummy/config/locales/en.yml
91
+ - test/dummy/config/routes.rb
92
+ - test/dummy/config/secrets.yml
93
+ - test/dummy/db/development.sqlite3
94
+ - test/dummy/db/migrate/20170713181802_create_posts.rb
95
+ - test/dummy/db/schema.rb
96
+ - test/dummy/db/test.sqlite3
97
+ - test/dummy/log/development.log
98
+ - test/dummy/log/test.log
99
+ - test/factories/posts.rb
100
+ - test/post_jbuilder_test.rb
101
+ - test/post_test.rb
102
+ - test/reports/TEST-DaredevilTest.xml
103
+ - test/reports/TEST-PostJbuilderTest.xml
104
+ - test/reports/TEST-PostTest.xml
105
+ - test/test_helper.rb
106
+ homepage: http://github.com/proctoru/daredevil
107
+ licenses:
108
+ - MIT
109
+ metadata: {}
110
+ post_install_message:
111
+ rdoc_options: []
112
+ require_paths:
113
+ - lib
114
+ required_ruby_version: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ required_rubygems_version: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ requirements: []
125
+ rubyforge_project:
126
+ rubygems_version: 2.6.8
127
+ signing_key:
128
+ specification_version: 4
129
+ summary: JSON API errors insight.
130
+ test_files:
131
+ - test/daredevil_test.rb
132
+ - test/dummy/app/controllers/application_controller.rb
133
+ - test/dummy/app/controllers/posts_controller.rb
134
+ - test/dummy/app/models/application_record.rb
135
+ - test/dummy/app/models/post.rb
136
+ - test/dummy/app/serializers/kustom_post_serializer.rb
137
+ - test/dummy/app/serializers/post_serializer.rb
138
+ - test/dummy/app/views/posts/_post.json.jbuilder
139
+ - test/dummy/app/views/posts/index.json.jbuilder
140
+ - test/dummy/app/views/posts/show.json.jbuilder
141
+ - test/dummy/bin/bundle
142
+ - test/dummy/bin/rails
143
+ - test/dummy/bin/rake
144
+ - test/dummy/bin/setup
145
+ - test/dummy/config/application.rb
146
+ - test/dummy/config/boot.rb
147
+ - test/dummy/config/database.yml
148
+ - test/dummy/config/environment.rb
149
+ - test/dummy/config/environments/development.rb
150
+ - test/dummy/config/environments/test.rb
151
+ - test/dummy/config/initializers/cookies_serializer.rb
152
+ - test/dummy/config/initializers/filter_parameter_logging.rb
153
+ - test/dummy/config/initializers/session_store.rb
154
+ - test/dummy/config/initializers/to_time_preserves_timezone.rb
155
+ - test/dummy/config/initializers/wrap_parameters.rb
156
+ - test/dummy/config/locales/en.yml
157
+ - test/dummy/config/routes.rb
158
+ - test/dummy/config/secrets.yml
159
+ - test/dummy/config.ru
160
+ - test/dummy/db/development.sqlite3
161
+ - test/dummy/db/migrate/20170713181802_create_posts.rb
162
+ - test/dummy/db/schema.rb
163
+ - test/dummy/db/test.sqlite3
164
+ - test/dummy/log/development.log
165
+ - test/dummy/log/test.log
166
+ - test/dummy/Rakefile
167
+ - test/dummy/README.rdoc
168
+ - test/factories/posts.rb
169
+ - test/post_jbuilder_test.rb
170
+ - test/post_test.rb
171
+ - test/reports/TEST-DaredevilTest.xml
172
+ - test/reports/TEST-PostJbuilderTest.xml
173
+ - test/reports/TEST-PostTest.xml
174
+ - test/test_helper.rb