lotus_admin 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +63 -0
  4. data/Rakefile +20 -0
  5. data/app/assets/config/lotus_admin_manifest.js +2 -0
  6. data/app/assets/images/lotus_admin/profile-menu.png +0 -0
  7. data/app/assets/javascripts/lotus_admin/application.js +5 -0
  8. data/app/assets/stylesheets/lotus_admin/application.css.scss +9 -0
  9. data/app/assets/stylesheets/lotus_admin/components/_alerts.scss +5 -0
  10. data/app/assets/stylesheets/lotus_admin/components/_all.scss +4 -0
  11. data/app/assets/stylesheets/lotus_admin/components/_devise.scss +3 -0
  12. data/app/assets/stylesheets/lotus_admin/components/_forms.scss +7 -0
  13. data/app/assets/stylesheets/lotus_admin/components/_tables.scss +27 -0
  14. data/app/controllers/concerns/lotus_admin/devise_controllers.rb +7 -0
  15. data/app/controllers/concerns/lotus_admin/exposure.rb +27 -0
  16. data/app/controllers/concerns/lotus_admin/permitted_params.rb +18 -0
  17. data/app/controllers/lotus_admin/application_controller.rb +20 -0
  18. data/app/controllers/lotus_admin/authenticated_controller.rb +20 -0
  19. data/app/controllers/lotus_admin/confirmations_controller.rb +3 -0
  20. data/app/controllers/lotus_admin/dashboard_controller.rb +5 -0
  21. data/app/controllers/lotus_admin/passwords_controller.rb +3 -0
  22. data/app/controllers/lotus_admin/profiles_controller.rb +20 -0
  23. data/app/controllers/lotus_admin/sessions_controller.rb +3 -0
  24. data/app/controllers/lotus_admin/users_controller.rb +45 -0
  25. data/app/helpers/lotus_admin/application_helper.rb +18 -0
  26. data/app/helpers/lotus_admin/form_helpers.rb +25 -0
  27. data/app/helpers/lotus_admin/link_helpers.rb +27 -0
  28. data/app/helpers/lotus_admin/pagination_helpers.rb +7 -0
  29. data/app/helpers/lotus_admin/panel_helpers.rb +24 -0
  30. data/app/helpers/lotus_admin/sidebar_helpers.rb +25 -0
  31. data/app/jobs/lotus_admin/application_job.rb +4 -0
  32. data/app/mailers/lotus_admin/application_mailer.rb +6 -0
  33. data/app/mailers/lotus_admin/user_mailer.rb +10 -0
  34. data/app/models/lotus_admin/application_record.rb +5 -0
  35. data/app/models/lotus_admin/user.rb +17 -0
  36. data/app/views/administrators/_links.html.haml +20 -0
  37. data/app/views/administrators/confirmations/new.html.haml +13 -0
  38. data/app/views/administrators/passwords/edit.html.haml +15 -0
  39. data/app/views/administrators/passwords/new.html.haml +11 -0
  40. data/app/views/administrators/sessions/new.html.haml +11 -0
  41. data/app/views/kaminari/lotus_admin/_first_page.html.haml +2 -0
  42. data/app/views/kaminari/lotus_admin/_gap.html.haml +1 -0
  43. data/app/views/kaminari/lotus_admin/_last_page.html.haml +2 -0
  44. data/app/views/kaminari/lotus_admin/_next_page.html.haml +2 -0
  45. data/app/views/kaminari/lotus_admin/_page.html.haml +2 -0
  46. data/app/views/kaminari/lotus_admin/_paginator.html.haml +12 -0
  47. data/app/views/kaminari/lotus_admin/_prev_page.html.haml +2 -0
  48. data/app/views/layouts/lotus_admin/_devise_footer.html.haml +0 -0
  49. data/app/views/layouts/lotus_admin/_favicons.html.haml +0 -0
  50. data/app/views/layouts/lotus_admin/_footer.html.haml +2 -0
  51. data/app/views/layouts/lotus_admin/_footer_scripts.html.haml +2 -0
  52. data/app/views/layouts/lotus_admin/_header.html.haml +31 -0
  53. data/app/views/layouts/lotus_admin/_header_dropdown_items.html.haml +0 -0
  54. data/app/views/layouts/lotus_admin/_html_head.html.haml +9 -0
  55. data/app/views/layouts/lotus_admin/_javascripts.html.haml +1 -0
  56. data/app/views/layouts/lotus_admin/_sidebar.html.haml +22 -0
  57. data/app/views/layouts/lotus_admin/_sidebar_items.html.haml +9 -0
  58. data/app/views/layouts/lotus_admin/_stylesheets.html.haml +5 -0
  59. data/app/views/layouts/lotus_admin/application.html.haml +22 -0
  60. data/app/views/layouts/lotus_admin/devise.html.haml +19 -0
  61. data/app/views/layouts/lotus_admin/mailer.html.haml +10 -0
  62. data/app/views/layouts/lotus_admin/mailer.text.erb +4 -0
  63. data/app/views/lotus_admin/dashboard/show.html.haml +1 -0
  64. data/app/views/lotus_admin/profiles/edit.html.haml +26 -0
  65. data/app/views/lotus_admin/shared/_collection_pagination.html.haml +7 -0
  66. data/app/views/lotus_admin/user_mailer/invited.html.haml +8 -0
  67. data/app/views/lotus_admin/user_mailer/invited.text.erb +5 -0
  68. data/app/views/lotus_admin/users/_form.html.haml +10 -0
  69. data/app/views/lotus_admin/users/edit.html.haml +12 -0
  70. data/app/views/lotus_admin/users/index.html.haml +30 -0
  71. data/app/views/lotus_admin/users/new.html.haml +9 -0
  72. data/app/views/lotus_admin/users/show.html.haml +24 -0
  73. data/config/initializers/devise.rb +280 -0
  74. data/config/initializers/simple_form.rb +170 -0
  75. data/config/initializers/simple_form_bootstrap.rb +155 -0
  76. data/config/initializers/simple_form_material.rb +35 -0
  77. data/config/locales/dates.en.yml +11 -0
  78. data/config/locales/devise.en.yml +64 -0
  79. data/config/locales/mailers.en.yml +5 -0
  80. data/config/locales/page_titles.en.yml +30 -0
  81. data/config/locales/simple_form.en.yml +31 -0
  82. data/config/locales/users.en.yml +29 -0
  83. data/config/routes.rb +8 -0
  84. data/db/migrate/20180228124526_devise_create_lotus_admin_users.rb +46 -0
  85. data/db/migrate/20180228210938_add_timezone_to_users.rb +5 -0
  86. data/lib/lotus_admin.rb +17 -0
  87. data/lib/lotus_admin/engine.rb +19 -0
  88. data/lib/lotus_admin/version.rb +3 -0
  89. data/lib/tasks/lotus_admin_tasks.rake +6 -0
  90. data/lib/templates/erb/scaffold/_form.html.erb +14 -0
  91. metadata +371 -0
