Module: StimulusReflex::VersionChecker

Included in:
Reflex
Defined in:
lib/stimulus_reflex/version_checker.rb

Instance Method Summary collapse

Instance Method Details

#check_version!Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/stimulus_reflex/version_checker.rb', line 8

def check_version!
  return if StimulusReflex.config.on_failed_sanity_checks == :ignore
  return if version == StimulusReflex::VERSION

  level = (StimulusReflex.config.on_failed_sanity_checks == :exit) ? "error" : "warn"
  reason = (level == "error") ? "failed to execute your reflex action due to" : "noticed"

  mismatch = "StimulusReflex #{reason} a version mismatch between your gem and JavaScript version. Package versions must match exactly.\n\nstimulus_reflex gem: #{StimulusReflex::VERSION}\nstimulus_reflex npm: #{npm_version}"

  StimulusReflex.config.logger.error("\n\e[31m#{mismatch}\e[0m")

  log = {
    message: mismatch,
    level: level,
    reflexId: id
  }

  event = {
    name: "stimulus-reflex:version-mismatch",
    reflexId: id,
    detail: {
      message: mismatch,
      gem: StimulusReflex::VERSION,
      npm: npm_version,
      level: level
    }
  }

  toast = {
    text: mismatch.to_s,
    destination: "https://docs.stimulusreflex.com/hello-world/setup#upgrading-package-versions-and-sanity",
    reflexId: id,
    level: level
  }

  CableReady::Channels.instance[@channel.stream_name].tap { |channel|
    channel.console_log(log)
    channel.dispatch_event(event)
    channel.stimulus_reflex_version_mismatch(toast) if Rails.env.development?
  }.broadcast

  return if level == "warn"

  raise VersionMismatchError.new(mismatch)
end