express_admin 1.1.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.
Files changed (155) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +37 -0
  4. data/Rakefile +32 -0
  5. data/app/assets/fonts/app_express.eot +0 -0
  6. data/app/assets/fonts/app_express.svg +21 -0
  7. data/app/assets/fonts/app_express.ttf +0 -0
  8. data/app/assets/fonts/app_express.woff +0 -0
  9. data/app/assets/fonts/ionicons.eot +0 -0
  10. data/app/assets/fonts/ionicons.svg +1899 -0
  11. data/app/assets/fonts/ionicons.ttf +0 -0
  12. data/app/assets/fonts/ionicons.woff +0 -0
  13. data/app/assets/javascripts/express_admin/admin.js +30 -0
  14. data/app/assets/javascripts/express_admin/dataTables/dataTables.foundation.js +183 -0
  15. data/app/assets/javascripts/express_admin/dataTables/jquery.dataTables.js +14382 -0
  16. data/app/assets/javascripts/express_admin/utility.js +30 -0
  17. data/app/assets/javascripts/express_admin.js +7 -0
  18. data/app/assets/stylesheets/dataTables/dataTables.foundation.css.erb +217 -0
  19. data/app/assets/stylesheets/express_admin/components/_empty_state.sass +10 -0
  20. data/app/assets/stylesheets/express_admin/components/_megadropdown.sass +71 -0
  21. data/app/assets/stylesheets/express_admin/express_icons.sass +56 -0
  22. data/app/assets/stylesheets/express_admin/foundation_and_overrides.scss +1443 -0
  23. data/app/assets/stylesheets/express_admin/globals/_mixins.sass +9 -0
  24. data/app/assets/stylesheets/express_admin/globals/_typography.sass +30 -0
  25. data/app/assets/stylesheets/express_admin/globals/_variables.sass +16 -0
  26. data/app/assets/stylesheets/express_admin/plugins/_dataTables.sass +118 -0
  27. data/app/assets/stylesheets/express_admin/plugins/_select2.sass +91 -0
  28. data/app/assets/stylesheets/express_admin/screen.sass +47 -0
  29. data/app/assets/stylesheets/express_admin/sections/_devise.sass +42 -0
  30. data/app/assets/stylesheets/express_admin/sections/_header.sass +98 -0
  31. data/app/assets/stylesheets/express_admin/sections/_main_content.sass +63 -0
  32. data/app/assets/stylesheets/express_admin/sections/_sidebar.sass +42 -0
  33. data/app/assets/stylesheets/express_admin/shared/_alerts.sass +45 -0
  34. data/app/assets/stylesheets/express_admin/shared/_breadcrumbs.sass +3 -0
  35. data/app/assets/stylesheets/express_admin/shared/_buttons.sass +33 -0
  36. data/app/assets/stylesheets/express_admin/shared/_forms.sass +99 -0
  37. data/app/assets/stylesheets/express_admin/shared/_labels.sass +16 -0
  38. data/app/assets/stylesheets/express_admin/shared/_loading.sass +2 -0
  39. data/app/assets/stylesheets/express_admin/shared/_media_object.sass +23 -0
  40. data/app/assets/stylesheets/express_admin/shared/_messages.sass +12 -0
  41. data/app/assets/stylesheets/express_admin/shared/_navigation.sass +20 -0
  42. data/app/assets/stylesheets/express_admin/shared/_progress.sass +3 -0
  43. data/app/assets/stylesheets/express_admin/shared/_reveal.sass +20 -0
  44. data/app/assets/stylesheets/express_admin/shared/_tables.sass +75 -0
  45. data/app/assets/stylesheets/express_admin/shared/_tabs.sass +25 -0
  46. data/app/assets/stylesheets/express_admin/shared/_widgets.sass +57 -0
  47. data/app/assets/stylesheets/express_admin.css +9 -0
  48. data/app/assets/stylesheets/ionicons/ionicons.css.sass +1873 -0
  49. data/app/components/express_admin/addon_sidebar_component.rb +47 -0
  50. data/app/components/express_admin/flash_message_component.rb +19 -0
  51. data/app/components/express_admin/main_region.rb +9 -0
  52. data/app/components/express_admin/mega_menu_component.rb +68 -0
  53. data/app/components/express_admin/page_header_component.rb +39 -0
  54. data/app/components/express_admin/setting_form.rb +45 -0
  55. data/app/components/express_admin/sidebar_region.rb +11 -0
  56. data/app/components/express_admin/smart_form.rb +70 -0
  57. data/app/components/express_admin/smart_table.rb +97 -0
  58. data/app/components/express_admin/widget_box.rb +22 -0
  59. data/app/helpers/express_admin/admin_helper.rb +104 -0
  60. data/app/helpers/express_admin/module_settings_helper.rb +53 -0
  61. data/app/views/express_admin/dashboard/show.html.et +6 -0
  62. data/app/views/layouts/express_admin/admin.html.et +31 -0
  63. data/app/views/layouts/express_admin/external.html.et +15 -0
  64. data/app/views/shared/express_admin/_messages.html.et +1 -0
  65. data/app/views/shared/express_admin/_navigation_bar.html.et +20 -0
  66. data/app/views/shared/express_admin/_navigation_bar_profile.html.et +8 -0
  67. data/app/views/shared/express_admin/_title.html.et +8 -0
  68. data/config/initializers/gravatar_image_tag.rb +4 -0
  69. data/lib/express_admin/engine.rb +52 -0
  70. data/lib/express_admin/menu.rb +62 -0
  71. data/lib/express_admin/version.rb +3 -0
  72. data/lib/express_admin.rb +4 -0
  73. data/lib/generators/express_admin/install/USAGE +23 -0
  74. data/lib/generators/express_admin/install/install_generator.rb +97 -0
  75. data/lib/generators/express_admin/install/templates/assets/javascripts/application.js +1 -0
  76. data/lib/generators/express_admin/install/templates/assets/stylesheets/application.css +5 -0
  77. data/lib/generators/express_admin/install/templates/config/menu.yml.erb +3 -0
  78. data/lib/generators/express_admin/install/templates/controllers/admin_controller.rb.erb +34 -0
  79. data/lib/generators/express_admin/install/templates/install/USAGE +8 -0
  80. data/lib/generators/express_admin/install/templates/install/installer.rb.erb +10 -0
  81. data/lib/generators/express_admin/install/templates/install/installer_test.rb.erb +16 -0
  82. data/lib/generators/express_admin/install/templates/views/layouts/admin.html.et +1 -0
  83. data/lib/generators/express_admin/scaffold/scaffold_generator.rb +135 -0
  84. data/lib/generators/express_admin/scaffold/templates/controller/controller.rb +14 -0
  85. data/lib/generators/express_admin/scaffold/templates/index.html.et.erb +10 -0
  86. data/lib/generators/express_admin/scaffold/templates/model/model.rb +4 -0
  87. data/lib/generators/express_admin/scaffold/templates/show.html.et.erb +10 -0
  88. data/lib/tasks/express_admin_tasks.rake +4 -0
  89. data/test/bin/run +1 -0
  90. data/test/dummy/README.rdoc +28 -0
  91. data/test/dummy/Rakefile +6 -0
  92. data/test/dummy/app/assets/javascripts/application.js +13 -0
  93. data/test/dummy/app/assets/javascripts/demo.js +2 -0
  94. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  95. data/test/dummy/app/assets/stylesheets/demo.css.scss +3 -0
  96. data/test/dummy/app/controllers/application_controller.rb +5 -0
  97. data/test/dummy/app/controllers/demo_controller.rb +8 -0
  98. data/test/dummy/app/helpers/application_helper.rb +2 -0
  99. data/test/dummy/app/helpers/demo_helper.rb +2 -0
  100. data/test/dummy/app/views/demo/show.html.et +2 -0
  101. data/test/dummy/app/views/demo/sign_in.html.et +30 -0
  102. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  103. data/test/dummy/bin/bundle +3 -0
  104. data/test/dummy/bin/rails +4 -0
  105. data/test/dummy/bin/rake +4 -0
  106. data/test/dummy/config/application.rb +23 -0
  107. data/test/dummy/config/boot.rb +5 -0
  108. data/test/dummy/config/database.yml +25 -0
  109. data/test/dummy/config/environment.rb +5 -0
  110. data/test/dummy/config/environments/development.rb +37 -0
  111. data/test/dummy/config/environments/production.rb +83 -0
  112. data/test/dummy/config/environments/test.rb +43 -0
  113. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  114. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  115. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  116. data/test/dummy/config/initializers/inflections.rb +16 -0
  117. data/test/dummy/config/initializers/mime_types.rb +4 -0
  118. data/test/dummy/config/initializers/session_store.rb +3 -0
  119. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  120. data/test/dummy/config/locales/en.yml +23 -0
  121. data/test/dummy/config/routes.rb +7 -0
  122. data/test/dummy/config/secrets.yml +22 -0
  123. data/test/dummy/config.ru +4 -0
  124. data/test/dummy/db/schema.rb +22 -0
  125. data/test/dummy/db/test.sqlite3 +0 -0
  126. data/test/dummy/log/test.log +3847 -0
  127. data/test/dummy/public/404.html +67 -0
  128. data/test/dummy/public/422.html +67 -0
  129. data/test/dummy/public/500.html +66 -0
  130. data/test/dummy/public/favicon.ico +0 -0
  131. data/test/dummy/test/controllers/demo_controller_test.rb +9 -0
  132. data/test/dummy/test/helpers/demo_helper_test.rb +4 -0
  133. data/test/fixtures/engine.rb +5 -0
  134. data/test/fixtures/express_admin/test_menu.yml +12 -0
  135. data/test/fixtures/routes.rb +2 -0
  136. data/test/generators_test_helper.rb +32 -0
  137. data/test/lib/express_admin/menu_test.rb +18 -0
  138. data/test/lib/generators/express_admin/install_generator_test.rb +72 -0
  139. data/test/lib/generators/express_admin/scaffold_generator_test.rb +67 -0
  140. data/test/test_helper.rb +18 -0
  141. data/vendor/assets/images/dataTables/Sorting icons.psd +0 -0
  142. data/vendor/assets/images/dataTables/back_disabled.png +0 -0
  143. data/vendor/assets/images/dataTables/back_enabled.png +0 -0
  144. data/vendor/assets/images/dataTables/back_enabled_hover.png +0 -0
  145. data/vendor/assets/images/dataTables/favicon.ico +0 -0
  146. data/vendor/assets/images/dataTables/forward_disabled.png +0 -0
  147. data/vendor/assets/images/dataTables/forward_enabled.png +0 -0
  148. data/vendor/assets/images/dataTables/forward_enabled_hover.png +0 -0
  149. data/vendor/assets/images/dataTables/sort_asc.png +0 -0
  150. data/vendor/assets/images/dataTables/sort_asc_disabled.png +0 -0
  151. data/vendor/assets/images/dataTables/sort_both.png +0 -0
  152. data/vendor/assets/images/dataTables/sort_desc.png +0 -0
  153. data/vendor/assets/images/dataTables/sort_desc_disabled.png +0 -0
  154. data/vendor/assets/javascripts/jquery.loadingdotdotdot.js +82 -0
  155. metadata +432 -0
