Class: Tapioca::Dsl::Compilers::AttrJson
- Inherits:
-
Tapioca::Dsl::Compiler
- Object
- Tapioca::Dsl::Compiler
- Tapioca::Dsl::Compilers::AttrJson
- Defined in:
- lib/tapioca/dsl/compilers/attr_json.rb
Overview
‘Tapioca::Dsl::Compilers::AttrJson` decorates RBI files for classes that use the `AttrJson` gem. github.com/jrochkind/attr_json
For example, with the following ActiveRecord model: ~~~rb class Product < ActiveRecord::Base
include AttrJson::Record
attr_json :price_cents, :integer
end ~~~
This compiler will generate the following RBI: ~~~rbi class Product
include AttrJsonGeneratedMethods
extend AttrJson::Record::ClassMethods
module AttrJsonGeneratedMethods
sig { returns(::Integer) }
def price_cents; end
sig { params(value: Integer).returns(::Integer) }
def price_cents=(value); end
end
end ~~~
Constant Summary collapse
- ClassMethodsModuleName =
Class methods module is already defined in the gem rbi, so just reference it here.
"AttrJson::Record::ClassMethods"- InstanceMethodModuleName =
"AttrJsonGeneratedMethods"- ConstantType =
type_member { { fixed: T.any(T.class_of(::AttrJson::Record), T.class_of(::AttrJson::Model)) } }
Class Method Summary collapse
Instance Method Summary collapse
-
#decorate ⇒ Object
: -> void.
Class Method Details
.gather_constants ⇒ Object
: -> Enumerable
45 46 47 |
# File 'lib/tapioca/dsl/compilers/attr_json.rb', line 45 def gather_constants all_classes.select { |constant| constant < ::AttrJson::Record || constant < ::AttrJson::Model } end |
Instance Method Details
#decorate ⇒ Object
: -> void
52 53 54 55 56 57 58 59 60 61 |
# File 'lib/tapioca/dsl/compilers/attr_json.rb', line 52 def decorate rbi_class = root.create_path(constant) instance_module = RBI::Module.new(InstanceMethodModuleName) decorate_attributes(instance_module) rbi_class << instance_module rbi_class.create_include(InstanceMethodModuleName) rbi_class.create_extend(ClassMethodsModuleName) if constant < ::AttrJson::Record end |