hancock_cms 1.0.2.3 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-gemset +1 -1
  3. data/.ruby-version +1 -1
  4. data/README.md +9 -13
  5. data/app/assets/images/{hancock/rails_admin → rails-admin}/hancock_logo.svg +0 -0
  6. data/app/assets/javascripts/hancock/cms.coffee +1 -1
  7. data/app/assets/javascripts/hancock/rails_admin/cms.ui.coffee +38 -10
  8. data/app/assets/javascripts/jquery.placeholder.js +2 -3
  9. data/app/assets/javascripts/rails_admin/custom/ui.coffee +0 -1
  10. data/app/assets/stylesheets/hancock/cms/devise.sass +22 -36
  11. data/app/assets/stylesheets/hancock/rails_admin/cms.theming.sass +147 -364
  12. data/app/assets/stylesheets/rails_admin/custom/theming.sass +1 -1
  13. data/app/controllers/concerns/hancock/current_user.rb +1 -1
  14. data/app/controllers/concerns/hancock/decorators/home.rb +1 -1
  15. data/app/controllers/concerns/hancock/errors.rb +7 -6
  16. data/app/controllers/concerns/hancock/no_cache.rb +12 -0
  17. data/app/controllers/hancock/registrations_controller.rb +7 -2
  18. data/app/controllers/hancock/sessions_controller.rb +7 -3
  19. data/app/helpers/hancock/powered_helper.rb +3 -3
  20. data/app/models/concerns/hancock/boolean_field.rb +2 -7
  21. data/app/models/concerns/hancock/cacheable.rb +33 -0
  22. data/app/models/concerns/hancock/decorators/embedded_element.rb +9 -1
  23. data/app/models/concerns/hancock/enableable.rb +0 -1
  24. data/app/models/concerns/hancock/hash_field.rb +8 -9
  25. data/app/models/concerns/hancock/html_field.rb +3 -6
  26. data/app/models/concerns/hancock/mappable.rb +0 -1
  27. data/app/models/concerns/hancock/model_localizeable.rb +1 -4
  28. data/app/models/concerns/hancock/rails_admin_patch.rb +3 -22
  29. data/app/models/concerns/hancock/sort_field.rb +3 -26
  30. data/app/models/concerns/hancock/sortable.rb +0 -3
  31. data/app/views/blocks/_footer.html.slim +1 -1
  32. data/app/views/devise/passwords/edit.html.slim +2 -0
  33. data/app/views/devise/passwords/new.html.slim +2 -0
  34. data/app/views/devise/registrations/edit.html.slim +2 -0
  35. data/app/views/devise/registrations/new.html.slim +2 -0
  36. data/app/views/devise/sessions/new.html.slim +2 -0
  37. data/app/views/hancock/home/index.html.slim +1 -4
  38. data/app/views/layouts/application.html.slim +11 -20
  39. data/app/views/layouts/hancock/devise/confirmations.html.slim +4 -7
  40. data/app/views/layouts/hancock/devise/passwords.html.slim +4 -7
  41. data/app/views/layouts/hancock/devise/registrations.html.slim +4 -7
  42. data/app/views/layouts/hancock/devise/sessions.html.slim +4 -7
  43. data/app/views/layouts/hancock/devise/unlocks.html.slim +4 -7
  44. data/app/views/layouts/rails_admin/_footer.html.slim +2 -2
  45. data/app/views/layouts/rails_admin/_footer_navigation.html.slim +5 -21
  46. data/app/views/layouts/rails_admin/_navigation.html.slim +47 -13
  47. data/app/views/layouts/rails_admin/_secondary_navigation.html.slim +12 -5
  48. data/app/views/layouts/rails_admin/application.html.haml +39 -4
  49. data/app/views/rails_admin/main/_hancock_html.html.slim +2 -2
  50. data/app/views/rails_admin/main/_hancock_html_ml.html.slim +34 -31
  51. data/app/views/shared/_admin_link.html.slim +2 -4
  52. data/{app/models/concerns/hancock → config/initializers}/embedded_findable.rb +2 -2
  53. data/config/locales/en.hancock.yml +0 -1
  54. data/config/locales/ru.devise.yml +18 -22
  55. data/config/locales/ru.hancock.yml +5 -5
  56. data/config/locales/ru.rails_admin.yml +0 -3
  57. data/hancock_cms.gemspec +3 -6
  58. data/lib/filename_to_slug.rb +20 -0
  59. data/lib/generators/hancock/cms/ability_generator.rb +0 -1
  60. data/lib/generators/hancock/cms/admin_generator.rb +0 -1
  61. data/lib/generators/hancock/cms/application_generator.rb +0 -1
  62. data/lib/generators/hancock/cms/assets_generator.rb +0 -1
  63. data/lib/generators/hancock/cms/layout_generator.rb +0 -1
  64. data/lib/generators/hancock/cms/model_generator.rb +0 -1
  65. data/lib/generators/hancock/cms/models/templates/embedded_element.erb +2 -2
  66. data/lib/generators/hancock/cms/rack_generator.rb +0 -1
  67. data/lib/generators/hancock/cms/robots_generator.rb +0 -1
  68. data/lib/generators/hancock/cms/scripts_generator.rb +0 -1
  69. data/lib/generators/hancock/cms/templates/Gemfile.erb +4 -1
  70. data/lib/generators/hancock/cms/templates/ability.erb +1 -1
  71. data/lib/generators/hancock/cms/templates/admin.erb +6 -12
  72. data/lib/generators/hancock/cms/templates/assets/javascripts/application.coffee.erb +1 -1
  73. data/lib/generators/hancock/cms/templates/hancock_cms.erb +2 -4
  74. data/lib/generators/hancock/cms/templates/model.erb +6 -5
  75. data/lib/generators/hancock/cms/templates/robots.txt.erb +1 -5
  76. data/lib/generators/hancock/cms/templates/scripts/db_dump.sh.erb +1 -1
  77. data/lib/generators/hancock/cms/templates/scripts/server.sh +1 -1
  78. data/lib/generators/hancock/cms/templates/scripts/server_alt.sh +1 -1
  79. data/lib/generators/hancock/cms/unicorn_god_generator.rb +0 -1
  80. data/lib/generators/hancock/cms/utils.rb +0 -2
  81. data/lib/hancock/admin/embedded_element.rb +2 -10
  82. data/lib/hancock/admin.rb +21 -132
  83. data/lib/hancock/configuration.rb +2 -6
  84. data/lib/hancock/controller.rb +1 -10
  85. data/lib/hancock/engine.rb +34 -34
  86. data/lib/hancock/model.rb +5 -29
  87. data/lib/hancock/models/embedded_element.rb +0 -2
  88. data/lib/hancock/models/mongoid/embedded_element.rb +1 -20
  89. data/lib/hancock/plugin_configuration.rb +1 -1
  90. data/lib/hancock/rails_admin_ext/config.rb +14 -45
  91. data/lib/hancock/rails_admin_ext/hancock_hash.rb +1 -8
  92. data/lib/hancock/rails_admin_ext/hancock_html.rb +2 -17
  93. data/lib/hancock/rails_admin_ext/hancock_multiselect.rb +5 -1
  94. data/lib/hancock/rails_admin_ext/hancock_slugs.rb +6 -2
  95. data/lib/hancock/rails_admin_ext/patches/field_patch.rb +1 -2
  96. data/lib/hancock/rails_admin_ext/patches/group_patch.rb +0 -9
  97. data/lib/hancock/rails_admin_ext/patches/hancock_cms_group.rb +0 -2
  98. data/lib/hancock/version.rb +1 -1
  99. data/lib/hancock_cms.rb +13 -21
  100. data/lib/manual_slug/active_record.rb +8 -8
  101. data/lib/rails_admin/custom_show_in_app.rb +32 -21
  102. data/release.sh +1 -1
  103. data/template.rb +386 -37
  104. metadata +15 -88
  105. data/.gitattributes +0 -4
  106. data/app/assets/javascripts/hancock/rails_admin/en_ru_switcher.coffee +0 -90
  107. data/app/assets/javascripts/hancock/rails_admin/enum_with_custom.coffee +0 -41
  108. data/app/assets/javascripts/hancock/rails_admin/form_controls_fixed.coffee +0 -44
  109. data/app/assets/javascripts/hancock/rails_admin/leftside_hider.coffee +0 -106
  110. data/app/assets/javascripts/hancock/rails_admin/multiselect.coffee +0 -8
  111. data/app/assets/javascripts/hancock/rails_admin/navigation_dropdown.coffee +0 -25
  112. data/app/assets/javascripts/hancock/rails_admin/navigation_filter.coffee +0 -108
  113. data/app/assets/javascripts/hancock/rails_admin/navigation_scroll.coffee +0 -12
  114. data/app/assets/stylesheets/hancock/rails_admin/fieldsets.sass +0 -198
  115. data/app/helpers/hancock/settings_helper.rb +0 -44
  116. data/app/helpers/rails_admin/application/hancock_helper.rb +0 -19
  117. data/app/helpers/rails_admin/hancock/form_builder.rb +0 -44
  118. data/app/helpers/rails_admin/main/hancock_helper.rb +0 -27
  119. data/app/models/concerns/hancock/insertion_field.rb +0 -115
  120. data/app/views/blocks/_preloader.html.slim +0 -0
  121. data/app/views/layouts/rails_admin/_sidebar_navigation.html.slim +0 -2
  122. data/app/views/layouts/rails_admin/_sidebar_navigation_filter.html.slim +0 -3
  123. data/app/views/rails_admin/main/_enum_for_settings_kinds.html.slim +0 -24
  124. data/app/views/rails_admin/main/_form_hancock_enum.html.slim +0 -18
  125. data/app/views/rails_admin/main/_form_hancock_enum_with_custom.slim +0 -20
  126. data/app/views/rails_admin/main/edit.html.haml +0 -18
  127. data/app/views/rails_admin/main/new.html.haml +0 -17
  128. data/config/initializers/rails_admin_mongoid_patch.rb +0 -27
  129. data/lib/generators/hancock/cms/setup_generator.rb +0 -488
  130. data/lib/generators/hancock/cms/templates/assets/stylesheets/hancock/rails_admin/custom/theming.sass.erb +0 -0
  131. data/lib/hancock/rails_admin_ext/hancock_array.rb +0 -19
  132. data/lib/hancock/rails_admin_ext/hancock_enum.rb +0 -33
  133. data/lib/hancock/rails_admin_ext/hancock_enum_with_custom.rb +0 -34
  134. data/lib/hancock/rails_admin_ext/patches/fieldset_patch.rb +0 -14
  135. data/lib/hancock/rails_admin_ext/patches/has_fields.rb +0 -27
  136. data/lib/hancock/rails_admin_ext/patches/navigation_patch.rb +0 -25
  137. data/lib/hancock/rails_admin_settings_patch.rb +0 -216
