mirror of
https://github.com/discourse/discourse.git
synced 2025-05-22 20:21:25 +08:00
DEV: Improve add_to_serializer
include_*
options (#21073)
- Move the old '`define_include_method`' arg to a `respect_plugin_enabled` kwarg - Introduce an `include_condition` kwarg which can be passed a lambda with inclusion logic. Lambda will be run via `instance_exec` in the context of the serializer instance This is backwards compatible - old-style invocations will trigger a deprecation message Update chat and poll plugins to new pattern
This commit is contained in:
@ -75,6 +75,14 @@ RSpec.describe Plugin::Instance do
|
||||
|
||||
# Serializer
|
||||
@plugin.add_to_serializer(:trout, :scales) { 1024 }
|
||||
@plugin.add_to_serializer(:trout, :unconditional_scales, respect_plugin_enabled: false) do
|
||||
2048
|
||||
end
|
||||
@plugin.add_to_serializer(
|
||||
:trout,
|
||||
:conditional_scales,
|
||||
include_condition: -> { !!object.data&.[](:has_scales) },
|
||||
) { 4096 }
|
||||
|
||||
@serializer = TroutSerializer.new(@trout)
|
||||
@child_serializer = TroutJuniorSerializer.new(@trout)
|
||||
@ -100,6 +108,7 @@ RSpec.describe Plugin::Instance do
|
||||
expect(@hello_count).to eq(1)
|
||||
expect(@serializer.scales).to eq(1024)
|
||||
expect(@serializer.include_scales?).to eq(false)
|
||||
expect(@serializer.include_unconditional_scales?).to eq(true)
|
||||
expect(@serializer.name).to eq("a trout")
|
||||
|
||||
expect(@child_serializer.scales).to eq(1024)
|
||||
@ -107,6 +116,25 @@ RSpec.describe Plugin::Instance do
|
||||
expect(@child_serializer.name).to eq("a trout jr")
|
||||
end
|
||||
|
||||
it "can control the include_* implementation" do
|
||||
@plugin.enabled = true
|
||||
|
||||
expect(@serializer.scales).to eq(1024)
|
||||
expect(@serializer.include_scales?).to eq(true)
|
||||
|
||||
expect(@serializer.unconditional_scales).to eq(2048)
|
||||
expect(@serializer.include_unconditional_scales?).to eq(true)
|
||||
|
||||
expect(@serializer.include_conditional_scales?).to eq(false)
|
||||
@trout.data = { has_scales: true }
|
||||
expect(@serializer.include_conditional_scales?).to eq(true)
|
||||
|
||||
@plugin.enabled = false
|
||||
expect(@serializer.include_scales?).to eq(false)
|
||||
expect(@serializer.include_unconditional_scales?).to eq(true)
|
||||
expect(@serializer.include_conditional_scales?).to eq(false)
|
||||
end
|
||||
|
||||
it "only returns HTML if enabled" do
|
||||
ctx = Trout.new
|
||||
ctx.data = "hello"
|
||||
|
Reference in New Issue
Block a user