restme 1.0.1 → 1.1.0
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/README.md +5 -9
- data/lib/restme/authorize/rules.rb +6 -10
- data/lib/restme/configuration.rb +20 -0
- data/lib/restme/create/rules.rb +4 -8
- data/lib/restme/restme.rb +2 -1
- data/lib/restme/scope/paginate/rules.rb +4 -8
- data/lib/restme/scope/rules.rb +6 -6
- data/lib/restme/shared/{user_role.rb → restme_current_user_role.rb} +3 -3
- data/lib/restme/update/rules.rb +4 -8
- data/lib/restme/version.rb +1 -1
- data/lib/restme.rb +6 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 852b2273c90c0c2eb2673bed5fe62a28df112f2eddd55287c415afff487647db
|
4
|
+
data.tar.gz: 746415d80a0fd053b9fb89e86f06116416c16c978727472475d6e22bf2c974ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 981cfa7a02a73c7024cab361704daf3151660abf062324ce3ad44ecf121083349272782a72df26349f58c0550d7f3b7287b71e03e2fdb8502e386267ef1b3464
|
7
|
+
data.tar.gz: a5d92fa8e80b2f1ff7fceee0c0e0c5d42067b4908d07e45fcf461ebcc6528559dec7b4422ba4c8ae42ab0f7c422482c08fdbe57425d4b0efed0f115975221fc7
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
[](https://badge.fury.io/rb/restme)
|
4
4
|
|
5
|
-
Adds support for new **Rails** controller actions such as pagination, filtering, sorting, and selecting specific model fields. Easily implement full CRUD functionality by importing Restme into your controller.
|
5
|
+
Adds support for new **Rails/Postgres** controller actions such as pagination, filtering, sorting, and selecting specific model fields. Easily implement full CRUD functionality by importing Restme into your controller.
|
6
6
|
|
7
7
|
This gem manages your controller's responsibilities for:
|
8
8
|
- Read Actions: Provide complete pagination, filtering, sorting, and field selection for records, all handled through query parameters (e.g., `http://127.0.0.1/products?name_equal=foo`).
|
@@ -11,13 +11,12 @@ This gem manages your controller's responsibilities for:
|
|
11
11
|
## Installation
|
12
12
|
|
13
13
|
|
14
|
-
|
14
|
+
GEMFILE:
|
15
15
|
```bash
|
16
|
-
gem
|
16
|
+
gem 'restme', '~> 1.0', '>= 1.0.2'
|
17
17
|
```
|
18
18
|
|
19
|
-
|
20
|
-
|
19
|
+
INSTALL:
|
21
20
|
```bash
|
22
21
|
gem 'restme'
|
23
22
|
```
|
@@ -25,10 +24,7 @@ gem 'restme'
|
|
25
24
|
## Usage
|
26
25
|
|
27
26
|
#### ℹ️ Current Version of gem require the following pré configs
|
28
|
-
|
29
|
-
- If your controller defines an instance variable named `current_user`, Restme will automatically assign it to `model.current_user` during create and update actions—provided your model responds to the `current_user` method.
|
30
|
-
- Your user model must have a role attribute (user.role).
|
31
|
-
- Your controllers must be named using the plural form of the model (e.g., Product → ProductsController). Alternatively, you can manually set the model name by defining the MODEL_NAME constant (e.g., MODEL_NAME = "Shopping").
|
27
|
+
- Your controllers must be named using the plural form of the model (e.g., Product → ProductsController). Alternatively, you can manually set the model name by defining the MODEL_NAME constant (e.g., MODEL_NAME = "Product").
|
32
28
|
- You must create a folder inside app named restfy to define controller rules for authorization, scoping, creation, updating, and field selection (see example below).
|
33
29
|
|
34
30
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "../shared/
|
3
|
+
require_relative "../shared/restme_current_user_role"
|
4
4
|
require_relative "../shared/current_model"
|
5
5
|
|
6
6
|
module Restme
|
@@ -8,7 +8,7 @@ module Restme
|
|
8
8
|
# Defines the rules used to authotize user
|
9
9
|
module Rules
|
10
10
|
include ::Restme::Shared::CurrentModel
|
11
|
-
include ::Restme::Shared::
|
11
|
+
include ::Restme::Shared::RestmeCurrentUserRole
|
12
12
|
|
13
13
|
def user_authorized?
|
14
14
|
return true if restme_current_user.blank? || authorize?
|
@@ -19,8 +19,8 @@ module Restme
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def authorize?
|
22
|
-
|
23
|
-
|
22
|
+
allowed_roles_actions[action_name.to_sym]
|
23
|
+
&.include?(restme_current_user_role&.to_sym)
|
24
24
|
end
|
25
25
|
|
26
26
|
def authorize_errors
|
@@ -35,17 +35,13 @@ module Restme
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def allowed_roles_actions
|
38
|
-
return {} unless authorize_rules_class
|
38
|
+
return {} unless authorize_rules_class&.const_defined?(:ALLOWED_ROLES_ACTIONS)
|
39
39
|
|
40
40
|
authorize_rules_class::ALLOWED_ROLES_ACTIONS
|
41
41
|
end
|
42
42
|
|
43
|
-
def super_authorize?
|
44
|
-
restme_current_user&.super_admin?
|
45
|
-
end
|
46
|
-
|
47
43
|
def authorize_rules_class
|
48
|
-
"#{controller_class.to_s.split("::").last}::Authorize::Rules".
|
44
|
+
"#{controller_class.to_s.split("::").last}::Authorize::Rules".safe_constantize
|
49
45
|
end
|
50
46
|
end
|
51
47
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Restme
|
4
|
+
# Defines the initialization configuration for restme gem
|
5
|
+
module Configuration
|
6
|
+
@current_user_variable = :current_user
|
7
|
+
@user_role_field = :role
|
8
|
+
@pagination_default_per_page = 12
|
9
|
+
@pagination_default_page = 1
|
10
|
+
@pagination_max_per_page = 100
|
11
|
+
|
12
|
+
class << self
|
13
|
+
attr_accessor :current_user_variable,
|
14
|
+
:user_role_field,
|
15
|
+
:pagination_default_per_page,
|
16
|
+
:pagination_default_page,
|
17
|
+
:pagination_max_per_page
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/restme/create/rules.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "../shared/
|
3
|
+
require_relative "../shared/restme_current_user_role"
|
4
4
|
require_relative "../shared/current_model"
|
5
5
|
require_relative "../shared/controller_params"
|
6
6
|
|
@@ -10,7 +10,7 @@ module Restme
|
|
10
10
|
module Rules
|
11
11
|
include ::Restme::Shared::ControllerParams
|
12
12
|
include ::Restme::Shared::CurrentModel
|
13
|
-
include ::Restme::Shared::
|
13
|
+
include ::Restme::Shared::RestmeCurrentUserRole
|
14
14
|
|
15
15
|
attr_reader :create_temp_record
|
16
16
|
|
@@ -64,13 +64,9 @@ module Restme
|
|
64
64
|
def createable_scope?
|
65
65
|
return true unless restme_current_user
|
66
66
|
|
67
|
-
method_scope = "#{creatable_current_action}_#{
|
67
|
+
method_scope = "#{creatable_current_action}_#{restme_current_user_role}_scope?"
|
68
68
|
|
69
|
-
|
70
|
-
end
|
71
|
-
|
72
|
-
def createable_super_admin_scope?
|
73
|
-
restme_current_user.super_admin?
|
69
|
+
create_rules_class.try(method_scope) || false
|
74
70
|
end
|
75
71
|
|
76
72
|
def createable_object_errors_messages
|
data/lib/restme/restme.rb
CHANGED
@@ -5,16 +5,12 @@ module Restme
|
|
5
5
|
module Paginate
|
6
6
|
# Defines pagination rules
|
7
7
|
module Rules
|
8
|
-
DEFAULT_PER_PAGE = ENV.fetch("PAGINATION_DEFAULT_PER_PAGE", 12)
|
9
|
-
DEFAULT_PAGE = ENV.fetch("PAGINATION_DEFAULT_PAGE", 1)
|
10
|
-
MAX_PER_PAGE = ENV.fetch("PAGINATION_MAX_PER_PAGE", 100)
|
11
|
-
|
12
8
|
def paginable_scope(user_scope)
|
13
9
|
user_scope.limit(per_page).offset(paginate_offset)
|
14
10
|
end
|
15
11
|
|
16
12
|
def page_no
|
17
|
-
params[:page]&.to_i ||
|
13
|
+
params[:page]&.to_i || ::Restme::Configuration.pagination_default_page
|
18
14
|
end
|
19
15
|
|
20
16
|
def pages(user_scope)
|
@@ -26,7 +22,7 @@ module Restme
|
|
26
22
|
end
|
27
23
|
|
28
24
|
def per_page
|
29
|
-
params[:per_page]&.to_i ||
|
25
|
+
params[:per_page]&.to_i || ::Restme::Configuration.pagination_default_per_page
|
30
26
|
end
|
31
27
|
|
32
28
|
def paginate_offset
|
@@ -34,12 +30,12 @@ module Restme
|
|
34
30
|
end
|
35
31
|
|
36
32
|
def per_page_errors
|
37
|
-
return if per_page <=
|
33
|
+
return if per_page <= ::Restme::Configuration.pagination_max_per_page
|
38
34
|
|
39
35
|
restme_scope_errors(
|
40
36
|
{
|
41
37
|
message: "Invalid per page value",
|
42
|
-
body: { per_page_max_value:
|
38
|
+
body: { per_page_max_value: ::Restme::Configuration.pagination_max_per_page }
|
43
39
|
}
|
44
40
|
)
|
45
41
|
|
data/lib/restme/scope/rules.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "../shared/
|
3
|
+
require_relative "../shared/restme_current_user_role"
|
4
4
|
require_relative "../shared/current_model"
|
5
5
|
require_relative "../shared/controller_params"
|
6
6
|
require_relative "filter/rules"
|
@@ -20,7 +20,7 @@ module Restme
|
|
20
20
|
include ::Restme::Scope::Filter::Rules
|
21
21
|
include ::Restme::Shared::ControllerParams
|
22
22
|
include ::Restme::Shared::CurrentModel
|
23
|
-
include ::Restme::Shared::
|
23
|
+
include ::Restme::Shared::RestmeCurrentUserRole
|
24
24
|
|
25
25
|
attr_reader :filtered_scope, :sorted_scope, :paginated_scope, :fieldated_scope
|
26
26
|
attr_writer :restme_scope_errors, :restme_scope_status
|
@@ -87,11 +87,11 @@ module Restme
|
|
87
87
|
end
|
88
88
|
|
89
89
|
def user_scope
|
90
|
-
@user_scope ||=
|
90
|
+
@user_scope ||= none_user_scope || scope_rules_class.try(method_scope) || none_scope
|
91
91
|
end
|
92
92
|
|
93
|
-
def
|
94
|
-
klass.all if restme_current_user
|
93
|
+
def none_user_scope
|
94
|
+
klass.all if restme_current_user.blank?
|
95
95
|
end
|
96
96
|
|
97
97
|
def none_scope
|
@@ -99,7 +99,7 @@ module Restme
|
|
99
99
|
end
|
100
100
|
|
101
101
|
def method_scope
|
102
|
-
"#{
|
102
|
+
"#{restme_current_user_role}_scope"
|
103
103
|
end
|
104
104
|
|
105
105
|
def scope_rules_class
|
@@ -3,9 +3,9 @@
|
|
3
3
|
module Restme
|
4
4
|
module Shared
|
5
5
|
# Returns the roles associated with the user, if any exist.
|
6
|
-
module
|
7
|
-
def
|
8
|
-
restme_current_user&.
|
6
|
+
module RestmeCurrentUserRole
|
7
|
+
def restme_current_user_role
|
8
|
+
restme_current_user&.try(::Restme::Configuration.user_role_field)
|
9
9
|
end
|
10
10
|
end
|
11
11
|
end
|
data/lib/restme/update/rules.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "../shared/
|
3
|
+
require_relative "../shared/restme_current_user_role"
|
4
4
|
require_relative "../shared/current_model"
|
5
5
|
require_relative "../shared/controller_params"
|
6
6
|
|
@@ -10,7 +10,7 @@ module Restme
|
|
10
10
|
module Rules
|
11
11
|
include ::Restme::Shared::ControllerParams
|
12
12
|
include ::Restme::Shared::CurrentModel
|
13
|
-
include ::Restme::Shared::
|
13
|
+
include ::Restme::Shared::RestmeCurrentUserRole
|
14
14
|
|
15
15
|
attr_reader :update_temp_record
|
16
16
|
|
@@ -74,13 +74,9 @@ module Restme
|
|
74
74
|
def updateable_scope?
|
75
75
|
return true unless restme_current_user
|
76
76
|
|
77
|
-
method_scope = "#{updateable_current_action}_#{
|
77
|
+
method_scope = "#{updateable_current_action}_#{restme_current_user_role}_scope?"
|
78
78
|
|
79
|
-
|
80
|
-
end
|
81
|
-
|
82
|
-
def updateable_super_admin_scope?
|
83
|
-
restme_current_user&.super_admin?
|
79
|
+
update_rules_class.try(method_scope) || false
|
84
80
|
end
|
85
81
|
|
86
82
|
def updateable_record_errors_messages
|
data/lib/restme/version.rb
CHANGED
data/lib/restme.rb
CHANGED
@@ -1,9 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "restme/version"
|
4
|
+
require_relative "restme/configuration"
|
4
5
|
require_relative "restme/restme"
|
5
6
|
|
7
|
+
# Restme gem
|
6
8
|
module Restme
|
7
9
|
class Error < StandardError; end
|
8
10
|
# Your code goes here...
|
11
|
+
|
12
|
+
def self.configure
|
13
|
+
yield(Configuration)
|
14
|
+
end
|
9
15
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: restme
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- everson-ever
|
@@ -28,6 +28,7 @@ files:
|
|
28
28
|
- docker-compose.yml
|
29
29
|
- lib/restme.rb
|
30
30
|
- lib/restme/authorize/rules.rb
|
31
|
+
- lib/restme/configuration.rb
|
31
32
|
- lib/restme/create/rules.rb
|
32
33
|
- lib/restme/restme.rb
|
33
34
|
- lib/restme/scope/field/attachable.rb
|
@@ -45,7 +46,7 @@ files:
|
|
45
46
|
- lib/restme/scope/sort/rules.rb
|
46
47
|
- lib/restme/shared/controller_params.rb
|
47
48
|
- lib/restme/shared/current_model.rb
|
48
|
-
- lib/restme/shared/
|
49
|
+
- lib/restme/shared/restme_current_user_role.rb
|
49
50
|
- lib/restme/update/rules.rb
|
50
51
|
- lib/restme/version.rb
|
51
52
|
- sig/restme.rbs
|