1
0
Fork 0

Merge pull request #86 from paviliondev/sprockets-fix

DEV: add new sprockets directive to require discourse folders
Dieser Commit ist enthalten in:
Angus McLeod 2021-05-10 19:07:32 +12:00 committet von GitHub
Commit edbba891f6
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: 4AEE18F83AFDEB23
8 geänderte Dateien mit 83 neuen und 69 gelöschten Zeilen

Datei anzeigen

@ -1,43 +1,4 @@
//= require discourse/app/lib/autocomplete //= require_tree_discourse discourse/app/lib
//= require discourse/app/lib/utilities
//= require discourse/app/lib/offset-calculator
//= require discourse/app/lib/lock-on
//= require discourse/app/lib/text-direction
//= require discourse/app/lib/to-markdown
//= require discourse/app/lib/load-script
//= require discourse/app/lib/url
//= require discourse/app/lib/ajax
//= require discourse/app/lib/ajax-error
//= require discourse/app/lib/page-visible
//= require discourse/app/lib/logout
//= require discourse/app/lib/render-tag
//= require discourse/app/lib/notification-levels
//= require discourse/app/lib/computed
//= require discourse/app/lib/user-search
//= require discourse/app/lib/text
//= require discourse/app/lib/formatter
//= require discourse/app/lib/quote
//= require discourse/app/lib/link-mentions
//= require discourse/app/lib/link-hashtags
//= require discourse/app/lib/category-hashtags
//= require discourse/app/lib/tag-hashtags
//= require discourse/app/lib/uploads
//= require discourse/app/lib/category-tag-search
//= require discourse/app/lib/intercept-click
//= require discourse/app/lib/show-modal
//= require discourse/app/lib/key-value-store
//= require discourse/app/lib/settings
//= require discourse/app/lib/user-presence
//= require discourse/app/lib/hash
//= require discourse/app/lib/bookmark
//= require discourse/app/lib/put-cursor-at-end
//= require discourse/app/lib/safari-hacks
//= require discourse/app/lib/preload-store
//= require discourse/app/lib/topic-fancy-title
//= require discourse/app/lib/cookie
//= require discourse/app/lib/public-js-versions
//= require discourse/app/lib/load-oneboxes
//= require discourse/app/lib/highlight-syntax
//= require discourse/app/mixins/singleton //= require discourse/app/mixins/singleton
//= require discourse/app/mixins/upload //= require discourse/app/mixins/upload
@ -46,35 +7,7 @@
//= require message-bus //= require message-bus
//= require discourse/app/models/login-method //= require_tree_discourse discourse/app/models
//= require discourse/app/models/permission-type
//= require discourse/app/models/archetype
//= require discourse/app/models/rest
//= require discourse/app/models/site
//= require discourse/app/models/category
//= require discourse/app/models/session
//= require discourse/app/models/post-action-type
//= require discourse/app/models/trust-level
//= require discourse/app/models/store
//= require discourse/app/models/result-set
//= require discourse/app/models/bookmark
//= require discourse/app/models/user
//= require discourse/app/models/user-stream
//= require discourse/app/models/user-action
//= require discourse/app/models/user-action-group
//= require discourse/app/models/user-posts-stream
//= require discourse/app/models/badge
//= require discourse/app/models/badge-grouping
//= require discourse/app/models/user-badge
//= require discourse/app/models/topic
//= require discourse/app/models/action-summary
//= require discourse/app/models/user-action-stat
//= require discourse/app/models/user-drafts-stream
//= require discourse/app/models/user-draft
//= require discourse/app/models/composer
//= require discourse/app/models/draft
//= require discourse/app/models/group
//= require discourse/app/models/group-history
//= require discourse/app/helpers/category-link //= require discourse/app/helpers/category-link
//= require discourse/app/helpers/user-avatar //= require discourse/app/helpers/user-avatar

Datei anzeigen

@ -0,0 +1,5 @@
# frozen_string_literal: true
module CustomWizard
class SprocketsFileNotFound < StandardError; end
class SprocketsEmptyPath < StandardError; end
end

Datei anzeigen

