authorize_if 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +114 -58
  3. data/lib/authorize_if.rb +45 -26
  4. data/lib/authorize_if/errors.rb +19 -0
  5. data/lib/authorize_if/version.rb +1 -1
  6. metadata +7 -85
  7. data/lib/tasks/authorize_if_tasks.rake +0 -4
  8. data/test/dummy/README.rdoc +0 -28
  9. data/test/dummy/Rakefile +0 -6
  10. data/test/dummy/app/assets/javascripts/application.js +0 -13
  11. data/test/dummy/app/assets/stylesheets/application.css +0 -15
  12. data/test/dummy/app/controllers/application_controller.rb +0 -9
  13. data/test/dummy/app/controllers/articles_controller.rb +0 -27
  14. data/test/dummy/app/helpers/application_helper.rb +0 -2
  15. data/test/dummy/app/views/layouts/application.html.erb +0 -14
  16. data/test/dummy/bin/bundle +0 -3
  17. data/test/dummy/bin/rails +0 -4
  18. data/test/dummy/bin/rake +0 -4
  19. data/test/dummy/bin/setup +0 -29
  20. data/test/dummy/config.ru +0 -4
  21. data/test/dummy/config/application.rb +0 -13
  22. data/test/dummy/config/boot.rb +0 -5
  23. data/test/dummy/config/environment.rb +0 -5
  24. data/test/dummy/config/environments/development.rb +0 -35
  25. data/test/dummy/config/environments/production.rb +0 -72
  26. data/test/dummy/config/environments/test.rb +0 -37
  27. data/test/dummy/config/initializers/assets.rb +0 -11
  28. data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
  29. data/test/dummy/config/initializers/cookies_serializer.rb +0 -3
  30. data/test/dummy/config/initializers/filter_parameter_logging.rb +0 -4
  31. data/test/dummy/config/initializers/inflections.rb +0 -16
  32. data/test/dummy/config/initializers/mime_types.rb +0 -4
  33. data/test/dummy/config/initializers/session_store.rb +0 -3
  34. data/test/dummy/config/initializers/wrap_parameters.rb +0 -9
  35. data/test/dummy/config/locales/en.yml +0 -23
  36. data/test/dummy/config/routes.rb +0 -3
  37. data/test/dummy/config/secrets.yml +0 -22
  38. data/test/dummy/db/test.sqlite3 +0 -0
  39. data/test/dummy/log/test.log +0 -1784
  40. data/test/dummy/public/404.html +0 -67
  41. data/test/dummy/public/422.html +0 -67
  42. data/test/dummy/public/500.html +0 -66
  43. data/test/dummy/public/favicon.ico +0 -0
  44. data/test/integration/authorize_if_integration_test.rb +0 -41
  45. data/test/test_helper.rb +0 -19
  46. data/test/unit/authorize_if_unit_test.rb +0 -113
