adeia 0.10.0 → 0.10.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.
- checksums.yaml +4 -4
- data/lib/adeia/controller_methods.rb +14 -1
- data/lib/adeia/controller_resource.rb +1 -11
- data/lib/adeia/version.rb +1 -1
- data/spec/adeia/controller_methods_spec.rb +20 -1
- data/spec/features/redirect_back_or_spec.rb +32 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/test_app/app/controllers/application_controller.rb +3 -0
- data/spec/test_app/app/controllers/articles_controller.rb +2 -3
- data/spec/test_app/app/controllers/comments_controller.rb +17 -0
- data/spec/test_app/app/controllers/pages_controller.rb +6 -0
- data/spec/test_app/app/controllers/sessions_controller.rb +2 -1
- data/spec/test_app/app/views/comments/new.html.erb +7 -0
- data/spec/test_app/app/views/pages/dashboard.html.erb +3 -0
- data/spec/test_app/config/application.rb +8 -0
- data/spec/test_app/config/routes.rb +5 -3
- data/spec/test_app/log/development.log +38 -0
- data/spec/test_app/log/test.log +4960 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/5Lly_CA8DZvPhQV2jDQx-Y6P_y3Ygra9t5jfSlGhHDA.cache +2 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/9Fw_WnCC15QnXUQZ4eYTYLOBv20at5Z5gL-WJx_QsR4.cache +1 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/B52YLhAHmH3YmcdKcLjsgEEptVLsyy70mdivlMhWpwo.cache +0 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/DmmfrCpXtt74Hr6NO54lxyOCDv6klnDyBqeDFR7oDU8.cache +2 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/HAZ0ouG4bMq-xhCNwwW1_zHW_Xrv2dmE5rM7dNa0j6g.cache +1 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/HggfmBmV-rmvrvzJjqvjmDpwB2BTEQvh6krp0CcrI0U.cache +1 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/Jq-mhdojMq1WOqRn6VTdZrYcFFO9W88GGYnNBOCQ5fs.cache +1 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/M_KUTj7by27gLcyqVc2Uz9gtnUzDPo-cc9fw5-cB79M.cache +0 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/OI6uxGcnsKavdWTtwDAasU3wPx8QXhzBgV0X2n1KjMQ.cache +2 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/OqW-GtebPfTCjTjUqLDAjq59TfMSUnr0yXwjZqaH1ZY.cache +0 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/T_LATULiY1B-VdlBm543JXK-rMpAu3gMzKReRQXWhrs.cache +0 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/XHwHkIYxBrF9dqrLA7cltux80RMtB5uP7Thdx6p-J8s.cache +1 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/azllX2USS3pIkqwWCoUFuar1sOvmJG85PIO0jGpkjg8.cache +0 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/b9C_dpG2bL0B4PAVraluQxLpi87exSZXpMXfcQAdcTA.cache +1 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/fhCTdpSf2dKxcXFkBZy81w65UX0HZUzJnPqLF0eXe1c.cache +0 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/gj7jbeiYIdeoQeoh9p96r2xSlkLhFW4cqQeFKrzZJDc.cache +0 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/hZi1k6tpxxCGYxRe7zY74ItcOI8gZrREOpGuA8JSpGg.cache +3 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/m36EDdApBppvyoX6m8cNCOm1eyt7pipkfASRya0sKqM.cache +1 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/pEhaat2KBd5SrT7szC_8R1_6hK17FTpvoRFkmCRSD3M.cache +2 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/s0IFRa_BOyV2VUH7-DBuslcZPbZHrQxu1NvUN3I4O88.cache +1 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/w8wDbJ9a5U-rSRVsy6KWOVuPXk5LnbSkSpP4bMFj1q0.cache +1 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/xjR7NEbTIbdnGQSxICRALdQtl8j_HoPOKkS5gwE2Jw0.cache +1 -0
- metadata +70 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8b88b34b9e3cf15bf8012237d1b0175bb9554ae8
|
|
4
|
+
data.tar.gz: b4cf556246fe43b51ca8f3e056106c849c372487
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 313c6b24c7633f1fc6af4771b3bd34d2295050bc98fa2512d991f9e03e462c5df9d5ab3c520eee4a6f6fab4ccac1718472738096464f86765641c0529e68822e
|
|
7
|
+
data.tar.gz: 929af587b2acab783df69cc9c9440e1860be98967a75899f8a23753110a334dabe8e729c42bc379658a45038ffac217563c4d892ab3a3cfd70d95bdc2752afba
|
|
@@ -40,7 +40,10 @@ module Adeia
|
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
def require_login!
|
|
43
|
-
|
|
43
|
+
unless signed_in?
|
|
44
|
+
store_location
|
|
45
|
+
raise LoginRequired
|
|
46
|
+
end
|
|
44
47
|
end
|
|
45
48
|
|
|
46
49
|
def can?(action, element, resource=nil)
|
|
@@ -62,6 +65,16 @@ module Adeia
|
|
|
62
65
|
cookies.delete(:return_to)
|
|
63
66
|
end
|
|
64
67
|
|
|
68
|
+
# Store the current url in a cookie
|
|
69
|
+
#
|
|
70
|
+
# * *Args* :
|
|
71
|
+
#
|
|
72
|
+
# * *Returns* :
|
|
73
|
+
#
|
|
74
|
+
def store_location
|
|
75
|
+
cookies[:return_to] = request.fullpath if request.get?
|
|
76
|
+
end
|
|
77
|
+
|
|
65
78
|
end
|
|
66
79
|
|
|
67
80
|
end
|
|
@@ -33,7 +33,7 @@ module Adeia
|
|
|
33
33
|
@token = args.fetch(:token, @controller.request.GET[:token])
|
|
34
34
|
@resource = args[:resource]
|
|
35
35
|
@user = @controller.current_user
|
|
36
|
-
store_location
|
|
36
|
+
@controller.store_location
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
def load_resource
|
|
@@ -116,16 +116,6 @@ module Adeia
|
|
|
116
116
|
end
|
|
117
117
|
end
|
|
118
118
|
|
|
119
|
-
# Store the current url in a cookie
|
|
120
|
-
#
|
|
121
|
-
# * *Args* :
|
|
122
|
-
#
|
|
123
|
-
# * *Returns* :
|
|
124
|
-
#
|
|
125
|
-
def store_location
|
|
126
|
-
@controller.request.cookie_jar[:return_to] = @controller.request.fullpath
|
|
127
|
-
end
|
|
128
|
-
|
|
129
119
|
end
|
|
130
120
|
|
|
131
121
|
end
|
data/lib/adeia/version.rb
CHANGED
|
@@ -91,6 +91,25 @@ module Adeia
|
|
|
91
91
|
end
|
|
92
92
|
end
|
|
93
93
|
|
|
94
|
+
context "with a resource provided and a controller with a different name" do
|
|
95
|
+
|
|
96
|
+
controller do
|
|
97
|
+
def index
|
|
98
|
+
@article = Article.create(title: "Rspec tests", content: "Lorem ipsum", id: 100)
|
|
99
|
+
@can = can? :read, "letters", @article
|
|
100
|
+
render nothing: true
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
it "returns true when the user is authorized" do
|
|
105
|
+
sign_in_user
|
|
106
|
+
create(:permission, owner: @user, element_name: "letters", type_name: "on_entry", resource_id: 100, read_right: true)
|
|
107
|
+
get :index
|
|
108
|
+
expect(assigns(:can)).to be true
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
end
|
|
112
|
+
|
|
94
113
|
context "with a resource and a namespace" do
|
|
95
114
|
|
|
96
115
|
controller do
|
|
@@ -111,7 +130,7 @@ module Adeia
|
|
|
111
130
|
|
|
112
131
|
end
|
|
113
132
|
|
|
114
|
-
|
|
133
|
+
describe "#rights?" do
|
|
115
134
|
|
|
116
135
|
controller do
|
|
117
136
|
def index
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require "rails_helper"
|
|
2
|
+
|
|
3
|
+
RSpec.describe "#redirect_back_or", :type => :feature do
|
|
4
|
+
|
|
5
|
+
let(:user) { create(:user) }
|
|
6
|
+
|
|
7
|
+
it "stores the location when authorizing" do
|
|
8
|
+
create(:permission, element_name: "articles", read_right: true, owner: user)
|
|
9
|
+
visit "/articles" # redirect to login path
|
|
10
|
+
fill_in "Name", with: user.name
|
|
11
|
+
fill_in "Password", with: "12341"
|
|
12
|
+
click_button "Login"
|
|
13
|
+
expect(page.current_path).to eq "/articles"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "stores the location when requiring login" do
|
|
17
|
+
visit "/comments" # redirect to login path
|
|
18
|
+
fill_in "Name", with: user.name
|
|
19
|
+
fill_in "Password", with: "12341"
|
|
20
|
+
click_button "Login"
|
|
21
|
+
expect(page.current_path).to eq "/comments"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "doesn't store the location if the HTTP method isn't GET" do
|
|
25
|
+
visit "/comments/new"
|
|
26
|
+
click_button "Create a comment" # redirect to login path
|
|
27
|
+
fill_in "Name", with: user.name
|
|
28
|
+
fill_in "Password", with: "12341"
|
|
29
|
+
click_button "Login"
|
|
30
|
+
expect(page.current_path).to eq "/"
|
|
31
|
+
end
|
|
32
|
+
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -2,4 +2,7 @@ class ApplicationController < ActionController::Base
|
|
|
2
2
|
# Prevent CSRF attacks by raising an exception.
|
|
3
3
|
# For APIs, you may want to use :null_session instead.
|
|
4
4
|
protect_from_forgery with: :exception
|
|
5
|
+
|
|
6
|
+
rescue_from(Adeia::LoginRequired) { |e| redirect_to login_path }
|
|
7
|
+
rescue_from(Adeia::AccessDenied) { |e| redirect_to root_path }
|
|
5
8
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
# Used to test #authorize!, #load_and_authorize & load_and_authorize!
|
|
1
2
|
class ArticlesController < ApplicationController
|
|
2
|
-
load_and_authorize
|
|
3
|
-
require_login only: [:update]
|
|
3
|
+
load_and_authorize except: [:index, :show, :new]
|
|
4
4
|
|
|
5
5
|
def index
|
|
6
6
|
authorize_and_load_records!
|
|
@@ -19,7 +19,6 @@ class ArticlesController < ApplicationController
|
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
def create
|
|
22
|
-
require_login!
|
|
23
22
|
@article = Article.new(article_params)
|
|
24
23
|
@article.user = current_user
|
|
25
24
|
if @article.save
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Used to test #store_location & #redirect_back_or
|
|
2
|
+
class CommentsController < ApplicationController
|
|
3
|
+
|
|
4
|
+
def index
|
|
5
|
+
require_login!
|
|
6
|
+
render text: "All the comments"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def new
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def create
|
|
13
|
+
require_login!
|
|
14
|
+
render text: "Comment created"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
@@ -7,7 +7,7 @@ class SessionsController < ApplicationController
|
|
|
7
7
|
@user = User.find_by_name(params[:session][:name])
|
|
8
8
|
if @user && @user.authenticate(params[:session][:password])
|
|
9
9
|
sign_in(@user, permanent: params[:session][:remember_me] == "1")
|
|
10
|
-
|
|
10
|
+
redirect_back_or root_path, success: "Signed in"
|
|
11
11
|
else
|
|
12
12
|
flash.now[:error] = "Incorrect user/password"
|
|
13
13
|
render 'new'
|
|
@@ -15,6 +15,7 @@ class SessionsController < ApplicationController
|
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
def destroy
|
|
18
|
+
require_login!
|
|
18
19
|
sign_out
|
|
19
20
|
redirect_to root_path, success: "Signed out"
|
|
20
21
|
end
|
|
@@ -21,6 +21,14 @@ module Dummy
|
|
|
21
21
|
|
|
22
22
|
# Do not swallow errors in after_commit/after_rollback callbacks.
|
|
23
23
|
config.active_record.raise_in_transactional_callbacks = true
|
|
24
|
+
|
|
25
|
+
config.generators do |g|
|
|
26
|
+
g.orm :active_record
|
|
27
|
+
g.template_engine :erb
|
|
28
|
+
g.stylesheets false
|
|
29
|
+
g.javascripts false
|
|
30
|
+
g.helper false
|
|
31
|
+
end
|
|
24
32
|
end
|
|
25
33
|
end
|
|
26
34
|
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
Rails.application.routes.draw do
|
|
2
2
|
mount Adeia::Engine => "/adeia"
|
|
3
3
|
|
|
4
|
-
root "
|
|
4
|
+
root "pages#dashboard"
|
|
5
|
+
get "dashboard", to: "pages#dashboard"
|
|
5
6
|
|
|
6
|
-
get
|
|
7
|
-
get
|
|
7
|
+
get "login", to: "sessions#new"
|
|
8
|
+
get "logout", to: "sessions#destroy"
|
|
8
9
|
resources :sessions, only: [:create]
|
|
9
10
|
|
|
10
11
|
resources :articles
|
|
12
|
+
resources :comments
|
|
11
13
|
end
|
|
@@ -52310,3 +52310,41 @@ Migrating to CreateArticles (20151012185726)
|
|
|
52310
52310
|
FROM sqlite_temp_master
|
|
52311
52311
|
WHERE name='index_articles_on_user_id' AND type='index'
|
|
52312
52312
|
|
|
52313
|
+
|
|
52314
|
+
|
|
52315
|
+
Started GET "/" for ::1 at 2015-11-16 21:10:23 +0100
|
|
52316
|
+
[1m[36mActiveRecord::SchemaMigration Load (0.8ms)[0m [1mSELECT "schema_migrations".* FROM "schema_migrations"[0m
|
|
52317
|
+
Processing by ArticlesController#dashboard as HTML
|
|
52318
|
+
Rendered articles/dashboard.html.erb within layouts/application (2.3ms)
|
|
52319
|
+
[1m[35mUser Load (0.7ms)[0m SELECT "users".* FROM "users" WHERE "users"."remember_token" = ? LIMIT 1 [["remember_token", "24c43IkYlTqZjPq3y4veLw"]]
|
|
52320
|
+
Completed 200 OK in 263ms (Views: 261.5ms | ActiveRecord: 1.0ms)
|
|
52321
|
+
|
|
52322
|
+
|
|
52323
|
+
Started GET "/assets/scaffold.self-83b741db49389dc7cfdf85bf7537a0219cce48e085c4116afc83d55c9af47c78.css?body=1" for ::1 at 2015-11-16 21:10:23 +0100
|
|
52324
|
+
|
|
52325
|
+
|
|
52326
|
+
Started GET "/assets/application.self-e80e8f2318043e8af94dddc2adad5a4f09739a8ebb323b3ab31cd71d45fd9113.css?body=1" for ::1 at 2015-11-16 21:10:23 +0100
|
|
52327
|
+
|
|
52328
|
+
|
|
52329
|
+
Started GET "/assets/application.self-8f06a73c35179188914ab50e057157639fce1401c1cdca640ac9cec33746fc5b.js?body=1" for ::1 at 2015-11-16 21:10:23 +0100
|
|
52330
|
+
|
|
52331
|
+
|
|
52332
|
+
Started GET "/login" for ::1 at 2015-11-16 21:10:27 +0100
|
|
52333
|
+
Processing by SessionsController#new as HTML
|
|
52334
|
+
Rendered sessions/new.html.erb within layouts/application (32.2ms)
|
|
52335
|
+
[1m[36mUser Load (0.1ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."remember_token" = ? LIMIT 1[0m [["remember_token", "24c43IkYlTqZjPq3y4veLw"]]
|
|
52336
|
+
Completed 200 OK in 55ms (Views: 54.6ms | ActiveRecord: 0.1ms)
|
|
52337
|
+
|
|
52338
|
+
|
|
52339
|
+
Started GET "/logout" for ::1 at 2015-11-16 21:10:29 +0100
|
|
52340
|
+
Processing by SessionsController#destroy as HTML
|
|
52341
|
+
[1m[35mUser Load (0.2ms)[0m SELECT "users".* FROM "users" WHERE "users"."remember_token" = ? LIMIT 1 [["remember_token", "24c43IkYlTqZjPq3y4veLw"]]
|
|
52342
|
+
Redirected to http://localhost:3000/login
|
|
52343
|
+
Completed 302 Found in 2ms (ActiveRecord: 0.2ms)
|
|
52344
|
+
|
|
52345
|
+
|
|
52346
|
+
Started GET "/login" for ::1 at 2015-11-16 21:10:29 +0100
|
|
52347
|
+
Processing by SessionsController#new as HTML
|
|
52348
|
+
Rendered sessions/new.html.erb within layouts/application (1.6ms)
|
|
52349
|
+
[1m[36mUser Load (0.1ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."remember_token" = ? LIMIT 1[0m [["remember_token", "24c43IkYlTqZjPq3y4veLw"]]
|
|
52350
|
+
Completed 200 OK in 27ms (Views: 26.4ms | ActiveRecord: 0.1ms)
|