cm-admin 0.2.0 → 0.3.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/.gitignore +12 -0
- data/.rspec +3 -0
- data/.travis.yml +6 -0
- data/Gemfile +6 -1
- data/Gemfile.lock +118 -0
- data/LICENSE.txt +21 -0
- data/README.md +6 -40
- data/app/assets/images/logo.png +0 -0
- data/{lib/generators/cm_admin/templates/assets/stylesheets → app/assets/stylesheets/cm_admin}/base/auth.scss +16 -6
- data/app/assets/stylesheets/cm_admin/base/common.scss +237 -0
- data/app/assets/stylesheets/cm_admin/base/filters.scss +199 -0
- data/app/assets/stylesheets/cm_admin/base/form.scss +262 -0
- data/app/assets/stylesheets/cm_admin/base/main-nav.scss +47 -0
- data/app/assets/stylesheets/cm_admin/base/navbar.scss +67 -0
- data/app/assets/stylesheets/cm_admin/base/quicksearch.scss +69 -0
- data/app/assets/stylesheets/cm_admin/base/scaffold.scss +61 -0
- data/app/assets/stylesheets/cm_admin/base/show.scss +54 -0
- data/app/assets/stylesheets/cm_admin/base/sidebar.scss +225 -0
- data/app/assets/stylesheets/cm_admin/base/table.scss +303 -0
- data/app/assets/stylesheets/cm_admin/base/tabs.scss +26 -0
- data/app/assets/stylesheets/cm_admin/cm_admin.css.scss +26 -0
- data/app/assets/stylesheets/cm_admin/components/_alerts.scss +101 -0
- data/app/assets/stylesheets/cm_admin/components/_buttons.scss +135 -0
- data/app/assets/stylesheets/cm_admin/components/_dropdown-popup.scss +141 -0
- data/app/assets/stylesheets/cm_admin/components/_input.scss +274 -0
- data/app/assets/stylesheets/cm_admin/components/_modal.scss +34 -0
- data/app/assets/stylesheets/cm_admin/components/_range.scss +20 -0
- data/app/assets/stylesheets/cm_admin/components/_status-tag.scss +67 -0
- data/app/assets/stylesheets/cm_admin/components/index.scss +7 -0
- data/app/assets/stylesheets/cm_admin/dependency/bootstrap.min.css +7 -0
- data/app/assets/stylesheets/cm_admin/helpers/_mixins.scss +20 -0
- data/app/assets/stylesheets/cm_admin/helpers/_variable.scss +86 -0
- data/app/assets/stylesheets/cm_admin/helpers/index.scss +2 -0
- data/app/controllers/cm_admin/application_controller.rb +6 -0
- data/app/controllers/cm_admin/exports_controller.rb +16 -0
- data/app/controllers/cm_admin/main_controller.rb +8 -0
- data/app/helpers/cm_admin/application_helper.rb +11 -0
- data/app/javascript/packs/cm_admin/application.js +9 -0
- data/app/javascript/packs/cm_admin/filters.js +32 -0
- data/app/javascript/packs/cm_admin/scaffolds.js +14 -0
- data/app/views/cm_admin/main/_cm_pagy_nav.html.slim +23 -0
- data/app/views/cm_admin/main/_filters.html.slim +10 -0
- data/app/views/cm_admin/main/_table.html.slim +59 -0
- data/app/views/cm_admin/main/_top_navbar.html.slim +25 -0
- data/app/views/cm_admin/main/dashboard.html.slim +1 -0
- data/app/views/cm_admin/main/edit.html.slim +19 -0
- data/app/views/cm_admin/main/index.html.slim +9 -0
- data/app/views/cm_admin/main/new.html.slim +22 -0
- data/app/views/cm_admin/main/show.html.slim +13 -0
- data/app/views/layouts/_left_sidebar_nav.html.slim +30 -0
- data/app/views/layouts/cm_admin.html.slim +18 -0
- data/bin/console +1 -0
- data/bin/webpack +18 -0
- data/bin/webpack-dev-server +18 -0
- data/cm_admin.gemspec +20 -31
- data/{lib → config}/.DS_Store +0 -0
- data/config/initializers/active_record_extension.rb +9 -0
- data/config/routes.rb +18 -0
- data/config/webpack/development.js +5 -0
- data/config/webpack/environment.js +12 -0
- data/config/webpack/production.js +5 -0
- data/config/webpack/test.js +5 -0
- data/config/webpacker.yml +92 -0
- data/lib/c.png +0 -0
- data/lib/cm_admin.rb +31 -2
- data/lib/cm_admin/constants.rb +33 -0
- data/lib/cm_admin/engine.rb +38 -0
- data/lib/cm_admin/model.rb +262 -0
- data/lib/cm_admin/models/action.rb +22 -0
- data/lib/cm_admin/models/actions/blocks.rb +25 -0
- data/lib/cm_admin/models/blocks.rb +19 -0
- data/lib/cm_admin/models/column.rb +16 -0
- data/lib/cm_admin/models/export.rb +43 -0
- data/lib/cm_admin/models/field.rb +14 -0
- data/lib/cm_admin/models/filter.rb +30 -0
- data/lib/cm_admin/utils.rb +67 -0
- data/lib/cm_admin/version.rb +1 -1
- data/lib/cm_admin/view_helpers.rb +72 -0
- data/lib/cm_admin/view_helpers/field_column_helper.rb +23 -0
- data/lib/cm_admin/view_helpers/form_field_helper.rb +16 -0
- data/lib/cm_admin/view_helpers/form_helper.rb +55 -0
- data/lib/cm_admin/view_helpers/navigation_helper.rb +18 -0
- data/lib/cm_admin/view_helpers/page_info_helper.rb +21 -0
- data/lib/generators/cm_admin/install_generator.rb +10 -32
- data/lib/generators/cm_admin/templates/cm_admin_initializer.rb +4 -0
- data/lib/tasks/webpack_install.rake +63 -0
- data/package.json +18 -0
- data/postcss.config.js +12 -0
- data/yarn-error.log +44 -0
- data/yarn.lock +6903 -0
- metadata +123 -48
- data/CODE_OF_CONDUCT.md +0 -74
- data/lib/generators/cm_admin/USAGE +0 -8
- data/lib/generators/cm_admin/templates/assets/images/cm.png +0 -0
- data/lib/generators/cm_admin/templates/assets/stylesheets/application.css.scss +0 -33
- data/lib/generators/cm_admin/templates/assets/stylesheets/base/_variable.scss +0 -14
- data/lib/generators/cm_admin/templates/assets/stylesheets/base/form.scss +0 -125
- data/lib/generators/cm_admin/templates/assets/stylesheets/base/input-styles.scss +0 -72
- data/lib/generators/cm_admin/templates/assets/stylesheets/base/main-nav.scss +0 -79
- data/lib/generators/cm_admin/templates/assets/stylesheets/base/scaffold.scss +0 -95
- data/lib/generators/cm_admin/templates/assets/stylesheets/base/show.scss +0 -88
- data/lib/generators/cm_admin/templates/assets/stylesheets/base/sidebar.scss +0 -69
- data/lib/generators/cm_admin/templates/assets/stylesheets/base/table.scss +0 -246
- data/lib/generators/cm_admin/templates/layouts/_navbar.html.slim +0 -8
- data/lib/generators/cm_admin/templates/layouts/_side_navbar.html.slim +0 -12
- data/lib/generators/cm_admin/templates/layouts/application.html.slim +0 -20
- data/lib/generators/cm_admin/templates/layouts/initializer.rb +0 -2
- data/lib/generators/cm_admin/templates/views/_form.erb +0 -67
- data/lib/generators/cm_admin/templates/views/_table.erb +0 -22
- data/lib/generators/cm_admin/templates/views/edit.erb +0 -10
- data/lib/generators/cm_admin/templates/views/index.erb +0 -11
- data/lib/generators/cm_admin/templates/views/new.erb +0 -10
- data/lib/generators/cm_admin/templates/views/reset_password.erb +0 -12
- data/lib/generators/cm_admin/templates/views/show.erb +0 -18
- data/lib/generators/cm_admin/templates/views/sign_in.erb +0 -18
- data/lib/generators/cm_admin/view_generator.rb +0 -78
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module CmAdmin
|
|
2
|
+
module Models
|
|
3
|
+
class Field
|
|
4
|
+
attr_accessor :field_name, :label, :header
|
|
5
|
+
|
|
6
|
+
def initialize(field_name, attributes = {})
|
|
7
|
+
@field_name = field_name
|
|
8
|
+
attributes.each do |key, value|
|
|
9
|
+
self.send("#{key.to_s}=", value)
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module CmAdmin
|
|
2
|
+
module Models
|
|
3
|
+
class Filter
|
|
4
|
+
attr_accessor :db_column_name, :filter_type, :placeholder, :collection, :multiselect, :checked
|
|
5
|
+
|
|
6
|
+
VALID_FILTER_TYPES = Set[:checkbox, :date, :dropdown, :range, :search].freeze
|
|
7
|
+
|
|
8
|
+
def initialize(db_column_name:, filter_type:, options: {})
|
|
9
|
+
raise TypeError, "Can't have array of multiple columns for #{filter_type} filter" if db_column_name.is_a?(Array) && db_column_name.size > 1 && !filter_type.to_sym.eql?(:search)
|
|
10
|
+
raise ArgumentError, "Kindly select a valid filter type like #{VALID_FILTER_TYPES.sort.to_sentence(last_word_connector: ', or ')} instead of #{filter_type} for column #{db_column_name}" unless VALID_FILTER_TYPES.include?(filter_type.to_sym)
|
|
11
|
+
@db_column_name, @filter_type = structure_data(db_column_name, filter_type)
|
|
12
|
+
options.each do |key, value|
|
|
13
|
+
self.send("#{key.to_s}=", value)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def structure_data(db_column_name, filter_type)
|
|
18
|
+
filter_type = filter_type.is_a?(Array) ? filter_type[0].to_sym : filter_type.to_sym
|
|
19
|
+
|
|
20
|
+
case filter_type
|
|
21
|
+
when :search
|
|
22
|
+
db_column_name = (Array.new << db_column_name).flatten.map(&:to_sym)
|
|
23
|
+
else
|
|
24
|
+
db_column_name = db_column_name.is_a?(Array) ? db_column_name[0].to_sym : db_column_name.to_sym
|
|
25
|
+
end
|
|
26
|
+
[db_column_name, filter_type]
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
module CmAdmin::Utils
|
|
2
|
+
class << self
|
|
3
|
+
def serialize_csv_columns(*columns, **hashes)
|
|
4
|
+
# Turns an arbitrary list of args and kwargs into a list of params to be used in a form
|
|
5
|
+
# For example, turns CmAdmin::Utils.serialize_csv_columns(:a, :b, c: [:d, e: :h], f: :g)
|
|
6
|
+
# into [:a, :b, "c/d", "c/e/h", "f/g"]
|
|
7
|
+
columns.map(&:to_s) + hashes.map do |key, value|
|
|
8
|
+
serialize_csv_columns(*value).map do |column|
|
|
9
|
+
"#{key}/#{column}"
|
|
10
|
+
end
|
|
11
|
+
end.reduce([], :+)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def deserialize_csv_columns(list, method)
|
|
15
|
+
# Does the opposite operation of serialize_csv_columns
|
|
16
|
+
list.reduce(recursive_hash) do |acc, item|
|
|
17
|
+
tokens = item.to_s.split('/')
|
|
18
|
+
send(method, acc, tokens.shift, tokens)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def recursive_hash
|
|
23
|
+
func = ->(h, k) { h[k] = Hash.new(&func) }
|
|
24
|
+
# This hash creates a new hash, infinitely deep, whenever a value is not found
|
|
25
|
+
# recursive_hash[:a][:b][:c][:d] will never fail
|
|
26
|
+
Hash.new(&func)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def as_json_params(hash, key, tokens)
|
|
30
|
+
hash.empty? && hash = { only: [], methods: [], include: recursive_hash }
|
|
31
|
+
if tokens.empty?
|
|
32
|
+
# base case
|
|
33
|
+
hash[:methods] << key
|
|
34
|
+
else
|
|
35
|
+
# recursive case
|
|
36
|
+
# hash[:associations] ||= {}
|
|
37
|
+
hash[:include][key] = as_json_params(hash[:include][key], tokens.shift, tokens)
|
|
38
|
+
end
|
|
39
|
+
hash
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def flatten_hash(hash, prefix="", separator="_")
|
|
43
|
+
hash.reduce({}) do |acc, item|
|
|
44
|
+
case item[1]
|
|
45
|
+
when Hash
|
|
46
|
+
acc.merge(flatten_hash(item[1], "#{prefix}#{item[0]}#{separator}"))
|
|
47
|
+
else
|
|
48
|
+
acc.merge("#{prefix}#{item[0]}" => item[1])
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def base(hash, key, tokens) # recursive
|
|
54
|
+
hash.empty? && hash = { columns: [], associations: recursive_hash }
|
|
55
|
+
if tokens.empty?
|
|
56
|
+
# base case
|
|
57
|
+
hash[:columns] << key
|
|
58
|
+
else
|
|
59
|
+
# recursive case
|
|
60
|
+
# hash[:associations] ||= {}
|
|
61
|
+
hash[:associations][key] = base(hash[:associations][key], tokens.shift, tokens)
|
|
62
|
+
end
|
|
63
|
+
hash
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
end
|
|
67
|
+
end
|
data/lib/cm_admin/version.rb
CHANGED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
module CmAdmin
|
|
2
|
+
module ViewHelpers
|
|
3
|
+
Dir[File.expand_path("view_helpers", __dir__) + "/*.rb"].each { |f| require f }
|
|
4
|
+
|
|
5
|
+
include PageInfoHelper
|
|
6
|
+
include NavigationHelper
|
|
7
|
+
include FormHelper
|
|
8
|
+
include ColumnFieldHelper
|
|
9
|
+
include ActionView::Helpers::FormTagHelper
|
|
10
|
+
include ActionView::Helpers::TagHelper
|
|
11
|
+
|
|
12
|
+
def exportable(klass, html_class: [])
|
|
13
|
+
tag.a "Export as excel", class: html_class.append("filter-btn modal-btn mr-2"), data: {toggle: "modal", target: "#exportmodal"} do
|
|
14
|
+
concat tag.i class: 'fa fa-download'
|
|
15
|
+
concat tag.span " Export"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def column_pop_up(klass, required_filters = nil)
|
|
20
|
+
tag.div class: "modal fade form-modal", id: "exportmodal", role: "dialog", aria: {labelledby: "exportModal"} do
|
|
21
|
+
tag.div class: "modal-dialog modal-lg", role: "document" do
|
|
22
|
+
tag.div class: "modal-content" do
|
|
23
|
+
concat pop_ups(klass, required_filters)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def pop_ups(klass, required_filters)
|
|
30
|
+
tag.div do
|
|
31
|
+
concat pop_up_header
|
|
32
|
+
concat pop_up_body(klass, required_filters)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def pop_up_header
|
|
37
|
+
tag.div class: "modal-header" do
|
|
38
|
+
tag.button type: "button", class: "close", data: {dismiss: "modal"}, aria: {label: "Close"} do
|
|
39
|
+
tag.span "X", aria: {hidden: "true"}
|
|
40
|
+
end
|
|
41
|
+
tag.h4 "Select columns to export", class: "modal-title", id: "exportModal"
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def pop_up_body(klass, required_filters)
|
|
46
|
+
tag.div class: "modal-body" do
|
|
47
|
+
form_tag '/cm_admin/export_to_file.js', id: 'export-to-file-form', style: "width: 100%;", class:"cm-admin-csv-export-form" do
|
|
48
|
+
concat hidden_field_tag 'class_name', klass.name.to_s, id: 'export-to-file-klass'
|
|
49
|
+
concat checkbox_row(klass)
|
|
50
|
+
concat tag.hr
|
|
51
|
+
concat submit_tag 'Export', class: 'btn btn-primary btn-bordered export-to-file-btn'
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def checkbox_row(klass)
|
|
57
|
+
tag.div class: "row" do
|
|
58
|
+
CmAdmin::Models::Export.exportable_columns(klass).each do |column_path|
|
|
59
|
+
concat create_checkbox(column_path)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def create_checkbox(column_path)
|
|
65
|
+
tag.div class: "col-md-4" do
|
|
66
|
+
concat check_box_tag "columns[]", column_path, id: column_path.to_s.gsub('/', '-')
|
|
67
|
+
concat " " + column_path.to_s.gsub('/', '_').humanize
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
end
|
|
72
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module CmAdmin
|
|
2
|
+
module ViewHelpers
|
|
3
|
+
module ColumnFieldHelper
|
|
4
|
+
|
|
5
|
+
def column_for_field_helper(ar_object, column)
|
|
6
|
+
value = ar_object.send(column.db_column_name)
|
|
7
|
+
case column.column_type
|
|
8
|
+
when :datetime
|
|
9
|
+
if column.format.present?
|
|
10
|
+
value = ar_object.send(column.db_column_name).strftime(column.format)
|
|
11
|
+
else
|
|
12
|
+
value = ar_object.send(column.db_column_name).strftime("%d/%m/%Y")
|
|
13
|
+
end
|
|
14
|
+
if column.prefix.present?
|
|
15
|
+
value = column.prefix.to_s + ' ' + value
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
return value
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module CmAdmin
|
|
2
|
+
module ViewHelpers
|
|
3
|
+
module FormFieldHelper
|
|
4
|
+
def input_field_for_column(f, field)
|
|
5
|
+
case field.type
|
|
6
|
+
when :integer
|
|
7
|
+
return f.number_field field.name, class: 'normal-input'
|
|
8
|
+
when :string
|
|
9
|
+
return f.text_field field.name, class: 'normal-input'
|
|
10
|
+
when :text
|
|
11
|
+
return f.text_area field.name, class: 'normal-input'
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
require_relative 'form_field_helper'
|
|
2
|
+
module CmAdmin
|
|
3
|
+
module ViewHelpers
|
|
4
|
+
module FormHelper
|
|
5
|
+
include FormFieldHelper
|
|
6
|
+
REJECTABLE = %w(id created_at updated_at)
|
|
7
|
+
|
|
8
|
+
def generate_form(resource, cm_model)
|
|
9
|
+
if resource.new_record?
|
|
10
|
+
action = :new
|
|
11
|
+
method = :post
|
|
12
|
+
else
|
|
13
|
+
action = :edit
|
|
14
|
+
method = :patch
|
|
15
|
+
end
|
|
16
|
+
if cm_model.available_fields[action].empty?
|
|
17
|
+
return form_with_all_fields(resource, method)
|
|
18
|
+
else
|
|
19
|
+
return form_with_mentioned_fields(resource, cm_model.available_fields[:edit], method)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def form_with_all_fields(resource, method)
|
|
24
|
+
columns = resource.class.columns.dup
|
|
25
|
+
table_name = resource.class.table_name
|
|
26
|
+
columns.reject! { |i| REJECTABLE.include?(i.name) }
|
|
27
|
+
url = CmAdmin::Engine.mount_path + "/#{table_name}/#{resource.id}"
|
|
28
|
+
set_form_for_fields(resource, columns, url, method)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def form_with_mentioned_fields(resource, available_fields, method)
|
|
32
|
+
columns = resource.class.columns.select { |i| available_fields.include?(i.name.to_sym) }
|
|
33
|
+
table_name = resource.class.table_name
|
|
34
|
+
columns.reject! { |i| REJECTABLE.include?(i.name) }
|
|
35
|
+
url = CmAdmin::Engine.mount_path + "/#{table_name}/#{resource.id}"
|
|
36
|
+
set_form_for_fields(resource, columns, url, method)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def set_form_for_fields(resource, columns, url, method)
|
|
40
|
+
form_for(resource, url: url, method: method) do |f|
|
|
41
|
+
columns.each do |field|
|
|
42
|
+
concat f.label field.name, class: 'field-label'
|
|
43
|
+
concat tag.br
|
|
44
|
+
concat input_field_for_column(f, field)
|
|
45
|
+
concat tag.p resource.errors[field.name].first if resource.errors[field.name].present?
|
|
46
|
+
concat tag.br
|
|
47
|
+
concat tag.br
|
|
48
|
+
end
|
|
49
|
+
concat tag.br
|
|
50
|
+
concat f.submit 'Save', class: 'cta-btn mt-3'
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require 'pagy'
|
|
2
|
+
module CmAdmin
|
|
3
|
+
module ViewHelpers
|
|
4
|
+
module NavigationHelper
|
|
5
|
+
include Pagy::Frontend
|
|
6
|
+
def sidebar_navigation
|
|
7
|
+
CmAdmin.cm_admin_models.map { |model|
|
|
8
|
+
path = CmAdmin::Engine.mount_path + '/' + model.name.underscore.pluralize
|
|
9
|
+
"<a href=#{path}><div class='menu-item'>
|
|
10
|
+
<span class='menu-icon'><i class='fa fa-th-large'></i></span>
|
|
11
|
+
#{model.name}
|
|
12
|
+
</div></a>".html_safe
|
|
13
|
+
}.join.html_safe
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module CmAdmin
|
|
2
|
+
module ViewHelpers
|
|
3
|
+
module PageInfoHelper
|
|
4
|
+
def page_title
|
|
5
|
+
@action.title || @model.title || "#{@model.ar_model.name} | #{@action.name&.titleize} | Admin"
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def page_url(action_name=@action.name, ar_object=nil)
|
|
9
|
+
base_path = CmAdmin::Engine.mount_path + '/' + @model.name.downcase.pluralize
|
|
10
|
+
case action_name
|
|
11
|
+
when 'index'
|
|
12
|
+
base_path
|
|
13
|
+
when 'new'
|
|
14
|
+
base_path + '/new'
|
|
15
|
+
when 'edit'
|
|
16
|
+
base_path + "/#{ar_object.id}" + '/edit'
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -1,36 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
class InstallGenerator < Rails::Generators::Base
|
|
3
|
-
source_root File.expand_path('templates', __dir__)
|
|
4
|
-
|
|
5
|
-
desc <<-DESC.strip_heredoc
|
|
6
|
-
Generates layout for the entire admin panel
|
|
7
|
-
|
|
8
|
-
For example:
|
|
9
|
-
rails g cm_admin:install
|
|
10
|
-
|
|
11
|
-
It copies the respectively layout files and the necessary asset files.
|
|
12
|
-
|
|
13
|
-
DESC
|
|
1
|
+
require 'rails/generators'
|
|
14
2
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
copy_file "layouts/_side_navbar.html.slim", "app/views/layouts/_side_navbar.html.slim"
|
|
25
|
-
copy_file "layouts/_navbar.html.slim", "app/views/layouts/_navbar.html.slim"
|
|
26
|
-
remove_file "app/views/layouts/application.html.erb"
|
|
27
|
-
copy_file "layouts/application.html.slim", "app/views/layouts/application.html.slim"
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def copy_asset_file
|
|
31
|
-
copy_file "assets/images/cm.png", "app/assets/images/cm.png"
|
|
32
|
-
directory "assets/stylesheets/", "app/assets/stylesheets/"
|
|
33
|
-
remove_file "app/assets/stylesheets/application.css"
|
|
3
|
+
module CmAdmin
|
|
4
|
+
module Generators
|
|
5
|
+
class InstallGenerator < Rails::Generators::Base
|
|
6
|
+
source_root File.expand_path('templates', __dir__)
|
|
7
|
+
|
|
8
|
+
def copy_initializer
|
|
9
|
+
copy_file 'cm_admin_initializer.rb', 'config/initializers/cm_admin.rb'
|
|
10
|
+
route 'mount CmAdmin::Engine => "/cm_admin"'
|
|
11
|
+
end
|
|
34
12
|
end
|
|
35
13
|
end
|
|
36
14
|
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# desc "Explaining what the task does"
|
|
2
|
+
# task :cm_admin do
|
|
3
|
+
# # Task goes here
|
|
4
|
+
# end
|
|
5
|
+
|
|
6
|
+
def ensure_log_goes_to_stdout
|
|
7
|
+
old_logger = Webpacker.logger
|
|
8
|
+
Webpacker.logger = ActiveSupport::Logger.new(STDOUT)
|
|
9
|
+
yield
|
|
10
|
+
ensure
|
|
11
|
+
Webpacker.logger = old_logger
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
namespace :cm_admin do
|
|
15
|
+
namespace :webpacker do
|
|
16
|
+
desc "Install deps with yarn"
|
|
17
|
+
task :yarn_install do
|
|
18
|
+
Dir.chdir(File.join(__dir__, "../..")) do
|
|
19
|
+
system "yarn install --no-progress --production"
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
desc "Compile JavaScript packs using webpack for production with digests"
|
|
24
|
+
task compile: [:yarn_install, :environment] do
|
|
25
|
+
Webpacker.with_node_env("production") do
|
|
26
|
+
ensure_log_goes_to_stdout do
|
|
27
|
+
if CmAdmin.webpacker.commands.compile
|
|
28
|
+
# Successful compilation!
|
|
29
|
+
else
|
|
30
|
+
# Failed compilation
|
|
31
|
+
exit!
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def yarn_install_available?
|
|
40
|
+
rails_major = Rails::VERSION::MAJOR
|
|
41
|
+
rails_minor = Rails::VERSION::MINOR
|
|
42
|
+
|
|
43
|
+
rails_major > 5 || (rails_major == 5 && rails_minor >= 1)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def enhance_assets_precompile
|
|
47
|
+
# yarn:install was added in Rails 5.1
|
|
48
|
+
deps = yarn_install_available? ? [] : ["cm_admin:webpacker:yarn_install"]
|
|
49
|
+
Rake::Task["assets:precompile"].enhance(deps) do
|
|
50
|
+
Rake::Task["cm_admin:webpacker:compile"].invoke
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Compile packs after we've compiled all other assets during precompilation
|
|
55
|
+
skip_webpacker_precompile = %w(no false n f).include?(ENV["WEBPACKER_PRECOMPILE"])
|
|
56
|
+
|
|
57
|
+
unless skip_webpacker_precompile
|
|
58
|
+
if Rake::Task.task_defined?("assets:precompile")
|
|
59
|
+
enhance_assets_precompile
|
|
60
|
+
else
|
|
61
|
+
Rake::Task.define_task("assets:precompile" =>"cm_admin:webpacker:compile")
|
|
62
|
+
end
|
|
63
|
+
end
|