adeia 0.8.6 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 12c3d51dadb631d94c2edfa49ca0d776493af994
4
- data.tar.gz: 01b37ba0aee47d8e4986f20c685804e9381ea1bc
3
+ metadata.gz: 66ce37ecc369635104a9414c77d3211a8cf44f17
4
+ data.tar.gz: a6d3b36ce560d07f44ec15356a866728dbdb2d51
5
5
  SHA512:
6
- metadata.gz: 5dc0af21e0ae4b9839617689f9ba2324ace51732db43f4c1252ffc527a7d33230b0057204a78ed24889fba751fb4243703faa672a54a88c098e9ac0ec8202594
7
- data.tar.gz: 90bb1b39b7ec685d02527ee03598d78e00cfb52d4c64b1a4067fa1d65bb5582fa47b532ff143e307681239e94c9734e90abdfd6943c6a8699efebc44232eabb3
6
+ metadata.gz: 75842f069596bc4999e6e2f56c4390e48c01cccc72de2deb26e41f09dde799031c4e075c430ddb8ad681ef083e7a868e3151596c23c3232e513c5d5a48652d66
7
+ data.tar.gz: f11f62d18f0840aefe789984dbcd2e743b08c9c0a77a916a898e26d5db526b45a34b7a4b8bc221025f592e269ee0a26bb834c9ca012a7019137a968ec0429360
@@ -4,6 +4,7 @@ en:
4
4
  login_required: "Please login before visiting this page !"
5
5
  access_denied: "You don't have access to this page !"
6
6
  missing_params: "params %{params} is missing !"
7
+ missing_user_model: "A model `User` is missing in the app !"
7
8
  errors:
8
9
  messages:
9
10
  right_required: "Please check at least one right or add an action"
@@ -4,6 +4,7 @@ fr:
4
4
  login_required: "Veuillez vous connecter pour accéder à cette page !"
5
5
  access_denied: "Vous n'êtes pas autorisé à accéder à cette page !"
6
6
  missing_params: "Le paramètre %{params} est manquant !"
7
+ missing_user_model: "Aucun modèle `User` trouvé dans votre application !"
7
8
  errors:
8
9
  messages:
9
10
  right_required: "Vous devez cocher au moins un droit ou ajouter une action"
@@ -21,10 +21,14 @@ module Adeia
21
21
  end
22
22
  end
23
23
 
24
- def can?
24
+ def rights?
25
25
  action_rights = @user.nil? ? {} : send("#{right_name}_rights")
26
26
  merge_permissions(token_rights(right_name), action_rights)
27
- @rights.any? && authorize?
27
+ @rights.any?
28
+ end
29
+
30
+ def can?
31
+ rights? && authorize?
28
32
  end
29
33
 
30
34
  private
@@ -45,8 +45,12 @@ module Adeia
45
45
 
46
46
  def can?(action, controller=nil, resource=nil)
47
47
  args = { action: action, controller: controller, resource: resource }
48
- var_name = "@#{action}#{controller.delete('/')}#{resource.try(:model_name).try(:human)}#{resource.try(:id)}"
49
- instance_variable_get(var_name) || instance_variable_set(var_name, ControllerResource.new(self, **args).can?)
48
+ ControllerResource.new(self, **args).can?
49
+ end
50
+
51
+ def rights?(action, controller=nil, resource=nil)
52
+ args = { action: action, controller: controller, resource: resource }
53
+ ControllerResource.new(self, **args).rights?
50
54
  end
51
55
 
52
56
  # Redirect the user to the stored url or the default one provided
@@ -73,7 +73,11 @@ module Adeia
73
73
  end
74
74
 
75
75
  def can?
76
- authorization.can?
76
+ instance_variable_get_or_set(:can?)
77
+ end
78
+
79
+ def rights?
80
+ instance_variable_get_or_set(:rights?)
77
81
  end
78
82
 
79
83
  private
@@ -90,6 +94,16 @@ module Adeia
90
94
  resource_class.model_name.element
91
95
  end
92
96
 
97
+ def var_name(method)
98
+ [method, @controller_name, @action_name, @resource.try(:model_name).try(:human), @resource.try(:id)].map do |s|
99
+ s.to_s.gsub("/", "_").delete("?") if s
100
+ end.compact.join("_").prepend("@")
101
+ end
102
+
103
+ def instance_variable_get_or_set(method)
104
+ @controller.instance_variable_get(var_name(method)) || @controller.instance_variable_set(var_name(method), authorization.send(method))
105
+ end
106
+
93
107
 
94
108
  # Store the current url in a cookie
95
109
  #
data/lib/adeia/engine.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  require "adeia/controller_methods"
2
2
  require "adeia/helpers/sessions_helper"
3
+ require "adeia/helpers/user_helper"
4
+ require "adeia/exceptions"
3
5
 
4
6
  module Adeia
5
7
  class Engine < ::Rails::Engine
@@ -14,6 +16,16 @@ module Adeia
14
16
  g.factory_girl false
15
17
  end
16
18
 
19
+ initializer 'Adeia.requirements' do |app|
20
+ unless Rails.env.test?
21
+ raise MissingUserModel unless defined? User
22
+ end
23
+ end
24
+
25
+ initializer 'Adeia.user_addictions' do |app|
26
+ User.send :include, Adeia::Helpers::UserHelper
27
+ end
28
+
17
29
  initializer 'Adeia.controller_methods' do |app|
