authorize_if 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 (47) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +200 -0
  4. data/Rakefile +34 -0
  5. data/lib/authorize_if.rb +138 -0
  6. data/lib/authorize_if/version.rb +3 -0
  7. data/lib/tasks/authorize_if_tasks.rake +4 -0
  8. data/test/dummy/README.rdoc +28 -0
  9. data/test/dummy/Rakefile +6 -0
  10. data/test/dummy/app/assets/javascripts/application.js +13 -0
  11. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  12. data/test/dummy/app/controllers/application_controller.rb +9 -0
  13. data/test/dummy/app/controllers/articles_controller.rb +27 -0
  14. data/test/dummy/app/helpers/application_helper.rb +2 -0
  15. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  16. data/test/dummy/bin/bundle +3 -0
  17. data/test/dummy/bin/rails +4 -0
  18. data/test/dummy/bin/rake +4 -0
  19. data/test/dummy/bin/setup +29 -0
  20. data/test/dummy/config.ru +4 -0
  21. data/test/dummy/config/application.rb +13 -0
  22. data/test/dummy/config/boot.rb +5 -0
  23. data/test/dummy/config/environment.rb +5 -0
  24. data/test/dummy/config/environments/development.rb +35 -0
  25. data/test/dummy/config/environments/production.rb +72 -0
  26. data/test/dummy/config/environments/test.rb +37 -0
  27. data/test/dummy/config/initializers/assets.rb +11 -0
  28. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  29. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  30. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  31. data/test/dummy/config/initializers/inflections.rb +16 -0
  32. data/test/dummy/config/initializers/mime_types.rb +4 -0
  33. data/test/dummy/config/initializers/session_store.rb +3 -0
  34. data/test/dummy/config/initializers/wrap_parameters.rb +9 -0
  35. data/test/dummy/config/locales/en.yml +23 -0
  36. data/test/dummy/config/routes.rb +3 -0
  37. data/test/dummy/config/secrets.yml +22 -0
  38. data/test/dummy/db/test.sqlite3 +0 -0
  39. data/test/dummy/log/test.log +1784 -0
  40. data/test/dummy/public/404.html +67 -0
  41. data/test/dummy/public/422.html +67 -0
  42. data/test/dummy/public/500.html +66 -0
  43. data/test/dummy/public/favicon.ico +0 -0
  44. data/test/integration/authorize_if_integration_test.rb +41 -0
  45. data/test/test_helper.rb +19 -0
  46. data/test/unit/authorize_if_unit_test.rb +113 -0
  47. metadata +170 -0
