Sha256: d11fab38146f2813bbbd7d1dd0e0c5e29c9e5d922368dd8f5bd67395f8f2abba

Contents?: true

Size: 1.99 KB

Versions: 18

Compression:

Stored size: 1.99 KB

Contents

# typed: strict
# frozen_string_literal: true

return unless defined?(ActiveRecord::Base)

require "tapioca/dsl/helpers/active_record_constants_helper"

module Tapioca
  module Dsl
    module Compilers
      # `Tapioca::Dsl::Compilers::ActiveModelSecurePassword` decorates RBI files for all
      # classes that use [`ActiveRecord::SecureToken`](https://api.rubyonrails.org/classes/ActiveRecord/SecureToken/ClassMethods.html).
      #
      # For example, with the following class:
      #
      # ~~~rb
      # class User < ActiveRecord::Base
      #   has_secure_token
      #   has_secure_token :auth_token, length: 36
      # end
      # ~~~
      #
      # this compiler will produce an RBI file with the following content:
      # ~~~rbi
      # # typed: true
      #
      # class User
      #   sig { returns(T::Boolean) }
      #   def regenerate_token; end
      #
      #   sig { returns(T::Boolean) }
      #   def regenerate_auth_token; end
      # end
      # ~~~
      class ActiveRecordSecureToken < Compiler
        extend T::Sig
        include Helpers::ActiveRecordConstantsHelper

        ConstantType = type_member { { fixed: T.all(T.class_of(ActiveRecord::Base), Extensions::ActiveRecord) } }

        sig { override.void }
        def decorate
          return if constant.__tapioca_secure_tokens.nil?

          root.create_path(constant) do |model|
            model.create_module(SecureTokensModuleName) do |mod|
              constant.__tapioca_secure_tokens.each do |attribute|
                mod.create_method(
                  "regenerate_#{attribute}",
                  return_type: "T::Boolean",
                )
              end
            end

            model.create_include(SecureTokensModuleName)
          end
        end

        class << self
          extend T::Sig

          sig { override.returns(T::Enumerable[Module]) }
          def gather_constants
            descendants_of(::ActiveRecord::Base).reject(&:abstract_class?)
          end
        end
      end
    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
tapioca-0.16.8 lib/tapioca/dsl/compilers/active_record_secure_token.rb
tapioca-0.16.7 lib/tapioca/dsl/compilers/active_record_secure_token.rb
tapioca-0.16.6 lib/tapioca/dsl/compilers/active_record_secure_token.rb
tapioca-0.16.5 lib/tapioca/dsl/compilers/active_record_secure_token.rb
tapioca-0.16.4 lib/tapioca/dsl/compilers/active_record_secure_token.rb
tapioca-0.16.3 lib/tapioca/dsl/compilers/active_record_secure_token.rb
tapioca-0.16.2 lib/tapioca/dsl/compilers/active_record_secure_token.rb
tapioca-0.16.1 lib/tapioca/dsl/compilers/active_record_secure_token.rb
tapioca-0.16.0 lib/tapioca/dsl/compilers/active_record_secure_token.rb
tapioca-0.15.1 lib/tapioca/dsl/compilers/active_record_secure_token.rb
tapioca-0.15.0 lib/tapioca/dsl/compilers/active_record_secure_token.rb
tapioca-0.14.4 lib/tapioca/dsl/compilers/active_record_secure_token.rb
tapioca-0.14.3 lib/tapioca/dsl/compilers/active_record_secure_token.rb
tapioca-0.13.3 lib/tapioca/dsl/compilers/active_record_secure_token.rb
tapioca-0.13.2 lib/tapioca/dsl/compilers/active_record_secure_token.rb
tapioca-0.13.1 lib/tapioca/dsl/compilers/active_record_secure_token.rb
tapioca-0.13.0 lib/tapioca/dsl/compilers/active_record_secure_token.rb
tapioca-0.12.0 lib/tapioca/dsl/compilers/active_record_secure_token.rb