require "dry-monads"
require "dry-auto_inject"
RSpec.describe "Using dry-auto_inject" do
let(:transaction) {
Class.new do
include Dry::Transaction(container: Test::Container)
include Test::Inject[:extract_email]
step :symbolize
def call(input)
super(input).bind(extract_email)
end
end.new
}
before do
module Test
Container = {
symbolize: -> input { Dry::Monads::Right(name: input["name"], email: input["email"]) },
extract_email: -> input { Dry::Monads::Right(email: input[:email]) },
}
Inject = Dry::AutoInject(container: Container)
end
end
it "support auto-injection of dependencies alongside step operations" do
expect(transaction.("name" => "Jane", "email" => "jane@example.com").value).to eq(email: "jane@example.com")
end
end
But right now, it doesn't:
1) Using dry-auto_inject support auto-injection of dependencies alongside step operations
Failure/Error: end.new
ArgumentError:
wrong number of arguments (given 1, expected 0)
# ./lib/dry/transaction/instance_methods.rb:47:in `initialize'
# ./lib/dry/transaction/instance_methods.rb:47:in `initialize'
# ./lib/dry/transaction/operation_resolver.rb:19:in `block (2 levels) in initialize'
# ./spec/integration/auto_injection_spec.rb:15:in `block (2 levels) in <top (required)>'
# ./spec/integration/auto_injection_spec.rb:30:in `block (2 levels) in <top (required)>'
Something like this should work:
But right now, it doesn't: