mirror of
https://github.com/discourse/discourse.git
synced 2025-05-25 09:57:25 +08:00
FEATURE: Allow plugins to dynamically add seed fixture paths
This is useful if your plugin wants different seed data for different locales for example.
This commit is contained in:
@ -64,6 +64,10 @@ class DiscoursePluginRegistry
|
|||||||
@html_builders ||= {}
|
@html_builders ||= {}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def seed_path_builders
|
||||||
|
@seed_path_builders ||= Set.new
|
||||||
|
end
|
||||||
|
|
||||||
def vendored_pretty_text
|
def vendored_pretty_text
|
||||||
@vendored_pretty_text ||= Set.new
|
@vendored_pretty_text ||= Set.new
|
||||||
end
|
end
|
||||||
@ -136,6 +140,10 @@ class DiscoursePluginRegistry
|
|||||||
self.seed_data[key] = value
|
self.seed_data[key] = value
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.register_seed_path_builder(&block)
|
||||||
|
seed_path_builders << block
|
||||||
|
end
|
||||||
|
|
||||||
def self.register_html_builder(name, &block)
|
def self.register_html_builder(name, &block)
|
||||||
html_builders[name] ||= []
|
html_builders[name] ||= []
|
||||||
html_builders[name] << block
|
html_builders[name] << block
|
||||||
@ -146,6 +154,14 @@ class DiscoursePluginRegistry
|
|||||||
builders.map { |b| b.call(ctx) }.join("\n").html_safe
|
builders.map { |b| b.call(ctx) }.join("\n").html_safe
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.seed_paths
|
||||||
|
result = SeedFu.fixture_paths.dup
|
||||||
|
unless Rails.env.test? && ENV['LOAD_PLUGINS'] != "1"
|
||||||
|
seed_path_builders.each { |b| result += b.call }
|
||||||
|
end
|
||||||
|
result
|
||||||
|
end
|
||||||
|
|
||||||
def javascripts
|
def javascripts
|
||||||
self.class.javascripts
|
self.class.javascripts
|
||||||
end
|
end
|
||||||
@ -190,6 +206,7 @@ class DiscoursePluginRegistry
|
|||||||
asset_globs.clear
|
asset_globs.clear
|
||||||
html_builders.clear
|
html_builders.clear
|
||||||
vendored_pretty_text.clear
|
vendored_pretty_text.clear
|
||||||
|
seed_path_builders.clear
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.setup(plugin_class)
|
def self.setup(plugin_class)
|
||||||
|
@ -340,6 +340,10 @@ class Plugin::Instance
|
|||||||
seed_data[key] = value
|
seed_data[key] = value
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def register_seed_path_builder(&block)
|
||||||
|
DiscoursePluginRegistry.register_seed_path_builder(&block)
|
||||||
|
end
|
||||||
|
|
||||||
def register_emoji(name, url)
|
def register_emoji(name, url)
|
||||||
Plugin::CustomEmoji.register(name, url)
|
Plugin::CustomEmoji.register(name, url)
|
||||||
end
|
end
|
||||||
|
@ -27,7 +27,7 @@ end
|
|||||||
|
|
||||||
# we need to run seed_fu every time we run rails db:migrate
|
# we need to run seed_fu every time we run rails db:migrate
|
||||||
task 'db:migrate', [:multisite] => ['environment', 'set_locale'] do |_, args|
|
task 'db:migrate', [:multisite] => ['environment', 'set_locale'] do |_, args|
|
||||||
SeedFu.seed
|
SeedFu.seed(DiscoursePluginRegistry.seed_paths)
|
||||||
Jobs::Onceoff.enqueue_all
|
Jobs::Onceoff.enqueue_all
|
||||||
|
|
||||||
if Rails.env.test? && !args[:multisite]
|
if Rails.env.test? && !args[:multisite]
|
||||||
@ -39,7 +39,7 @@ end
|
|||||||
|
|
||||||
task 'test:prepare' => 'environment' do
|
task 'test:prepare' => 'environment' do
|
||||||
I18n.locale = SiteSetting.default_locale rescue :en
|
I18n.locale = SiteSetting.default_locale rescue :en
|
||||||
SeedFu.seed
|
SeedFu.seed(DiscoursePluginRegistry.seed_paths)
|
||||||
end
|
end
|
||||||
|
|
||||||
task 'db:api_test_seed' => 'environment' do
|
task 'db:api_test_seed' => 'environment' do
|
||||||
|
Reference in New Issue
Block a user