cm-admin 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|