18
30
  ActionController::Base.send :include, Adeia::ControllerMethods
19
31
  end
@@ -30,4 +30,12 @@ module Adeia
30
30
 
31
31
  end
32
32
 
33
+ class MissingUserModel < Error
34
+
35
+ def to_s
36
+ I18n.t("exceptions.messages.missing_user_model", params: @params)
37
+ end
38
+
39
+ end
40
+
33
41
  end
@@ -0,0 +1,21 @@
1
+ module Adeia
2
+ module Helpers
3
+ module UserHelper
4
+ extend ActiveSupport::Concern
5
+
6
+ module ClassMethods
7
+
8
+ def human_name
9
+ model_name.i18n_key
10
+ end
11
+ end
12
+
13
+ included do
14
+ extend ClassMethods
15
+
16
+ has_many :permissions, class_name: "Adeia::Permission"
17
+ end
18
+
19
+ end
20
+ end
21
+ end
data/lib/adeia/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Adeia
2
- VERSION = "0.8.6"
2
+ VERSION = "0.9.0"
3
3
  end
@@ -0,0 +1,108 @@
1
+ require 'rails_helper'
2
+
3
+ module Adeia
4
+ describe "ControllerMethods", type: :controller do
5
+
6
+ describe "#require_login!" do
7
+
8
+ controller do
9
+ def index
10
+ require_login!
11
+ render nothing: true
12
+ end
13
+ end
14
+
15
+ it "requires to be logged in" do
16
+ expect { get :index }.to raise_error Adeia::LoginRequired
17
+ end
18
+
19
+ it "responds successfully when logged in" do
20
+ @user = create(:user)
21
+ sign_in @user
22
+ expect{ get :index }.not_to raise_error
23
+ end
24
+
25
+ end
26
+
27
+ describe "::require_login" do
28
+
29
+ controller do
30
+ require_login
31
+
32
+ def index
33
+ render nothing: true
34
+ end
35
+ end
36
+
37
+ it "requires to be logged in" do
38
+ expect { get :index }.to raise_error Adeia::LoginRequired
39
+ end
40
+
41
+ it "responds successfully when logged in" do
42
+ @user = create(:user)
43
+ sign_in @user
44
+ expect{ get :index }.not_to raise_error
45
+ end
46
+
47
+ end
48
+
49
+ describe "#can?" do
50
+
51
+ controller do
52
+ def index
53
+ @can = can? :read, "articles"
54
+ render nothing: true
55
+ end
56
+ end
57
+
58
+ it "returns false when the user is not authorized" do
59
+ get :index
60
+ expect(assigns(:can)).to be false
61
+ end
62
+
63
+ it "caches the result" do
64
+ get :index
65
+ expect(assigns(:can_articles_read)).to be false
66
+ end
67
+
68
+ it "returns true when the user is authorized" do
69
+ @user = create(:user)
70
+ sign_in @user
71
+ create(:permission, owner: @user, element_name: "articles", read_right: true)
72
+ get :index
73
+ expect(assigns(:can)).to be true
74
+ end
75
+
76
+ end
77
+
78
+ describe "#rights?" do
79
+
80
+ controller do
81
+ def index
82
+ @rights = rights? :read, "articles"
83
+ render nothing: true
84
+ end
85
+ end
86
+
87
+ it "returns false when the user is not authorized" do
88
+ get :index
89
+ expect(assigns(:rights)).to be false
90
+ end
91
+
92
+ it "caches the result" do
93
+ get :index
94
+ expect(assigns(:rights_articles_read)).to be false
95
+ end
96
+
97
+ it "returns true when the user has at least one right" do
98
+ @user = create(:user)
99
+ sign_in @user
100
+ create(:permission, owner: @user, element_name: "articles", type_name: "on_ownerships", read_right: true)
101
+ get :index
102
+ expect(assigns(:rights)).to be true
103
+ end
104
+
105
+ end
106
+
107
+ end
108
+ end
@@ -3,7 +3,7 @@ require "rails_helper"
3
3
  describe ArticlesController, :type => :controller do
4
4
  context "with a logged in user" do
5
5
  before(:each) do
6
- @user = User.create!(name: "admin", password: "12341", password_confirmation: "12341")
6
+ @user = create(:user)
7
7
  sign_in @user
8
8
  end
9
9
 
@@ -119,39 +119,5 @@ describe ArticlesController, :type => :controller do
119
119
  end
120
120
 
121
121
  end
122
-
123
- describe "POST #create" do
124
-
125
- it "responds successfully" do
126
- expect{ post :create, article: attributes_for(:article) }.not_to raise_error
127
- end
128
-
129
- end
130
-
131
- describe "PATCH #update" do
132
-
133
- it "responds successfully" do
134
- article = create(:article)
135
- expect{ patch :update, id: article.id, article: attributes_for(:article) }.not_to raise_error
136
- end
137
-
138
- end
139
- end
140
-
141
- describe "POST #create" do
142
-
143
- it "required to be logged in" do
144
- expect { post :create, article: attributes_for(:article) }.to raise_error Adeia::LoginRequired
145
- end
146
-
147
- end
148
-
149
- describe "PATCH #update" do
150
-
151
- it "required to be logged in" do
152
- article = create(:article)
153
- expect { patch :update, id: article.id, article: attributes_for(:article) }.to raise_error Adeia::LoginRequired
154
- end
155
-
156
122
  end
157
123
  end