@@ -0,0 +1,67 @@
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>
@@ -0,0 +1,67 @@
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>
@@ -0,0 +1,66 @@
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
@@ -0,0 +1,41 @@
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
@@ -0,0 +1,19 @@
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
@@ -0,0 +1,113 @@
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
metadata ADDED
@@ -0,0 +1,170 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: authorize_if
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Vladimir Rybas
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-03-02 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.5
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.5
27
+ - !ruby/object:Gem::Dependency
28
+ name: m
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.3.1
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.3.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: byebug
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: Minimalistic authorization library for Ruby on Rails applications.
56
+ email:
57
+ - vladimirrybas@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - LICENSE
63
+ - README.md
64
+ - Rakefile
65
+ - lib/authorize_if.rb
66
+ - lib/authorize_if/version.rb
67
+ - lib/tasks/authorize_if_tasks.rake
68
+ - test/dummy/README.rdoc
69
+ - test/dummy/Rakefile
70
+ - test/dummy/app/assets/javascripts/application.js
71
+ - test/dummy/app/assets/stylesheets/application.css
72
+ - test/dummy/app/controllers/application_controller.rb
73
+ - test/dummy/app/controllers/articles_controller.rb
74
+ - test/dummy/app/helpers/application_helper.rb
75
+ - test/dummy/app/views/layouts/application.html.erb
76
+ - test/dummy/bin/bundle
77
+ - test/dummy/bin/rails
78
+ - test/dummy/bin/rake
79
+ - test/dummy/bin/setup
80
+ - test/dummy/config.ru
81
+ - test/dummy/config/application.rb
82
+ - test/dummy/config/boot.rb
83
+ - test/dummy/config/environment.rb
84
+ - test/dummy/config/environments/development.rb
85
+ - test/dummy/config/environments/production.rb
86
+ - test/dummy/config/environments/test.rb
87
+ - test/dummy/config/initializers/assets.rb
88
+ - test/dummy/config/initializers/backtrace_silencers.rb
89
+ - test/dummy/config/initializers/cookies_serializer.rb
90
+ - test/dummy/config/initializers/filter_parameter_logging.rb
91
+ - test/dummy/config/initializers/inflections.rb
92
+ - test/dummy/config/initializers/mime_types.rb
93
+ - test/dummy/config/initializers/session_store.rb
94
+ - test/dummy/config/initializers/wrap_parameters.rb
95
+ - test/dummy/config/locales/en.yml
96
+ - test/dummy/config/routes.rb
97
+ - test/dummy/config/secrets.yml
98
+ - test/dummy/db/test.sqlite3
99
+ - test/dummy/log/test.log
100
+ - test/dummy/public/404.html
101
+ - test/dummy/public/422.html
102
+ - test/dummy/public/500.html
103
+ - test/dummy/public/favicon.ico
104
+ - test/integration/authorize_if_integration_test.rb
105
+ - test/test_helper.rb
106
+ - test/unit/authorize_if_unit_test.rb
107
+ homepage: https://github.com/vrybas/authorize_if
108
+ licenses:
109
+ - MIT
110
+ metadata: {}
111
+ post_install_message:
112
+ rdoc_options: []
113
+ require_paths:
114
+ - lib
115
+ required_ruby_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ required_rubygems_version: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ requirements: []
126
+ rubyforge_project:
127
+ rubygems_version: 2.5.1
128
+ signing_key:
129
+ specification_version: 4
130
+ summary: Minimalistic authorization library for Ruby on Rails applications.
131
+ test_files:
132
+ - test/dummy/app/assets/javascripts/application.js
133
+ - test/dummy/app/assets/stylesheets/application.css
134
+ - test/dummy/app/controllers/application_controller.rb
135
+ - test/dummy/app/controllers/articles_controller.rb
136
+ - test/dummy/app/helpers/application_helper.rb
137
+ - test/dummy/app/views/layouts/application.html.erb
138
+ - test/dummy/bin/bundle
139
+ - test/dummy/bin/rails
140
+ - test/dummy/bin/rake
141
+ - test/dummy/bin/setup
142
+ - test/dummy/config/application.rb
143
+ - test/dummy/config/boot.rb
144
+ - test/dummy/config/environment.rb
145
+ - test/dummy/config/environments/development.rb
146
+ - test/dummy/config/environments/production.rb
147
+ - test/dummy/config/environments/test.rb
148
+ - test/dummy/config/initializers/assets.rb
149
+ - test/dummy/config/initializers/backtrace_silencers.rb
150
+ - test/dummy/config/initializers/cookies_serializer.rb
151
+ - test/dummy/config/initializers/filter_parameter_logging.rb
152
+ - test/dummy/config/initializers/inflections.rb
153
+ - test/dummy/config/initializers/mime_types.rb
154
+ - test/dummy/config/initializers/session_store.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/test.sqlite3
161
+ - test/dummy/log/test.log
162
+ - test/dummy/public/404.html
163
+ - test/dummy/public/422.html
164
+ - test/dummy/public/500.html
165
+ - test/dummy/public/favicon.ico
166
+ - test/dummy/Rakefile
167
+ - test/dummy/README.rdoc
168
+ - test/integration/authorize_if_integration_test.rb
169
+ - test/test_helper.rb
170
+ - test/unit/authorize_if_unit_test.rb