Class: Tapioca::Dsl::Compilers::ActiveRecordStore
- Inherits:
-
Tapioca::Dsl::Compiler
- Object
- Tapioca::Dsl::Compiler
- Tapioca::Dsl::Compilers::ActiveRecordStore
- Extended by:
- T::Sig
- Includes:
- Helpers::ActiveRecordConstantsHelper
- Defined in:
- lib/tapioca/dsl/compilers/active_record_store.rb
Overview
‘Tapioca::Dsl::Compilers::ActiveRecordStore` decorates RBI files for all classes that use [`ActiveRecord::Store`](api.rubyonrails.org/classes/ActiveRecord/Store.html).
For example, with the following class:
~~~rb class User < ActiveRecord::Base
store :settings, accessors: :theme
store_accessor :settings, :power_source, prefix: :prefs
end ~~~
this compiler will produce an RBI file with the following content: ~~~rbi # typed: true
class User
include GeneratedStoredAttributesMethods
module GeneratedStoredAttributesMethods
sig { returns(T.untyped) }
def prefs_power_source; end
sig { params(value: T.untyped).returns(T.untyped) }
def prefs_power_source=(value); end
sig { returns(T.untyped) }
def prefs_power_source_before_last_save; end
sig { returns(T.untyped) }
def prefs_power_source_change; end
sig { returns(T::Boolean) }
def prefs_power_source_changed?; end
sig { returns(T.untyped) }
def prefs_power_source_was; end
sig { returns(T.untyped) }
def saved_change_to_prefs_power_source; end
sig { returns(T::Boolean) }
def saved_change_to_prefs_power_source?; end
sig { returns(T.untyped) }
def saved_change_to_theme; end
sig { returns(T::Boolean) }
def saved_change_to_theme?; end
sig { returns(T.untyped) }
def theme; end
sig { params(value: T.untyped).returns(T.untyped) }
def theme=(value); end
sig { returns(T.untyped) }
def theme_before_last_save; end
sig { returns(T.untyped) }
def theme_change; end
sig { returns(T::Boolean) }
def theme_changed?; end
sig { returns(T.untyped) }
def theme_was; end
end
end ~~~
Constant Summary collapse
- ConstantType =
type_member { { fixed: T.all(T.class_of(ActiveRecord::Base), Extensions::ActiveRecord) } }
Constants included from Helpers::ActiveRecordConstantsHelper
Helpers::ActiveRecordConstantsHelper::AssociationMethodsModuleName, Helpers::ActiveRecordConstantsHelper::AssociationRelationClassName, Helpers::ActiveRecordConstantsHelper::AssociationRelationGroupChainClassName, Helpers::ActiveRecordConstantsHelper::AssociationRelationMethodsModuleName, Helpers::ActiveRecordConstantsHelper::AssociationRelationWhereChainClassName, Helpers::ActiveRecordConstantsHelper::AssociationsCollectionProxyClassName, Helpers::ActiveRecordConstantsHelper::AttributeMethodsModuleName, Helpers::ActiveRecordConstantsHelper::CommonRelationMethodsModuleName, Helpers::ActiveRecordConstantsHelper::DelegatedTypesModuleName, Helpers::ActiveRecordConstantsHelper::ReflectionType, Helpers::ActiveRecordConstantsHelper::RelationClassName, Helpers::ActiveRecordConstantsHelper::RelationGroupChainClassName, Helpers::ActiveRecordConstantsHelper::RelationMethodsModuleName, Helpers::ActiveRecordConstantsHelper::RelationWhereChainClassName, Helpers::ActiveRecordConstantsHelper::SecureTokensModuleName, Helpers::ActiveRecordConstantsHelper::StoredAttributesModuleName
Constants included from Runtime::Reflection
Runtime::Reflection::ANCESTORS_METHOD, Runtime::Reflection::CLASS_METHOD, Runtime::Reflection::CONSTANTS_METHOD, Runtime::Reflection::EQUAL_METHOD, Runtime::Reflection::METHOD_METHOD, Runtime::Reflection::NAME_METHOD, Runtime::Reflection::OBJECT_ID_METHOD, Runtime::Reflection::PRIVATE_INSTANCE_METHODS_METHOD, Runtime::Reflection::PROTECTED_INSTANCE_METHODS_METHOD, Runtime::Reflection::PUBLIC_INSTANCE_METHODS_METHOD, Runtime::Reflection::REQUIRED_FROM_LABELS, Runtime::Reflection::SINGLETON_CLASS_METHOD, Runtime::Reflection::SUPERCLASS_METHOD, Runtime::Reflection::UNDEFINED_CONSTANT
Constants included from SorbetHelper
SorbetHelper::FEATURE_REQUIREMENTS, SorbetHelper::SORBET_BIN, SorbetHelper::SORBET_EXE_PATH_ENV_VAR, SorbetHelper::SORBET_GEM_SPEC, SorbetHelper::SORBET_PAYLOAD_URL, SorbetHelper::SPOOM_CONTEXT
Instance Attribute Summary
Attributes inherited from Tapioca::Dsl::Compiler
Class Method Summary collapse
Instance Method Summary collapse
Methods inherited from Tapioca::Dsl::Compiler
#add_error, #compiler_enabled?, handles?, #initialize, processable_constants, requested_constants=
Methods included from T::Generic::TypeStoragePatch
#[], #has_attached_class!, #type_member, #type_template
Methods included from Runtime::Reflection
#abstract_type_of, #ancestors_of, #are_equal?, #class_of, #constant_defined?, #constantize, #constants_of, #descendants_of, #file_candidates_for, #final_module?, #inherited_ancestors_of, #method_of, #name_of, #name_of_type, #object_id_of, #private_instance_methods_of, #protected_instance_methods_of, #public_instance_methods_of, #qualified_name_of, #resolve_loc, #sealed_module?, #signature_of, #signature_of!, #singleton_class_of, #superclass_of
Methods included from Runtime::AttachedClassOf
Methods included from RBIHelper
#as_nilable_type, #as_non_nilable_type, #create_block_param, #create_kw_opt_param, #create_kw_param, #create_kw_rest_param, #create_opt_param, #create_param, #create_rest_param, #create_typed_param, #sanitize_signature_types, serialize_type_variable, #valid_method_name?, #valid_parameter_name?
Methods included from SorbetHelper
#sorbet, #sorbet_path, #sorbet_supports?
Constructor Details
This class inherits a constructor from Tapioca::Dsl::Compiler
Class Method Details
.gather_constants ⇒ Object
138 139 140 |
# File 'lib/tapioca/dsl/compilers/active_record_store.rb', line 138 def gather_constants descendants_of(::ActiveRecord::Base).reject(&:abstract_class?) end |
Instance Method Details
#decorate ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/tapioca/dsl/compilers/active_record_store.rb', line 88 def decorate return if constant.__tapioca_stored_attributes.nil? root.create_path(constant) do |klass| klass.create_module(StoredAttributesModuleName) do |mod| constant.__tapioca_stored_attributes.each do |store_attribute, keys, prefix, suffix| accessor_prefix = case prefix when String, Symbol "#{prefix}_" when TrueClass "#{store_attribute}_" else "" end accessor_suffix = case suffix when String, Symbol "_#{suffix}" when TrueClass "_#{store_attribute}" else "" end keys.flatten.map { |key| "#{accessor_prefix}#{key}#{accessor_suffix}" }.each do |accessor_key| mod.create_method( "#{accessor_key}=", parameters: [create_param("value", type: "T.untyped")], return_type: "T.untyped", ) mod.create_method(accessor_key, return_type: "T.untyped") mod.create_method("#{accessor_key}_changed?", return_type: "T::Boolean") mod.create_method("#{accessor_key}_change", return_type: "T.untyped") mod.create_method("#{accessor_key}_was", return_type: "T.untyped") mod.create_method("saved_change_to_#{accessor_key}?", return_type: "T::Boolean") mod.create_method("saved_change_to_#{accessor_key}", return_type: "T.untyped") mod.create_method("#{accessor_key}_before_last_save", return_type: "T.untyped") end end end klass.create_include(StoredAttributesModuleName) end end |