@@ -1,67 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>The page you were looking for doesn't exist (404)</title>
5
- <meta name="viewport" content="width=device-width,initial-scale=1">
6
- <style>
7
- body {
8
- background-color: #EFEFEF;
9
- color: #2E2F30;
10
- text-align: center;
11
- font-family: arial, sans-serif;
12
- margin: 0;
13
- }
14
-
15
- div.dialog {
16
- width: 95%;
17
- max-width: 33em;
18
- margin: 4em auto 0;
19
- }
20
-
21
- div.dialog > div {
22
- border: 1px solid #CCC;
23
- border-right-color: #999;
24
- border-left-color: #999;
25
- border-bottom-color: #BBB;
26
- border-top: #B00100 solid 4px;
27
- border-top-left-radius: 9px;
28
- border-top-right-radius: 9px;
29
- background-color: white;
30
- padding: 7px 12% 0;
31
- box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
- }
33
-
34
- h1 {
35
- font-size: 100%;
36
- color: #730E15;
37
- line-height: 1.5em;
38
- }
39
-
40
- div.dialog > p {
41
- margin: 0 0 1em;
42
- padding: 1em;
43
- background-color: #F7F7F7;
44
- border: 1px solid #CCC;
45
- border-right-color: #999;
46
- border-left-color: #999;
47
- border-bottom-color: #999;
48
- border-bottom-left-radius: 4px;
49
- border-bottom-right-radius: 4px;
50
- border-top-color: #DADADA;
51
- color: #666;
52
- box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
- }
54
- </style>
55
- </head>
56
-
57
- <body>
58
- <!-- This file lives in public/404.html -->
59
- <div class="dialog">
60
- <div>
61
- <h1>The page you were looking for doesn't exist.</h1>
62
- <p>You may have mistyped the address or the page may have moved.</p>
63
- </div>
64
- <p>If you are the application owner check the logs for more information.</p>
65
- </div>
66
- </body>
67
- </html>
@@ -1,67 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>The change you wanted was rejected (422)</title>
5
- <meta name="viewport" content="width=device-width,initial-scale=1">
6
- <style>
7
- body {
8
- background-color: #EFEFEF;
9
- color: #2E2F30;
10
- text-align: center;
11
- font-family: arial, sans-serif;
12
- margin: 0;
13
- }
14
-
15
- div.dialog {
16
- width: 95%;
17
- max-width: 33em;
18
- margin: 4em auto 0;
19
- }
20
-
21
- div.dialog > div {
22
- border: 1px solid #CCC;
23
- border-right-color: #999;
24
- border-left-color: #999;
25
- border-bottom-color: #BBB;
26
- border-top: #B00100 solid 4px;
27
- border-top-left-radius: 9px;
28
- border-top-right-radius: 9px;
29
- background-color: white;
30
- padding: 7px 12% 0;
31
- box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
- }
33
-
34
- h1 {
35
- font-size: 100%;
36
- color: #730E15;
37
- line-height: 1.5em;
38
- }
39
-
40
- div.dialog > p {
41
- margin: 0 0 1em;
42
- padding: 1em;
43
- background-color: #F7F7F7;
44
- border: 1px solid #CCC;
45
- border-right-color: #999;
46
- border-left-color: #999;
47
- border-bottom-color: #999;
48
- border-bottom-left-radius: 4px;
49
- border-bottom-right-radius: 4px;
50
- border-top-color: #DADADA;
51
- color: #666;
52
- box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
- }
54
- </style>
55
- </head>
56
-
57
- <body>
58
- <!-- This file lives in public/422.html -->
59
- <div class="dialog">
60
- <div>
61
- <h1>The change you wanted was rejected.</h1>
62
- <p>Maybe you tried to change something you didn't have access to.</p>
63
- </div>
64
- <p>If you are the application owner check the logs for more information.</p>
65
- </div>
66
- </body>
67
- </html>
@@ -1,66 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>We're sorry, but something went wrong (500)</title>
5
- <meta name="viewport" content="width=device-width,initial-scale=1">
6
- <style>
7
- body {
8
- background-color: #EFEFEF;
9
- color: #2E2F30;
10
- text-align: center;
11
- font-family: arial, sans-serif;
12
- margin: 0;
13
- }
14
-
15
- div.dialog {
16
- width: 95%;
17
- max-width: 33em;
18
- margin: 4em auto 0;
19
- }
20
-
21
- div.dialog > div {
22
- border: 1px solid #CCC;
23
- border-right-color: #999;
24
- border-left-color: #999;
25
- border-bottom-color: #BBB;
26
- border-top: #B00100 solid 4px;
27
- border-top-left-radius: 9px;
28
- border-top-right-radius: 9px;
29
- background-color: white;
30
- padding: 7px 12% 0;
31
- box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
- }
33
-
34
- h1 {
35
- font-size: 100%;
36
- color: #730E15;
37
- line-height: 1.5em;
38
- }
39
-
40
- div.dialog > p {
41
- margin: 0 0 1em;
42
- padding: 1em;
43
- background-color: #F7F7F7;
44
- border: 1px solid #CCC;
45
- border-right-color: #999;
46
- border-left-color: #999;
47
- border-bottom-color: #999;
48
- border-bottom-left-radius: 4px;
49
- border-bottom-right-radius: 4px;
50
- border-top-color: #DADADA;
51
- color: #666;
52
- box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
- }
54
- </style>
55
- </head>
56
-
57
- <body>
58
- <!-- This file lives in public/500.html -->
59
- <div class="dialog">
60
- <div>
61
- <h1>We're sorry, but something went wrong.</h1>
62
- </div>
63
- <p>If you are the application owner check the logs for more information.</p>
64
- </div>
65
- </body>
66
- </html>
File without changes
@@ -1,41 +0,0 @@
1
- require 'test_helper'
2
-
3
- class AuthorizeIfIntegrationTest < ActionDispatch::IntegrationTest
4
- begin # `index` action where `authorize_if` is used
5
- test "index action is authorized if true is given" do
6
- get "/articles", { authorized: true }
7
- assert_equal 200, response.status
8
- end
9
-
10
- test "index action renders custom error if false is given" do
11
- error_message = "Custom #{rand(100)} error message"
12
-
13
- get "/articles", { error_message: error_message }
14
- assert_equal 403, response.status
15
- assert_equal error_message, response.body
16
- end
17
- end
18
-
19
- begin # `show` action where `authorize` is used
20
- test "show action is authorized if true is given" do
21
- get "/articles/1", { authorized: true }
22
- assert_equal 200, response.status
23
- end
24
-
25
- test "show action renders custom error if false is given" do
26
- error_message = "Custom #{rand(100)} error message"
27
-
28
- get "/articles/1", { error_message: error_message }
29
- assert_equal 403, response.status
30
- assert_equal error_message, response.body
31
- end
32
- end
33
-
34
- begin # `edit` action where `authorize` is used
35
- test "edit action renders Internal Server Error if authorization rule is not defined" do
36
- get "/articles/1/edit"
37
- assert_equal 500, response.status
38
- assert_match /authorize_edit/, response.body
39
- end
40
- end
41
- end
data/test/test_helper.rb DELETED
@@ -1,19 +0,0 @@
1
- # Configure Rails Environment
2
- ENV["RAILS_ENV"] = "test"
3
-
4
- require File.expand_path("../../test/dummy/config/environment.rb", __FILE__)
5
- require "rails/test_help"
6
-
7
- # Filter out Minitest backtrace while allowing backtrace from other libraries
8
- # to be shown.
9
- Minitest.backtrace_filter = Minitest::BacktraceFilter.new
10
-
11
- # Load support files
12
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
13
-
14
- # Load fixtures from the engine
15
- if ActiveSupport::TestCase.respond_to?(:fixture_path=)
16
- ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
17
- ActionDispatch::IntegrationTest.fixture_path = ActiveSupport::TestCase.fixture_path
18
- ActiveSupport::TestCase.fixtures :all
19
- end
@@ -1,113 +0,0 @@
1
- require 'test_helper'
2
- require 'minitest/autorun'
3
-
4
- class DummyController
5
- include AuthorizeIf
6
-
7
- def controller_name
8
- "dummy"
9
- end
10
-
11
- def action_name
12
- "index"
13
- end
14
- end
15
-
16
- class AuthorizeIfUnitTest < ActiveSupport::TestCase
17
- describe AuthorizeIf do
18
- describe "#authorize_if" do
19
- before do
20
- @controller = DummyController.new
21
- end
22
-
23
- describe "when object is given" do
24
- it "returns true if truthy object is given" do
25
- assert_equal true, @controller.authorize_if(true)
26
- assert_equal true, @controller.authorize_if(Object.new)
27
- end
28
-
29
- it "raises NotAuthorizedError if falsey object is given" do
30
- assert_raises(AuthorizeIf::NotAuthorizedError) do
31
- @controller.authorize_if(false)
32
- end
33
-
34
- assert_raises(AuthorizeIf::NotAuthorizedError) do
35
- @controller.authorize_if(a = nil)
36
- end
37
- end
38
- end
39
-
40
- describe "when block is given" do
41
- it "calls the block with configuration object as an argument" do
42
- @controller.authorize_if(true) do |config|
43
- assert_equal AuthorizeIf::Configuration, config.class
44
- end
45
- end
46
-
47
- it "raises exception with message set through block" do
48
- err = assert_raises(AuthorizeIf::NotAuthorizedError) do
49
- @controller.authorize_if(false) do |config|
50
- config.error_message = "Custom Message"
51
- end
52
- end
53
- assert_equal "Custom Message", err.message
54
- end
55
- end
56
-
57
- it "raises ArgumentError if no arguments given" do
58
- assert_raises(ArgumentError) do
59
- @controller.authorize_if
60
- end
61
- end
62
- end
63
-
64
- describe "#authorize" do
65
- before do
66
- @controller = DummyController.new
67
- end
68
-
69
- describe "when corresponding rule does exist" do
70
- describe "without parameters" do
71
- it "returns true if rule returns true" do
72
- @controller.define_singleton_method :authorize_index? do true; end
73
- assert_equal true, @controller.authorize
74
- end
75
- end
76
-
77
- describe "with parameters" do
78
- it "calls rule with given parameters" do
79
- class << @controller
80
- def authorize_index?(param_1, param_2:)
81
- param_1 || param_2
82
- end
83
- end
84
-
85
- assert_equal(
86
- true,
87
- @controller.authorize(false, param_2: true)
88
- )
89
- end
90
- end
91
-
92
- describe "when block is given" do
93
- it "passes block through to `authorize_if` method" do
94
- @controller.define_singleton_method :authorize_index? do true; end
95
- @controller.authorize do |config|
96
- assert_equal AuthorizeIf::Configuration, config.class
97
- end
98
- end
99
- end
100
- end
101
-
102
- describe "when method, corresponding to caller, does not exist" do
103
- it "raises NotAuthorizedError" do
104
- err = assert_raises(AuthorizeIf::MissingAuthorizationRuleError) do
105
- @controller.authorize
106
- end
107
- msg = "No authorization rule defined for action dummy#index. Please define method #authorize_index? for #{@controller.class.name}"
108
- assert_equal msg, err.message
109
- end
110
- end
111
- end
112
- end
113
- end