Skip to content

Commit d3cf797

Browse files
add extend and include for money-rails and paperclip compilers (#8)
* add extend and include for money-rails and paperclip compilers * add a spec for paperclip complier
1 parent 8bff2d5 commit d3cf797

File tree

7 files changed

+122
-2084
lines changed

7 files changed

+122
-2084
lines changed

lib/tapioca/dsl/compilers/money_rails.rb

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ module Compilers
1414
# by the `money-rails` gem.
1515
# https://github.com/RubyMoney/money-rails
1616
#
17+
# In order to use this compiler, you will need to add
18+
# `require "money-rails/active_record/monetizable"`
19+
# to your `sorbet/tapioca/require.rb` file, since it relies on the module
20+
# `MoneyRails::ActiveRecord::Monetizable::ClassMethods` having been detected and sigs generated for it in the gem
21+
# rbis.
22+
#
1723
# For example, with the following ActiveRecord model:
1824
# ~~~rb
1925
# class Product < ActiveRecord::Base
@@ -48,6 +54,9 @@ class MoneyRails < Tapioca::Dsl::Compiler
4854
}
4955
end
5056

57+
ClassMethodModuleName = "MoneyRails::ActiveRecord::Monetizable::ClassMethods"
58+
InstanceModuleName = "MoneyRailsGeneratedMethods"
59+
5160
class << self
5261
extend T::Sig
5362

@@ -77,8 +86,7 @@ def decorate
7786
return if constant.monetized_attributes.empty?
7887

7988
root.create_path(constant) do |klass|
80-
instance_module_name = "MoneyRailsGeneratedMethods"
81-
instance_module = RBI::Module.new(instance_module_name)
89+
instance_module = RBI::Module.new(InstanceModuleName)
8290

8391
constant.monetized_attributes.each do |attribute_name, column_name|
8492
if column_type_option.untyped?
@@ -111,7 +119,8 @@ def decorate
111119
end
112120

113121
klass << instance_module
114-
klass.create_include(instance_module_name)
122+
klass.create_include(InstanceModuleName)
123+
klass.create_extend(ClassMethodModuleName)
115124
end
116125
end
117126
end

lib/tapioca/dsl/compilers/paperclip.rb

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ class Paperclip < Tapioca::Dsl::Compiler
3535
extend T::Sig
3636
include RBIHelper
3737

38-
InstanceModuleName = "PaperclipGeneratedMethods"
38+
ClassMethodsModuleName = "::Paperclip::Glue"
39+
InstanceMethodModuleName = "PaperclipGeneratedMethods"
40+
3941
ConstantType = type_member { { fixed: T.class_of(::Paperclip::Glue) } }
4042

4143
class << self
@@ -55,7 +57,7 @@ def decorate
5557
return if attachments.empty?
5658

5759
root.create_path(constant) do |klass|
58-
instance_module = RBI::Module.new(InstanceModuleName)
60+
instance_module = RBI::Module.new(InstanceMethodModuleName)
5961

6062
attachments.each do |attachment_name|
6163
# Model: has_attached_file(:marketing_image)
@@ -70,7 +72,8 @@ def decorate
7072
end
7173

7274
klass << instance_module
73-
klass.create_include(InstanceModuleName)
75+
klass.create_include(ClassMethodsModuleName)
76+
klass.create_include(InstanceMethodModuleName)
7477
end
7578
end
7679
end

manual/compiler_moneyrails.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@
44
by the `money-rails` gem.
55
https://github.com/RubyMoney/money-rails
66

7+
In order to use this compiler, you will need to add
8+
`require "money-rails/active_record/monetizable"`
9+
to your `sorbet/tapioca/require.rb` file, since it relies on the module
10+
`MoneyRails::ActiveRecord::Monetizable::ClassMethods` having been detected and sigs generated for it in the gem
11+
rbis.
12+
713
For example, with the following ActiveRecord model:
814
~~~rb
915
class Product < ActiveRecord::Base

0 commit comments

Comments
 (0)