data/template.rb CHANGED
@@ -2,12 +2,10 @@ rails_spec = (Gem.loaded_specs["railties"] || Gem.loaded_specs["rails"])
2
2
  version = rails_spec.version.to_s
3
3
 
4
4
  mongoid = options[:skip_active_record]
5
- actual_rails_version = "4.2.8"
6
- notsupported_rails_version = "5.x"
7
5
 
8
- if Gem::Version.new(version) < Gem::Version.new(actual_rails_version) or Gem::Version.new(version) >= Gem::Version.new(notsupported_rails_version)
6
+ if Gem::Version.new(version) < Gem::Version.new('5.0.0.1') or Gem::Version.new(version) >= Gem::Version.new('6.0.0')
9
7
  puts "You are using an incorrect version of Rails (#{version})"
10
- puts "Please update for #{actual_rails_version}"
8
+ puts "Please update for 5.0.0.1"
11
9
  puts "Stopping"
12
10
  exit 1
13
11
  end
@@ -22,32 +20,31 @@ remove_file 'Gemfile'
22
20
  create_file 'Gemfile' do <<-TEXT
23
21
  source 'https://rubygems.org'
24
22
 
25
- gem 'rails', '~> #{actual_rails_version}'#, '>= #{actual_rails_version}'
23
+ gem 'rails', '~> 5.0.0', '>= 5.0.0.1'
26
24
  #{if mongoid then "gem 'mongoid'" else "gem 'pg'" end}
