Class: Blacklight::Assets::SprocketsGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Defined in:
lib/generators/blacklight/assets/sprockets_generator.rb

Instance Method Summary collapse

Instance Method Details

#add_javascript_dependenciesObject



16
17
18
19
20
# File 'lib/generators/blacklight/assets/sprockets_generator.rb', line 16

def add_javascript_dependencies
  gem 'bootstrap', options[:'bootstrap-version'].presence
  gem 'jquery-rails'
  gem 'twitter-typeahead-rails', '0.11.1.pre.corejavascript'
end

#add_sass_supportObject



22
23
24
# File 'lib/generators/blacklight/assets/sprockets_generator.rb', line 22

def add_sass_support
  gem "sassc-rails", "~> 2.1" if Rails.version > '7'
end

#assetsObject

rubocop:disable Metrics/MethodLength



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/generators/blacklight/assets/sprockets_generator.rb', line 45

def assets # rubocop:disable Metrics/MethodLength
  create_file 'app/assets/stylesheets/blacklight.scss' do
    <<~CONTENT
      @import 'bootstrap';
      @import 'blacklight/blacklight';
    CONTENT
  end

  # Ensure application.css is a proper Sprockets manifest that loads blacklight styles
  application_css = File.expand_path('app/assets/stylesheets/application.css', destination_root)
  if File.exist?(application_css)
    content = File.read(application_css)
    unless content.include?('require blacklight')
      create_file 'app/assets/stylesheets/application.css', force: true do
        <<~CONTENT
          /*
           *= require blacklight
           *= require_self
           */
        CONTENT
      end
    end
  end

  # Ensure this method is idempotent
  return if has_blacklight_assets?

  create_file 'app/assets/javascripts/application.js' do
    <<~CONTENT
      //= require jquery3
      //= require rails-ujs

      // Required by Blacklight
      //= require popper
      // Twitter Typeahead for autocomplete
      //= require twitter/typeahead
      //= require bootstrap
      //= require blacklight/blacklight
    CONTENT
  end
end

#replace_propshaft_with_sprocketsObject



8
9
10
11
12
13
14
# File 'lib/generators/blacklight/assets/sprockets_generator.rb', line 8

def replace_propshaft_with_sprockets
  return if defined?(Sprockets)

  # Rails 8+ defaults to Propshaft, but Blacklight 7.x JS requires Sprockets
  gsub_file 'Gemfile', /^gem ['"]propshaft['"].*$/, '# \0'
  gem 'sprockets-rails'
end

#setup_sprockets_manifestObject



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/generators/blacklight/assets/sprockets_generator.rb', line 26

def setup_sprockets_manifest
  if !defined?(Sprockets)
    # Rails 8+ with Propshaft replaced: create Sprockets config from scratch
    directory = File.expand_path('app/assets/config', destination_root)
    FileUtils.mkdir_p(directory)
    create_file 'app/assets/config/manifest.js' do
      <<~CONTENT
        //= link_tree ../images
        //= link_directory ../stylesheets .css
        //= link application.js
      CONTENT
    end
    empty_directory 'app/assets/images'
  elsif defined?(Sprockets::VERSION) && Sprockets::VERSION >= '4'
    append_to_file 'app/assets/config/manifest.js', "\n//= link application.js"
    empty_directory 'app/assets/images'
  end
end