Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
blocks / lib / generators / blocks / active_admin / active_admin_generator.rb
Size: Mime:
require 'rails/generators'

module Blocks
  module ActiveAdminAssets
    def insert_into_css_file(content, **options)
      return unless css_file
      options[:after] ||= %r{@import "active_admin/base";}
      insert_into_asset_file css_file, content, options
    end

    def insert_into_js_file(content, **options)
      content.gsub!(/^\/\//, '#') if js_file.ends_with?('coffee')
      content.gsub!(/^#/, '//') if js_file.ends_with?('js')

      options[:after] ||= %r{(//)|#= require +['"]?active_admin/base['"]?}
      insert_into_asset_file js_file, content, options
    end

    private

    def js_file
      @js_file ||= find_existing_file(potential_js_files)
    end

    def css_file
      @css_file ||= find_existing_file(potential_css_files)
    end

    def find_existing_file(files)
      files.detect { |file| File.exist?(file) }
    end

    def insert_into_asset_file(asset_file, content, **options)
      return unless asset_file
      if File.binread(asset_file).include?(content)
        say_status("skipped", "insert into #{asset_file}", :yellow)
      else
        insert_into_file asset_file, "\n#{content}", options
      end
    end

    def potential_js_files
      [
        "app/assets/javascripts/active_admin.coffee",
        "app/assets/javascripts/active_admin.js.coffee",
        "app/assets/javascripts/active_admin.js"
      ]
    end

    def potential_css_files
      [
        "app/assets/stylesheets/active_admin.scss",
        "app/assets/stylesheets/active_admin.css.scss",
        "app/assets/stylesheets/active_admin.css"
      ]
    end
  end

  class ActiveAdminGenerator < Rails::Generators::Base
    source_root File.expand_path("../templates", __FILE__)
    include ActiveAdminAssets

    def guard_against_no_activeadmin
      begin
        ActiveAdmin
      rescue
        say_status("quitting", "you must install ActiveAdmin", :red)
        exit
      end

      unless js_file && css_file
        say_status("quitting", "ActiveAdmin CSS/JS assets are missing. Did you run the generator?", :red)
        exit
      end
    end

    def config_activeadmin
    end

    def require_js
      insert_into_js_file '//= require blocks/builder'
    end

    def require_css
      insert_into_css_file '@import "blocks/builder";'
    end
  end
end