27
25
 
28
26
  gem 'sass'
29
- gem 'sass-rails'
27
+ gem 'sass-rails', '~> 5.0'
30
28
  gem 'compass'
31
29
  gem 'compass-rails'
32
30
 
31
+ gem 'remotipart', github: 'mshibuya/remotipart'
32
+ gem 'rails_admin', '>= 1.0.0.rc'
33
+ # #{if mongoid then "gem 'hancock_cms_mongoid'" else "gem 'hancock_cms_activerecord'" end}, github: 'red-rocks/hancock_cms', branch: 'rails5'
34
+ #{if mongoid then "gem 'hancock_cms_mongoid'" else "gem 'hancock_cms_activerecord'" end}, path: "/home/ack/www/redrocks/hancock"
35
+
33
36
  # #{if mongoid then "gem 'glebtv-mongoid-paperclip'" else "gem 'paperclip'" end}
34
37
  # gem "image_optim"
35
38
  # gem "paperclip-optimizer"
36
39
  # gem 'ack-paperclip-meta', github: "red-rocks/paperclip-meta"
37
40
 
38
41
  # gem 'rails_admin_multiple_file_upload'
39
- gem 'rails_admin_user_abilities'#, '~> 0.1'
40
42
  # gem 'rails_admin_user_abilities', github: "red-rocks/rails_admin_user_abilities"
