Skip to content

Commit

Permalink
Fix default values overriding manually set values (#382)
Browse files Browse the repository at this point in the history
  • Loading branch information
Blacksmoke16 authored Mar 31, 2024
1 parent 7e5a489 commit b6fecfe
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,40 @@ describe ADI::ServiceContainer::ProcessParameters, tags: "compiled" do
end
CR
end

it "does not override value of manually wired up parameters with default value" do
ASPEC::Methods.assert_success <<-CR, codegen: true
require "../spec_helper.cr"
class SomeService
def initialize(@id : Int32 = 123); end
end
module MyExtension
macro included
macro finished
{% verbatim do %}
{%
SERVICE_HASH["some_service"] = {
class: SomeService,
parameters: {
id: {value: 999}
}
}
%}
{% end %}
end
end
end
ADI.add_compiler_pass MyExtension, :before_optimization, 1028
ADI::ServiceContainer.new
macro finished
macro finished
it { \\{{ADI::ServiceContainer::SERVICE_HASH["some_service"]["parameters"]["id"]["value"].stringify}}.should eq "999" }
end
end
CR
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ module Athena::DependencyInjection::ServiceContainer::ProcessParameters

# Set the default value is there is one.
if !(dv = initializer_arg.default_value).is_a?(Nop)
default_value = value = dv
default_value = dv
end

parameters[initializer_arg.name.id.stringify] = {
Expand All @@ -47,7 +47,7 @@ module Athena::DependencyInjection::ServiceContainer::ProcessParameters
restriction: initializer_arg.restriction,
resolved_restriction: ((r = initializer_arg.restriction).is_a?(Nop) ? nil : r.resolve),
default_value: default_value,
value: value || default_value,
value: value.nil? ? default_value : value,
}
end
end
Expand Down

0 comments on commit b6fecfe

Please sign in to comment.