undercarriage 0.1.0 → 0.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 +1 -1
- data/lib/undercarriage.rb +13 -0
- data/lib/undercarriage/controllers/restful/actions/base_concern.rb +42 -0
- data/lib/undercarriage/controllers/restful/actions/create_concern.rb +106 -0
- data/lib/undercarriage/controllers/restful/actions/destroy_concern.rb +94 -0
- data/lib/undercarriage/controllers/restful/actions/edit_concern.rb +95 -0
- data/lib/undercarriage/controllers/restful/actions/index_concern.rb +87 -0
- data/lib/undercarriage/controllers/restful/actions/new_concern.rb +97 -0
- data/lib/undercarriage/controllers/restful/actions/show_concern.rb +93 -0
- data/lib/undercarriage/controllers/restful/actions/update_concern.rb +104 -0
- data/lib/undercarriage/controllers/restful/location_after_concern.rb +47 -0
- data/lib/undercarriage/controllers/restful/namespace_concern.rb +31 -0
- data/lib/undercarriage/controllers/restful/permitted_attributes_concern.rb +46 -0
- data/lib/undercarriage/controllers/restful/utility_concern.rb +37 -0
- data/lib/undercarriage/controllers/restful_concern.rb +32 -0
- data/lib/undercarriage/version.rb +1 -1
- metadata +14 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fccd3ba65ccfd908ef199e41930f736cd2f9022ca3113ee90186a96230a7cf8c
|
4
|
+
data.tar.gz: a92a0518846b2d4996ba806f55e1a4f00df34ad6dcdd0501a3e4cd7292915bf5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 45773941e2a9fd2775e2e75c736083072e2193f90b49e92711638e2776d9d2058f18649050ce97ad663e2eb0d7b82d929d0db23de859fd7ff96912c886f228fd
|
7
|
+
data.tar.gz: 3d5cf0b390504b5cf2d342d8e92ecce6738798466579af5562f145d0c11866a924950d955e506e699c4af4d8c25c30ca8d4d186391482ce39dd23f469b3bd5a6
|
data/README.md
CHANGED
data/lib/undercarriage.rb
CHANGED
@@ -3,6 +3,19 @@
|
|
3
3
|
require 'undercarriage/controllers/action_concern'
|
4
4
|
require 'undercarriage/controllers/kaminari_concern'
|
5
5
|
require 'undercarriage/controllers/locale_concern'
|
6
|
+
require 'undercarriage/controllers/restful_concern'
|
7
|
+
require 'undercarriage/controllers/restful/actions/base_concern'
|
8
|
+
require 'undercarriage/controllers/restful/actions/index_concern'
|
9
|
+
require 'undercarriage/controllers/restful/actions/show_concern'
|
10
|
+
require 'undercarriage/controllers/restful/actions/new_concern'
|
11
|
+
require 'undercarriage/controllers/restful/actions/create_concern'
|
12
|
+
require 'undercarriage/controllers/restful/actions/edit_concern'
|
13
|
+
require 'undercarriage/controllers/restful/actions/update_concern'
|
14
|
+
require 'undercarriage/controllers/restful/actions/destroy_concern'
|
15
|
+
require 'undercarriage/controllers/restful/location_after_concern'
|
16
|
+
require 'undercarriage/controllers/restful/namespace_concern'
|
17
|
+
require 'undercarriage/controllers/restful/permitted_attributes_concern'
|
18
|
+
require 'undercarriage/controllers/restful/utility_concern'
|
6
19
|
|
7
20
|
require 'undercarriage/railtie'
|
8
21
|
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Undercarriage
|
4
|
+
module Controllers
|
5
|
+
module Restful
|
6
|
+
module Actions
|
7
|
+
##
|
8
|
+
# Base restful action
|
9
|
+
#
|
10
|
+
# Usage
|
11
|
+
# class ExamplesController < ApplicationController
|
12
|
+
# include Undercarriage::Controllers::RestfulConcern
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
module BaseConcern
|
16
|
+
extend ActiveSupport::Concern
|
17
|
+
|
18
|
+
protected
|
19
|
+
|
20
|
+
def resource_new_content
|
21
|
+
action_name == 'new' ? new_resource_content : create_resource_content
|
22
|
+
end
|
23
|
+
|
24
|
+
def resource_content
|
25
|
+
resource_id = params.fetch(:id)
|
26
|
+
resource_query = model_class.find(resource_id)
|
27
|
+
|
28
|
+
instance_variable_set("@#{instance_name}", resource_query)
|
29
|
+
end
|
30
|
+
|
31
|
+
def nested_resource_pre_build; end
|
32
|
+
|
33
|
+
def nested_resource_build; end
|
34
|
+
|
35
|
+
def after_create_action; end
|
36
|
+
|
37
|
+
def after_update_action; end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Undercarriage
|
4
|
+
module Controllers
|
5
|
+
module Restful
|
6
|
+
module Actions
|
7
|
+
##
|
8
|
+
# Create restful action
|
9
|
+
#
|
10
|
+
# Usage
|
11
|
+
# class ExamplesController < ApplicationController
|
12
|
+
# include Undercarriage::Controllers::RestfulConcern
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
module CreateConcern
|
16
|
+
extend ActiveSupport::Concern
|
17
|
+
|
18
|
+
included do
|
19
|
+
before_action :create_resource, only: %i[create]
|
20
|
+
end
|
21
|
+
|
22
|
+
##
|
23
|
+
# Create action
|
24
|
+
#
|
25
|
+
# Usage
|
26
|
+
# class ExamplesController < ApplicationController
|
27
|
+
# include Undercarriage::Controllers::RestfulConcern
|
28
|
+
#
|
29
|
+
# ##
|
30
|
+
# # This method is only needed if you want to override the action entirely. Otherwise, it is not needed.
|
31
|
+
# # Database resources can be accessed as `@create_resource` or `@example`
|
32
|
+
# #
|
33
|
+
# # def create
|
34
|
+
# # ...
|
35
|
+
# # end
|
36
|
+
# end
|
37
|
+
#
|
38
|
+
def create
|
39
|
+
nested_resource_pre_build
|
40
|
+
|
41
|
+
if @create_resource.save
|
42
|
+
after_create_action
|
43
|
+
|
44
|
+
respond_with(@create_resource) do |format|
|
45
|
+
format.html { redirect_to location_after_create }
|
46
|
+
end
|
47
|
+
else
|
48
|
+
nested_resource_build
|
49
|
+
|
50
|
+
respond_with(@create_resource) do |format|
|
51
|
+
format.html { render action: :new }
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
protected
|
57
|
+
|
58
|
+
##
|
59
|
+
# Create restful action
|
60
|
+
#
|
61
|
+
# Usage
|
62
|
+
# class ExamplesController < ApplicationController
|
63
|
+
# include Undercarriage::Controllers::RestfulConcern
|
64
|
+
#
|
65
|
+
# ##
|
66
|
+
# # This method is only needed if you want to override the query entirely. Otherwise, it is not needed.
|
67
|
+
# # Database resources can be accessed as `@example`
|
68
|
+
# #
|
69
|
+
# # def create_resource_content
|
70
|
+
# # ...
|
71
|
+
# # end
|
72
|
+
#
|
73
|
+
# ##
|
74
|
+
# # To add authorization through something like Pundit, the following could be used
|
75
|
+
# #
|
76
|
+
# # def create_resource_content
|
77
|
+
# # super
|
78
|
+
# #
|
79
|
+
# # authorize @example
|
80
|
+
# # end
|
81
|
+
#
|
82
|
+
# ##
|
83
|
+
# # The `resource_new_content` method can also be overwritten. This method is meant to share content with
|
84
|
+
# # the `new` action
|
85
|
+
# #
|
86
|
+
# # def resource_new_content
|
87
|
+
# # ...
|
88
|
+
# # end
|
89
|
+
# end
|
90
|
+
#
|
91
|
+
def create_resource_content
|
92
|
+
resource_query = model_class.new(create_resource_params)
|
93
|
+
|
94
|
+
instance_variable_set("@#{instance_name}", resource_query)
|
95
|
+
end
|
96
|
+
|
97
|
+
private
|
98
|
+
|
99
|
+
def create_resource
|
100
|
+
@create_resource ||= resource_new_content
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Undercarriage
|
4
|
+
module Controllers
|
5
|
+
module Restful
|
6
|
+
module Actions
|
7
|
+
##
|
8
|
+
# Destroy restful action
|
9
|
+
#
|
10
|
+
# Usage
|
11
|
+
# class ExamplesController < ApplicationController
|
12
|
+
# include Undercarriage::Controllers::RestfulConcern
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
module DestroyConcern
|
16
|
+
extend ActiveSupport::Concern
|
17
|
+
|
18
|
+
included do
|
19
|
+
before_action :destroy_resource, only: %i[destroy]
|
20
|
+
end
|
21
|
+
|
22
|
+
##
|
23
|
+
# Destroy action
|
24
|
+
#
|
25
|
+
# Usage
|
26
|
+
# class ExamplesController < ApplicationController
|
27
|
+
# include Undercarriage::Controllers::RestfulConcern
|
28
|
+
#
|
29
|
+
# ##
|
30
|
+
# # This method is only needed if you want to override the action entirely. Otherwise, it is not needed.
|
31
|
+
# # Database resources can be accessed as `@destroy_resource` or `@example`
|
32
|
+
# #
|
33
|
+
# # def destroy
|
34
|
+
# # ...
|
35
|
+
# # end
|
36
|
+
# end
|
37
|
+
#
|
38
|
+
def destroy
|
39
|
+
@destroy_resource.destroy
|
40
|
+
|
41
|
+
respond_with(@destroy_resource) do |format|
|
42
|
+
format.html { redirect_to location_after_destroy }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
protected
|
47
|
+
|
48
|
+
##
|
49
|
+
# Destroy restful action
|
50
|
+
#
|
51
|
+
# Usage
|
52
|
+
# class ExamplesController < ApplicationController
|
53
|
+
# include Undercarriage::Controllers::RestfulConcern
|
54
|
+
#
|
55
|
+
# ##
|
56
|
+
# # This method is only needed if you want to override the query entirely. Otherwise, it is not needed.
|
57
|
+
# # Database resources can be accessed as `@example`
|
58
|
+
# #
|
59
|
+
# # def destroy_resource_content
|
60
|
+
# # ...
|
61
|
+
# # end
|
62
|
+
#
|
63
|
+
# ##
|
64
|
+
# # To add authorization through something like Pundit, the following could be used
|
65
|
+
# #
|
66
|
+
# # def destroy_resource_content
|
67
|
+
# # super
|
68
|
+
# #
|
69
|
+
# # authorize @example
|
70
|
+
# # end
|
71
|
+
#
|
72
|
+
# ##
|
73
|
+
# # The `resource_content` method can also be overwritten. Be careful with this because the `show`,
|
74
|
+
# # `edit` and `update` actions will also use this method
|
75
|
+
# #
|
76
|
+
# # def resource_content
|
77
|
+
# # ...
|
78
|
+
# # end
|
79
|
+
# end
|
80
|
+
#
|
81
|
+
def destroy_resource_content
|
82
|
+
resource_content
|
83
|
+
end
|
84
|
+
|
85
|
+
private
|
86
|
+
|
87
|
+
def destroy_resource
|
88
|
+
@destroy_resource ||= destroy_resource_content
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Undercarriage
|
4
|
+
module Controllers
|
5
|
+
module Restful
|
6
|
+
module Actions
|
7
|
+
##
|
8
|
+
# Edit restful action
|
9
|
+
#
|
10
|
+
# Usage
|
11
|
+
# class ExamplesController < ApplicationController
|
12
|
+
# include Undercarriage::Controllers::RestfulConcern
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
module EditConcern
|
16
|
+
extend ActiveSupport::Concern
|
17
|
+
|
18
|
+
included do
|
19
|
+
before_action :edit_resource, only: %i[edit]
|
20
|
+
end
|
21
|
+
|
22
|
+
##
|
23
|
+
# Edit action
|
24
|
+
#
|
25
|
+
# Usage
|
26
|
+
# class ExamplesController < ApplicationController
|
27
|
+
# include Undercarriage::Controllers::RestfulConcern
|
28
|
+
#
|
29
|
+
# ##
|
30
|
+
# # This method is only needed if you want to override the action entirely. Otherwise, it is not needed.
|
31
|
+
# # Database resources can be accessed as `@edit_resource` or `@example`
|
32
|
+
# #
|
33
|
+
# # def edit
|
34
|
+
# # ...
|
35
|
+
# # end
|
36
|
+
# end
|
37
|
+
#
|
38
|
+
def edit
|
39
|
+
nested_resource_pre_build
|
40
|
+
nested_resource_build
|
41
|
+
|
42
|
+
respond_with(@edit_resource) do |format|
|
43
|
+
format.html { render layout: !request.xhr? }
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
protected
|
48
|
+
|
49
|
+
##
|
50
|
+
# Edit restful action
|
51
|
+
#
|
52
|
+
# Usage
|
53
|
+
# class ExamplesController < ApplicationController
|
54
|
+
# include Undercarriage::Controllers::RestfulConcern
|
55
|
+
#
|
56
|
+
# ##
|
57
|
+
# # This method is only needed if you want to override the query entirely. Otherwise, it is not needed.
|
58
|
+
# # Database resources can be accessed as `@example`
|
59
|
+
# #
|
60
|
+
# # def edit_resource_content
|
61
|
+
# # ...
|
62
|
+
# # end
|
63
|
+
#
|
64
|
+
# ##
|
65
|
+
# # To add authorization through something like Pundit, the following could be used
|
66
|
+
# #
|
67
|
+
# # def edit_resource_content
|
68
|
+
# # super
|
69
|
+
# #
|
70
|
+
# # authorize @example
|
71
|
+
# # end
|
72
|
+
#
|
73
|
+
# ##
|
74
|
+
# # The `resource_content` method can also be overwritten. Be careful with this because the `show`,
|
75
|
+
# # `update` and `destroy` actions will also use this method
|
76
|
+
# #
|
77
|
+
# # def resource_content
|
78
|
+
# # ...
|
79
|
+
# # end
|
80
|
+
# end
|
81
|
+
#
|
82
|
+
def edit_resource_content
|
83
|
+
resource_content
|
84
|
+
end
|
85
|
+
|
86
|
+
private
|
87
|
+
|
88
|
+
def edit_resource
|
89
|
+
@edit_resource ||= edit_resource_content
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Undercarriage
|
4
|
+
module Controllers
|
5
|
+
module Restful
|
6
|
+
module Actions
|
7
|
+
##
|
8
|
+
# Index restful action
|
9
|
+
#
|
10
|
+
# Usage
|
11
|
+
# class ExamplesController < ApplicationController
|
12
|
+
# include Undercarriage::Controllers::RestfulConcern
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
module IndexConcern
|
16
|
+
extend ActiveSupport::Concern
|
17
|
+
|
18
|
+
included do
|
19
|
+
before_action :index_resources, only: %i[index]
|
20
|
+
end
|
21
|
+
|
22
|
+
##
|
23
|
+
# Index action
|
24
|
+
#
|
25
|
+
# Usage
|
26
|
+
# class ExamplesController < ApplicationController
|
27
|
+
# include Undercarriage::Controllers::RestfulConcern
|
28
|
+
#
|
29
|
+
# ##
|
30
|
+
# # This method is only needed if you want to override the action entirely. Otherwise, it is not needed.
|
31
|
+
# # Database resources can be accessed as `@index_resources` or `@examples`
|
32
|
+
# #
|
33
|
+
# # def index
|
34
|
+
# # ...
|
35
|
+
# # end
|
36
|
+
# end
|
37
|
+
#
|
38
|
+
def index
|
39
|
+
respond_with(@index_resources) do |format|
|
40
|
+
format.html { render layout: !request.xhr? }
|
41
|
+
format.json { render layout: false }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
protected
|
46
|
+
|
47
|
+
##
|
48
|
+
# Index restful action
|
49
|
+
#
|
50
|
+
# Usage
|
51
|
+
# class ExamplesController < ApplicationController
|
52
|
+
# include Undercarriage::Controllers::RestfulConcern
|
53
|
+
#
|
54
|
+
# ##
|
55
|
+
# # This method is only needed if you want to override the query entirely. Otherwise, it is not needed.
|
56
|
+
# # Database resources can be accessed as `@examples`
|
57
|
+
# #
|
58
|
+
# # def resources_content
|
59
|
+
# # ...
|
60
|
+
# # end
|
61
|
+
#
|
62
|
+
# ##
|
63
|
+
# # To add authorization through something like Pundit, the following could be used
|
64
|
+
# #
|
65
|
+
# # def resources_content
|
66
|
+
# # super
|
67
|
+
# #
|
68
|
+
# # authorize @examples
|
69
|
+
# # end
|
70
|
+
# end
|
71
|
+
#
|
72
|
+
def resources_content
|
73
|
+
resources_query = model_class.all
|
74
|
+
|
75
|
+
instance_variable_set("@#{instances_name}", resources_query)
|
76
|
+
end
|
77
|
+
|
78
|
+
private
|
79
|
+
|
80
|
+
def index_resources
|
81
|
+
@index_resources ||= resources_content
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Undercarriage
|
4
|
+
module Controllers
|
5
|
+
module Restful
|
6
|
+
module Actions
|
7
|
+
##
|
8
|
+
# New restful action
|
9
|
+
#
|
10
|
+
# Usage
|
11
|
+
# class ExamplesController < ApplicationController
|
12
|
+
# include Undercarriage::Controllers::RestfulConcern
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
module NewConcern
|
16
|
+
extend ActiveSupport::Concern
|
17
|
+
|
18
|
+
included do
|
19
|
+
before_action :new_resource, only: %i[new]
|
20
|
+
end
|
21
|
+
|
22
|
+
##
|
23
|
+
# New action
|
24
|
+
#
|
25
|
+
# Usage
|
26
|
+
# class ExamplesController < ApplicationController
|
27
|
+
# include Undercarriage::Controllers::RestfulConcern
|
28
|
+
#
|
29
|
+
# ##
|
30
|
+
# # This method is only needed if you want to override the action entirely. Otherwise, it is not needed.
|
31
|
+
# # Database resources can be accessed as `@new_resource` or `@example`
|
32
|
+
# #
|
33
|
+
# # def new
|
34
|
+
# # ...
|
35
|
+
# # end
|
36
|
+
# end
|
37
|
+
#
|
38
|
+
def new
|
39
|
+
nested_resource_pre_build
|
40
|
+
nested_resource_build
|
41
|
+
|
42
|
+
respond_with(@new_resource) do |format|
|
43
|
+
format.html { render layout: !request.xhr? }
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
protected
|
48
|
+
|
49
|
+
##
|
50
|
+
# New restful action
|
51
|
+
#
|
52
|
+
# Usage
|
53
|
+
# class ExamplesController < ApplicationController
|
54
|
+
# include Undercarriage::Controllers::RestfulConcern
|
55
|
+
#
|
56
|
+
# ##
|
57
|
+
# # This method is only needed if you want to override the query entirely. Otherwise, it is not needed.
|
58
|
+
# # Database resources can be accessed as `@example`
|
59
|
+
# #
|
60
|
+
# # def new_resource_content
|
61
|
+
# # ...
|
62
|
+
# # end
|
63
|
+
#
|
64
|
+
# ##
|
65
|
+
# # To add authorization through something like Pundit, the following could be used
|
66
|
+
# #
|
67
|
+
# # def new_resource_content
|
68
|
+
# # super
|
69
|
+
# #
|
70
|
+
# # authorize @example
|
71
|
+
# # end
|
72
|
+
#
|
73
|
+
# ##
|
74
|
+
# # The `resource_new_content` method can also be overwritten. This method is meant to share content with
|
75
|
+
# # the `create` action
|
76
|
+
# #
|
77
|
+
# # def resource_new_content
|
78
|
+
# # ...
|
79
|
+
# # end
|
80
|
+
# end
|
81
|
+
#
|
82
|
+
def new_resource_content
|
83
|
+
resource_query = model_class.new
|
84
|
+
|
85
|
+
instance_variable_set("@#{instance_name}", resource_query)
|
86
|
+
end
|
87
|
+
|
88
|
+
private
|
89
|
+
|
90
|
+
def new_resource
|
91
|
+
@new_resource ||= resource_new_content
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Undercarriage
|
4
|
+
module Controllers
|
5
|
+
module Restful
|
6
|
+
module Actions
|
7
|
+
##
|
8
|
+
# Show restful action
|
9
|
+
#
|
10
|
+
# Usage
|
11
|
+
# class ExamplesController < ApplicationController
|
12
|
+
# include Undercarriage::Controllers::RestfulConcern
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
module ShowConcern
|
16
|
+
extend ActiveSupport::Concern
|
17
|
+
|
18
|
+
included do
|
19
|
+
before_action :show_resource, only: %i[show]
|
20
|
+
end
|
21
|
+
|
22
|
+
##
|
23
|
+
# Show action
|
24
|
+
#
|
25
|
+
# Usage
|
26
|
+
# class ExamplesController < ApplicationController
|
27
|
+
# include Undercarriage::Controllers::RestfulConcern
|
28
|
+
#
|
29
|
+
# ##
|
30
|
+
# # This method is only needed if you want to override the action entirely. Otherwise, it is not needed.
|
31
|
+
# # Database resources can be accessed as `@show_resource` or `@example`
|
32
|
+
# #
|
33
|
+
# # def show
|
34
|
+
# # ...
|
35
|
+
# # end
|
36
|
+
# end
|
37
|
+
#
|
38
|
+
def show
|
39
|
+
respond_with(@show_resource) do |format|
|
40
|
+
format.html { render layout: !request.xhr? }
|
41
|
+
format.json { render layout: false }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
protected
|
46
|
+
|
47
|
+
##
|
48
|
+
# Show restful action
|
49
|
+
#
|
50
|
+
# Usage
|
51
|
+
# class ExamplesController < ApplicationController
|
52
|
+
# include Undercarriage::Controllers::RestfulConcern
|
53
|
+
#
|
54
|
+
# ##
|
55
|
+
# # This method is only needed if you want to override the query entirely. Otherwise, it is not needed.
|
56
|
+
# # Database resources can be accessed as `@example`
|
57
|
+
# #
|
58
|
+
# # def show_resource_content
|
59
|
+
# # ...
|
60
|
+
# # end
|
61
|
+
#
|
62
|
+
# ##
|
63
|
+
# # To add authorization through something like Pundit, the following could be used
|
64
|
+
# #
|
65
|
+
# # def show_resource_content
|
66
|
+
# # super
|
67
|
+
# #
|
68
|
+
# # authorize @example
|
69
|
+
# # end
|
70
|
+
#
|
71
|
+
# ##
|
72
|
+
# # The `resource_content` method can also be overwritten. Be careful with this because the `edit`,
|
73
|
+
# # `update`, and `destroy` actions will also use this method
|
74
|
+
# #
|
75
|
+
# # def resource_content
|
76
|
+
# # ...
|
77
|
+
# # end
|
78
|
+
# end
|
79
|
+
#
|
80
|
+
def show_resource_content
|
81
|
+
resource_content
|
82
|
+
end
|
83
|
+
|
84
|
+
private
|
85
|
+
|
86
|
+
def show_resource
|
87
|
+
@show_resource ||= show_resource_content
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Undercarriage
|
4
|
+
module Controllers
|
5
|
+
module Restful
|
6
|
+
module Actions
|
7
|
+
##
|
8
|
+
# Update restful action
|
9
|
+
#
|
10
|
+
# Usage
|
11
|
+
# class ExamplesController < ApplicationController
|
12
|
+
# include Undercarriage::Controllers::RestfulConcern
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
module UpdateConcern
|
16
|
+
extend ActiveSupport::Concern
|
17
|
+
|
18
|
+
included do
|
19
|
+
before_action :update_resource, only: %i[update]
|
20
|
+
end
|
21
|
+
|
22
|
+
##
|
23
|
+
# Update action
|
24
|
+
#
|
25
|
+
# Usage
|
26
|
+
# class ExamplesController < ApplicationController
|
27
|
+
# include Undercarriage::Controllers::RestfulConcern
|
28
|
+
#
|
29
|
+
# ##
|
30
|
+
# # This method is only needed if you want to override the action entirely. Otherwise, it is not needed.
|
31
|
+
# # Database resources can be accessed as `@update_resource` or `@example`
|
32
|
+
# #
|
33
|
+
# # def update
|
34
|
+
# # ...
|
35
|
+
# # end
|
36
|
+
# end
|
37
|
+
#
|
38
|
+
def update
|
39
|
+
nested_resource_pre_build
|
40
|
+
|
41
|
+
if @update_resource.update(update_resource_params)
|
42
|
+
after_update_action
|
43
|
+
|
44
|
+
respond_with(@update_resource) do |format|
|
45
|
+
format.html { redirect_to location_after_update }
|
46
|
+
end
|
47
|
+
else
|
48
|
+
nested_resource_build
|
49
|
+
|
50
|
+
respond_with(@update_resource) do |format|
|
51
|
+
format.html { render action: :edit }
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
protected
|
57
|
+
|
58
|
+
##
|
59
|
+
# Update restful action
|
60
|
+
#
|
61
|
+
# Usage
|
62
|
+
# class ExamplesController < ApplicationController
|
63
|
+
# include Undercarriage::Controllers::RestfulConcern
|
64
|
+
#
|
65
|
+
# ##
|
66
|
+
# # This method is only needed if you want to override the query entirely. Otherwise, it is not needed.
|
67
|
+
# # Database resources can be accessed as `@example`
|
68
|
+
# #
|
69
|
+
# # def update_resource_content
|
70
|
+
# # ...
|
71
|
+
# # end
|
72
|
+
#
|
73
|
+
# ##
|
74
|
+
# # To add authorization through something like Pundit, the following could be used
|
75
|
+
# #
|
76
|
+
# # def update_resource_content
|
77
|
+
# # super
|
78
|
+
# #
|
79
|
+
# # authorize @example
|
80
|
+
# # end
|
81
|
+
#
|
82
|
+
# ##
|
83
|
+
# # The `resource_content` method can also be overwritten. Be careful with this because the `show`,
|
84
|
+
# # `edit` and `destroy` actions will also use this method
|
85
|
+
# #
|
86
|
+
# # def resource_content
|
87
|
+
# # ...
|
88
|
+
# # end
|
89
|
+
# end
|
90
|
+
#
|
91
|
+
def update_resource_content
|
92
|
+
resource_content
|
93
|
+
end
|
94
|
+
|
95
|
+
private
|
96
|
+
|
97
|
+
def update_resource
|
98
|
+
@update_resource ||= update_resource_content
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Undercarriage
|
4
|
+
module Controllers
|
5
|
+
module Restful
|
6
|
+
module LocationAfterConcern
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
protected
|
10
|
+
|
11
|
+
def location_after_create
|
12
|
+
resource_id = @create_resource
|
13
|
+
|
14
|
+
resource_path(resource_id)
|
15
|
+
end
|
16
|
+
|
17
|
+
def location_after_update
|
18
|
+
resource_id = @update_resource
|
19
|
+
|
20
|
+
resource_path(resource_id)
|
21
|
+
end
|
22
|
+
|
23
|
+
def location_after_destroy
|
24
|
+
location_after_save
|
25
|
+
end
|
26
|
+
|
27
|
+
def location_after_save
|
28
|
+
resources_path
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def resource_path(resource, options = {})
|
34
|
+
location_path = [resource_namespace, controller_name_singular].compact
|
35
|
+
|
36
|
+
send("#{location_path.join('_')}_path", resource, options)
|
37
|
+
end
|
38
|
+
|
39
|
+
def resources_path(options = {})
|
40
|
+
location_path = [resource_namespace, controller_name].compact
|
41
|
+
|
42
|
+
polymorphic_path(location_path, options)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Undercarriage
|
4
|
+
module Controllers
|
5
|
+
module Restful
|
6
|
+
module NamespaceConcern
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
protected
|
10
|
+
|
11
|
+
##
|
12
|
+
# Resource namespace
|
13
|
+
#
|
14
|
+
# Best guess for namespace. Take `controller_path` and if there is more than one segment, assume the first is
|
15
|
+
# the namespace. When there is one segment, the namespace is `nil`
|
16
|
+
#
|
17
|
+
# Example
|
18
|
+
# # Override method that builds namespace
|
19
|
+
# def resource_namespace
|
20
|
+
# :admin
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
def resource_namespace
|
24
|
+
segments = controller_path.split('/')
|
25
|
+
|
26
|
+
segments.length > 1 ? segments.first : nil
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Undercarriage
|
4
|
+
module Controllers
|
5
|
+
module Restful
|
6
|
+
module PermittedAttributesConcern
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
protected
|
10
|
+
|
11
|
+
def permitted_create_attributes
|
12
|
+
permitted_attributes_fallback
|
13
|
+
end
|
14
|
+
|
15
|
+
def permitted_update_attributes
|
16
|
+
permitted_attributes_fallback
|
17
|
+
end
|
18
|
+
|
19
|
+
def resource_new_params
|
20
|
+
action_name == 'new' ? nil : create_resource_params
|
21
|
+
end
|
22
|
+
|
23
|
+
def create_resource_params
|
24
|
+
permitted = permitted_create_attributes
|
25
|
+
|
26
|
+
params.require(resource_scope).permit(permitted)
|
27
|
+
end
|
28
|
+
|
29
|
+
def update_resource_params
|
30
|
+
permitted = permitted_update_attributes
|
31
|
+
|
32
|
+
params.require(resource_scope).permit(permitted)
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def permitted_attributes_fallback
|
38
|
+
with_method = self.class.instance_methods(false)
|
39
|
+
.include?(:permitted_attributes)
|
40
|
+
|
41
|
+
with_method ? permitted_attributes : []
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Undercarriage
|
4
|
+
module Controllers
|
5
|
+
module Restful
|
6
|
+
module UtilityConcern
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
protected
|
10
|
+
|
11
|
+
def controller_name_singular
|
12
|
+
controller_name.to_s.singularize
|
13
|
+
end
|
14
|
+
|
15
|
+
def model_name
|
16
|
+
controller_name_singular
|
17
|
+
end
|
18
|
+
|
19
|
+
def model_class
|
20
|
+
model_name.classify.constantize
|
21
|
+
end
|
22
|
+
|
23
|
+
def instances_name
|
24
|
+
controller_name.to_s
|
25
|
+
end
|
26
|
+
|
27
|
+
def instance_name
|
28
|
+
model_name
|
29
|
+
end
|
30
|
+
|
31
|
+
def resource_scope
|
32
|
+
model_name.to_sym
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Undercarriage
|
4
|
+
module Controllers
|
5
|
+
##
|
6
|
+
# Restful actions
|
7
|
+
#
|
8
|
+
# Usage
|
9
|
+
# class ExamplesController < ApplicationController
|
10
|
+
# include Undercarriage::Controllers::RestfulConcern
|
11
|
+
# end
|
12
|
+
#
|
13
|
+
module RestfulConcern
|
14
|
+
extend ActiveSupport::Concern
|
15
|
+
|
16
|
+
included do
|
17
|
+
include Undercarriage::Controllers::Restful::LocationAfterConcern
|
18
|
+
include Undercarriage::Controllers::Restful::NamespaceConcern
|
19
|
+
include Undercarriage::Controllers::Restful::PermittedAttributesConcern
|
20
|
+
include Undercarriage::Controllers::Restful::UtilityConcern
|
21
|
+
include Undercarriage::Controllers::Restful::Actions::BaseConcern
|
22
|
+
include Undercarriage::Controllers::Restful::Actions::IndexConcern
|
23
|
+
include Undercarriage::Controllers::Restful::Actions::ShowConcern
|
24
|
+
include Undercarriage::Controllers::Restful::Actions::NewConcern
|
25
|
+
include Undercarriage::Controllers::Restful::Actions::CreateConcern
|
26
|
+
include Undercarriage::Controllers::Restful::Actions::EditConcern
|
27
|
+
include Undercarriage::Controllers::Restful::Actions::UpdateConcern
|
28
|
+
include Undercarriage::Controllers::Restful::Actions::DestroyConcern
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: undercarriage
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Freerksen
|
@@ -40,6 +40,19 @@ files:
|
|
40
40
|
- lib/undercarriage/controllers/action_concern.rb
|
41
41
|
- lib/undercarriage/controllers/kaminari_concern.rb
|
42
42
|
- lib/undercarriage/controllers/locale_concern.rb
|
43
|
+
- lib/undercarriage/controllers/restful/actions/base_concern.rb
|
44
|
+
- lib/undercarriage/controllers/restful/actions/create_concern.rb
|
45
|
+
- lib/undercarriage/controllers/restful/actions/destroy_concern.rb
|
46
|
+
- lib/undercarriage/controllers/restful/actions/edit_concern.rb
|
47
|
+
- lib/undercarriage/controllers/restful/actions/index_concern.rb
|
48
|
+
- lib/undercarriage/controllers/restful/actions/new_concern.rb
|
49
|
+
- lib/undercarriage/controllers/restful/actions/show_concern.rb
|
50
|
+
- lib/undercarriage/controllers/restful/actions/update_concern.rb
|
51
|
+
- lib/undercarriage/controllers/restful/location_after_concern.rb
|
52
|
+
- lib/undercarriage/controllers/restful/namespace_concern.rb
|
53
|
+
- lib/undercarriage/controllers/restful/permitted_attributes_concern.rb
|
54
|
+
- lib/undercarriage/controllers/restful/utility_concern.rb
|
55
|
+
- lib/undercarriage/controllers/restful_concern.rb
|
43
56
|
- lib/undercarriage/railtie.rb
|
44
57
|
- lib/undercarriage/version.rb
|
45
58
|
homepage: https://github.com/dfreerksen/undercarriage
|