cm-admin 0.6.0 → 0.6.3
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/app/helpers/cm_admin/application_helper.rb +6 -0
- data/app/views/cm_admin/main/_table.html.slim +2 -2
- data/app/views/cm_admin/main/_tabs.html.slim +1 -1
- data/app/views/cm_admin/main/_top_navbar.html.slim +6 -12
- data/config/routes.rb +1 -1
- data/lib/cm_admin/model.rb +1 -19
- data/lib/cm_admin/models/action.rb +2 -4
- data/lib/cm_admin/models/controller_method.rb +4 -2
- data/lib/cm_admin/models/dsl_method.rb +10 -13
- data/lib/cm_admin/version.rb +1 -1
- data/lib/cm_admin/view_helpers/page_info_helper.rb +25 -0
- data/lib/generators/cm_admin/install_generator.rb +3 -2
- data/lib/generators/cm_admin/policy_generator.rb +13 -0
- data/{app/policies → lib/generators/cm_admin/templates}/application_policy.rb +2 -2
- data/lib/generators/cm_admin/templates/policy.rb +8 -0
- data/tmp/cache/webpacker/last-compilation-digest-development +1 -1
- data/yarn.lock +3 -3
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dcd2e766f902e8045d4eba1ae60067d6636477625f6a51a7ce896c0e446ad8bc
|
4
|
+
data.tar.gz: d1ef041f20245116d4dafc04629b75768245a77b0f042e038675516e60692206
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1e152f94b559e7f12d9d0d6cb82688d293c6a799fe0ade4b503c0dc2e8edc0337864741b7a7ae50e8ddcd7e175cc1813125f0409b5f62880fac3c386cae30638
|
7
|
+
data.tar.gz: d7b610b2ff1f329a09d3a31564f7f0d35bd5799803bcbdd31f15faad311803e516b6b828037524161993d139fabed9b08ef508cb2214a7dae6f2b74cb834dd32
|
@@ -7,5 +7,11 @@ module CmAdmin
|
|
7
7
|
def current_webpacker_instance
|
8
8
|
CmAdmin.webpacker
|
9
9
|
end
|
10
|
+
|
11
|
+
# Allow if policy is not defined.
|
12
|
+
def has_valid_policy(model_name, action_name)
|
13
|
+
return true unless policy([:cm_admin, model_name.classify.constantize]).methods.include?(:"#{action_name}?")
|
14
|
+
policy([:cm_admin, model_name.classify.constantize]).send(:"#{action_name}?")
|
15
|
+
end
|
10
16
|
end
|
11
17
|
end
|
@@ -47,9 +47,9 @@
|
|
47
47
|
= link_to "#{page_url('edit', ar_object)}" do
|
48
48
|
.popup-option Edit
|
49
49
|
- custom_actions.each do |custom_action|
|
50
|
-
- if custom_action.name.present? &&
|
50
|
+
- if custom_action.name.present? && has_valid_policy(@model.name, custom_action.name)
|
51
51
|
- if custom_action.display_if.call(ar_object)
|
52
|
-
= link_to custom_action.path.gsub(':id', ar_object.id.to_s), method: custom_action.verb do
|
52
|
+
= link_to cm_admin.send("#{@model.name.downcase}_index_path") + '/' + custom_action.path.gsub(':id', ar_object.id.to_s), method: custom_action.verb do
|
53
53
|
.popup-option = custom_action.name.titleize
|
54
54
|
|
55
55
|
.cm-pagination
|
@@ -1,6 +1,6 @@
|
|
1
1
|
ul.nav.nav-pills
|
2
2
|
- @model.available_tabs.each do |nav_item|
|
3
|
-
- if nav_item.custom_action.present? && policy([:cm_admin, @model.name.classify.constantize]).send(:"#{nav_item.custom_action}?")
|
3
|
+
- if nav_item.custom_action.empty? || (nav_item.custom_action.present? && policy([:cm_admin, @model.name.classify.constantize]).send(:"#{nav_item.custom_action}?"))
|
4
4
|
li.nav-item
|
5
5
|
- nav_item_action_name = nav_item.custom_action.present? ? nav_item.custom_action : 'show'
|
6
6
|
= link_to nav_item.nav_item_name.to_s.titleize, "/cm_admin/#{@model.name.underscore.pluralize}/#{@ar_object.id}/#{nav_item.custom_action}", class: "nav-link #{ nav_item_action_name == action_name ? 'active' : ''}"
|
@@ -1,7 +1,9 @@
|
|
1
1
|
.cm-navbar
|
2
2
|
.cm-navbar__lhs
|
3
|
-
.
|
4
|
-
|
3
|
+
- if cm_admin.method_defined?(:"#{@model.name.downcase}_index_path") && (@model.current_action.name == 'show' || @model.current_action.layout_type.present?)
|
4
|
+
.bread-crumb-area
|
5
|
+
.breadcrumb-text
|
6
|
+
= link_to @model.name + ' /', cm_admin.send(:"#{@model.name.downcase}_index_path")
|
5
7
|
.nav-title-area
|
6
8
|
p.title-text = action_title
|
7
9
|
p.title-sub-text = action_description
|
@@ -24,18 +26,10 @@
|
|
24
26
|
- if new_action.any? && policy([:cm_admin, @model.name.classify.constantize]).new?
|
25
27
|
= link_to 'Add', "#{page_url('new')}", class: 'primary-btn ml-2'
|
26
28
|
- @model.available_actions.select{|act| act if act.route_type == 'collection'}.each do |custom_action|
|
27
|
-
|
28
|
-
- if custom_action.display_type == :button
|
29
|
-
= link_to custom_action.name.titleize, @model.ar_model.table_name + '/' + custom_action.path, class: 'primary-btn ml-2', method: custom_action.verb
|
30
|
-
- elsif custom_action.display_type == :modal
|
31
|
-
= link_to custom_action.name.titleize, '', class: 'primary-btn ml-2', data: { bs_toggle: "modal", bs_target: "##{custom_action.name.classify}Modal" }
|
29
|
+
= custom_action_items(custom_action, 'index')
|
32
30
|
- elsif @model.current_action.name == 'show'
|
33
31
|
- @model.available_actions.select{|act| act if act.route_type == 'member'}.each do |custom_action|
|
34
|
-
|
35
|
-
- if custom_action.display_type == :button && custom_action.display_if.call(@ar_object)
|
36
|
-
= link_to custom_action.name.titleize, custom_action.path.gsub(':id', params[:id]), class: 'primary-btn ml-2', method: custom_action.verb
|
37
|
-
- elsif custom_action.display_type == :modal && custom_action.display_if.call(@ar_object)
|
38
|
-
= link_to custom_action.name.titleize, '', class: 'primary-btn ml-2', data: { bs_toggle: "modal", bs_target: "##{custom_action.name.classify}Modal" }
|
32
|
+
= custom_action_items(custom_action, 'show')
|
39
33
|
|
40
34
|
- edit_action = @model.available_actions.select{|act| act if act.action_type.eql?(:default) && act.name.eql?('edit')}
|
41
35
|
- if edit_action.any? && policy([:cm_admin, @model.name.classify.constantize]).edit?
|
data/config/routes.rb
CHANGED
@@ -10,7 +10,7 @@ CmAdmin::Engine.routes.draw do
|
|
10
10
|
|
11
11
|
# Defining action routes for each model
|
12
12
|
CmAdmin.config.cm_admin_models.each do |model|
|
13
|
-
model.available_actions.sort_by {|act| act.
|
13
|
+
model.available_actions.sort_by {|act| act.name}.each do |act|
|
14
14
|
scope model.name.tableize do
|
15
15
|
send(act.verb, act.path.present? ? act.path : act.name, to: "#{model.name.underscore}##{act.name}", as: "#{model.name.underscore}_#{act.name}")
|
16
16
|
end
|
data/lib/cm_admin/model.rb
CHANGED
@@ -45,7 +45,6 @@ module CmAdmin
|
|
45
45
|
actions unless @actions_set
|
46
46
|
$available_actions = @available_actions.dup
|
47
47
|
self.class.all_actions.push(@available_actions)
|
48
|
-
define_policy
|
49
48
|
define_controller
|
50
49
|
end
|
51
50
|
|
@@ -101,23 +100,6 @@ module CmAdmin
|
|
101
100
|
|
102
101
|
private
|
103
102
|
|
104
|
-
def define_policy
|
105
|
-
klass = Class.new(ApplicationPolicy) do
|
106
|
-
def initialize(user, record)
|
107
|
-
@user = user
|
108
|
-
@record = record
|
109
|
-
end
|
110
|
-
|
111
|
-
$available_actions.each do |action|
|
112
|
-
define_method :"#{action.name}?" do
|
113
|
-
accessible_by = action.accessible_by.map { |role| "user.#{role}" }.join(' || ')
|
114
|
-
eval(accessible_by)
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
118
|
-
CmAdmin.const_set "#{@name}Policy", klass
|
119
|
-
end
|
120
|
-
|
121
103
|
# Controller defined for each model
|
122
104
|
# If model is User, controller will be UsersController
|
123
105
|
def define_controller
|
@@ -135,7 +117,7 @@ module CmAdmin
|
|
135
117
|
@model.current_action = @action
|
136
118
|
@ar_object = @model.try(@action.parent || action_name, params)
|
137
119
|
@ar_object, @associated_model, @associated_ar_object = @model.custom_controller_action(action_name, params.permit!) if !@ar_object.present? && params[:id].present?
|
138
|
-
authorize controller_name.classify.constantize, policy_class: "CmAdmin::#{controller_name.classify}Policy".constantize
|
120
|
+
authorize controller_name.classify.constantize, policy_class: "CmAdmin::#{controller_name.classify}Policy".constantize if defined? "CmAdmin::#{controller_name.classify}Policy".constantize
|
139
121
|
aar_model = request.url.split('/')[-2].classify.constantize if params[:aar_id]
|
140
122
|
@associated_ar_object = aar_model.find(params[:aar_id]) if params[:aar_id]
|
141
123
|
nested_tables = @model.available_fields[:new].except(:fields).keys
|
@@ -6,7 +6,7 @@ module CmAdmin
|
|
6
6
|
include Actions::Blocks
|
7
7
|
attr_accessor :name, :verb, :layout_type, :layout, :partial, :path, :page_title, :page_description,
|
8
8
|
:child_records, :is_nested_field, :nested_table_name, :parent, :display_if, :route_type, :code_block,
|
9
|
-
:display_type, :action_type, :redirection_url, :sort_direction, :sort_column
|
9
|
+
:display_type, :action_type, :redirection_url, :sort_direction, :sort_column
|
10
10
|
|
11
11
|
VALID_SORT_DIRECTION = Set[:asc, :desc].freeze
|
12
12
|
|
@@ -34,14 +34,12 @@ module CmAdmin
|
|
34
34
|
self.action_type = :default
|
35
35
|
self.sort_column = :created_at
|
36
36
|
self.sort_direction = :desc
|
37
|
-
self.accessible_by = CmAdmin.authorized_roles
|
38
37
|
end
|
39
38
|
|
40
|
-
def set_values(page_title, page_description, partial
|
39
|
+
def set_values(page_title, page_description, partial)
|
41
40
|
self.page_title = page_title
|
42
41
|
self.page_description = page_description
|
43
42
|
self.partial = partial
|
44
|
-
self.accessible_by = (CmAdmin.authorized_roles.dup << accessible_by).flatten.compact.uniq if accessible_by
|
45
43
|
end
|
46
44
|
|
47
45
|
class << self
|
@@ -5,7 +5,8 @@ module CmAdmin
|
|
5
5
|
|
6
6
|
def show(params)
|
7
7
|
@current_action = CmAdmin::Models::Action.find_by(self, name: 'show')
|
8
|
-
|
8
|
+
scoped_model = "CmAdmin::#{self.name}Policy::Scope".constantize.new(Current.user, self.name.constantize).resolve
|
9
|
+
@ar_object = scoped_model.find(params[:id])
|
9
10
|
end
|
10
11
|
|
11
12
|
def index(params)
|
@@ -40,7 +41,8 @@ module CmAdmin
|
|
40
41
|
sort_column = "created_at"
|
41
42
|
sort_direction = %w[asc desc].include?(sort_params[:sort_direction]) ? sort_params[:sort_direction] : "asc"
|
42
43
|
sort_params = {sort_column: sort_column, sort_direction: sort_direction}
|
43
|
-
|
44
|
+
|
45
|
+
records = "CmAdmin::#{self.name}Policy::Scope".constantize.new(Current.user, self.name.constantize).resolve if records.nil?
|
44
46
|
records = records.order("#{current_action.sort_column} #{current_action.sort_direction}")
|
45
47
|
|
46
48
|
final_data = CmAdmin::Models::Filter.filtered_data(filter_params, records, @filters)
|
@@ -10,28 +10,28 @@ module CmAdmin
|
|
10
10
|
# @current_action = CmAdmin::Models::CustomAction.find_by(self, name: name)
|
11
11
|
end
|
12
12
|
|
13
|
-
def cm_index(page_title: nil, page_description: nil, partial: nil,
|
13
|
+
def cm_index(page_title: nil, page_description: nil, partial: nil, &block)
|
14
14
|
@current_action = CmAdmin::Models::Action.find_by(self, name: 'index')
|
15
|
-
@current_action.set_values(page_title, page_description, partial
|
15
|
+
@current_action.set_values(page_title, page_description, partial)
|
16
16
|
yield
|
17
17
|
# action.instance_eval(&block)
|
18
18
|
end
|
19
19
|
|
20
|
-
def cm_show(page_title: nil, page_description: nil, partial: nil,
|
20
|
+
def cm_show(page_title: nil, page_description: nil, partial: nil, &block)
|
21
21
|
@current_action = CmAdmin::Models::Action.find_by(self, name: 'show')
|
22
|
-
@current_action.set_values(page_title, page_description, partial
|
22
|
+
@current_action.set_values(page_title, page_description, partial)
|
23
23
|
yield
|
24
24
|
end
|
25
25
|
|
26
|
-
def cm_edit(page_title: nil,page_description: nil, partial: nil,
|
26
|
+
def cm_edit(page_title: nil,page_description: nil, partial: nil, &block)
|
27
27
|
@current_action = CmAdmin::Models::Action.find_by(self, name: 'edit')
|
28
|
-
@current_action.set_values(page_title, page_description, partial
|
28
|
+
@current_action.set_values(page_title, page_description, partial)
|
29
29
|
yield
|
30
30
|
end
|
31
31
|
|
32
|
-
def cm_new(page_title: nil,page_description: nil, partial: nil,
|
32
|
+
def cm_new(page_title: nil,page_description: nil, partial: nil, &block)
|
33
33
|
@current_action = CmAdmin::Models::Action.find_by(self, name: 'new')
|
34
|
-
@current_action.set_values(page_title, page_description, partial
|
34
|
+
@current_action.set_values(page_title, page_description, partial)
|
35
35
|
yield
|
36
36
|
end
|
37
37
|
|
@@ -47,16 +47,14 @@ module CmAdmin
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
-
def tab(tab_name, custom_action, associated_model: nil, layout_type: nil, layout: nil, partial: nil,
|
50
|
+
def tab(tab_name, custom_action, associated_model: nil, layout_type: nil, layout: nil, partial: nil, &block)
|
51
51
|
if custom_action.to_s == ''
|
52
52
|
@current_action = CmAdmin::Models::Action.find_by(self, name: 'show')
|
53
|
-
@current_action.accessible_by = (CmAdmin.authorized_roles.dup << accessible_by).flatten.compact.uniq if accessible_by
|
54
53
|
@available_tabs << CmAdmin::Models::Tab.new(tab_name, '', &block)
|
55
54
|
else
|
56
55
|
action = CmAdmin::Models::Action.new(name: custom_action.to_s, verb: :get, path: ':id/'+custom_action,
|
57
56
|
layout_type: layout_type, layout: layout, partial: partial, child_records: associated_model,
|
58
57
|
action_type: :custom, display_type: :page)
|
59
|
-
action.accessible_by = (CmAdmin.authorized_roles.dup << accessible_by).flatten.compact.uniq if accessible_by
|
60
58
|
@available_actions << action
|
61
59
|
@current_action = action
|
62
60
|
@available_tabs << CmAdmin::Models::Tab.new(tab_name, custom_action, &block)
|
@@ -117,12 +115,11 @@ module CmAdmin
|
|
117
115
|
# end
|
118
116
|
# end
|
119
117
|
# end
|
120
|
-
def custom_action(name: nil, verb: nil, layout: nil, layout_type: nil, partial: nil, path: nil, display_type: nil, display_if: lambda { |arg| return true }, route_type: nil,
|
118
|
+
def custom_action(name: nil, verb: nil, layout: nil, layout_type: nil, partial: nil, path: nil, display_type: nil, display_if: lambda { |arg| return true }, route_type: nil, &block)
|
121
119
|
action = CmAdmin::Models::CustomAction.new(
|
122
120
|
name: name, verb: verb, layout: layout, layout_type: layout_type, partial: partial, path: path,
|
123
121
|
parent: self.current_action.name, display_type: display_type, display_if: display_if,
|
124
122
|
action_type: :custom, route_type: route_type, &block)
|
125
|
-
action.accessible_by = (CmAdmin.authorized_roles.dup << accessible_by).flatten.compact.uniq if accessible_by
|
126
123
|
@available_actions << action
|
127
124
|
# self.class.class_eval(&block)
|
128
125
|
end
|
data/lib/cm_admin/version.rb
CHANGED
@@ -53,6 +53,31 @@ module CmAdmin
|
|
53
53
|
base_path + "/#{ar_object.id}" + '/edit'
|
54
54
|
end
|
55
55
|
end
|
56
|
+
|
57
|
+
def custom_action_items(custom_action, current_action_name)
|
58
|
+
if custom_action.name.present? && policy([:cm_admin, @model.name.classify.constantize]).send(:"#{custom_action.name}?")
|
59
|
+
if custom_action.display_if.call(@ar_object)
|
60
|
+
case custom_action.display_type
|
61
|
+
when :button
|
62
|
+
custom_action_button(custom_action, current_action_name)
|
63
|
+
when :modal
|
64
|
+
custom_modal_button(custom_action)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def custom_action_button(custom_action, current_action_name)
|
71
|
+
if current_action_name == "index"
|
72
|
+
link_to custom_action.name.titleize, @model.ar_model.table_name + '/' + custom_action.path, class: 'secondary-btn ml-2', method: custom_action.verb
|
73
|
+
elsif current_action_name == "show"
|
74
|
+
link_to custom_action.name.titleize, custom_action.path.gsub(':id', params[:id]), class: 'secondary-btn ml-2', method: custom_action.verb
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def custom_modal_button(custom_action)
|
79
|
+
link_to custom_action.name.titleize, '', class: 'secondary-btn ml-2', data: { bs_toggle: "modal", bs_target: "##{custom_action.name.classify}Modal" }
|
80
|
+
end
|
56
81
|
end
|
57
82
|
end
|
58
83
|
end
|
@@ -7,8 +7,9 @@ module CmAdmin
|
|
7
7
|
|
8
8
|
def copy_initializer
|
9
9
|
copy_file 'cm_admin_initializer.rb', 'config/initializers/cm_admin.rb'
|
10
|
-
copy_file 'custom.js', 'app/assets/javascripts/custom.js'
|
11
|
-
copy_file 'custom.css', 'app/assets/stylesheets/custom.css'
|
10
|
+
copy_file 'custom.js', 'app/assets/javascripts/cm_admin/custom.js'
|
11
|
+
copy_file 'custom.css', 'app/assets/stylesheets/cm_admin/custom.css'
|
12
|
+
copy_file 'application_policy.rb', 'app/policies/application_policy.rb'
|
12
13
|
route 'mount CmAdmin::Engine => "/admin"'
|
13
14
|
end
|
14
15
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
|
3
|
+
module CmAdmin
|
4
|
+
module Generators
|
5
|
+
class PolicyGenerator < Rails::Generators::NamedBase
|
6
|
+
source_root File.expand_path('templates', __dir__)
|
7
|
+
|
8
|
+
def copy_policy_files
|
9
|
+
template "policy.rb", "app/policies/cm_admin/#{file_name}_policy.rb"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -17,7 +17,7 @@ class ApplicationPolicy
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def create?
|
20
|
-
|
20
|
+
true
|
21
21
|
end
|
22
22
|
|
23
23
|
def new?
|
@@ -43,7 +43,7 @@ class ApplicationPolicy
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def resolve
|
46
|
-
|
46
|
+
scope.all
|
47
47
|
end
|
48
48
|
|
49
49
|
private
|
@@ -0,0 +1,8 @@
|
|
1
|
+
class CmAdmin::<%= class_name %>Policy < ApplicationPolicy
|
2
|
+
<%- available_action_names = (CmAdmin::Model.find_by({name: class_name}).available_actions.map{|action| action.name}.uniq - ['custom_action', 'new', 'edit']) %>
|
3
|
+
<%- available_action_names.each do |action_name| %>
|
4
|
+
def <%= action_name %>?
|
5
|
+
<%= CmAdmin.authorized_roles.map {|role| "@user.#{role}" }.join(' && ') %>
|
6
|
+
end
|
7
|
+
<% end %>
|
8
|
+
end
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
07d558738c316293586496817b2bccbf6430b5bd
|
data/yarn.lock
CHANGED
@@ -4123,9 +4123,9 @@ minimatch@^3.0.4:
|
|
4123
4123
|
brace-expansion "^1.1.7"
|
4124
4124
|
|
4125
4125
|
minimist@^1.2.0, minimist@^1.2.5:
|
4126
|
-
version "1.2.
|
4127
|
-
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.
|
4128
|
-
integrity sha512-
|
4126
|
+
version "1.2.6"
|
4127
|
+
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
|
4128
|
+
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
|
4129
4129
|
|
4130
4130
|
minipass-collect@^1.0.2:
|
4131
4131
|
version "1.0.2"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cm-admin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- sajinmp
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2022-
|
13
|
+
date: 2022-04-07 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: pagy
|
@@ -152,7 +152,6 @@ files:
|
|
152
152
|
- app/javascript/packs/cm_admin/quick_search.js
|
153
153
|
- app/javascript/packs/cm_admin/scaffolds.js
|
154
154
|
- app/javascript/stylesheets/cm_admin/application.scss
|
155
|
-
- app/policies/application_policy.rb
|
156
155
|
- app/views/cm_admin/main/_associated_table.html.slim
|
157
156
|
- app/views/cm_admin/main/_cm_pagy_nav.html.slim
|
158
157
|
- app/views/cm_admin/main/_drawer.html.slim
|
@@ -222,9 +221,12 @@ files:
|
|
222
221
|
- lib/cm_admin/view_helpers/navigation_helper.rb
|
223
222
|
- lib/cm_admin/view_helpers/page_info_helper.rb
|
224
223
|
- lib/generators/cm_admin/install_generator.rb
|
224
|
+
- lib/generators/cm_admin/policy_generator.rb
|
225
|
+
- lib/generators/cm_admin/templates/application_policy.rb
|
225
226
|
- lib/generators/cm_admin/templates/cm_admin_initializer.rb
|
226
227
|
- lib/generators/cm_admin/templates/custom.css
|
227
228
|
- lib/generators/cm_admin/templates/custom.js
|
229
|
+
- lib/generators/cm_admin/templates/policy.rb
|
228
230
|
- lib/tasks/webpack_install.rake
|
229
231
|
- package.json
|
230
232
|
- postcss.config.js
|