Class: RailsDevtools::Importmaps::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_devtools/importmaps/base.rb

Direct Known Subclasses

RailsDevtools::Importmap

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.pin(name, to: nil, preload: true, vendor: false) ⇒ Object



4
5
6
7
# File 'lib/rails_devtools/importmaps/base.rb', line 4

def self.pin(name, to: nil, preload: true, vendor: false)
  to = "#{name}.js" if to.nil?
  pins << Pin.new(name, to, preload, vendor)
end

.pin_all_from(directory, under:, preload: true) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/rails_devtools/importmaps/base.rb', line 9

def self.pin_all_from(directory, under:, preload: true)
  Dir.glob("#{directory}/**/*.js").each do |file|
    path = Pathname.new(file)
    if path.basename.to_s == "index.js"
      pin(under, to: "#{under}/index.js", preload: preload)
    else
      name = file.sub("#{directory}/", "").sub(/\.js$/, "")
      to = "#{under}/#{name}"
      pin(to, to: "#{to}.js", preload: preload)
    end
  end
end

.pinsObject



22
23
24
# File 'lib/rails_devtools/importmaps/base.rb', line 22

def self.pins
  @pins ||= []
end

Instance Method Details

#find(item) ⇒ Object



42
43
44
# File 'lib/rails_devtools/importmaps/base.rb', line 42

def find(item)
  pins.find { |p| p.to == "#{item}.js" }
end

#pinsObject



30
31
32
# File 'lib/rails_devtools/importmaps/base.rb', line 30

def pins
  self.class.pins
end

#preloadsObject



26
27
28
# File 'lib/rails_devtools/importmaps/base.rb', line 26

def preloads
  pins.select(&:preload)
end

#to_jsonObject



34
35
36
37
38
39
40
# File 'lib/rails_devtools/importmaps/base.rb', line 34

def to_json(**)
  imports = self.class.pins.each_with_object({}) do |pin, memo|
    memo[pin.name] = pin.path
  end

  JSON.pretty_generate({ imports: imports })
end