Class: Tapioca::Dsl::Compilers::MeasuredRails
- Inherits:
-
Tapioca::Dsl::Compiler
- Object
- Tapioca::Dsl::Compiler
- Tapioca::Dsl::Compilers::MeasuredRails
- Extended by:
- T::Sig
- Defined in:
- lib/tapioca/dsl/compilers/measured_rails.rb
Overview
‘Tapioca::Dsl::Compilers::MeasuredRails` refines RBI files for subclasses of [`ActiveRecord::Base`](api.rubyonrails.org/classes/ActiveRecord/Base.html) that utilize the [`measured-rails`](github.com/shopify/measured-rails) DSL. This compiler is only responsible for defining the methods that would be created for measured fields that are defined in the Active Record model.
For example, with the following model class:
~~~rb class Package < ActiveRecord::Base
measured Measured::Weight, :minimum_weight
measured Measured::Length, :total_length
measured Measured::Volume, :total_volume
end ~~~
this compiler will produce the following methods in the RBI file ‘package.rbi`:
~~~rbi # package.rbi # typed: true
class Package
include GeneratedMeasuredRailsMethods
module GeneratedMeasuredRailsMethods
sig { returns(T.nilable(Measured::Weight)) }
def minimum_weight; end
sig { params(value: T.nilable(Measured::Weight)).void }
def minimum_weight=(value); end
sig { returns(T.nilable(Measured::Length)) }
def total_length; end
sig { params(value: T.nilable(Measured::Length)).void }
def total_length=(value); end
sig { returns(T.nilable(Measured::Volume)) }
def total_volume; end
sig { params(value: T.nilable(Measured::Volume)).void }
def total_volume=(value); end
end
end ~~~
Constant Summary collapse
- ConstantType =
type_member { { fixed: T.all( T.class_of(::ActiveRecord::Base), ::Measured::Rails::ActiveRecord::ClassMethods ) } }
- MeasuredMethodsModuleName =
T.let("GeneratedMeasuredRailsMethods", String)
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.gather_constants ⇒ Object
82 83 84 |
# File 'lib/tapioca/dsl/compilers/measured_rails.rb', line 82 def self.gather_constants descendants_of(::ActiveRecord::Base) end |
Instance Method Details
#decorate ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/tapioca/dsl/compilers/measured_rails.rb', line 69 def decorate return if constant.measured_fields.empty? root.create_path(constant) do |model| model.create_module(MeasuredMethodsModuleName) do |mod| populate_measured_methods(mod) end model.create_include(MeasuredMethodsModuleName) end end |