41
- gem 'rails_admin_model_settings'#, '~> 0.2'
42
43
  # gem 'rails_admin_model_settings', github: "red-rocks/rails_admin_model_settings"
43
44
 
44
- #{if mongoid then "gem 'hancock_cms_mongoid'" else "gem 'hancock_cms_activerecord'" end}, github: 'red-rocks/hancock_cms', branch: 'rails4'
45
- # #{if mongoid then "gem 'hancock_cms_mongoid'" else "gem 'hancock_cms_activerecord'" end}, path: "/home/ack/www/redrocks/hancock"
46
-
47
- # gem 'recaptcha', require: 'recaptcha/rails'
48
- # gem 'glebtv-simple_captcha'
45
+ gem 'devise'
49
46
 
50
- gem 'slim-rails', '3.1.1'
47
+ gem 'slim-rails'
51
48
  gem 'rs_russian'
52
49
  gem 'cancancan'
53
50
 
@@ -55,31 +52,27 @@ gem 'cancancan'
55
52
  gem 'unicorn'
56
53
  gem 'x-real-ip'
57
54
 
55
+ gem 'sentry-raven'
56
+
58
57
  group :development do
59
58
  gem 'better_errors'
60
59
  gem 'binding_of_caller'
61
60
  gem 'pry-rails'
62
- gem 'spring'
63
61
 
64
- # gem 'capistrano', require: false
65
- #
66
- # gem 'rvm1-capistrano3', require: false
67
- # gem 'glebtv-capistrano-unicorn', require: false
68
- # gem 'capistrano-bundler', require: false
69
- # gem 'capistrano-rails', require: false
70
-
71
- # gem 'hipchat'
72
- # gem 'coffee-rails-source-maps'
73
- # gem 'compass-rails-source-maps'
62
+ # Access an IRB console on exception pages or by using <%= console %> anywhere in the code.
63
+ gem 'web-console'
64
+ gem 'listen', '~> 3.0.5'
65
+ # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
66
+ gem 'spring'
67
+ gem 'spring-watcher-listen', '~> 2.0.0'
74
68
 
75
- gem 'ack_favicon_maker_rails', '~> 1.0.1'
76
- # gem 'ack_favicon_maker_rails', github: 'ack43/favicon_maker_rails'
69
+ gem 'ack_favicon_maker_rails', github: 'ack43/favicon_maker_rails'
77
70
 
78
71
  # gem 'rails_email_preview', '~> 1.0.3'
79
72
 
80
73
  gem 'image_optim_pack'
81
74
 
82
- gem 'puma'
75
+ gem 'puma', '~> 3.0'
83
76
  end