@@ -0,0 +1,4 @@
1
+ GravatarImageTag.configure do |config|
2
+ config.size = 40 # Set this to globally set the size of the gravatar image returned (1..512). Gravatar's default is 80
3
+ config.secure = true # Set this to true if you require secure images on your pages.
4
+ end
@@ -0,0 +1,52 @@
1
+ require "express_admin/menu"
2
+ require "express_admin/version"
3
+ require "express_templates"
4
+ require "jquery-rails"
5
+ require "foundation-rails"
6
+ require "bourbon"
7
+ require "gravatar_image_tag"
8
+ require "kaminari"
9
+ require "responders"
10
+ require 'inherited_resources'
11
+
12
+ # should be a way to add this folder to rails' autoload paths
13
+ components = Dir.glob(File.join(File.dirname(__FILE__), '..', '..', 'app', 'components', '**', '*.rb'))
14
+ components.each {|component| require component }
15
+
16
+ module ExpressAdmin
17
+ class Engine < ::Rails::Engine
18
+
19
+ initializer :assets do |config|
20
+ engine_assets_path = File.join(File.dirname(__FILE__), '..', '..', 'app', 'assets')
21
+ all_assets = Dir.glob File.join(engine_assets_path, 'stylesheets', '**', '*.css*')
22
+ all_assets += Dir.glob File.join(engine_assets_path, 'javascripts', '**', '*.js*')
23
+ all_assets.each {|path| path.gsub!("#{engine_assets_path}/stylesheets/", '')}
24
+ all_assets.each {|path| path.gsub!("#{engine_assets_path}/javascripts/", '')}
25
+ all_assets.each {|path| path.gsub!("#{engine_assets_path}/fonts/", '')}
26
+ all_assets.each {|path| path.gsub!(/.(scss|coffee)$/, '')}
27
+ Rails.application.config.assets.paths << Rails.root.join('app', 'assets', 'fonts')
28
+ Rails.application.config.assets.precompile << /\.(?:svg|eot|woff|ttf)$/
29
+ Rails.application.config.assets.precompile << /\.(?:png)$/
30
+ Rails.application.config.assets.precompile += all_assets
31
+ end
32
+
33
+ def all_rails_engines
34
+ Rails.application.eager_load!
35
+ @all_engines ||= ::Rails::Engine.descendants
36
+ end
37
+
38
+ # Find all the rails engines that have
39
+ # :addon_name presumably from including
40
+ # ExpressAdmin::Menu::Loader
41
+ def all_addons
42
+ @all_addons ||= all_rails_engines.select do |engine|
43
+ engine.methods.include?(:addon_name)
44
+ end
45
+ end
46
+
47
+ end
48
+
49
+ class Railtie < ::Rails::Railtie
50
+ config.app_generators.template_engine :et
51
+ end
52
+ end
@@ -0,0 +1,62 @@
1
+ module ExpressAdmin
2
+ # Provide menus for Express Admin addon engines.
3
+ #
4
+ # To use:
5
+ #
6
+ # 1) include ExpressAdmin::Menu::Loader in your engine.rb
7
+ # 2) add a config/menu.yml defining the menu structure
8
+ #
9
+ # Example:
10
+ #
11
+ # title: 'Blog'
12
+ # path: 'express_blog.admin_blog_posts_path'
13
+ # items:
14
+ # -
15
+ # title: 'Posts'
16
+ # path: 'express_blog.admin_blog_posts_path'
17
+ # -
18
+ # title: 'Categories'
19
+ # path: 'express_blog.admin_blog_categories_path'
20
+ module Menu
21
+
22
+ # Return the top level MenuItem for the addon or defined in the supplied path.
23
+ #
24
+ # Accepts an addon_name such as :express_admin or a path to a yaml file
25
+ # containing a menu definition.
26
+ def self.[](addon_name)
27
+ @menus ||= {}
28
+ @menus[addon_name.to_sym] ||= begin
29
+ addon_path = Gem.loaded_specs[addon_name].full_gem_path if addon_name.to_s.match(/^\w+$/)
30
+ menu_yml_path = File.join(addon_path, 'config', 'menu.yml')
31
+ from(menu_yml_path)
32
+ end
33
+ end
34
+
35
+ def self.from(yaml_path)
36
+ raise "unable to locate #{yaml_path}" unless File.exists?(yaml_path)
37
+ MenuItem.new YAML.load_file(yaml_path).with_indifferent_access
38
+ end
39
+
40
+
41
+ class MenuItem
42
+ attr :title, :path, :position, :items
43
+ def initialize(hash)
44
+ @title = hash[:title]
45
+ @path = hash[:path]
46
+ @position = hash[:position] || 99
47
+ @items = (hash[:items]||[]).map {|item| MenuItem.new(item)}
48
+ end
49
+ end
50
+
51
+ module Loader
52
+ def self.included(base)
53
+ class << base
54
+ def addon_name
55
+ self.to_s.split('::')[-2].underscore.to_sym
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+ end
62
+ end
@@ -0,0 +1,3 @@
1
+ module ExpressAdmin
2
+ VERSION = "1.1.0"
3
+ end
@@ -0,0 +1,4 @@
1
+ require "express_admin/engine"
2
+
3
+ module ExpressAdmin
4
+ end
@@ -0,0 +1,23 @@
1
+ Description:
2
+ Installs a new AppExpress module.
3
+
4
+ Example:
5
+ `rails generate express_admin:install`
6
+
7
+ Creates a standard AppExpress module:
8
+ app/assets/javascripts/express_awesome/admin/ajax_forms.js
9
+ app/controllers/express_awesome/admin_controller.rb
10
+ app/views/layouts/express_awesome/admin.html.et
11
+ config/menu.yml
12
+ lib/generators/express_awesome/install/install_generator.rb
13
+ lib/generators/express_awesome/install/USAGE
14
+ test/lib/generators/express_awesome/install/install_generator_test.rb
15
+
16
+ Adds an entry to config/routes.rb:
17
+ `mount ExpressAwesome::Engine, at: ExpressAwesome::Engine.config.express_awesome_mount_point`
18
+
19
+ Adds a line to app/assets/javascripts/express_awesome/admin/application.js:
20
+ `//= require express_admin`
21
+
22
+ Adds a line to app/assets/stylesheets/express_awesome/admin/application.css:
23
+ `*= require express_admin`
@@ -0,0 +1,97 @@
1
+ module ExpressAdmin
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ source_root File.expand_path('../templates', __FILE__)
5
+ attr_reader :project_name, :project_class
6
+
7
+ def create_common_files
8
+ @project_name = destination_root.split('/').last
9
+ end
10
+
11
+ def create_installer
12
+ @project_class = @project_name.camelize
13
+
14
+ template 'install/installer.rb.erb',
15
+ File.join('lib/generators', @project_name, 'install', 'install_generator.rb')
16
+ template 'install/USAGE', File.join('lib/generators', @project_name, 'install', 'USAGE')
17
+ empty_directory File.join('lib/generators', @project_name, 'install', 'templates')
18
+ template 'install/installer_test.rb.erb',
19
+ File.join('test/lib/generators', @project_name, 'install', 'install_generator_test.rb')
20
+ end
21
+
22
+ def create_admin_controller
23
+ template 'controllers/admin_controller.rb.erb',
24
+ File.join('app/controllers', @project_name, 'admin', 'admin_controller.rb')
25
+ end
26
+
27
+ def create_admin_layout
28
+ template 'views/layouts/admin.html.et',
29
+ File.join('app/views/layouts', @project_name, 'admin.html.et')
30
+ end
31
+
32
+ def create_application_js
33
+ empty_directory("app/assets/javascripts/#{@project_name}/admin")
34
+ template 'assets/javascripts/application.js',
35
+ File.join('app/assets/javascripts', @project_name, 'admin', 'application.js')
36
+ end
37
+
38
+ def create_application_css
39
+ empty_directory("app/assets/stylesheets/#{@project_name}/admin")
40
+ template 'assets/stylesheets/application.css',
41
+ File.join('app/assets/stylesheets', @project_name, 'admin', 'application.css')
42
+ end
43
+
44
+ def insert_mount_point
45
+ @project_class = @project_name.camelize
46
+
47
+ if open(engine_path).any?
48
+ inject_into_file engine_path,
49
+ " #{@project_class}::Engine.config.#{@project_name}_mount_point = '/'\n",
50
+ after: "class Engine < ::Rails::Engine\n"
51
+ end
52
+ end
53
+
54
+ def require_express_admin
55
+ @project_class = @project_name.camelize
56
+
57
+ if open(engine_path).any?
58
+ inject_into_file engine_path, "require 'express_admin'\n",
59
+ before: "module #{@project_class}"
60
+ end
61
+ end
62
+
63
+ def create_menu
64
+ template 'config/menu.yml.erb', File.join('config/menu.yml')
65
+ end
66
+
67
+ def add_express_admin_menu
68
+ if open(engine_path).any?
69
+ inject_into_file engine_path, " include ::ExpressAdmin::Menu::Loader\n",
70
+ after: "class Engine < ::Rails::Engine\n"
71
+ end
72
+ end
73
+
74
+ def precompile_assets
75
+ assets = <<-'EOD'
76
+ initializer :assets do |config|
77
+ engine_assets_path = File.join(File.dirname(__FILE__), '..', '..', 'app', 'assets')
78
+ all_assets = Dir.glob File.join(engine_assets_path, 'stylesheets', '**', '*.css*')
79
+ all_assets += Dir.glob File.join(engine_assets_path, 'javascripts', '**', '*.js*')
80
+ all_assets.each {|path| path.gsub!("#{engine_assets_path}/stylesheets/", '')}
81
+ all_assets.each {|path| path.gsub!("#{engine_assets_path}/javascripts/", '')}
82
+ Rails.application.config.assets.precompile += all_assets
83
+ end
84
+ EOD
85
+ if open(engine_path).any?
86
+ inject_into_file engine_path, assets, after: "class Engine < ::Rails::Engine\n"
87
+ end
88
+ end
89
+
90
+ private
91
+
92
+ def engine_path
93
+ Rails.root ? "#{Rails.root}/lib/#{@project_name}/engine.rb" : "lib/#{@project_name}/engine.rb"
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,5 @@
1
+ /*
2
+ *= require express_admin
3
+ *= require_tree .
4
+ *= require_self
5
+ */
@@ -0,0 +1,3 @@
1
+ title: '<%= project_name.titleize %>'
2
+ path: '#'
3
+ items:
@@ -0,0 +1,34 @@
1
+ require_dependency "<%= project_name %>/application_controller"
2
+
3
+ module <%= project_class %>
4
+ module Admin
5
+ class AdminController < ApplicationController
6
+ inherit_resources # Use inherited_resources
7
+
8
+ helper ::ExpressAdmin::AdminHelper
9
+ before_filter :authenticate_user! if defined?(Devise)
10
+ layout "<%= project_name %>/admin"
11
+
12
+ before_filter :load_collection, only: [:show]
13
+ before_filter :build_new_resource, only: [:index]
14
+
15
+ def show
16
+ show! do |format|
17
+ format.html { render :index }
18
+ end
19
+ end
20
+
21
+ private
22
+
23
+ def load_collection
24
+ collection # from InheritedResources
25
+ end
26
+
27
+ def build_new_resource
28
+ @resource_params = {}
29
+ build_resource
30
+ end
31
+
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,8 @@
1
+ Description:
2
+ Explain the generator
3
+
4
+ Example:
5
+ rails generate install Thing
6
+
7
+ This will create:
8
+ what/will/it/create
@@ -0,0 +1,10 @@
1
+ class <%= project_class %>::InstallGenerator < Rails::Generators::Base
2
+ source_root File.expand_path('../templates', __FILE__)
3
+
4
+ desc "mount <%= project_name %> engine"
5
+ def install
6
+ route "mount <%= project_class %>::Engine, at: <%= project_class %>::Engine.config.<%= project_name %>_mount_point"
7
+ rake "<%= project_name %>:install:migrations"
8
+ end
9
+
10
+ end
@@ -0,0 +1,16 @@
1
+ require 'test_helper'
2
+ require 'generators/<%= project_name %>/install/install_generator'
3
+
4
+ module <%= project_class %>
5
+ class <%= project_class %>::InstallGeneratorTest < Rails::Generators::TestCase
6
+ tests <%= project_class %>::InstallGenerator
7
+ destination Rails.root.join('tmp/generators')
8
+ setup :prepare_destination
9
+
10
+ # test "generator runs without errors" do
11
+ # assert_nothing_raised do
12
+ # run_generator ["arguments"]
13
+ # end
14
+ # end
15
+ end
16
+ end
@@ -0,0 +1 @@
1
+ render(template: 'layouts/express_admin/admin')
@@ -0,0 +1,135 @@
1
+ require 'rails/generators/rails/scaffold/scaffold_generator'
2
+
3
+ module ExpressAdmin
4
+ module Generators
5
+ class ScaffoldGenerator < ::Rails::Generators::ScaffoldGenerator
6
+ source_root File.expand_path("../templates", __FILE__)
7
+ attr_reader :view_path, :resource_class
8
+
9
+ remove_hook_for :scaffold_controller
10
+
11
+ def create_root_folder
12
+ empty_directory admin_view_path
13
+ end
14
+
15
+ def copy_view_files
16
+ available_views.each do |view|
17
+ template "#{view}.html.et.erb", File.join(admin_view_path, "#{view}.html.et")
18
+ end
19
+ end
20
+
21
+ def generate_controller
22
+ controller_file_path = File.join(["app/controllers", project_name, admin_controller_path, "#{controller_file_name}_controller.rb"].compact)
23
+ template "controller/controller.rb", controller_file_path
24
+ end
25
+
26
+ def add_route
27
+ route_path = Rails.root ? "#{Rails.root}/config/routes.rb": "config/routes.rb"
28
+ if open(route_path).grep("scope '#{project_path}'").any?
29
+ inject_into_file 'config/routes.rb', " resources :#{controller_file_name}\n",
30
+ after: "scope '#{project_path}' do\n"
31
+ else
32
+ if module_name
33
+ admin_route = <<-EOD
34
+ namespace :admin do
35
+ scope '#{module_name}' do
36
+ resources :#{controller_file_name}, except: [:edit]
37
+ end
38
+ end
39
+ EOD
40
+ else
41
+ admin_route = <<-EOD
42
+ namespace :admin do
43
+ resources :#{controller_file_name}, except: [:edit]
44
+ end
45
+ EOD
46
+ end
47
+ inject_into_file 'config/routes.rb', admin_route,
48
+ after: "#{namespaced?}::Engine.routes.draw do\n"
49
+ end
50
+ end
51
+
52
+ def add_menu_item
53
+ menu_entry = %Q(
54
+ -
55
+ title: '#{controller_file_name.titleize}'
56
+ path: '#{namespaced?.to_s.underscore}.#{project_name}_admin_#{controller_file_name}_path'
57
+ )
58
+ menu_path = Rails.root ? "#{Rails.root}/config/menu.yml": "config/menu.yml"
59
+ if File.exists?(menu_path)
60
+ inject_into_file menu_path, menu_entry, after: 'items:'
61
+ end
62
+ end
63
+
64
+
65
+ protected
66
+ def available_views
67
+ %w(index)
68
+ end
69
+
70
+ def available_actions
71
+ %w(index show update destroy)
72
+ end
73
+
74
+ def handler
75
+ :et
76
+ end
77
+
78
+ def project_path
79
+ project_name || Rails.application.class.parent_name
80
+ end
81
+
82
+ def project_name
83
+ namespaced_path rescue nil
84
+ end
85
+
86
+ def module_name
87
+ controller_class_path.last if controller_class_path.size.eql?(2)
88
+ end
89
+
90
+ def admin_controller_path
91
+ # place the generated controller into an Admin module
92
+ acp = controller_class_path.dup
93
+ if acp.empty?
94
+ acp.push 'admin'
95
+ else
96
+ acp.insert(1,'admin').compact.slice(1..-1)
97
+ end
98
+ File.join acp
99
+ end
100
+
101
+ def model_class_name
102
+ class_path_parts = class_name.split("::")
103
+ class_path_parts.unshift namespace.to_s if namespaced?
104
+ class_path_parts.join("::")
105
+ end
106
+
107
+ def admin_view_path
108
+ path_parts = ["app/views", project_name, admin_controller_path, controller_file_name]
109
+ File.join path_parts.compact
110
+ end
111
+
112
+ def model_path
113
+ if Rails.application
114
+ class_name.underscore
115
+ else
116
+ # drop the module name for the engine as the generators
117
+ # we invoke will automatically add it back again
118
+ class_name.split("::").slice(1..-1).join("::").underscore
119
+ end
120
+ end
121
+
122
+ private
123
+
124
+ def destroy(what, *args)
125
+ log :destroy, what
126
+ argument = args.flat_map(&:to_s).join(" ")
127
+ # in_root { run_ruby_script("bin/rails destroy #{what} #{argument}", verbose: true) }
128
+ system("bin/rails destroy #{what} #{argument}")
129
+ end
130
+
131
+
132
+
133
+ end
134
+ end
135
+ end
@@ -0,0 +1,14 @@
1
+ <% module_namespacing do -%>
2
+ module Admin
3
+ class <%= controller_class_name %>Controller < AdminController
4
+
5
+ defaults resource_class: <%= model_class_name %>
6
+
7
+ private
8
+
9
+ def <%= singular_table_name %>_params
10
+ params.require(:<%= singular_table_name %>).permit!
11
+ end
12
+ end
13
+ end
14
+ <% end -%>
@@ -0,0 +1,10 @@
1
+ row {
2
+ main_region {
3
+ smart_table(:<%= plural_table_name %>, show_on_click: true)
4
+ }
5
+ sidebar_region {
6
+ widget_box(:new_<%= singular_table_name %>) {
7
+ smart_form(:<%= singular_table_name %>)
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,4 @@
1
+ module <%= project_name %>
2
+ class <%= singular_table_name.classify %> < ActiveRecord::Base
3
+ end
4
+ end
@@ -0,0 +1,10 @@
1
+ row {
2
+ main_region {
3
+ smart_table(:<%= plural_table_name %>)
4
+ }
5
+ sidebar_region {
6
+ widget_box(:edit_<%= singular_table_name %>) {
7
+ smart_form(:<%= singular_table_name %>)
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :express_admin do
3
+ # # Task goes here
4
+ # end
data/test/bin/run ADDED
@@ -0,0 +1 @@
1
+ rake test
@@ -0,0 +1,28 @@
1
+ == README
2
+
3
+ This README would normally document whatever steps are necessary to get the
4
+ application up and running.
5
+
6
+ Things you may want to cover:
7
+
8
+ * Ruby version
9
+
10
+ * System dependencies
11
+
12
+ * Configuration
13
+
14
+ * Database creation
15
+
16
+ * Database initialization
17
+
18
+ * How to run the test suite
19
+
20
+ * Services (job queues, cache servers, search engines, etc.)
21
+
22
+ * Deployment instructions
23
+
24
+ * ...
25
+
26
+
27
+ Please feel free to use a different markup language if you do not plan to run
28
+ <tt>rake doc:app</tt>.
@@ -0,0 +1,6 @@
1
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
2
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
+
4
+ require File.expand_path('../config/application', __FILE__)
5
+
6
+ Rails.application.load_tasks
@@ -0,0 +1,13 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // compiled file.
9
+ //
10
+ // Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
11
+ // about supported directives.
12
+ //
13
+ //= require_tree .
@@ -0,0 +1,2 @@
1
+ // Place all the behaviors and hooks related to the matching controller here.
2
+ // All this logic will automatically be available in application.js.
@@ -0,0 +1,15 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
+ * compiled file so the styles you add here take precedence over styles defined in any styles
10
+ * defined in the other CSS/SCSS files in this directory. It is generally better to create a new
11
+ * file per style scope.
12
+ *
13
+ *= require_tree .
14
+ *= require_self
15
+ */
@@ -0,0 +1,3 @@
1
+ // Place all the styles related to the demo controller here.
2
+ // They will automatically be included in application.css.
3
+ // You can use Sass (SCSS) here: http://sass-lang.com/
@@ -0,0 +1,5 @@
1
+ class ApplicationController < ActionController::Base
2
+ # Prevent CSRF attacks by raising an exception.
3
+ # For APIs, you may want to use :null_session instead.
4
+ protect_from_forgery with: :exception
5
+ end
@@ -0,0 +1,8 @@
1
+ class DemoController < ApplicationController
2
+ def show
3
+ end
4
+
5
+ def sign_in
6
+ render layout: 'express_admin/external'
7
+ end
8
+ end
@@ -0,0 +1,2 @@
1
+ module ApplicationHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ module DemoHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ h1 "Demo#show"
2
+ p "Find me in app/views/demo/show.html.et"