Module: Opal::Rails::LegacyUpgradeWarning
- Defined in:
- lib/opal/rails/legacy_upgrade_warning.rb
Constant Summary collapse
- LEGACY_OPAL_CONFIG_KEYS =
%w[ method_missing_enabled const_missing_enabled arity_check_enabled freezing_stubs_enabled missing_require_severity ].freeze
- BUILD_CONFIG_KEYS =
%w[ source_path entrypoints_path build_path entrypoints ].freeze
Class Method Summary collapse
- .legacy_entrypoints(root) ⇒ Object
- .legacy_initializer?(initializer_body) ⇒ Boolean
- .legacy_signals(root) ⇒ Object
- .relative_to_root(path, root) ⇒ Object
- .suppress_warning?(app) ⇒ Boolean
- .warn_if_needed(app, output: $stderr) ⇒ Object
- .warning_for(root) ⇒ Object
Class Method Details
.legacy_entrypoints(root) ⇒ Object
86 87 88 |
# File 'lib/opal/rails/legacy_upgrade_warning.rb', line 86 def legacy_entrypoints(root) Dir[root.join('app/assets/{javascript,javascripts}/**/*.js.rb').to_s].sort.map { |path| Pathname(path) } end |
.legacy_initializer?(initializer_body) ⇒ Boolean
79 80 81 82 83 84 |
# File 'lib/opal/rails/legacy_upgrade_warning.rb', line 79 def legacy_initializer?(initializer_body) return false unless initializer_body return false if BUILD_CONFIG_KEYS.any? { |key| initializer_body.include?("config.opal.#{key}") } LEGACY_OPAL_CONFIG_KEYS.any? { |key| initializer_body.include?("config.opal.#{key}") } end |
.legacy_signals(root) ⇒ Object
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 |
# File 'lib/opal/rails/legacy_upgrade_warning.rb', line 53 def legacy_signals(root) root = Pathname(root) signals = [] initializer = root.join('config/initializers/opal.rb') initializer_body = initializer.exist? ? initializer.read : nil if legacy_initializer?(initializer_body) signals << 'config/initializers/opal.rb still uses legacy 2.x runtime settings' end legacy_entrypoints(root).each do |entrypoint| signals << "legacy Opal asset entrypoint present at #{relative_to_root(entrypoint, root)}" end manifest = root.join('app/assets/config/manifest.js') if manifest.exist? && manifest.read.match?(%r{link_(?:tree|directory)\s+\.\./javascript\b}) signals << 'app/assets/config/manifest.js still links the legacy javascript asset tree' end return [] unless initializer_body && signals.length >= 2 return signals if root.join('app/opal').directory? signals << 'expected 3.x source root app/opal is missing' end |
.relative_to_root(path, root) ⇒ Object
90 91 92 |
# File 'lib/opal/rails/legacy_upgrade_warning.rb', line 90 def relative_to_root(path, root) path.relative_path_from(root).to_s end |
.suppress_warning?(app) ⇒ Boolean
47 48 49 50 51 |
# File 'lib/opal/rails/legacy_upgrade_warning.rb', line 47 def suppress_warning?(app) return false unless app.respond_to?(:config) app.config.respond_to?(:opal) && app.config.opal.suppress_legacy_upgrade_warning end |
.warn_if_needed(app, output: $stderr) ⇒ Object
21 22 23 24 25 26 27 28 29 |
# File 'lib/opal/rails/legacy_upgrade_warning.rb', line 21 def warn_if_needed(app, output: $stderr) return false if suppress_warning?(app) warning = warning_for(app.root) return false unless warning output.puts(warning) true end |
.warning_for(root) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/opal/rails/legacy_upgrade_warning.rb', line 31 def warning_for(root) signals = legacy_signals(root) return if signals.empty? " WARNING: opal-rails detected a likely 2.x application layout that has not been ported to the 3.x build pipeline yet.\n\n This app may fail after upgrade with missing `app/opal` entrypoints or missing `application.js` assets.\n Pin `opal-rails` to the 2.0 series until the app can be ported, or follow `PORTING.md` before continuing.\n If you have already ported the app and want to silence this check, set `config.opal.suppress_legacy_upgrade_warning = true`.\n\n Detected legacy signals:\n \#{signals.map { |signal| \"- \#{signal}\" }.join(\"\\n\")}\n WARNING\nend\n" |