@@ -0,0 +1,155 @@
1
+ # frozen_string_literal: true
2
+ # Use this setup block to configure all options available in SimpleForm.
3
+ SimpleForm.setup do |config|
4
+ config.error_notification_class = 'alert alert-danger'
5
+ config.button_class = 'btn btn-default'
6
+ config.boolean_label_class = nil
7
+
8
+ config.wrappers :vertical_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
9
+ b.use :html5
10
+ b.use :placeholder
11
+ b.optional :maxlength
12
+ b.optional :minlength
13
+ b.optional :pattern
14
+ b.optional :min_max
15
+ b.optional :readonly
16
+ b.use :label, class: 'control-label'
17
+
18
+ b.use :input, class: 'form-control'
19
+ b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
20
+ b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
21
+ end
22
+
23
+ config.wrappers :vertical_file_input, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
24
+ b.use :html5
25
+ b.use :placeholder
26
+ b.optional :maxlength
27
+ b.optional :minlength
28
+ b.optional :readonly
29
+ b.use :label, class: 'control-label'
30
+
31
+ b.use :input
32
+ b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
33
+ b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
34
+ end
35
+
36
+ config.wrappers :vertical_boolean, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
37
+ b.use :html5
38
+ b.optional :readonly
39
+
40
+ b.wrapper tag: 'div', class: 'checkbox' do |ba|
41
+ ba.use :label_input
42
+ end
43
+
44
+ b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
45
+ b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
46
+ end
47
+
48
+ config.wrappers :vertical_radio_and_checkboxes, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
49
+ b.use :html5
50
+ b.optional :readonly
51
+ b.use :label, class: 'control-label'
52
+ b.use :input
53
+ b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
54
+ b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
55
+ end
56
+
57
+ config.wrappers :horizontal_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
58
+ b.use :html5
59
+ b.use :placeholder
60
+ b.optional :maxlength
61
+ b.optional :minlength
62
+ b.optional :pattern
63
+ b.optional :min_max
64
+ b.optional :readonly
65
+ b.use :label, class: 'col-sm-3 control-label'
66
+
67
+ b.wrapper tag: 'div', class: 'col-sm-9' do |ba|
68
+ ba.use :input, class: 'form-control'
69
+ ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
70
+ ba.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
71
+ end
72
+ end
73
+
74
+ config.wrappers :horizontal_file_input, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
75
+ b.use :html5
76
+ b.use :placeholder
77
+ b.optional :maxlength
78
+ b.optional :minlength
79
+ b.optional :readonly
80
+ b.use :label, class: 'col-sm-3 control-label'
81
+
82
+ b.wrapper tag: 'div', class: 'col-sm-9' do |ba|
83
+ ba.use :input
84
+ ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
85
+ ba.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
86
+ end
87
+ end
88
+
89
+ config.wrappers :horizontal_boolean, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
90
+ b.use :html5
91
+ b.optional :readonly
92
+
93
+ b.wrapper tag: 'div', class: 'col-sm-offset-3 col-sm-9' do |wr|
94
+ wr.wrapper tag: 'div', class: 'checkbox' do |ba|
95
+ ba.use :label_input
96
+ end
97
+
98
+ wr.use :error, wrap_with: { tag: 'span', class: 'help-block' }
99
+ wr.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
100
+ end
101
+ end
102
+
103
+ config.wrappers :horizontal_radio_and_checkboxes, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
104
+ b.use :html5
105
+ b.optional :readonly
106
+
107
+ b.use :label, class: 'col-sm-3 control-label'
108
+
109
+ b.wrapper tag: 'div', class: 'col-sm-9' do |ba|
110
+ ba.use :input
111
+ ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
112
+ ba.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
113
+ end
114
+ end
115
+
116
+ config.wrappers :inline_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
117
+ b.use :html5
118
+ b.use :placeholder
119
+ b.optional :maxlength
120
+ b.optional :minlength
121
+ b.optional :pattern
122
+ b.optional :min_max
123
+ b.optional :readonly
124
+ b.use :label, class: 'sr-only'
125
+
126
+ b.use :input, class: 'form-control'
127
+ b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
128
+ b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
129
+ end
130
+
131
+ config.wrappers :multi_select, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
132
+ b.use :html5
133
+ b.optional :readonly
134
+ b.use :label, class: 'control-label'
135
+ b.wrapper tag: 'div', class: 'form-inline' do |ba|
136
+ ba.use :input, class: 'form-control'
137
+ ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
138
+ ba.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
139
+ end
140
+ end
141
+ # Wrappers for forms and inputs using the Bootstrap toolkit.
142
+ # Check the Bootstrap docs (http://getbootstrap.com)
143
+ # to learn about the different styles for forms and inputs,
144
+ # buttons and other elements.
145
+ config.default_wrapper = :vertical_form
146
+ config.wrapper_mappings = {
147
+ check_boxes: :vertical_radio_and_checkboxes,
148
+ radio_buttons: :vertical_radio_and_checkboxes,
149
+ file: :vertical_file_input,
150
+ boolean: :vertical_boolean,
151
+ datetime: :multi_select,
152
+ date: :multi_select,
153
+ time: :multi_select
154
+ }
155
+ end
@@ -0,0 +1,35 @@
1
+ # Custom form wrapper for Material Design template
2
+ SimpleForm.setup do |config|
3
+ config.boolean_style = :inline
4
+
5
+ config.wrappers :material_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
6
+ b.use :html5
7
+ b.use :placeholder
8
+ b.optional :maxlength
9
+ b.optional :minlength
10
+ b.optional :pattern
11
+ b.optional :min_max
12
+ b.optional :readonly
13
+
14
+ b.use :input, class: 'form-control', wrap_with: { tag: 'div', class: 'fg-line' }
15
+ b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
16
+ b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
17
+ end
18
+
19
+ config.wrappers :material_boolean_horizontal, tag: 'div', class: 'checkbox', error_class: 'has-error' do |b|
20
+ b.use :html5
21
+ b.optional :readonly
22
+
23
+ b.wrapper tag: 'label' do |append|
24
+ append.use :input
25
+ append.wrapper tag: 'i', class: 'input-helper' do |baa|
26
+
27
+ end
28
+
29
+ append.use :label_text
30
+ end
31
+
32
+ b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
33
+ b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
34
+ end
35
+ end
@@ -0,0 +1,11 @@
1
+ en:
2
+ date:
3
+ formats:
4
+ long: '%b %e, %Y'
5
+ extended: '%A %B %e, %Y'
6
+
7
+ time:
8
+ formats:
9
+ default: '%m/%d/%Y %l:%M %p %Z'
10
+ long: '%B %d, %Y %l:%M %p %Z'
11
+ seconds: '%l:%M:%S %p %Z'
@@ -0,0 +1,64 @@
1
+ # Additional translations at https://github.com/plataformatec/devise/wiki/I18n
2
+
3
+ en:
4
+ devise:
5
+ confirmations:
6
+ confirmed: "Your email address has been successfully confirmed."
7
+ send_instructions: "You will receive an email with instructions for how to confirm your email address in a few minutes."
8
+ send_paranoid_instructions: "If your email address exists in our database, you will receive an email with instructions for how to confirm your email address in a few minutes."
9
+ failure:
10
+ already_authenticated: "You are already signed in."
11
+ inactive: "Your account is not activated yet."
12
+ invalid: "Invalid %{authentication_keys} or password."
13
+ locked: "Your account is locked."
14
+ last_attempt: "You have one more attempt before your account is locked."
15
+ not_found_in_database: "Invalid %{authentication_keys} or password."
16
+ timeout: "Your session expired. Please sign in again to continue."
17
+ unauthenticated: "You need to sign in or sign up before continuing."
18
+ unconfirmed: "You have to confirm your email address before continuing."
19
+ mailer:
20
+ confirmation_instructions:
21
+ subject: "Confirmation instructions"
22
+ reset_password_instructions:
23
+ subject: "Reset password instructions"
24
+ unlock_instructions:
25
+ subject: "Unlock instructions"
26
+ email_changed:
27
+ subject: "Email Changed"
28
+ password_change:
29
+ subject: "Password Changed"
30
+ omniauth_callbacks:
31
+ failure: "Could not authenticate you from %{kind} because \"%{reason}\"."
32
+ success: "Successfully authenticated from %{kind} account."
33
+ passwords:
34
+ no_token: "You can't access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided."
35
+ send_instructions: "You will receive an email with instructions on how to reset your password in a few minutes."
36
+ send_paranoid_instructions: "If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes."
37
+ updated: "Your password has been changed successfully. You are now signed in."
38
+ updated_not_active: "Your password has been changed successfully."
39
+ registrations:
40
+ destroyed: "Bye! Your account has been successfully cancelled. We hope to see you again soon."
41
+ signed_up: "Welcome! You have signed up successfully."
42
+ signed_up_but_inactive: "You have signed up successfully. However, we could not sign you in because your account is not yet activated."
43
+ signed_up_but_locked: "You have signed up successfully. However, we could not sign you in because your account is locked."
44
+ signed_up_but_unconfirmed: "A message with a confirmation link has been sent to your email address. Please follow the link to activate your account."
45
+ update_needs_confirmation: "You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirm link to confirm your new email address."
46
+ updated: "Your account has been updated successfully."
47
+ sessions:
48
+ signed_in: "Signed in successfully."
49
+ signed_out: "Signed out successfully."
50
+ already_signed_out: "Signed out successfully."
51
+ unlocks:
52
+ send_instructions: "You will receive an email with instructions for how to unlock your account in a few minutes."
53
+ send_paranoid_instructions: "If your account exists, you will receive an email with instructions for how to unlock it in a few minutes."
54
+ unlocked: "Your account has been unlocked successfully. Please sign in to continue."
55
+ errors:
56
+ messages:
57
+ already_confirmed: "was already confirmed, please try signing in"
58
+ confirmation_period_expired: "needs to be confirmed within %{period}, please request a new one"
59
+ expired: "has expired, please request a new one"
60
+ not_found: "not found"
61
+ not_locked: "was not locked"
62
+ not_saved:
63
+ one: "1 error prohibited this %{resource} from being saved:"
64
+ other: "%{count} errors prohibited this %{resource} from being saved:"
@@ -0,0 +1,5 @@
1
+ en:
2
+ lotus_admin:
3
+ user_mailer:
4
+ invited:
5
+ subject: You have been invited to join %{app}
@@ -0,0 +1,30 @@
1
+ en:
2
+ app:
3
+ name: Provide "app.name" translation
4
+ tagline: Provide "app.tagline" translation
5
+
6
+ lotus_admin:
7
+ sessions:
8
+ new:
9
+ title: Login
10
+
11
+ confirmations:
12
+ new:
13
+ title: Request a Confirmation Email
14
+
15
+ show:
16
+ title: Confirm Your Account
17
+
18
+ create:
19
+ title: Confirm Your Account
20
+
21
+ thanks:
22
+ title: Thanks for Confirming!
23
+
24
+ passwords:
25
+ new:
26
+ title: Request Password Reset
27
+ edit:
28
+ title: Reset Your Password
29
+ thanks:
30
+ title: Your Password was Reset
@@ -0,0 +1,31 @@
1
+ en:
2
+ simple_form:
3
+ "yes": 'Yes'
4
+ "no": 'No'
5
+ required:
6
+ text: 'required'
7
+ mark: '*'
8
+ # You can uncomment the line below if you need to overwrite the whole required html.
9
+ # When using html, text and mark won't be used.
10
+ # html: '<abbr title="required">*</abbr>'
11
+ error_notification:
12
+ default_message: "Please review the problems below:"
13
+ # Examples
14
+ # labels:
15
+ # defaults:
16
+ # password: 'Password'
17
+ # user:
18
+ # new:
19
+ # email: 'E-mail to sign in.'
20
+ # edit:
21
+ # email: 'E-mail.'
22
+ # hints:
23
+ # defaults:
24
+ # username: 'User name to sign in.'
25
+ # password: 'No special characters, please.'
26
+ # include_blanks:
27
+ # defaults:
28
+ # age: 'Rather not say'
29
+ # prompts:
30
+ # defaults:
31
+ # age: 'Select your age'
@@ -0,0 +1,29 @@
1
+ en:
2
+ activerecord:
3
+ models:
4
+ lotus_admin/user:
5
+ one: Administrator
6
+ other: Administrators
7
+
8
+ lotus_admin:
9
+ users:
10
+ new:
11
+ help: The new administrator will receive an invitation via email.
12
+
13
+ edit:
14
+ help: You may update details for the administrator below.
15
+
16
+ profiles:
17
+ edit:
18
+ help: Make any changes to your profile below, leave your password blank to skip making changes to your password.
19
+
20
+ simple_form:
21
+ placeholders:
22
+ defaults:
23
+ name: Name
24
+ first_name: First Name
25
+ last_name: Last Name
26
+ username: Email
27
+ email: Email
28
+ password: Password
29
+ password_confirmation: Confirm Password
data/config/routes.rb ADDED
@@ -0,0 +1,8 @@
1
+ LotusAdmin::Engine.routes.draw do
2
+ devise_for :administrators, class_name: "LotusAdmin::User"
3
+
4
+ resources :users
5
+ resource :profile, only: [:edit, :update]
6
+
7
+ root to: 'dashboard#show'
8
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ class DeviseCreateLotusAdminUsers < ActiveRecord::Migration[5.1]
4
+ def change
5
+ create_table :lotus_admin_users do |t|
6
+ ## Database authenticatable
7
+ t.string :email, null: false, default: ""
8
+ t.string :encrypted_password, null: false, default: ""
9
+
10
+ ## Recoverable
11
+ t.string :reset_password_token
12
+ t.datetime :reset_password_sent_at
13
+
14
+ ## Rememberable
15
+ t.datetime :remember_created_at
16
+
17
+ ## Trackable
18
+ t.integer :sign_in_count, default: 0, null: false
19
+ t.datetime :current_sign_in_at
20
+ t.datetime :last_sign_in_at
21
+ t.inet :current_sign_in_ip
22
+ t.inet :last_sign_in_ip
23
+
24
+ ## Confirmable
25
+ t.string :confirmation_token
26
+ t.datetime :confirmed_at
27
+ t.datetime :confirmation_sent_at
28
+ t.string :unconfirmed_email # Only if using reconfirmable
29
+
30
+ ## Lockable
31
+ # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
32
+ # t.string :unlock_token # Only if unlock strategy is :email or :both
33
+ # t.datetime :locked_at
34
+
35
+ t.string :first_name, null: false
36
+ t.string :last_name, null: false
37
+
38
+ t.timestamps null: false
39
+ end
40
+
41
+ add_index :lotus_admin_users, :email, unique: true
42
+ add_index :lotus_admin_users, :reset_password_token, unique: true
43
+ add_index :lotus_admin_users, :confirmation_token, unique: true
44
+ # add_index :lotus_admin_users, :unlock_token, unique: true
45
+ end
46
+ end
@@ -0,0 +1,5 @@
1
+ class AddTimezoneToUsers < ActiveRecord::Migration[5.1]
2
+ def change
3
+ add_column :lotus_admin_users, :time_zone, :string, null: false, default: 'Eastern Time (US & Canada)'
4
+ end
5
+ end
@@ -0,0 +1,17 @@
1
+ require "lotus_admin/engine"
2
+
3
+ require 'devise'
4
+ require 'simple_form'
5
+
6
+ require 'haml'
7
+ require 'sass-rails'
8
+ require 'uglifier'
9
+ require 'font-awesome-rails'
10
+ require 'bootstrap-sass'
11
+ require 'jquery-rails'
12
+ require 'page_title_helper'
13
+ require 'kaminari'
14
+
15
+ module LotusAdmin
16
+ # Your code goes here...
17
+ end