discourse/lib/autospec/reload_css.rb
Sam Saffron 30990006a9 DEV: enable frozen string literal on all files
This reduces chances of errors where consumers of strings mutate inputs
and reduces memory usage of the app.

Test suite passes now, but there may be some stuff left, so we will run
a few sites on a branch prior to merging
2019-05-13 09:31:32 +08:00

53 lines
1.3 KiB
Ruby

# frozen_string_literal: true
module Autospec; end
class Autospec::ReloadCss
WATCHERS = {}
def self.watch(pattern, &blk)
WATCHERS[pattern] = blk
end
# css, scss, sass or handlebars
watch(/\.css$/)
watch(/\.ca?ss\.erb$/)
watch(/\.s[ac]ss$/)
watch(/\.hbs$/)
def self.message_bus
MessageBus::Instance.new.tap do |bus|
bus.site_id_lookup do
# this is going to be dev the majority of the time
# if you have multisite configured in dev stuff may be different
"default"
end
end
end
def self.run_on_change(paths)
if paths.any? { |p| p =~ /\.(css|s[ac]ss)/ }
# todo connect to dev instead?
ActiveRecord::Base.establish_connection
[:desktop, :mobile].each do |style|
s = DiscourseStylesheets.new(style)
s.compile
paths << "public" + s.stylesheet_relpath_no_digest
end
ActiveRecord::Base.clear_active_connections!
end
paths.map! do |p|
hash = nil
fullpath = "#{Rails.root}/#{p}"
hash = Digest::MD5.hexdigest(File.read(fullpath)) if File.exists?(fullpath)
p = p.sub(/\.sass\.erb/, "")
p = p.sub(/\.sass/, "")
p = p.sub(/\.scss/, "")
p = p.sub(/^app\/assets\/stylesheets/, "assets")
{ name: p, hash: hash || SecureRandom.hex }
end
message_bus.publish "/file-change", paths
end
end