require "rails/generators" module Edge module Generators class InstallGenerator < Rails::Generators::Base source_root File.join(File.dirname(__FILE__), "../../template/rails") argument :layout_name, type: :string, default: "application", banner: "layout_name" def add_assets # rails_ujs breaks, need to incorporate rails-behavior plugin for this to work seamlessly # gsub_file "app/assets/javascripts/application#{detect_js_format[0]}", /\/\/= require jquery\n/, "" settings_file = File.join(File.dirname(__FILE__), "..", "..", "template", "base", "assets", "sass", "_setting.scss") create_file "app/assets/stylesheets/_setting.scss", File.read(settings_file) framework_file = File.join(File.dirname(__FILE__), "..", "..", "template", "base", "assets", "sass", "framework.scss") create_file "app/assets/stylesheets/framework.scss", File.read(framework_file) style_file = File.join(File.dirname(__FILE__), "..", "..", "template", "base", "assets", "sass", "app.scss") create_file "app/assets/stylesheets/app.scss", File.read(style_file) insert_into_file "app/assets/stylesheets/application#{detect_css_format[0]}", "#{detect_css_format[1]} require framework\n", after: "require_self\n" end def detect_js_format return ['.coffee', '#='] if File.exist?('app/assets/javascripts/application.coffee') return ['.js.coffee', '#='] if File.exist?('app/assets/javascripts/application.js.coffee') return ['.js', '//='] if File.exist?('app/assets/javascripts/application.js') end def detect_css_format return ['.css', ' *='] if File.exist?('app/assets/stylesheets/application.css') return ['.css.sass', ' //='] if File.exist?('app/assets/stylesheets/application.css.sass') return ['.sass', ' //='] if File.exist?('app/assets/stylesheets/application.sass') return ['.css.scss', ' //='] if File.exist?('app/assets/stylesheets/application.css.scss') return ['.scss', ' //='] if File.exist?('app/assets/stylesheets/application.scss') end def create_layout if options.haml?||(defined?(Haml) && options.haml?) template 'application.html.haml', "app/views/layouts/#{file_name}.html.haml" elsif options.slim?||(defined?(Slim) && options.slim?) template 'application.html.slim', "app/views/layouts/#{file_name}.html.slim" else template 'application.html.erb', "app/views/layouts/#{file_name}.html.erb" end end private def file_name layout_name.underscore.downcase end end end end