restme 1.1.0 → 1.2.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 +34 -1
- data/lib/restme/scope/field/attachable.rb +23 -7
- data/lib/restme/scope/field/rules.rb +2 -24
- data/lib/restme/scope/rules.rb +2 -2
- data/lib/restme/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0f3c9d79dc88d267a1198ec23b54f05d8af00367125b1cf1f3fcd6c458633b35
|
4
|
+
data.tar.gz: 48c79f664b0fb61dea85fdd4d2d56d63520f7389c6b31adbead1c41a6b945268
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 80455f1ab99ddec14145d9ed3229c491abfd48c1d2db0fae6532d56ca3304783749d2cba38216ef6529ed6a2985743ed41c3feb2e3fb72273eb8c1a87eae332a
|
7
|
+
data.tar.gz: e7033c0ded95c20fb3df221af86dff3801a67c80cd7b9f3ac4d070f4f64b979d385e01874bbceccdf0affac556752261ffc24e22acd485651d9163650083f8c8
|
data/README.md
CHANGED
@@ -13,7 +13,7 @@ This gem manages your controller's responsibilities for:
|
|
13
13
|
|
14
14
|
GEMFILE:
|
15
15
|
```bash
|
16
|
-
gem 'restme', '~> 1.
|
16
|
+
gem 'restme', '~> 1.1'
|
17
17
|
```
|
18
18
|
|
19
19
|
INSTALL:
|
@@ -28,6 +28,35 @@ gem 'restme'
|
|
28
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).
|
29
29
|
|
30
30
|
|
31
|
+
<br>
|
32
|
+
|
33
|
+
## Optional Configuration (Available from version 1.1 or higher)
|
34
|
+
|
35
|
+
You can create a `restme.rb` file inside `config/initializers` to customize Restme's behavior:
|
36
|
+
|
37
|
+
- Define the name of the controller variable that holds the current user (default: `current_user`).
|
38
|
+
- Define the name of the user field that identifies the user's role (default: `role`).
|
39
|
+
- Set the default number of items returned per page (default: `12`).
|
40
|
+
- Set the default starting page (default: `1`).
|
41
|
+
- Define the maximum number of items allowed per page (default: `100`).
|
42
|
+
|
43
|
+
Example:
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
# config/initializers/restme.rb
|
47
|
+
|
48
|
+
Restme.configure do |config|
|
49
|
+
config.current_user_variable = :current_user
|
50
|
+
config.user_role_field = :role
|
51
|
+
config.pagination_default_per_page = 12
|
52
|
+
config.pagination_default_page = 1
|
53
|
+
config.pagination_max_per_page = 100
|
54
|
+
end
|
55
|
+
```
|
56
|
+
|
57
|
+
<br>
|
58
|
+
|
59
|
+
|
31
60
|
### Usage examples
|
32
61
|
|
33
62
|
Rails API project example here: https://github.com/everson-ever/restme-example/pull/1
|
@@ -186,6 +215,10 @@ module ProductsController::Field
|
|
186
215
|
},
|
187
216
|
category: {
|
188
217
|
table_name: :categories
|
218
|
+
},
|
219
|
+
producer: { # When a nested field can be nil, Restme will not return the primary model unless a LEFT JOIN is explicitly used.
|
220
|
+
table_name: :producers,
|
221
|
+
join_type: :left_joins # Use that so Restme will generate a LEFT JOIN instead of an INNER JOIN. This will
|
189
222
|
}
|
190
223
|
}.freeze
|
191
224
|
end
|
@@ -8,19 +8,35 @@ module Restme
|
|
8
8
|
def insert_attachments(scope)
|
9
9
|
unallowed_attachment_fields_error
|
10
10
|
|
11
|
-
return scope.
|
11
|
+
return scope.as_json(json_options) if attachment_fields_select.blank?
|
12
12
|
|
13
|
-
|
13
|
+
define_attachment_methods
|
14
14
|
|
15
|
-
scope.
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
scope.includes(attachment_fields_select_includes)
|
16
|
+
.as_json(json_options)
|
17
|
+
end
|
18
|
+
|
19
|
+
def json_options
|
20
|
+
{
|
21
|
+
include: valid_nested_fields_select,
|
22
|
+
methods: attachment_methods
|
23
|
+
}
|
24
|
+
end
|
19
25
|
|
20
|
-
|
26
|
+
def define_attachment_methods
|
27
|
+
attachment_fields_select.each do |attachment_field_name|
|
28
|
+
klass.class_eval do
|
29
|
+
define_method(:"#{attachment_field_name}_url") do
|
30
|
+
send(attachment_field_name).url
|
31
|
+
end
|
32
|
+
end
|
21
33
|
end
|
22
34
|
end
|
23
35
|
|
36
|
+
def attachment_methods
|
37
|
+
attachment_fields_select&.map { |field| "#{field}_url" }
|
38
|
+
end
|
39
|
+
|
24
40
|
def attachment_fields_select_includes
|
25
41
|
attachment_fields_select.map { |field| { "#{field}_attachment": :blob } }
|
26
42
|
end
|
@@ -22,23 +22,13 @@ module Restme
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def select_nested_scope(scoped)
|
25
|
-
scoped.
|
26
|
-
.left_joins(nested_fields_left_joins)
|
27
|
-
.preload(valid_nested_fields_select)
|
28
|
-
.select(nesteds_table)
|
25
|
+
scoped.preload(valid_nested_fields_select)
|
29
26
|
end
|
30
27
|
|
31
28
|
def select_any_field?
|
32
29
|
fields_select || nested_fields_select || attachment_fields_select
|
33
30
|
end
|
34
31
|
|
35
|
-
def nesteds_table
|
36
|
-
valid_nested_fields_select&.map do |field|
|
37
|
-
table = nested_selectable_fields_keys.dig(field, :table_name)
|
38
|
-
table.present? ? "#{table}::text AS #{field}" : nil
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
32
|
def model_fields_select
|
43
33
|
@model_fields_select ||= begin
|
44
34
|
fields = fields_select&.split(",")
|
@@ -51,22 +41,10 @@ module Restme
|
|
51
41
|
@model_attributes ||= klass.new.attributes.keys
|
52
42
|
end
|
53
43
|
|
54
|
-
def nested_fields_joins
|
55
|
-
@nested_fields_joins ||= valid_nested_fields_select.select do |field|
|
56
|
-
nested_selectable_fields_keys[field.to_sym][:join_type].blank?
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def nested_fields_left_joins
|
61
|
-
@nested_fields_left_joins ||= valid_nested_fields_select.select do |field|
|
62
|
-
nested_selectable_fields_keys[field.to_sym][:join_type] == :left_joins
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
44
|
def valid_nested_fields_select
|
67
45
|
@valid_nested_fields_select ||=
|
68
46
|
nested_fields_select&.split(",")&.select do |field|
|
69
|
-
nested_selectable_fields_keys
|
47
|
+
nested_selectable_fields_keys.key?(field.to_sym)
|
70
48
|
end&.map(&:to_sym)
|
71
49
|
end
|
72
50
|
|
data/lib/restme/scope/rules.rb
CHANGED
data/lib/restme/version.rb
CHANGED