Sha256: c7df9392aeb923cb51d2d9737ab9870a9f643e98a6410ff57660aead8a719892

Contents?: true

Size: 1.52 KB

Versions: 3

Compression:

Stored size: 1.52 KB

Contents

# typed: strict
# frozen_string_literal: true

module ActsAsMessageable
  class Rails3
    extend T::Sig

    delegate :attr_accessible, :update_attributes!, to: :@subject

    # @return [ActsAsMessageable::Rails3] api wrapper object
    # @param [ActiveRecord::Base] subject
    sig { params(subject: T.untyped).void }
    def initialize(subject)
      @subject = subject
    end

    # @return [Object]
    # @param [String, Symbol] order_by
    # @see ActiveRecord::Base#default_scope
    sig { params(order_by: T.any(String, Symbol)).void }
    def default_scope(order_by)
      # T.unsafe is needed here because the default_scope method is defined in
      # different ways in different versions of Rails. In Rails 3, it is a
      # class method, but in Rails 4, it is an instance method. We can't
      # statically determine which version of Rails is being used, so we have
      # to use T.unsafe here.
      @subject.send(:default_scope, T.unsafe(@subject).order(order_by))
    end

    # @return [Object]
    # @param [Symbol] name
    # @param [Array] args
    sig { params(name: Symbol, args: T.untyped).returns(T.untyped) }
    def method_missing(name, *args)
      T.unsafe(@subject).send(name, *args) || super
    end

    # @return [Boolean]
    # @param [Object] method_name
    # @param [FalseClass] include_private
    sig { params(method_name: Symbol, include_private: T::Boolean).returns(T::Boolean) }
    def respond_to_missing?(method_name, include_private = false)
      method_name.to_s == 'default_scope' || super
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
acts-as-messageable-1.0.2 lib/acts_as_messageable/rails3.rb
acts-as-messageable-1.0.1 lib/acts_as_messageable/rails3.rb
acts-as-messageable-1.0.0 lib/acts_as_messageable/rails3.rb