Class: EmberCli

Inherits:
ActiveSupport::CurrentAttributes
  • Object
show all
Defined in:
lib/ember_cli.rb

Class Method Summary collapse

Class Method Details

.assetsObject



11
12
13
# File 'lib/ember_cli.rb', line 11

def self.assets
  cache[:assets] ||= Dir.glob("**/*.{js,map,txt,css}", base: "#{dist_dir}/assets")
end

.cacheObject



56
57
58
59
60
61
62
# File 'lib/ember_cli.rb', line 56

def self.cache
  if Rails.env.development?
    self.request_cache ||= {}
  else
    @production_cache ||= {}
  end
end

.clear_cache!Object



64
65
66
67
# File 'lib/ember_cli.rb', line 64

def self.clear_cache!
  self.request_cache = nil
  @production_cache = nil
end

.dist_dirObject



7
8
9
# File 'lib/ember_cli.rb', line 7

def self.dist_dir
  "#{Rails.root}/app/assets/javascripts/discourse/dist"
end

.ember_versionObject



41
42
43
44
45
46
47
48
49
50
# File 'lib/ember_cli.rb', line 41

def self.ember_version
  @version ||=
    begin
      ember_source_package_raw =
        File.read(
          "#{Rails.root}/app/assets/javascripts/discourse/node_modules/ember-source/package.json",
        )
      JSON.parse(ember_source_package_raw)["version"]
    end
end

.has_tests?Boolean

Returns:

  • (Boolean)


52
53
54
# File 'lib/ember_cli.rb', line 52

def self.has_tests?
  File.exist?("#{dist_dir}/tests/index.html")
end

.is_ember_cli_asset?(name) ⇒ Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/ember_cli.rb', line 37

def self.is_ember_cli_asset?(name)
  assets.include?(name) || script_chunks.values.flatten.include?(name.delete_suffix(".js"))
end

.script_chunksObject



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/ember_cli.rb', line 15

def self.script_chunks
  return cache[:script_chunks] if cache[:script_chunks]

  chunk_infos = JSON.parse(File.read("#{dist_dir}/assets.json"))

  chunk_infos.transform_keys! { |key| key.delete_prefix("assets/").delete_suffix(".js") }

  chunk_infos.transform_values! do |value|
    value["assets"].map { |chunk| chunk.delete_prefix("assets/").delete_suffix(".js") }
  end

  # Special case - vendor.js is fingerprinted by Embroider in production, but not run through Webpack
  if !assets.include?("vendor.js") &&
       fingerprinted = assets.find { |a| a.match?(/^vendor\..*\.js$/) }
    chunk_infos["vendor"] = [fingerprinted.delete_suffix(".js")]
  end

  cache[:script_chunks] = chunk_infos
rescue Errno::ENOENT
  {}
end