auxiliary_rails_resourceable 0.1.1 → 0.1.2
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/.rubocop.yml +5 -0
- data/CHANGELOG.md +6 -0
- data/Gemfile.lock +147 -120
- data/README.md +70 -26
- data/config/locales/resources.en.yml +8 -0
- data/lib/auxiliary_rails/concerns/resourceable.rb +77 -51
- data/lib/auxiliary_rails/view_helpers/human_name_helper.rb +32 -0
- data/lib/auxiliary_rails_resourceable/railtie.rb +10 -0
- data/lib/auxiliary_rails_resourceable/version.rb +1 -1
- data/lib/auxiliary_rails_resourceable.rb +1 -0
- metadata +10 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2652d651562f292661ab1e5bab3e5f360092dce54bb8d6a26dae20833d3534e4
|
|
4
|
+
data.tar.gz: 75deec7ba21c12b6d746ab5c3c3bb91e55cd781beec2a4749896c46225756eb3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 55a32aaa16651fed49f565d09d9e43f690172d2ec4f4875bac6e20e25bd983e01586db22a08eb24bf805a1a7ad182626f128a180b8ff5859d726b90060875dba
|
|
7
|
+
data.tar.gz: b49c1bd45598e9da86439cf5ec29bd0203600aadb079895f5027a083fad3a22d1558cfcd94416d06c094b5e0f4cd9e3e1cb1a5fa56afeacf4393ff765742c64e
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
## [Unreleased]
|
|
2
2
|
|
|
3
|
+
## [0.1.2] - 2022-08-17
|
|
4
|
+
|
|
5
|
+
- Added `human_name` and `human_name_plural` helpers
|
|
6
|
+
- Share views between modules via `resourceable` directory
|
|
7
|
+
- Respond format.json instead of redirects
|
|
8
|
+
|
|
3
9
|
## [0.1.1] - 2022-08-27
|
|
4
10
|
|
|
5
11
|
## [0.1.0] - 2022-08-20
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
auxiliary_rails_resourceable (0.1.
|
|
4
|
+
auxiliary_rails_resourceable (0.1.2)
|
|
5
5
|
pagy
|
|
6
6
|
pundit
|
|
7
7
|
rails (>= 5.2)
|
|
@@ -10,155 +10,179 @@ PATH
|
|
|
10
10
|
GEM
|
|
11
11
|
remote: https://rubygems.org/
|
|
12
12
|
specs:
|
|
13
|
-
actioncable (7.0
|
|
14
|
-
actionpack (= 7.0
|
|
15
|
-
activesupport (= 7.0
|
|
13
|
+
actioncable (7.2.0)
|
|
14
|
+
actionpack (= 7.2.0)
|
|
15
|
+
activesupport (= 7.2.0)
|
|
16
16
|
nio4r (~> 2.0)
|
|
17
17
|
websocket-driver (>= 0.6.1)
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
activesupport (= 7.0.3.1)
|
|
41
|
-
rack (~> 2.0, >= 2.2.0)
|
|
18
|
+
zeitwerk (~> 2.6)
|
|
19
|
+
actionmailbox (7.2.0)
|
|
20
|
+
actionpack (= 7.2.0)
|
|
21
|
+
activejob (= 7.2.0)
|
|
22
|
+
activerecord (= 7.2.0)
|
|
23
|
+
activestorage (= 7.2.0)
|
|
24
|
+
activesupport (= 7.2.0)
|
|
25
|
+
mail (>= 2.8.0)
|
|
26
|
+
actionmailer (7.2.0)
|
|
27
|
+
actionpack (= 7.2.0)
|
|
28
|
+
actionview (= 7.2.0)
|
|
29
|
+
activejob (= 7.2.0)
|
|
30
|
+
activesupport (= 7.2.0)
|
|
31
|
+
mail (>= 2.8.0)
|
|
32
|
+
rails-dom-testing (~> 2.2)
|
|
33
|
+
actionpack (7.2.0)
|
|
34
|
+
actionview (= 7.2.0)
|
|
35
|
+
activesupport (= 7.2.0)
|
|
36
|
+
nokogiri (>= 1.8.5)
|
|
37
|
+
racc
|
|
38
|
+
rack (>= 2.2.4, < 3.2)
|
|
39
|
+
rack-session (>= 1.0.1)
|
|
42
40
|
rack-test (>= 0.6.3)
|
|
43
|
-
rails-dom-testing (~> 2.
|
|
44
|
-
rails-html-sanitizer (~> 1.
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
41
|
+
rails-dom-testing (~> 2.2)
|
|
42
|
+
rails-html-sanitizer (~> 1.6)
|
|
43
|
+
useragent (~> 0.16)
|
|
44
|
+
actiontext (7.2.0)
|
|
45
|
+
actionpack (= 7.2.0)
|
|
46
|
+
activerecord (= 7.2.0)
|
|
47
|
+
activestorage (= 7.2.0)
|
|
48
|
+
activesupport (= 7.2.0)
|
|
50
49
|
globalid (>= 0.6.0)
|
|
51
50
|
nokogiri (>= 1.8.5)
|
|
52
|
-
actionview (7.0
|
|
53
|
-
activesupport (= 7.0
|
|
51
|
+
actionview (7.2.0)
|
|
52
|
+
activesupport (= 7.2.0)
|
|
54
53
|
builder (~> 3.1)
|
|
55
|
-
erubi (~> 1.
|
|
56
|
-
rails-dom-testing (~> 2.
|
|
57
|
-
rails-html-sanitizer (~> 1.
|
|
58
|
-
activejob (7.0
|
|
59
|
-
activesupport (= 7.0
|
|
54
|
+
erubi (~> 1.11)
|
|
55
|
+
rails-dom-testing (~> 2.2)
|
|
56
|
+
rails-html-sanitizer (~> 1.6)
|
|
57
|
+
activejob (7.2.0)
|
|
58
|
+
activesupport (= 7.2.0)
|
|
60
59
|
globalid (>= 0.3.6)
|
|
61
|
-
activemodel (7.0
|
|
62
|
-
activesupport (= 7.0
|
|
63
|
-
activerecord (7.0
|
|
64
|
-
activemodel (= 7.0
|
|
65
|
-
activesupport (= 7.0
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
60
|
+
activemodel (7.2.0)
|
|
61
|
+
activesupport (= 7.2.0)
|
|
62
|
+
activerecord (7.2.0)
|
|
63
|
+
activemodel (= 7.2.0)
|
|
64
|
+
activesupport (= 7.2.0)
|
|
65
|
+
timeout (>= 0.4.0)
|
|
66
|
+
activestorage (7.2.0)
|
|
67
|
+
actionpack (= 7.2.0)
|
|
68
|
+
activejob (= 7.2.0)
|
|
69
|
+
activerecord (= 7.2.0)
|
|
70
|
+
activesupport (= 7.2.0)
|
|
71
71
|
marcel (~> 1.0)
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
72
|
+
activesupport (7.2.0)
|
|
73
|
+
base64
|
|
74
|
+
bigdecimal
|
|
75
|
+
concurrent-ruby (~> 1.0, >= 1.3.1)
|
|
76
|
+
connection_pool (>= 2.2.5)
|
|
77
|
+
drb
|
|
75
78
|
i18n (>= 1.6, < 2)
|
|
79
|
+
logger (>= 1.4.2)
|
|
76
80
|
minitest (>= 5.1)
|
|
77
|
-
|
|
81
|
+
securerandom (>= 0.3)
|
|
82
|
+
tzinfo (~> 2.0, >= 2.0.5)
|
|
78
83
|
ast (2.4.2)
|
|
79
|
-
|
|
80
|
-
|
|
84
|
+
base64 (0.2.0)
|
|
85
|
+
bigdecimal (3.1.8)
|
|
86
|
+
builder (3.3.0)
|
|
87
|
+
concurrent-ruby (1.3.4)
|
|
88
|
+
connection_pool (2.4.1)
|
|
81
89
|
crass (1.0.6)
|
|
90
|
+
date (3.3.4)
|
|
82
91
|
diff-lcs (1.5.0)
|
|
83
|
-
|
|
84
|
-
erubi (1.
|
|
85
|
-
globalid (1.
|
|
86
|
-
activesupport (>=
|
|
87
|
-
i18n (1.
|
|
92
|
+
drb (2.2.1)
|
|
93
|
+
erubi (1.13.0)
|
|
94
|
+
globalid (1.2.1)
|
|
95
|
+
activesupport (>= 6.1)
|
|
96
|
+
i18n (1.14.5)
|
|
88
97
|
concurrent-ruby (~> 1.0)
|
|
98
|
+
io-console (0.7.2)
|
|
99
|
+
irb (1.14.0)
|
|
100
|
+
rdoc (>= 4.0.0)
|
|
101
|
+
reline (>= 0.4.2)
|
|
89
102
|
json (2.6.2)
|
|
90
|
-
|
|
103
|
+
logger (1.6.0)
|
|
104
|
+
loofah (2.22.0)
|
|
91
105
|
crass (~> 1.0.2)
|
|
92
|
-
nokogiri (>= 1.
|
|
93
|
-
mail (2.
|
|
106
|
+
nokogiri (>= 1.12.0)
|
|
107
|
+
mail (2.8.1)
|
|
94
108
|
mini_mime (>= 0.1.1)
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
109
|
+
net-imap
|
|
110
|
+
net-pop
|
|
111
|
+
net-smtp
|
|
112
|
+
marcel (1.0.4)
|
|
113
|
+
mini_mime (1.1.5)
|
|
114
|
+
mini_portile2 (2.8.7)
|
|
115
|
+
minitest (5.25.1)
|
|
116
|
+
net-imap (0.4.14)
|
|
117
|
+
date
|
|
102
118
|
net-protocol
|
|
103
|
-
|
|
104
|
-
net-pop (0.1.1)
|
|
105
|
-
digest
|
|
119
|
+
net-pop (0.1.2)
|
|
106
120
|
net-protocol
|
|
121
|
+
net-protocol (0.2.2)
|
|
107
122
|
timeout
|
|
108
|
-
net-
|
|
109
|
-
timeout
|
|
110
|
-
net-smtp (0.3.1)
|
|
111
|
-
digest
|
|
123
|
+
net-smtp (0.5.0)
|
|
112
124
|
net-protocol
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
mini_portile2 (~> 2.8.0)
|
|
125
|
+
nio4r (2.7.3)
|
|
126
|
+
nokogiri (1.16.7)
|
|
127
|
+
mini_portile2 (~> 2.8.2)
|
|
117
128
|
racc (~> 1.4)
|
|
118
|
-
pagy (
|
|
119
|
-
activesupport
|
|
129
|
+
pagy (9.0.5)
|
|
120
130
|
parallel (1.22.1)
|
|
121
131
|
parser (3.1.2.1)
|
|
122
132
|
ast (~> 2.4.1)
|
|
123
|
-
|
|
133
|
+
psych (5.1.2)
|
|
134
|
+
stringio
|
|
135
|
+
pundit (2.3.2)
|
|
124
136
|
activesupport (>= 3.0.0)
|
|
125
|
-
racc (1.
|
|
126
|
-
rack (
|
|
127
|
-
rack-
|
|
137
|
+
racc (1.8.1)
|
|
138
|
+
rack (3.1.7)
|
|
139
|
+
rack-session (2.0.0)
|
|
140
|
+
rack (>= 3.0.0)
|
|
141
|
+
rack-test (2.1.0)
|
|
128
142
|
rack (>= 1.3)
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
143
|
+
rackup (2.1.0)
|
|
144
|
+
rack (>= 3)
|
|
145
|
+
webrick (~> 1.8)
|
|
146
|
+
rails (7.2.0)
|
|
147
|
+
actioncable (= 7.2.0)
|
|
148
|
+
actionmailbox (= 7.2.0)
|
|
149
|
+
actionmailer (= 7.2.0)
|
|
150
|
+
actionpack (= 7.2.0)
|
|
151
|
+
actiontext (= 7.2.0)
|
|
152
|
+
actionview (= 7.2.0)
|
|
153
|
+
activejob (= 7.2.0)
|
|
154
|
+
activemodel (= 7.2.0)
|
|
155
|
+
activerecord (= 7.2.0)
|
|
156
|
+
activestorage (= 7.2.0)
|
|
157
|
+
activesupport (= 7.2.0)
|
|
141
158
|
bundler (>= 1.15.0)
|
|
142
|
-
railties (= 7.0
|
|
143
|
-
rails-dom-testing (2.0
|
|
144
|
-
activesupport (>=
|
|
159
|
+
railties (= 7.2.0)
|
|
160
|
+
rails-dom-testing (2.2.0)
|
|
161
|
+
activesupport (>= 5.0.0)
|
|
162
|
+
minitest
|
|
145
163
|
nokogiri (>= 1.6)
|
|
146
|
-
rails-html-sanitizer (1.
|
|
147
|
-
loofah (~> 2.
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
164
|
+
rails-html-sanitizer (1.6.0)
|
|
165
|
+
loofah (~> 2.21)
|
|
166
|
+
nokogiri (~> 1.14)
|
|
167
|
+
railties (7.2.0)
|
|
168
|
+
actionpack (= 7.2.0)
|
|
169
|
+
activesupport (= 7.2.0)
|
|
170
|
+
irb (~> 1.13)
|
|
171
|
+
rackup (>= 1.0.0)
|
|
152
172
|
rake (>= 12.2)
|
|
153
|
-
thor (~> 1.0)
|
|
154
|
-
zeitwerk (~> 2.
|
|
173
|
+
thor (~> 1.0, >= 1.2.2)
|
|
174
|
+
zeitwerk (~> 2.6)
|
|
155
175
|
rainbow (3.1.1)
|
|
156
176
|
rake (13.0.6)
|
|
157
|
-
ransack (
|
|
177
|
+
ransack (4.2.1)
|
|
158
178
|
activerecord (>= 6.1.5)
|
|
159
179
|
activesupport (>= 6.1.5)
|
|
160
180
|
i18n
|
|
181
|
+
rdoc (6.7.0)
|
|
182
|
+
psych (>= 4.0.0)
|
|
161
183
|
regexp_parser (2.5.0)
|
|
184
|
+
reline (0.5.9)
|
|
185
|
+
io-console (~> 0.5)
|
|
162
186
|
rexml (3.2.5)
|
|
163
187
|
rspec (3.11.0)
|
|
164
188
|
rspec-core (~> 3.11.0)
|
|
@@ -193,16 +217,19 @@ GEM
|
|
|
193
217
|
rubocop-rspec (2.12.1)
|
|
194
218
|
rubocop (~> 1.31)
|
|
195
219
|
ruby-progressbar (1.11.0)
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
220
|
+
securerandom (0.3.1)
|
|
221
|
+
stringio (3.1.1)
|
|
222
|
+
thor (1.3.1)
|
|
223
|
+
timeout (0.4.1)
|
|
224
|
+
tzinfo (2.0.6)
|
|
200
225
|
concurrent-ruby (~> 1.0)
|
|
201
226
|
unicode-display_width (2.2.0)
|
|
202
|
-
|
|
227
|
+
useragent (0.16.10)
|
|
228
|
+
webrick (1.8.1)
|
|
229
|
+
websocket-driver (0.7.6)
|
|
203
230
|
websocket-extensions (>= 0.1.0)
|
|
204
231
|
websocket-extensions (0.1.5)
|
|
205
|
-
zeitwerk (2.6.
|
|
232
|
+
zeitwerk (2.6.17)
|
|
206
233
|
|
|
207
234
|
PLATFORMS
|
|
208
235
|
ruby
|
data/README.md
CHANGED
|
@@ -1,22 +1,46 @@
|
|
|
1
|
-
#
|
|
1
|
+
# AuxiliaryRails::Resourceable
|
|
2
2
|
|
|
3
3
|
[](https://rubygems.org/gems/auxiliary_rails_resourceable)
|
|
4
4
|
|
|
5
|
+
`Resourceable` module speeds up development by loading your controllers with RESTful (CRUD) actions.
|
|
6
|
+
|
|
7
|
+
It is powered with search ([ransack](https://github.com/activerecord-hackery/ransack)), pagination ([pagy](https://github.com/ddnexus/pagy)) and policies ([pundit](https://github.com/varvet/pundit)).
|
|
8
|
+
All these make your controllers and views much cleaner, so you can just focus on what is important.
|
|
9
|
+
|
|
10
|
+
`Resourceable` aims to be as simple and flexible as possible and suggests customization using regular method overwriting instead of tricky configs or DSLs.
|
|
11
|
+
Of course, it may not cover all possible cases, but if you need something really custom - just write custom code.
|
|
12
|
+
|
|
13
|
+
|
|
5
14
|
## Installation
|
|
6
15
|
|
|
7
|
-
Add
|
|
16
|
+
Add one of these lines to your application's `Gemfile`:
|
|
8
17
|
|
|
9
18
|
```ruby
|
|
19
|
+
# version released to RubyGems (recommended)
|
|
10
20
|
gem 'auxiliary_rails_resourceable'
|
|
11
|
-
```
|
|
12
21
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
22
|
+
# or latest development version from a specific branch of the GitHub repository
|
|
23
|
+
gem 'auxiliary_rails_resourceable',
|
|
24
|
+
git: 'https://github.com/ergoserv/auxiliary_rails_resourceable',
|
|
25
|
+
branch: 'develop'
|
|
26
|
+
# or from a local path (for development and testing purposes)
|
|
27
|
+
gem 'auxiliary_rails_resourceable',
|
|
28
|
+
path: '../auxiliary_rails_resourceable'
|
|
29
|
+
```
|
|
16
30
|
|
|
17
|
-
|
|
31
|
+
Copy `resources.en.yml` to `config/locales/resources.en.yml`.
|
|
18
32
|
|
|
19
|
-
|
|
33
|
+
Create shared views in `app/views/resources/` (or `app/views/resourceable/` if your need to share views for modules).
|
|
34
|
+
Recommended structure for views:
|
|
35
|
+
```
|
|
36
|
+
index.html.erb
|
|
37
|
+
new.html.erb
|
|
38
|
+
show.html.erb
|
|
39
|
+
edit.html.erb
|
|
40
|
+
_form.html.erb
|
|
41
|
+
_list.html.erb
|
|
42
|
+
_search_form.html.erb
|
|
43
|
+
```
|
|
20
44
|
|
|
21
45
|
## Usage
|
|
22
46
|
|
|
@@ -27,26 +51,46 @@ class ResourcesController < ApplicationController
|
|
|
27
51
|
include AuxiliaryRails::Concerns::Resourceable
|
|
28
52
|
end
|
|
29
53
|
|
|
30
|
-
# app/
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
# - show.html.erb
|
|
34
|
-
# - edit.html.erb
|
|
35
|
-
# - _form.html.erb
|
|
36
|
-
# - _list.html.erb
|
|
37
|
-
# - _search_form.html.erb
|
|
38
|
-
|
|
39
|
-
# /config/locales/resources.en.yml
|
|
40
|
-
en:
|
|
41
|
-
resources:
|
|
42
|
-
create:
|
|
43
|
-
notice: "%{resource_name} was successfully created."
|
|
44
|
-
update:
|
|
45
|
-
notice: "%{resource_name} was successfully updated."
|
|
46
|
-
destroy:
|
|
47
|
-
notice: "%{resource_name} was successfully destroyed."
|
|
54
|
+
# app/controllers/products_controller.rb
|
|
55
|
+
class ProductsController < ResourcesController
|
|
56
|
+
end
|
|
48
57
|
```
|
|
49
58
|
|
|
59
|
+
### Customization
|
|
60
|
+
|
|
61
|
+
`Resourceable` is a very simple and clear module, just read its code and overwrite
|
|
62
|
+
what you need in `ResourcesController` or any of its subclasses, e.g.:
|
|
63
|
+
|
|
64
|
+
```ruby
|
|
65
|
+
# app/controllers/products_controller.rb
|
|
66
|
+
class ProductsController < ResourcesController
|
|
67
|
+
# Load additional data for views
|
|
68
|
+
def index
|
|
69
|
+
super
|
|
70
|
+
self.collection = collection.includes([:category])
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
protected
|
|
74
|
+
|
|
75
|
+
# Add any additional scopes to the collection scope
|
|
76
|
+
def collection_scope
|
|
77
|
+
policy_scope(Product).active.in_stock
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Overwrite Pagy configs using Pagy's methods
|
|
81
|
+
# https://github.com/ddnexus/pagy/blob/master/lib/pagy/backend.rb#L19
|
|
82
|
+
def pagy_get_vars(collection, vars)
|
|
83
|
+
vars[:items] = 250
|
|
84
|
+
super
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## References
|
|
90
|
+
|
|
91
|
+
This gem is heavily inspired by [inherited_resources](https://github.com/activeadmin/inherited_resources) and [activeadmin](https://github.com/activeadmin/activeadmin).
|
|
92
|
+
It even follows the naming for helpers of `inherited_resources` and, in simple cases, can be used as a drop-in replacement with no or just a few code changes.
|
|
93
|
+
|
|
50
94
|
## Development
|
|
51
95
|
|
|
52
96
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
|
@@ -7,18 +7,15 @@ module AuxiliaryRails
|
|
|
7
7
|
include Pundit::Authorization
|
|
8
8
|
|
|
9
9
|
included do
|
|
10
|
-
before_action only: %i[index new]
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
before_action :resource, only: %i[show edit] do
|
|
14
|
-
authorize resource
|
|
15
|
-
end
|
|
16
|
-
|
|
10
|
+
before_action :authorize_resource_class, only: %i[index new create]
|
|
11
|
+
before_action :authorize_resource, only: %i[show edit update destroy]
|
|
12
|
+
before_action :set_lookup_context_prefixes
|
|
17
13
|
after_action :verify_authorized
|
|
18
14
|
after_action :verify_policy_scoped, only: %i[index]
|
|
19
15
|
|
|
20
16
|
helper_method :collection
|
|
21
17
|
helper_method :collection_path
|
|
18
|
+
helper_method :form_resource
|
|
22
19
|
helper_method :resource
|
|
23
20
|
helper_method :resource_class
|
|
24
21
|
helper_method :resource_params
|
|
@@ -33,12 +30,22 @@ module AuxiliaryRails
|
|
|
33
30
|
end
|
|
34
31
|
|
|
35
32
|
def new
|
|
36
|
-
self.resource =
|
|
33
|
+
self.resource =
|
|
34
|
+
if params.key?(resource_name)
|
|
35
|
+
build_resource(resource_params)
|
|
36
|
+
else
|
|
37
|
+
build_resource
|
|
38
|
+
end
|
|
37
39
|
end
|
|
38
40
|
|
|
39
41
|
def create
|
|
40
|
-
|
|
41
|
-
|
|
42
|
+
self.resource = build_resource(resource_params)
|
|
43
|
+
|
|
44
|
+
if resource.save
|
|
45
|
+
respond_to do |format|
|
|
46
|
+
format.html { redirect_after_create }
|
|
47
|
+
format.json
|
|
48
|
+
end
|
|
42
49
|
else
|
|
43
50
|
render :new
|
|
44
51
|
end
|
|
@@ -51,30 +58,50 @@ module AuxiliaryRails
|
|
|
51
58
|
end
|
|
52
59
|
|
|
53
60
|
def update
|
|
54
|
-
|
|
55
|
-
|
|
61
|
+
resource.assign_attributes(resource_params)
|
|
62
|
+
|
|
63
|
+
if resource.save
|
|
64
|
+
respond_to do |format|
|
|
65
|
+
format.html { redirect_after_update }
|
|
66
|
+
format.json
|
|
67
|
+
end
|
|
56
68
|
else
|
|
57
69
|
render :edit
|
|
58
70
|
end
|
|
59
71
|
end
|
|
60
72
|
|
|
61
73
|
def destroy
|
|
62
|
-
|
|
74
|
+
resource.destroy
|
|
63
75
|
|
|
64
|
-
|
|
76
|
+
respond_to do |format|
|
|
77
|
+
format.html { redirect_after_destroy }
|
|
78
|
+
format.json
|
|
79
|
+
end
|
|
65
80
|
end
|
|
66
81
|
|
|
67
82
|
protected
|
|
68
83
|
|
|
69
84
|
# configs
|
|
70
85
|
|
|
86
|
+
def authorize_resource(query = nil, policy_class: nil)
|
|
87
|
+
authorize resource, query, policy_class: policy_class
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def authorize_resource_class(query = nil, policy_class: nil)
|
|
91
|
+
authorize resource_class, query, policy_class: policy_class
|
|
92
|
+
end
|
|
93
|
+
|
|
71
94
|
def default_sorts
|
|
72
95
|
%w[name title id].find { |v| v.in?(resource_class.column_names) } || []
|
|
73
96
|
end
|
|
74
97
|
|
|
75
98
|
# Defines an I18n scope for flash messages
|
|
76
99
|
#
|
|
77
|
-
#
|
|
100
|
+
# Possible options to use instead of `:resources`:
|
|
101
|
+
# - `controller_name`
|
|
102
|
+
# - `"#{controller_module_name}/resources"`
|
|
103
|
+
# - `"#{controller_module_name}/#{controller_name}"`
|
|
104
|
+
# - any other manual scope
|
|
78
105
|
def i18n_scope
|
|
79
106
|
:resources
|
|
80
107
|
end
|
|
@@ -109,50 +136,28 @@ module AuxiliaryRails
|
|
|
109
136
|
resource_class.new(attributes)
|
|
110
137
|
end
|
|
111
138
|
|
|
112
|
-
def create_resource(attributes = {})
|
|
113
|
-
self.resource = build_resource(attributes)
|
|
114
|
-
|
|
115
|
-
authorize resource, :create?
|
|
116
|
-
|
|
117
|
-
resource.save
|
|
118
|
-
end
|
|
119
|
-
|
|
120
139
|
def find_resource
|
|
121
140
|
resource_class.find(id_param)
|
|
122
141
|
end
|
|
123
142
|
|
|
124
|
-
def update_resource(attributes = {})
|
|
125
|
-
resource.assign_attributes(attributes)
|
|
126
|
-
|
|
127
|
-
authorize resource, :update?
|
|
128
|
-
|
|
129
|
-
resource.save
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
def destroy_resource
|
|
133
|
-
authorize resource, :destroy?
|
|
134
|
-
|
|
135
|
-
resource.destroy
|
|
136
|
-
end
|
|
137
|
-
|
|
138
143
|
# helpers
|
|
139
144
|
|
|
140
145
|
def collection
|
|
141
|
-
instance_variable_get("@#{collection_name}") ||
|
|
146
|
+
instance_variable_get(:"@#{collection_name}") ||
|
|
142
147
|
(self.collection = collection_scope)
|
|
143
148
|
end
|
|
144
149
|
|
|
145
150
|
def collection=(object)
|
|
146
|
-
instance_variable_set("@#{collection_name}", object)
|
|
151
|
+
instance_variable_set(:"@#{collection_name}", object)
|
|
147
152
|
end
|
|
148
153
|
|
|
149
154
|
def resource
|
|
150
|
-
instance_variable_get("@#{resource_name}") ||
|
|
155
|
+
instance_variable_get(:"@#{resource_name}") ||
|
|
151
156
|
(self.resource = find_resource)
|
|
152
157
|
end
|
|
153
158
|
|
|
154
159
|
def resource=(object)
|
|
155
|
-
instance_variable_set("@#{resource_name}", object)
|
|
160
|
+
instance_variable_set(:"@#{resource_name}", object)
|
|
156
161
|
end
|
|
157
162
|
|
|
158
163
|
def resource_params
|
|
@@ -161,6 +166,14 @@ module AuxiliaryRails
|
|
|
161
166
|
.permit(policy(resource_class).permitted_attributes)
|
|
162
167
|
end
|
|
163
168
|
|
|
169
|
+
def form_resource
|
|
170
|
+
if controller_module_name.blank?
|
|
171
|
+
resource
|
|
172
|
+
else
|
|
173
|
+
[controller_module_name.to_sym, resource]
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
|
|
164
177
|
def collection_path
|
|
165
178
|
public_send(path_method_name(:collection))
|
|
166
179
|
end
|
|
@@ -176,44 +189,57 @@ module AuxiliaryRails
|
|
|
176
189
|
# redirects
|
|
177
190
|
|
|
178
191
|
def redirect_after_create
|
|
179
|
-
|
|
180
|
-
notice
|
|
192
|
+
if flash[:notice].blank?
|
|
193
|
+
flash[:notice] = t('create.notice',
|
|
181
194
|
resource_name: resource_class.model_name.human,
|
|
182
195
|
scope: i18n_scope)
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
redirect_to resource_path(resource)
|
|
183
199
|
end
|
|
184
200
|
|
|
185
201
|
def redirect_after_update
|
|
186
|
-
|
|
187
|
-
notice
|
|
202
|
+
if flash[:notice].blank?
|
|
203
|
+
flash[:notice] = t('update.notice',
|
|
188
204
|
resource_name: resource_class.model_name.human,
|
|
189
205
|
scope: i18n_scope)
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
redirect_to resource_path(resource)
|
|
190
209
|
end
|
|
191
210
|
|
|
192
211
|
def redirect_after_destroy
|
|
193
|
-
|
|
194
|
-
notice
|
|
212
|
+
if flash[:notice].blank?
|
|
213
|
+
flash[:notice] = t('destroy.notice',
|
|
195
214
|
resource_name: resource_class.model_name.human,
|
|
196
215
|
scope: i18n_scope)
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
redirect_to collection_path
|
|
197
219
|
end
|
|
198
220
|
|
|
199
221
|
# system
|
|
200
222
|
|
|
201
|
-
def
|
|
223
|
+
def controller_module_name
|
|
202
224
|
if Rails.version < '6'
|
|
203
|
-
return self.class.parent_name
|
|
225
|
+
return self.class.parent_name&.underscore
|
|
204
226
|
end
|
|
205
227
|
|
|
206
|
-
self.class.module_parent_name
|
|
228
|
+
self.class.module_parent_name&.underscore
|
|
207
229
|
end
|
|
208
230
|
|
|
209
231
|
def path_method_name(type, action = nil)
|
|
210
232
|
[
|
|
211
233
|
action,
|
|
212
|
-
|
|
234
|
+
controller_module_name,
|
|
213
235
|
(type.to_sym == :resource ? resource_name : controller_name),
|
|
214
236
|
'path'
|
|
215
237
|
].compact.join('_')
|
|
216
238
|
end
|
|
239
|
+
|
|
240
|
+
def set_lookup_context_prefixes
|
|
241
|
+
lookup_context.prefixes << 'resourceable'
|
|
242
|
+
end
|
|
217
243
|
end
|
|
218
244
|
end
|
|
219
245
|
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
module AuxiliaryRails
|
|
2
|
+
module ViewHelpers
|
|
3
|
+
module HumanNameHelper
|
|
4
|
+
# Human-readable name for a model or a model's attribute
|
|
5
|
+
#
|
|
6
|
+
# @param model [Class, Object] The model class or an instance of the model
|
|
7
|
+
# @param attribute [Symbol, String, nil] The attribute name (optional)
|
|
8
|
+
# @return [String] The human-readable name
|
|
9
|
+
def human_name(model, attribute = nil, count: 1)
|
|
10
|
+
if attribute.nil?
|
|
11
|
+
model.model_name.human(count: count)
|
|
12
|
+
else
|
|
13
|
+
model = model.class unless model.is_a?(Class)
|
|
14
|
+
if count > 1
|
|
15
|
+
model.human_attribute_name(attribute).pluralize(count)
|
|
16
|
+
else
|
|
17
|
+
model.human_attribute_name(attribute)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Human-readable name for a model or a model's attribute plural form
|
|
23
|
+
#
|
|
24
|
+
# @param model [Class, Object] The model class or an instance of the model
|
|
25
|
+
# @param attribute [Symbol, String, nil] The attribute name (optional)
|
|
26
|
+
# @return [String] The human-readable name in plural form
|
|
27
|
+
def human_name_plural(model, attribute = nil, count: 2)
|
|
28
|
+
human_name(model, attribute, count: count)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
require 'rails/railtie'
|
|
2
|
+
require 'auxiliary_rails/view_helpers/human_name_helper'
|
|
3
|
+
|
|
4
|
+
module AuxiliaryRails
|
|
5
|
+
class Railtie < Rails::Railtie
|
|
6
|
+
initializer 'auxiliary_rails.view_helpers' do
|
|
7
|
+
ActionView::Base.include AuxiliaryRails::ViewHelpers::HumanNameHelper
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
metadata
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: auxiliary_rails_resourceable
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Dmitry Babenko
|
|
8
8
|
- ErgoServ
|
|
9
|
-
autorequire:
|
|
9
|
+
autorequire:
|
|
10
10
|
bindir: exe
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date:
|
|
12
|
+
date: 2024-08-17 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: pagy
|
|
@@ -67,7 +67,7 @@ dependencies:
|
|
|
67
67
|
- - ">="
|
|
68
68
|
- !ruby/object:Gem::Version
|
|
69
69
|
version: '0'
|
|
70
|
-
description:
|
|
70
|
+
description:
|
|
71
71
|
email:
|
|
72
72
|
- dmitry@ergoserv.com
|
|
73
73
|
- hello@ergoserv.com
|
|
@@ -85,8 +85,11 @@ files:
|
|
|
85
85
|
- README.md
|
|
86
86
|
- Rakefile
|
|
87
87
|
- auxiliary_rails_resourceable.gemspec
|
|
88
|
+
- config/locales/resources.en.yml
|
|
88
89
|
- lib/auxiliary_rails/concerns/resourceable.rb
|
|
90
|
+
- lib/auxiliary_rails/view_helpers/human_name_helper.rb
|
|
89
91
|
- lib/auxiliary_rails_resourceable.rb
|
|
92
|
+
- lib/auxiliary_rails_resourceable/railtie.rb
|
|
90
93
|
- lib/auxiliary_rails_resourceable/version.rb
|
|
91
94
|
- sig/auxiliary_rails_resourceable.rbs
|
|
92
95
|
homepage: https://github.com/ergoserv/auxiliary_rails_resourceable
|
|
@@ -97,7 +100,7 @@ metadata:
|
|
|
97
100
|
source_code_uri: https://github.com/ergoserv/auxiliary_rails_resourceable
|
|
98
101
|
changelog_uri: https://github.com/ergoserv/auxiliary_rails_resourceable
|
|
99
102
|
rubygems_mfa_required: 'true'
|
|
100
|
-
post_install_message:
|
|
103
|
+
post_install_message:
|
|
101
104
|
rdoc_options: []
|
|
102
105
|
require_paths:
|
|
103
106
|
- lib
|
|
@@ -112,8 +115,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
112
115
|
- !ruby/object:Gem::Version
|
|
113
116
|
version: '0'
|
|
114
117
|
requirements: []
|
|
115
|
-
rubygems_version: 3.
|
|
116
|
-
signing_key:
|
|
118
|
+
rubygems_version: 3.5.17
|
|
119
|
+
signing_key:
|
|
117
120
|
specification_version: 4
|
|
118
121
|
summary: AuxiliaryRails - Resourceable Controller
|
|
119
122
|
test_files: []
|