Skip to content

Commit

Permalink
Add support for tapioca >= 0.16.0
Browse files Browse the repository at this point in the history
  • Loading branch information
Verseth committed Sep 26, 2024
1 parent a74ab3e commit 895b8b1
Showing 1 changed file with 48 additions and 17 deletions.
65 changes: 48 additions & 17 deletions lib/tapioca/dsl/compilers/shale.rb
Original file line number Diff line number Diff line change
Expand Up @@ -48,23 +48,7 @@ def decorate
end

if has_shale_builder && attribute.type < ::Shale::Mapper
sigs = T.let([], T::Array[RBI::Sig])
# simple getter
sigs << klass.create_sig(
parameters: { block: 'NilClass' },
return_type: type,
)
# getter with block
sigs << klass.create_sig(
parameters: { block: "T.proc.params(arg0: #{non_nilable_type}).void" },
return_type: non_nilable_type
)
mod.create_method_with_sigs(
attribute.name,
sigs: sigs,
comments: comments,
parameters: [RBI::BlockParam.new('block')],
)
generate_mapper_getter(mod, attribute.name, type, non_nilable_type, comments)
else
mod.create_method(attribute.name, return_type: type, comments: comments)
end
Expand All @@ -87,6 +71,53 @@ def decorate

end

sig do
params(
mod: RBI::Scope,
method_name: String,
type: String,
non_nilable_type: String,
comments: T::Array[RBI::Comment],
).void
end
def generate_mapper_getter(mod, method_name, type, non_nilable_type, comments)
if mod.respond_to?(:create_sig)
# for tapioca < 0.16.0
sigs = T.let([], T::Array[RBI::Sig])
# simple getter
sigs << mod.create_sig(
parameters: { block: 'NilClass' },
return_type: type,
)
# getter with block
sigs << mod.create_sig(
parameters: { block: "T.proc.params(arg0: #{non_nilable_type}).void" },
return_type: non_nilable_type
)
mod.create_method_with_sigs(
method_name,
sigs: sigs,
comments: comments,
parameters: [RBI::BlockParam.new('block')],
)
else
# for tapioca >= 0.16.0
mod.create_method(method_name, comments: comments) do |method|
method.add_block_param('block')

method.add_sig do |sig|
sig.add_param('block', 'NilClass')
sig.return_type = type
end

method.add_sig do |sig|
sig.add_param('block', "T.proc.params(arg0: #{non_nilable_type}).void")
sig.return_type = non_nilable_type
end
end
end
end

private

sig { params(klass: Class).returns(T.nilable(T::Boolean)) }
Expand Down

0 comments on commit 895b8b1

Please sign in to comment.