cm-admin 0.4.4 → 0.5.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 +0 -21
- data/app/views/cm_admin/main/_associated_table.html.slim +1 -1
- data/app/views/cm_admin/main/_table.html.slim +12 -9
- data/app/views/cm_admin/main/_top_navbar.html.slim +8 -3
- data/app/views/cm_admin/main/associated_index.html.slim +2 -2
- data/app/views/layouts/_custom_action_modals.html.slim +9 -0
- data/app/views/layouts/cm_admin.html.slim +6 -4
- data/config/routes.rb +1 -1
- data/lib/cm_admin/model.rb +14 -7
- data/lib/cm_admin/models/action.rb +6 -2
- data/lib/cm_admin/models/controller_method.rb +1 -1
- data/lib/cm_admin/models/dsl_method.rb +16 -3
- data/lib/cm_admin/version.rb +1 -1
- data/lib/cm_admin/view_helpers/page_info_helper.rb +7 -2
- 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: 2047ac958ebd117645f7089227af0177f495f1cf640791c3e2f9fb2920fc1f04
|
4
|
+
data.tar.gz: 3f81a0d55a072ec52cb51b54e04cfd77edc87e562275539045ec39ca98e5b6ca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b7f8ac87cb03febd769e5f11a8e4819eff5cb978727c1bc55d73680970147b1e28c15293d1d819dbec11c290fc090126a32bdc3db1f30d7202013bbf4a43c25b
|
7
|
+
data.tar.gz: 370da992ee711a9e2d15d665e4ee2e595ab4767e3761c58d603ad3a6abef95b1f09412e8d92e7ea0dea3763f1ce1332a735f42a9d5b27e7e35f05800fcc6d863
|
data/README.md
CHANGED
@@ -24,27 +24,6 @@ Install the gem
|
|
24
24
|
|
25
25
|
$ rails g cm_admin:install
|
26
26
|
|
27
|
-
For generating the index page views
|
28
|
-
|
29
|
-
$ rails g cm_admin:view products index title description
|
30
|
-
|
31
|
-
For generating the show page views
|
32
|
-
|
33
|
-
$ rails g cm_admin:view products show title description
|
34
|
-
|
35
|
-
For generating the form page views
|
36
|
-
$ rails g cm_admin:view products form column_name:field_type
|
37
|
-
$ rails g cm_admin:view products form title:string description:string
|
38
|
-
|
39
|
-
Following field types are acceted
|
40
|
-
|
41
|
-
* input-integer
|
42
|
-
* input-string
|
43
|
-
* single-select
|
44
|
-
* multi-select
|
45
|
-
* checkbox
|
46
|
-
* radio
|
47
|
-
|
48
27
|
## Usage
|
49
28
|
|
50
29
|
For demo check [here](http://cm-admin.labs.commutatus.com/admin/users/)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
.admin-table-index
|
2
2
|
.table-top
|
3
|
-
p.table-top__total-count = "#{@associated_ar_object.pagy.count} #{@associated_model
|
3
|
+
p.table-top__total-count = "#{@associated_ar_object.pagy.count} #{@associated_model&.ar_model&.table_name} found"
|
4
4
|
.table-top__column-action
|
5
5
|
button.secondary-btn.column-btn data-target="#columnActionModal" data-toggle="modal" type="button"
|
6
6
|
span
|
@@ -1,13 +1,12 @@
|
|
1
1
|
.admin-table-index
|
2
2
|
.table-top
|
3
3
|
p.table-top__total-count = "#{@ar_object.pagy.count} #{@model.ar_model.table_name} found"
|
4
|
-
.table-top__column-action
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
4
|
+
// .table-top__column-action
|
5
|
+
// button.secondary-btn.column-btn data-bs-target="#columnActionModal" data-bs-toggle="modal"
|
6
|
+
// span
|
7
|
+
// i.fa.fa-columns.bolder
|
8
|
+
// span
|
9
|
+
// i.fa.fa-angle-down
|
11
10
|
.new-admin-table.scrollable
|
12
11
|
table.cm-table
|
13
12
|
thead.cm-table__header
|
@@ -23,9 +22,13 @@
|
|
23
22
|
td.check-box-space
|
24
23
|
span
|
25
24
|
input.cm-checkbox type="checkbox"
|
26
|
-
- @model.available_fields[:index].
|
25
|
+
- @model.available_fields[:index].each_with_index do |column, index|
|
27
26
|
td.text-ellipsis
|
28
|
-
span class="#{column.cm_css_class}"
|
27
|
+
span class="#{column.cm_css_class}"
|
28
|
+
- if index == 0
|
29
|
+
= link_to ar_object.send(column.field_name), "/cm_admin/#{@model.ar_model.table_name}/#{ar_object.id}"
|
30
|
+
- else
|
31
|
+
= show_field_value(ar_object, column)
|
29
32
|
td.row-action-cell
|
30
33
|
.row-action-tool
|
31
34
|
button.secondary-btn.tool-btn type="button"
|
@@ -24,8 +24,13 @@
|
|
24
24
|
a.primary-btn.ml-2 href="#{page_url('new')}"
|
25
25
|
| Add
|
26
26
|
- @model.available_actions.select{|act| act if act.route_type == 'collection'}.each do |custom_action|
|
27
|
-
|
27
|
+
- if custom_action.display_type == :button
|
28
|
+
= link_to custom_action.name.titleize, @model.ar_model.table_name + '/' + custom_action.path, class: 'primary-btn ml-2', method: custom_action.verb
|
29
|
+
- elsif custom_action.display_type == :modal
|
30
|
+
= link_to custom_action.name.titleize, '', class: 'primary-btn ml-2', data: { bs_toggle: "modal", bs_target: "##{custom_action.name.classify}Modal" }
|
28
31
|
- elsif @model.current_action.name == 'show'
|
29
32
|
- @model.available_actions.select{|act| act if act.route_type == 'member'}.each do |custom_action|
|
30
|
-
- if custom_action.display_if.call(@ar_object)
|
31
|
-
= link_to custom_action.name, custom_action.path.gsub(':id', params[:id]), class: 'primary-btn ml-2', method: custom_action.verb
|
33
|
+
- if custom_action.display_type == :button && custom_action.display_if.call(@ar_object)
|
34
|
+
= link_to custom_action.name.titleize, custom_action.path.gsub(':id', params[:id]), class: 'primary-btn ml-2', method: custom_action.verb
|
35
|
+
- elsif custom_action.display_type == :modal && custom_action.display_if.call(@ar_object)
|
36
|
+
= link_to custom_action.name.titleize, '', class: 'primary-btn ml-2', data: { bs_toggle: "modal", bs_target: "##{custom_action.name.classify}Modal" }
|
@@ -0,0 +1,9 @@
|
|
1
|
+
- @model.available_actions.select{|act| act if act.route_type == 'collection' && act.display_type == :modal}.each do |custom_action|
|
2
|
+
.modal.fade id="#{custom_action.name.classify}Modal" aria-hidden="true" aria-labelledby="exampleModalLabel" tabindex="1"
|
3
|
+
.modal-dialog
|
4
|
+
.modal-content
|
5
|
+
.modal-header
|
6
|
+
h5#exampleModalLabel.modal-title = custom_action.name.classify
|
7
|
+
button.btn-close aria-label="Close" data-bs-dismiss="modal" type="button"
|
8
|
+
.modal-body
|
9
|
+
= render partial: custom_action.partial
|
@@ -19,7 +19,7 @@ html
|
|
19
19
|
.cm-admin
|
20
20
|
= render 'layouts/left_sidebar_nav'
|
21
21
|
.panel-area
|
22
|
-
- if defined?(@action) && @action&.layout_type.to_s == 'cm_association_show'
|
22
|
+
- if defined?(@action) && (@action&.layout_type.to_s == 'cm_association_show' || @action.parent == "show")
|
23
23
|
.show-page.page-container
|
24
24
|
.show-page__tabs.sticky-container
|
25
25
|
.cm-tabs-bar
|
@@ -27,16 +27,18 @@ html
|
|
27
27
|
== render 'cm_admin/main/tabs'
|
28
28
|
.show-page__inner.scrollable
|
29
29
|
= yield
|
30
|
-
- elsif defined?(@action) && @action&.layout_type.to_s == 'cm_association_index'
|
30
|
+
- elsif defined?(@action) && (@action&.layout_type.to_s == 'cm_association_index' || @action.parent == "index")
|
31
31
|
.show-page.page-container
|
32
32
|
.show-page__tabs.sticky-container
|
33
33
|
.cm-tabs-bar
|
34
34
|
== render 'cm_admin/main/top_navbar'
|
35
35
|
== render 'cm_admin/main/tabs'
|
36
|
-
- if @associated_model.filters.present?
|
36
|
+
- if @associated_model && @associated_model.filters.present?
|
37
37
|
.index-page__filters
|
38
38
|
== render partial: 'cm_admin/main/filters', locals: { filters: @associated_model.filters }
|
39
39
|
= yield
|
40
40
|
- else
|
41
41
|
= yield
|
42
|
-
= render 'layouts/flash_message'
|
42
|
+
= render 'layouts/flash_message'
|
43
|
+
= render 'layouts/custom_action_modals'
|
44
|
+
|
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.cm_admin_models.each do |model|
|
13
|
-
model.available_actions.each do |act|
|
13
|
+
model.available_actions.sort_by {|act| act.class}.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}")
|
16
16
|
end
|
data/lib/cm_admin/model.rb
CHANGED
@@ -92,7 +92,6 @@ module CmAdmin
|
|
92
92
|
# If model is User, controller will be UsersController
|
93
93
|
def define_controller
|
94
94
|
klass = Class.new(CmAdmin::ApplicationController) do
|
95
|
-
|
96
95
|
$available_actions.each do |action|
|
97
96
|
define_method action.name.to_sym do
|
98
97
|
|
@@ -102,6 +101,8 @@ module CmAdmin
|
|
102
101
|
@action = CmAdmin::Models::Action.find_by(@model, name: action_name)
|
103
102
|
@ar_object = @model.try(@action.parent || action_name, params)
|
104
103
|
@ar_object, @associated_model, @associated_ar_object = @model.custom_controller_action(action_name, params.permit!) if !@ar_object.present? && params[:id].present?
|
104
|
+
aar_model = request.url.split('/')[-2].classify.constantize if params[:aar_id]
|
105
|
+
@associated_ar_object = aar_model.find(params[:aar_id]) if params[:aar_id]
|
105
106
|
nested_tables = @model.available_fields[:new].except(:fields).keys
|
106
107
|
nested_tables += @model.available_fields[:edit].except(:fields).keys
|
107
108
|
@reflections = @model.ar_model.reflect_on_all_associations
|
@@ -126,13 +127,19 @@ module CmAdmin
|
|
126
127
|
else
|
127
128
|
format.html { render '/cm_admin/main/new' }
|
128
129
|
end
|
129
|
-
elsif action.
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
130
|
+
elsif action.action_type == :custom
|
131
|
+
if action.child_records
|
132
|
+
format.html { render action.layout }
|
133
|
+
elsif action.display_type == :page
|
134
|
+
data = @action.parent == "index" ? @ar_object.data : @ar_object
|
135
|
+
format.html { render action.partial }
|
134
136
|
else
|
135
|
-
|
137
|
+
redirect_url = request.referrer || "/cm_admin/#{@model.ar_model.table_name}/#{@ar_object.id}"
|
138
|
+
if @action.code_block.call(@ar_object)
|
139
|
+
format.html { redirect_to redirect_url }
|
140
|
+
else
|
141
|
+
format.html { redirect_to redirect_url }
|
142
|
+
end
|
136
143
|
end
|
137
144
|
elsif action.layout.present?
|
138
145
|
if request.xhr? && action.partial.present?
|
@@ -4,7 +4,9 @@ module CmAdmin
|
|
4
4
|
module Models
|
5
5
|
class Action
|
6
6
|
include Actions::Blocks
|
7
|
-
attr_accessor :name, :verb, :layout_type, :layout, :partial, :path, :page_title, :page_description,
|
7
|
+
attr_accessor :name, :verb, :layout_type, :layout, :partial, :path, :page_title, :page_description,
|
8
|
+
:child_records, :is_nested_field, :nested_table_name, :parent, :display_if, :route_type, :code_block,
|
9
|
+
:display_type, :action_type
|
8
10
|
|
9
11
|
def initialize(attributes = {}, &block)
|
10
12
|
if attributes[:layout_type].present? && attributes[:layout].nil? && attributes[:partial].nil?
|
@@ -25,7 +27,9 @@ module CmAdmin
|
|
25
27
|
|
26
28
|
def set_default_values
|
27
29
|
self.is_nested_field = false
|
28
|
-
self.display_if = true
|
30
|
+
self.display_if = lambda { |arg| return true }
|
31
|
+
self.display_type = :button
|
32
|
+
self.action_type = :default
|
29
33
|
end
|
30
34
|
|
31
35
|
class << self
|
@@ -65,7 +65,7 @@ module CmAdmin
|
|
65
65
|
nested_fields = nested_tables.map {|table|
|
66
66
|
Hash[
|
67
67
|
table.to_s + '_attributes',
|
68
|
-
table.to_s.
|
68
|
+
table.to_s.classify.constantize.columns.map(&:name).reject { |i| CmAdmin::REJECTABLE_FIELDS.include?(i) }.map(&:to_sym) + [:id, :_destroy]
|
69
69
|
]
|
70
70
|
}
|
71
71
|
permittable_fields += nested_fields
|
@@ -3,6 +3,13 @@ module CmAdmin
|
|
3
3
|
module DslMethod
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
|
6
|
+
def cm_page(name: nil, partial: nil, path: nil, route_type: nil, page_title: nil, display_type: :button, &block)
|
7
|
+
action = CmAdmin::Models::CustomAction.new(name: name, verb: :get, partial: partial, path: path, route_type: route_type, display_type: display_type, &block)
|
8
|
+
@available_actions << action
|
9
|
+
# @available_actions << CmAdmin::Models::CustomAction.new(name: name, verb: 'get', layout: 'cm_admin', partial: partial, path: path, parent: self.current_action.name, route_type: route_type, page_title: page_title, display_type: display_type, &block)
|
10
|
+
# @current_action = CmAdmin::Models::CustomAction.find_by(self, name: name)
|
11
|
+
end
|
12
|
+
|
6
13
|
def cm_index(page_title: nil ,page_description: nil, &block)
|
7
14
|
@current_action = CmAdmin::Models::Action.find_by(self, name: 'index')
|
8
15
|
@current_action.page_title = page_title
|
@@ -49,7 +56,9 @@ module CmAdmin
|
|
49
56
|
@current_action = CmAdmin::Models::Action.find_by(self, name: 'show')
|
50
57
|
@available_tabs << CmAdmin::Models::Tab.new(tab_name, '', &block)
|
51
58
|
else
|
52
|
-
action = CmAdmin::Models::Action.new(name: custom_action.to_s, verb: :get, path: ':id/'+custom_action,
|
59
|
+
action = CmAdmin::Models::Action.new(name: custom_action.to_s, verb: :get, path: ':id/'+custom_action,
|
60
|
+
layout_type: layout_type, layout: layout, partial: partial, child_records: associated_model,
|
61
|
+
action_type: :custom, display_type: :page)
|
53
62
|
@available_actions << action
|
54
63
|
@current_action = action
|
55
64
|
@available_tabs << CmAdmin::Models::Tab.new(tab_name, custom_action, &block)
|
@@ -109,8 +118,12 @@ module CmAdmin
|
|
109
118
|
# end
|
110
119
|
# end
|
111
120
|
# end
|
112
|
-
def custom_action(name: nil, verb: nil, layout: nil, partial: nil, path: nil, display_if: lambda { |arg| return true }, route_type: nil, &block)
|
113
|
-
|
121
|
+
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)
|
122
|
+
action = CmAdmin::Models::CustomAction.new(
|
123
|
+
name: name, verb: verb, layout: layout, layout_type: layout_type, partial: partial, path: path,
|
124
|
+
parent: self.current_action.name, display_type: display_type, display_if: display_if,
|
125
|
+
action_type: :custom, route_type: route_type, &block)
|
126
|
+
@available_actions << action
|
114
127
|
# self.class.class_eval(&block)
|
115
128
|
end
|
116
129
|
|
data/lib/cm_admin/version.rb
CHANGED
@@ -6,8 +6,10 @@ module CmAdmin
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def action_title
|
9
|
-
|
10
|
-
|
9
|
+
show_action = CmAdmin::Models::Action.find_by(@model, name: 'show')
|
10
|
+
title = @model.current_action.page_title || show_action.page_title
|
11
|
+
if title
|
12
|
+
title = (title.class == Symbol) ? @ar_object.send(title) : title
|
11
13
|
else
|
12
14
|
title = "#{@model.name}"
|
13
15
|
case action_name
|
@@ -24,8 +26,11 @@ module CmAdmin
|
|
24
26
|
end
|
25
27
|
|
26
28
|
def action_description
|
29
|
+
show_action = CmAdmin::Models::Action.find_by(@model, name: 'show')
|
27
30
|
if @model.current_action.page_description
|
28
31
|
title = @model.current_action.page_description
|
32
|
+
elsif show_action.page_description
|
33
|
+
title = show_action.page_description
|
29
34
|
else
|
30
35
|
title = "#{@model.name}"
|
31
36
|
case action_name
|
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.
|
4
|
+
version: 0.5.0
|
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-01-
|
13
|
+
date: 2022-01-20 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: pagy
|
@@ -152,6 +152,7 @@ files:
|
|
152
152
|
- app/views/cm_admin/main/new.html.slim
|
153
153
|
- app/views/cm_admin/main/show.html.slim
|
154
154
|
- app/views/cm_admin/static/error_401.html.slim
|
155
|
+
- app/views/layouts/_custom_action_modals.html.slim
|
155
156
|
- app/views/layouts/_flash_message.html.slim
|
156
157
|
- app/views/layouts/_left_sidebar_nav.html.slim
|
157
158
|
- app/views/layouts/_quick_links.html.slim
|