84
77
 
85
78
  group :test do
@@ -91,29 +84,40 @@ group :test do
91
84
  gem 'factory_girl_rails'
92
85
  end
93
86
 
94
- # #{if mongoid then "gem 'mongo_session_store-rails4'" else "gem 'activerecord-session_store'" end}
87
+ # #{if mongoid then "gem 'mongo_session_store-rails5'" else "gem 'activerecord-session_store'" end}
95
88
 
96
89
  gem 'slim'
97
90
  gem 'sprockets'
98
91
 
99
- gem 'uglifier'
92
+ gem 'coffee-rails', '~> 4.2'
93
+ gem 'uglifier', '>= 1.3.0'
94
+
95
+ # gem 'jbuilder', '~> 2.5'
96
+
97
+ group :development, :test do
98
+ # Call 'byebug' anywhere in the code to stop execution and get a debugger console
99
+ gem 'byebug', platform: :mri
100
+ end
101
+
102
+ gem 'glebtv_mongoid_userstamp', '0.7.0'
103
+
104
+ # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
105
+ gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
100
106
 
101
107
  group :production do
102
- # gem 'sentry-raven'
103
108
  gem "god"
104
109
  end
105
-
106
- gem 'glebtv_mongoid_userstamp', '0.6.2'
107
110
  TEXT
108
111
  end
109
112
 
110
- RVM_RUBY_VERSION = "2.3.3"
113
+ RVM_RUBY_VERSION = "2.4.0-preview1"
111
114
  create_file '.ruby-version', "#{RVM_RUBY_VERSION}\n"
112
115
  create_file '.ruby-gemset', "#{app_name.underscore}\n"
116
+ # run "rvm use #{RVM_RUBY_VERSION} && rvm gemset create #{app_name}"
117
+ # run "rvm use #{RVM_RUBY_VERSION}@#{app_name} && gem install bundler"
118
+ # run "rvm gemset list"
119
+ run 'bundle install --without production'
113
120
 
114
- run "rvm #{RVM_RUBY_VERSION} do rvm gemset create #{app_name.underscore}"
115
- run "rvm #{RVM_RUBY_VERSION}@#{app_name.underscore} do gem install bundler"
116
- run "rvm #{RVM_RUBY_VERSION}@#{app_name.underscore} do bundle install --without production"
117
121
 
118
122
  ####### CONFIG #######
119
123
 
@@ -188,6 +192,8 @@ require "active_model/railtie"
188
192
  #{'#' if mongoid}require "active_record/railtie"
189
193
  require "action_controller/railtie"
190
194
  # require "action_mailer/railtie" # mailer is off by default
195
+ # require "active_job/railtie"
196
+ # require "action_cable/engine"
191
197
  require "action_mailer/railtie"
192
198
  require "action_view/railtie"
193
199
  require "sprockets/railtie"
@@ -226,3 +232,346 @@ module #{app_name.underscore.camelcase}
226
232
  end
227
233
  TEXT
228
234
  end
