class FactoryBot::Strategy::Stub

Constants

DISABLED_PERSISTENCE_METHODS

Public Class Methods

next_id=(id) click to toggle source
# File lib/factory_bot/strategy/stub.rb, line 27
def self.next_id=(id)
  @@next_id = id
end

Public Instance Methods

association(runner) click to toggle source
# File lib/factory_bot/strategy/stub.rb, line 31
def association(runner)
  runner.run(:build_stubbed)
end
result(evaluation) click to toggle source
# File lib/factory_bot/strategy/stub.rb, line 35
def result(evaluation)
  evaluation.object.tap do |instance|
    stub_database_interaction_on_result(instance)
    set_timestamps(instance)
    clear_changes_information(instance)
    evaluation.notify(:after_stub, instance)
  end
end
to_sym() click to toggle source
# File lib/factory_bot/strategy/stub.rb, line 44
def to_sym
  :stub
end

Private Instance Methods

clear_changes_information(result_instance) click to toggle source
# File lib/factory_bot/strategy/stub.rb, line 86
def clear_changes_information(result_instance)
  if result_instance.respond_to?(:clear_changes_information)
    result_instance.clear_changes_information
  end
end
destroyed?() click to toggle source
# File lib/factory_bot/strategy/stub.rb, line 68
def destroyed?
  nil
end
has_settable_id?(result_instance) click to toggle source
# File lib/factory_bot/strategy/stub.rb, line 81
def has_settable_id?(result_instance)
  !result_instance.class.respond_to?(:primary_key) ||
    result_instance.class.primary_key
end
missing_created_at?(result_instance) click to toggle source
# File lib/factory_bot/strategy/stub.rb, line 102
def missing_created_at?(result_instance)
  result_instance.respond_to?(:created_at) &&
    result_instance.respond_to?(:created_at=) &&
    result_instance.created_at.blank?
end
missing_updated_at?(result_instance) click to toggle source
# File lib/factory_bot/strategy/stub.rb, line 108
def missing_updated_at?(result_instance)
  result_instance.respond_to?(:updated_at) &&
    result_instance.respond_to?(:updated_at=) &&
    result_instance.updated_at.blank?
end
new_record?() click to toggle source
# File lib/factory_bot/strategy/stub.rb, line 64
def new_record?
  false
end
next_id() click to toggle source
# File lib/factory_bot/strategy/stub.rb, line 50
def next_id
  @@next_id += 1
end
persisted?() click to toggle source
# File lib/factory_bot/strategy/stub.rb, line 60
def persisted?
  true
end
set_timestamps(result_instance) click to toggle source
# File lib/factory_bot/strategy/stub.rb, line 92
def set_timestamps(result_instance)
  if missing_created_at?(result_instance)
    result_instance.created_at = Time.current
  end

  if missing_updated_at?(result_instance)
    result_instance.updated_at = Time.current
  end
end
stub_database_interaction_on_result(result_instance) click to toggle source
# File lib/factory_bot/strategy/stub.rb, line 54
def stub_database_interaction_on_result(result_instance)
  if has_settable_id?(result_instance)
    result_instance.id ||= next_id
  end

  result_instance.instance_eval do
    def persisted?
      true
    end

    def new_record?
      false
    end

    def destroyed?
      nil
    end

    DISABLED_PERSISTENCE_METHODS.each do |write_method|
      define_singleton_method(write_method) do |*args|
        raise "stubbed models are not allowed to access the database - "\
              "#{self.class}##{write_method}(#{args.join(",")})"
      end
    end
  end
end