@ -74,6 +74,7 @@ after_initialize do
../lib/custom_wizard/api/endpoint.rb ../lib/custom_wizard/api/endpoint.rb
../lib/custom_wizard/api/log_entry.rb ../lib/custom_wizard/api/log_entry.rb
../lib/custom_wizard/liquid_extensions/first_non_empty.rb ../lib/custom_wizard/liquid_extensions/first_non_empty.rb
../lib/custom_wizard/exceptions/exceptions.rb
../serializers/custom_wizard/api/authorization_serializer.rb ../serializers/custom_wizard/api/authorization_serializer.rb
../serializers/custom_wizard/api/basic_endpoint_serializer.rb ../serializers/custom_wizard/api/basic_endpoint_serializer.rb
../serializers/custom_wizard/api/endpoint_serializer.rb ../serializers/custom_wizard/api/endpoint_serializer.rb
@ -96,6 +97,20 @@ after_initialize do
load File.expand_path(path, __FILE__) load File.expand_path(path, __FILE__)
end end
add_to_class(::Sprockets::DirectiveProcessor, :process_require_tree_discourse_directive) do |path = "."|
raise CustomWizard::SprocketsEmptyPath, "path cannot be empty" if path == "."
discourse_asset_path = "#{Rails.root}/app/assets/javascripts/"
path = File.expand_path(path, discourse_asset_path)
stat = @environment.stat(path)
if stat && stat.directory?
require_paths(*@environment.stat_sorted_tree_with_dependencies(path))
else
raise CustomWizard::SprocketsFileNotFound, "#{path} not found in discourse core"
end
end
Liquid::Template.register_filter(::CustomWizard::LiquidFilter::FirstNonEmpty) Liquid::Template.register_filter(::CustomWizard::LiquidFilter::FirstNonEmpty)
add_class_method(:wizard, :user_requires_completion?) do |user| add_class_method(:wizard, :user_requires_completion?) do |user|

Datei anzeigen

@ -0,0 +1,55 @@
# frozen_string_literal: true
require_relative '../plugin_helper'
describe "Sprockets: require_tree_discourse directive" do
let(:discourse_asset_path) {
"#{Rails.root}/app/assets/javascripts/"
}
let(:fixture_asset_path) {
"#{Rails.root}/plugins/discourse-custom-wizard/spec/fixtures/sprockets/"
}
let(:test_file_contents) {
"console.log('hello')"
}
let(:resolved_file_contents) {
File.read(
"#{Rails.root}/plugins/discourse-custom-wizard/spec/fixtures/sprockets/resolved_js_file_contents.txt"
)
}
before do
@env ||= Sprockets::Environment.new
discourse_asset_path = "#{Rails.root}/app/assets/javascripts/"
fixture_asset_path = "#{Rails.root}/plugins/discourse-custom-wizard/spec/fixtures/sprockets/"
@env.append_path(discourse_asset_path)
@env.append_path(fixture_asset_path)
@env.cache = {}
end
def create_tmp_folder_and_run(path, file_contents, &block)
dir = File.dirname(path)
unless File.directory?(dir)
FileUtils.mkdir_p(dir)
end
File.new(path, 'w')
File.write(path, file_contents)
yield block if block_given?
FileUtils.rm_r(dir)
end
it "includes assets from the discourse core" do
create_tmp_folder_and_run("#{discourse_asset_path}/sptest/test.js", test_file_contents) do
expect(@env.find_asset("require_tree_discourse_test.js").to_s).to eq(resolved_file_contents)
end
end
it "throws ArgumentError if path is empty" do
expect { @env.find_asset("require_tree_discourse_empty.js") }.to raise_error(CustomWizard::SprocketsEmptyPath).with_message("path cannot be empty")
end
it "throws ArgumentError if path is non non-existent" do
expect { @env.find_asset("require_tree_discourse_non_existant.js") }.to raise_error(CustomWizard::SprocketsFileNotFound)
end
end

Datei anzeigen

@ -0,0 +1 @@
//= require_tree_discourse

Datei anzeigen

@ -0,0 +1 @@
//= require_tree_discourse dummy_path

Datei anzeigen

@ -0,0 +1 @@
//= require_tree_discourse sptest

Datei anzeigen

@ -0,0 +1,3 @@
eval("define(\"sptest/test\", [], function () {\n \"use strict\";\n\n console.log('hello');\n});" + "\n//# sourceURL=sptest/test");
;
eval("" + "\n//# sourceURL=require_tree_discourse_test");