class Hancock::Cms::SetupGenerator
Public Instance Methods
app_name()
click to toggle source
# File lib/generators/hancock/cms/setup_generator.rb, line 483 def app_name Rails.application.class.parent_name end
ask_with_timeout(question, timeout = 5)
click to toggle source
# File lib/generators/hancock/cms/setup_generator.rb, line 10 def ask_with_timeout(question, timeout = 5) ask(question) # # temp # begin # Timeout::timeout(timeout) { # ask("#{question} | U have only #{timeout} second(s)!") # } # rescue # puts "" # "" # end end
install()
click to toggle source
# File lib/generators/hancock/cms/setup_generator.rb, line 8 def install def ask_with_timeout(question, timeout = 5) ask(question) # # temp # begin # Timeout::timeout(timeout) { # ask("#{question} | U have only #{timeout} second(s)!") # } # rescue # puts "" # "" # end end ####### DEVISE ####### generate "devise:install" if ["yes", "y"].include?(ask_with_timeout("generate `devise:install`?(y or yes)").downcase.strip) gsub_file 'config/initializers/devise.rb', "'please-change-me-at-config-initializers-devise@example.com'", "'noreply@#{app_name.dasherize.downcase}.ru'" if ["yes", "y"].include?(ask_with_timeout("Set Hancock's layout for devise? (y or yes)").downcase.strip) _sessions_layout = Devise::SessionsController._layout == "hancock/devise/sessions" _registration_layout = Devise::RegistrationsController._layout == "hancock/devise/registrations" _confirmations_layout = Devise::ConfirmationsController._layout == "hancock/devise/confirmations" _unlocks_layout = Devise::UnlocksController._layout == "hancock/devise/unlocks" _passwords_layout = Devise::PasswordsController._layout == "hancock/devise/passwords" if !_sessions_layout or !_registration_layout or !_confirmations_layout or !_unlocks_layout or !_passwords_layout inject_into_file 'config/initializers/devise.rb', after: /^end/ do <<-TEXT Rails.application.config.to_prepare do #{'Devise::SessionsController.layout "hancock/devise/sessions"' unless _sessions_layout } #{'Devise::RegistrationsController.layout "hancock/devise/registrations"' unless _registration_layout } #{'Devise::ConfirmationsController.layout "hancock/devise/confirmations"' unless _confirmations_layout } #{'Devise::UnlocksController.layout "hancock/devise/unlocks"' unless _unlocks_layout } #{'Devise::PasswordsController.layout "hancock/devise/passwords"' unless _passwords_layout } end TEXT end end end generate "devise", "User", "--routes=false" if ["yes", "y"].include?(ask_with_timeout("generate `devise User --routes=false`?(y or yes)").downcase.strip) ####### ROUTES ####### if ["yes", "y"].include?(ask_with_timeout("Set Hancock's routes? (y or yes)").downcase.strip) remove_file 'config/routes.rb' create_file 'config/routes.rb' do <<-TEXT Rails.application.routes.draw do devise_for :users, controllers: {sessions: 'hancock/sessions'} mount RailsAdmin::Engine => '/admin', as: 'rails_admin' hancock_cms_routes end TEXT end end ####### INITIALIZERS ####### add_assets_precompiled = ["*.svg", 'ckeditor/*', 'codemirror.js', 'codemirror.css', 'codemirror/**/*'] if (Rails.application.config.assets.precompile & add_assets_precompiled).length < add_assets_precompiled.length inject_into_file 'config/initializers/assets.rb', before: /\z/ do <<-TEXT Rails.application.config.assets.precompile += %w( *.svg ) Rails.application.config.assets.precompile += %w( ckeditor/* ) Rails.application.config.assets.precompile += %w( codemirror.js codemirror.css codemirror/**/* ) TEXT end end if mongoid if defined?(Paperclip) generate "ckeditor:install", "--orm=mongoid", "--backend=paperclip" if ["yes", "y"].include?(ask_with_timeout("generate `ckeditor:install --orm=mongoid --backend=paperclip`?(y or yes)").downcase.strip) require 'ckeditor/orm/mongoid' require Rails.root.join("app", "models", "ckeditor", "asset.rb") if defined?(Ckeditor::Asset) unless Ckeditor::Asset < Hancock::Model inject_into_file 'app/models/ckeditor/asset.rb', before: /^end/ do <<-TEXT include Hancock::Model TEXT end end end if ["yes", "y"].include?(ask_with_timeout("Set Hancock's config for Ckeditor::Picture? (y or yes)").downcase.strip) remove_file 'app/models/ckeditor/picture.rb' create_file 'app/models/ckeditor/picture.rb' do <<-TEXT class Ckeditor::Picture < Ckeditor::Asset # has_mongoid_attached_file :data, # url: '/ckeditor_assets/pictures/:id/:style_:basename.:extension', # path: ':rails_root/public/ckeditor_assets/pictures/:id/:style_:basename.:extension', # styles: { content: '800>', thumb: '118x100#' } include Hancock::Gallery::Paperclipable hancock_cms_attached_file :data, url: '/ckeditor_assets/pictures/:id/:style/:basename.:extension', path: ':rails_root/public/ckeditor_assets/pictures/:id/:style/:basename.:extension' def data_styles if data_svg? {} else { content: '800>', thumb: '118x100#' } end end validates_attachment_size :data, less_than: 2.megabytes validates_attachment_presence :data validates_attachment_content_type :data, content_type: /\\Aimage/ def url_content # url(:content) if data_svg? url else url(:content) end end def url_thumb # url(:thumb) if data_svg? url else url(:thumb) end end end TEXT end end end else if defined?(Paperclip) generate "ckeditor:install", "--orm=active_record", "--backend=paperclip" if ["yes", "y"].include?(ask_with_timeout("generate `ckeditor:install --orm=active_record --backend=paperclip`?(y or yes)").downcase.strip) end end if File.exists?(Rails.root.join 'config/initializers/ckeditor.rb') 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)" gsub_file 'config/initializers/ckeditor.rb', "# config.authorize_with :cancan", "# config.authorize_with :cancancan" gsub_file 'config/initializers/ckeditor.rb', "# config.assets_languages = ['en', 'uk']", "config.assets_languages = ['en', 'ru']" end if mongoid and ["yes", "y"].include?(ask_with_timeout("Set Hancock's config for cookies_serializer? (y or yes)").downcase.strip) remove_file 'config/initializers/cookies_serializer.rb' create_file 'config/initializers/cookies_serializer.rb' do <<-TEXT # Be sure to restart your server when you modify this file. # json serializer breaks Devise + Mongoid. DO NOT ENABLE # See https://github.com/plataformatec/devise/pull/2882 # Rails.application.config.action_dispatch.cookies_serializer = :json Rails.application.config.action_dispatch.cookies_serializer = :marshal TEXT end end gsub_file 'config/initializers/filter_parameter_logging.rb', "[:password]", "[:password, :password_confirmation]" # generate 'paperclip_optimizer:install' # remove_file 'config/initializers/paperclip_optimizer.rb' generate "hancock:cms:paperclip_optimizer" if ["yes", "y"].include?(ask_with_timeout("generate `hancock:cms:paperclip_optimizer`? (y or yes)").downcase.strip) # generate 'rails_email_preview:install' # remove_file 'app/mailer_previews/contact_mailer_preview.rb' # create_file 'app/mailer_previews/contact_mailer_preview.rb' do <<-TEXT # class ContactMailerPreview # def new_message_email # Hancock::Feedback::ContactMailer.new_message_email(Hancock::Feedback::ContactMessage.all.to_a.sample) # end # end # TEXT # end generate "hancock:cms:config" if ["yes", "y"].include?(ask_with_timeout("generate `hancock:cms:config`? (y or yes)").downcase.strip) generate "hancock:cms:rack" if ["yes", "y"].include?(ask_with_timeout("generate `hancock:cms:rack`? (y or yes)").downcase.strip) generate "hancock:cms:admin" if ["yes", "y"].include?(ask_with_timeout("generate `hancock:cms:admin`? (y or yes)").downcase.strip) if ["yes", "y"].include?(ask_with_timeout("Set Hancock's config for session_store? (y or yes)").downcase.strip) remove_file 'config/initializers/session_store.rb' if mongoid create_file 'config/initializers/session_store.rb' do <<-TEXT # Be sure to restart your server when you modify this file. #Rails.application.config.session_store :cookie_store, key: '_#{app_name.tableize.singularize}_session' Rails.application.config.session_store :mongoid_store TEXT end else generate 'active_record_store:session_migration' create_file 'config/initializers/session_store.rb' do <<-TEXT # Be sure to restart your server when you modify this file. #Rails.application.config.session_store :cookie_store, key: '_#{app_name.tableize.singularize}_session' Rails.application.config.session_store :active_record_store TEXT end end end # unless mongoid # generate 'simple_captcha' # end generate "simple_form:install" if ["yes", "y"].include?(ask_with_timeout("generate `simple_form:install`? (y or yes)").downcase.strip) ####### CONTROLLERS ####### unless ApplicationController < Hancock::Controller remove_file 'app/controllers/application_controller.rb' create_file 'app/controllers/application_controller.rb' do <<-TEXT class ApplicationController < ActionController::Base include Hancock::Controller end TEXT end end ####### MODELS ####### generate "hancock:cms:ability" if ["yes", "y"].include?(ask_with_timeout("generate `hancock:cms:ability`? (y or yes)").downcase.strip) gsub_user_rb = begin (User < Hancock::Model).nil? rescue true end if gsub_user_rb gsub_file 'app/models/user.rb', '# :confirmable, :lockable, :timeoutable and :omniauthable' do <<-TEXT include Hancock::Model include Hancock::Enableable include Hancock::RailsAdminPatch def self.manager_can_default_actions [:show, :read] end def self.manager_cannot_actions [:new, :create, :delete, :destroy] end ######################### RailsAdminUserAbilities ######################### # def self.rails_admin_user_defined_visible_actions # [:user_abilities] # end # has_one :ability, class_name: "RailsAdminUserAbilities::UserAbility", as: :rails_admin_user_abilitable # scope :for_rails_admin, -> { where(:roles.in => ['admin', 'manager']) } # could be any you want, just need to ########################################################################### cattr_accessor :current_user # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable TEXT end if ["yes", "y"].include?(ask_with_timeout("Set Hancock's User model? (y or yes)").downcase.strip) gsub_file 'app/models/user.rb', ':registerable,', ' :lockable,' if mongoid gsub_file 'app/models/user.rb', '# field :failed_attempts', 'field :failed_attempts' gsub_file 'app/models/user.rb', '# field :unlock_token', 'field :unlock_token' gsub_file 'app/models/user.rb', '# field :locked_at', 'field :locked_at' inject_into_file 'app/models/user.rb', before: /^end/ do <<-TEXT field :name, type: String field :login, type: String field :roles, type: Array, default: [] before_save do self.roles ||= [] self.roles.reject! { |r| r.blank? } end AVAILABLE_ROLES = ["admin", "manager", "client"].freeze AVAILABLE_ROLES.each do |r| class_eval <<-RUBY def \#{r}? self.roles and self.roles.include?("\#{r}") end scope :\#{r.pluralize}, -> { any_in(roles: "\#{r}") } RUBY end def self.generate_first_admin_user if ::User.admins.all.count == 0 _email_pass = 'admin@#{app_name.dasherize.downcase}.ru' if ::User.new(roles: ["admin"], email: _email_pass, password: _email_pass, password_confirmation: _email_pass).save puts "#################################################################################" puts "#################################################################################" puts "AdminUser with email and password '\#{_email_pass}' was created!" puts "#################################################################################" puts "#################################################################################" else puts 'Creating AdminUser error' end else puts 'AdminUsers are here already' end end def self.generate_first_manager_user if ::User.managers.all.count == 0 _email_pass = 'manager@#{app_name.dasherize.downcase}.ru' if ::User.create(roles: ["manager"], email: _email_pass, password: _email_pass, password_confirmation: _email_pass) puts "ManagerUser with email and password '\#{_email_pass}' was created!" else puts 'Creating ManagerUser error' end else puts 'ManagerUsers are here already' end end rails_admin do navigation_icon 'icon-user' list do field :email field :name field :login field :roles do pretty_value do render_object = (bindings[:controller] || bindings[:view]) render_object.content_tag(:p, bindings[:object].roles.join(", ")) if render_object end end end edit do group :login do active false field :email, :string do visible do render_object = (bindings[:controller] || bindings[:view]) render_object and (render_object.current_user.admin? or (render_object.current_user.manager? and render_object.current_user == bindings[:object])) end end field :name, :string field :login, :string do visible do render_object = (bindings[:controller] || bindings[:view]) render_object and render_object.current_user.admin? end end end group :roles do active false field :roles, :hancock_enum do enum do ::User::AVAILABLE_ROLES end multiple do true end visible do render_object = (bindings[:controller] || bindings[:view]) render_object and render_object.current_user.admin? end end end group :password do active false field :password do visible do render_object = (bindings[:controller] || bindings[:view]) render_object and (render_object.current_user.admin? or render_object.current_user == bindings[:object]) end end field :password_confirmation do visible do render_object = (bindings[:controller] || bindings[:view]) render_object and (render_object.current_user.admin? or render_object.current_user == bindings[:object]) end end end end end TEXT end end end end ###### HANCOCK OTHERS ###### unless mongoid generate "hancock:cms:migration" generate "rails_admin_settings:migration" end if ["yes", "y"].include?(ask_with_timeout("Set Hancock's layout? (y or yes)").downcase.strip) remove_file 'app/views/layouts/application.html.erb' generate "hancock:cms:layout" end run 'rails r "User.generate_first_admin_user"' if ["yes", "y"].include?(ask_with_timeout("Set Hancock's assets? (y or yes)").downcase.strip) remove_file 'app/assets/stylesheets/application.css' remove_file 'app/assets/javascripts/application.js' generate "hancock:cms:assets", app_name end if ["yes", "y"].include?(ask_with_timeout("Set Hancock's robots.txt? (y or yes)").downcase.strip) remove_file 'public/robots.txt' generate "hancock:cms:robots", app_name end if ["yes", "y"].include?(ask_with_timeout("Set Hancock's unicorn config? (y or yes)").downcase.strip) #god+unicorn generate "hancock:cms:unicorn_god", app_name end if ["yes", "y"].include?(ask_with_timeout("Set Hancock's scripts? (y or yes)").downcase.strip) #scripts generate "hancock:cms:scripts", app_name end FileUtils.cp(Pathname.new(destination_root).join('config', 'secrets.yml').to_s, Pathname.new(destination_root).join('config', 'secrets.yml.example').to_s) unless mongoid generate "paper_trail:install" generate "friendly_id" rake "db:migrate" end generate "rspec:install" if ["yes", "y"].include?(ask_with_timeout("generate `rspec:install`? (y or yes)").downcase.strip) ####### GIT ####### remove_file '.gitignore' create_file '.gitignore' do <<-TEXT # See https://help.github.com/articles/ignoring-files for more about ignoring files. # # If you find yourself ignoring temporary files generated by your text editor # or operating system, you probably want to add a global ignore instead: # git config --global core.excludesfile '~/.gitignore_global' .idea .idea/* /.bundle /log/*.log /tmp/* /public/assets # /public/ckeditor_assets Gemfile.lock TEXT end create_file 'extra/.gitkeep', '' if ["yes", "y"].include?(ask_with_timeout("Do u want init git? (y or yes)").downcase.strip) git :init git add: "." git commit: %Q{ -m 'Initial commit' } end end
mongoid()
click to toggle source
# File lib/generators/hancock/cms/setup_generator.rb, line 479 def mongoid !!defined? Mongoid end