235
+
236
+
237
+ ####### DEVISE #######
238
+
239
+ generate "devise:install"
240
+ gsub_file 'config/initializers/devise.rb', "'please-change-me-at-config-initializers-devise@example.com'", "'noreply@#{app_name.dasherize.downcase}.ru'"
241
+ inject_into_file 'config/initializers/devise.rb', after: /^end/ do <<-TEXT
242
+ Rails.application.config.to_prepare do
243
+ Devise::SessionsController.layout "hancock/devise/sessions"
244
+ Devise::RegistrationsController.layout "hancock/devise/registrations"
245
+ Devise::ConfirmationsController.layout "hancock/devise/confirmations"
246
+ Devise::UnlocksController.layout "hancock/devise/unlocks"
247
+ Devise::PasswordsController.layout "hancock/devise/passwords"
248
+ end
249
+ TEXT
250
+ end
251
+
252
+ generate "devise", "User"
253
+
254
+
255
+ ####### ROUTES #######
256
+
257
+ remove_file 'config/routes.rb'
258
+ create_file 'config/routes.rb' do <<-TEXT
259
+ Rails.application.routes.draw do
260
+ devise_for :users, controllers: {sessions: 'hancock/sessions'}
261
+
262
+ mount RailsAdmin::Engine => '/admin', as: 'rails_admin'
263
+ mount Ckeditor::Engine => '/ckeditor'
264
+
265
+ hancock_cms_routes
266
+ end
267
+ TEXT
268
+ end
269
+
270
+
271
+ ####### INITIALIZERS #######
272
+
273
+ inject_into_file 'config/initializers/assets.rb', before: /\z/ do <<-TEXT
274
+ Rails.application.config.assets.precompile += %w( *.svg )
275
+ Rails.application.config.assets.precompile += %w( ckeditor/* )
276
+ Rails.application.config.assets.precompile += %w( codemirror.js codemirror.css codemirror/**/* )
277
+ TEXT
278
+ end
279
+
280
+ gsub_file 'config/initializers/backtrace_silencers.rb',
281
+ "# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }",
282
+ "Rails.backtrace_cleaner.add_silencer { |line| line =~ /lib\\/(haml|slim|sass|scss|coffee|compass)/ }"
283
+
284
+ if mongoid
285
+ generate "ckeditor:install", "--orm=mongoid", "--backend=paperclip"
286
+ else
287
+ generate "ckeditor:install", "--orm=active_record", "--backend=paperclip"
288
+ end
289
+ gsub_file 'config/initializers/ckeditor.rb', "# config.image_file_types = %w(jpg jpeg png gif tiff)", "config.image_file_types = %w(jpg jpeg png gif tiff svg)"
290
+ gsub_file 'config/initializers/ckeditor.rb', "# config.authorize_with :cancan", "config.authorize_with :cancancan"
291
+ gsub_file 'config/initializers/ckeditor.rb', "# config.assets_languages = ['en', 'uk']", "config.assets_languages = ['en', 'ru']"
292
+
293
+ if mongoid
294
+ remove_file 'config/initializers/cookies_serializer.rb'
295
+ create_file 'config/initializers/cookies_serializer.rb' do <<-TEXT
296
+ # Be sure to restart your server when you modify this file.
297
+ # json serializer breaks Devise + Mongoid. DO NOT ENABLE
298
+ # See https://github.com/plataformatec/devise/pull/2882
299
+ # Rails.application.config.action_dispatch.cookies_serializer = :json
300
+ Rails.application.config.action_dispatch.cookies_serializer = :marshal
301
+ TEXT
302
+ end
303
+ end
304
+
305
+ gsub_file 'config/initializers/filter_parameter_logging.rb', "[:password]", "[:password, :password_confirmation]"
306
+
307
+ # generate 'paperclip_optimizer:install'
308
+ # remove_file 'config/initializers/paperclip_optimizer.rb'
309
+ # generate "hancock:cms:paperclip_optimizer"
310
+
311
+ # generate 'rails_email_preview:install'
312
+ # remove_file 'app/mailer_previews/contact_mailer_preview.rb'
313
+ # create_file 'app/mailer_previews/contact_mailer_preview.rb' do <<-TEXT
314
+ # class ContactMailerPreview
315
+ # def new_message_email
316
+ # Hancock::Feedback::ContactMailer.new_message_email(Hancock::Feedback::ContactMessage.all.to_a.sample)
317
+ # end
318
+ # end
319
+ # TEXT
320
+ # end
321
+
322
+ generate "hancock:cms:config"
323
+
324
+ generate "hancock:cms:rack"
325
+
326
+ generate "hancock:cms:admin"
327
+
328
+ remove_file 'config/initializers/session_store.rb'
329
+ if mongoid
330
+ create_file 'config/initializers/session_store.rb' do <<-TEXT
331
+ # Be sure to restart your server when you modify this file.
332
+
333
+ #Rails.application.config.session_store :cookie_store, key: '_#{app_name.tableize.singularize}_session'
334
+ Rails.application.config.session_store :mongoid_store
335
+ TEXT
336
+ end
337
+ else
338
+ generate 'active_record_store:session_migration'
339
+ create_file 'config/initializers/session_store.rb' do <<-TEXT
340
+ # Be sure to restart your server when you modify this file.
341
+
342
+ #Rails.application.config.session_store :cookie_store, key: '_#{app_name.tableize.singularize}_session'
343
+ Rails.application.config.session_store :active_record_store
344
+ TEXT
345
+ end
346
+ end
347
+
348
+ # unless mongoid
349
+ # generate 'simple_captcha'
350
+ # end
351
+
352
+ generate "simple_form:install"
353
+
354
+
355
+ ####### CONTROLLERS #######
356
+
357
+ remove_file 'app/controllers/application_controller.rb'
358
+ create_file 'app/controllers/application_controller.rb' do <<-TEXT
359
+ class ApplicationController < ActionController::Base
360
+ include Hancock::Controller
361
+ end
362
+ TEXT
363
+ end
364
+
365
+
366
+ ####### MODELS #######
367
+
368
+ generate "hancock:cms:ability"
369
+
370
+ gsub_file 'app/models/user.rb', '# :confirmable, :lockable, :timeoutable and :omniauthable' do <<-TEXT
371
+ include Hancock::Model
372
+ include Hancock::Enableable
373
+ include Hancock::RailsAdminPatch
374
+ def self.manager_can_default_actions
375
+ [:show, :read]
376
+ end
377
+ def manager_cannot_actions
378
+ [:new, :create, :delete, :destroy]
379
+ end
380
+
381
+ cattr_accessor :current_user
382
+
383
+ # Include default devise modules. Others available are:
384
+ # :confirmable, :lockable, :timeoutable and :omniauthable
385
+ TEXT
386
+ end
387
+
388
+ gsub_file 'app/models/user.rb', ':registerable,', ' :lockable,'
389
+ if mongoid
390
+ gsub_file 'app/models/user.rb', '# field :failed_attempts', 'field :failed_attempts'
391
+ gsub_file 'app/models/user.rb', '# field :unlock_token', 'field :unlock_token'
392
+ gsub_file 'app/models/user.rb', '# field :locked_at', 'field :locked_at'
393
+
394
+ inject_into_file 'app/models/user.rb', before: /^end/ do <<-TEXT
395
+
396
+ field :name, type: String
397
+ field :login, type: String
398
+ field :roles, type: Array, default: []
399
+
400
+ before_save do
401
+ self.roles ||= []
402
+ self.roles.reject! { |r| r.blank? }
403
+ end
404
+
405
+ AVAILABLE_ROLES = ["admin", "manager", "client"]
406
+
407
+ AVAILABLE_ROLES.each do |r|
408
+ class_eval <<-EVAL
409
+ def \#{r}?
410
+ self.roles and self.roles.include?("\#{r}")
411
+ end
412
+
413
+ scope :\#{r.pluralize}, -> { any_in(roles: "\#{r}") }
414
+ EVAL
415
+ end
416
+
417
+ def self.generate_first_admin_user
418
+ if ::User.admins.all.count == 0
419
+ _email_pass = 'admin@#{app_name.dasherize.downcase}.ru'
420
+ if ::User.new(roles: ["admin"], email: _email_pass, password: _email_pass, password_confirmation: _email_pass).save
421
+ puts "AdminUser with email and password '\#{_email_pass}' was created!"
422
+ else
423
+ puts 'Creating AdminUser error'
424
+ end
425
+ else
426
+ puts 'AdminUsers are here already'
427
+ end
428
+ end
429
+
430
+ def self.generate_first_manager_user
431
+ if ::User.managers.all.count == 0
432
+ _email_pass = 'manager@#{app_name.dasherize.downcase}.ru'
433
+ if ::User.create(roles: ["manager"], email: _email_pass, password: _email_pass, password_confirmation: _email_pass)
434
+ puts "ManagerUser with email and password '\#{_email_pass}' was created!"
435
+ else
436
+ puts 'Creating ManagerUser error'
437
+ end
438
+ else
439
+ puts 'ManagerUsers are here already'
440
+ end
441
+ end
442
+
443
+ rails_admin do
444
+ list do
445
+ field :email
446
+ field :name
447
+ field :login
448
+ field :roles do
449
+ pretty_value do
450
+ render_object = (bindings[:controller] || bindings[:view])
451
+ render_object.content_tag(:p, bindings[:object].roles.join(", ")) if render_object
452
+ end
453
+ end
454
+ end
455
+
456
+ edit do
457
+ group :login do
458
+ active false
459
+ field :email, :string do
460
+ visible do
461
+ render_object = (bindings[:controller] || bindings[:view])
462
+ render_object and (render_object.current_user.admin? or (render_object.current_user.manager? and render_object.current_user == bindings[:object]))
463
+ end
464
+ end
465
+ field :name, :string
466
+ field :login, :string do
467
+ visible do
468
+ render_object = (bindings[:controller] || bindings[:view])
469
+ render_object and render_object.current_user.admin?
470
+ end
471
+ end
472
+ end
473
+
474
+ group :roles do
475
+ active false
476
+ field :roles, :enum do
477
+ enum do
478
+ AVAILABLE_ROLES
479
+ end
480
+
481
+ multiple do
482
+ true
483
+ end
484
+
485
+ visible do
486
+ render_object = (bindings[:controller] || bindings[:view])
487
+ render_object and render_object.current_user.admin?
488
+ end
489
+ end
490
+ end
491
+
492
+ group :password do
493
+ active false
494
+ field :password do
495
+ visible do
496
+ render_object = (bindings[:controller] || bindings[:view])
497
+ render_object and (render_object.current_user.admin? or render_object.current_user == bindings[:object])
498
+ end
499
+ end
500
+ field :password_confirmation do
501
+ visible do
502
+ render_object = (bindings[:controller] || bindings[:view])
503
+ render_object and (render_object.current_user.admin? or render_object.current_user == bindings[:object])
504
+ end
505
+ end
506
+ end
507
+ end
508
+
509
+ end
510
+ TEXT
511
+ end
512
+ end
513
+
514
+
515
+ ###### HANCOCK OTHERS ######
516
+
517
+ unless mongoid
518
+ generate "hancock:cms:migration"
519
+ generate "rails_admin_settings:migration"
520
+ end
521
+
522
+ remove_file 'app/views/layouts/application.html.erb'
523
+ generate "hancock:cms:layout"
524
+
525
+ unless mongoid
526
+ rake "db:migrate"
527
+ end
528
+
529
+ remove_file 'app/assets/stylesheets/application.css'
530
+ remove_file 'app/assets/javascripts/application.js'
531
+ generate "hancock:cms:assets", app_name
532
+
533
+ remove_file 'public/robots.txt'
534
+ generate "hancock:cms:robots", app_name
535
+
536
+ #god+unicorn
537
+ generate "hancock:cms:unicorn_god", app_name
538
+ #scripts
539
+ generate "hancock:cms:scripts", app_name
540
+
541
+ FileUtils.cp(Pathname.new(destination_root).join('config', 'secrets.yml').to_s, Pathname.new(destination_root).join('config', 'secrets.yml.example').to_s)
542
+
543
+ unless mongoid
544
+ generate "paper_trail:install"
545
+ generate "friendly_id"
546
+ rake "db:migrate"
547
+ end
548
+
549
+ generate "rspec:install"
550
+
551
+
552
+ ####### GIT #######
553
+
554
+ remove_file '.gitignore'
555
+ create_file '.gitignore' do <<-TEXT
556
+ # See https://help.github.com/articles/ignoring-files for more about ignoring files.
557
+ #
558
+ # If you find yourself ignoring temporary files generated by your text editor
559
+ # or operating system, you probably want to add a global ignore instead:
560
+ # git config --global core.excludesfile '~/.gitignore_global'
561
+ .idea
562
+ .idea/*
563
+
564
+ /.bundle
565
+ /log/*.log
566
+ /tmp/*
567
+ /public/assets
568
+ /public/ckeditor_assets
569
+ Gemfile.lock
570
+ TEXT
571
+ end
572
+
573
+ create_file 'extra/.gitkeep', ''
574
+
575
+ git :init
576
+ git add: "."
577
+ git commit: %Q{ -m 'Initial commit' }