class FactoryBot::Strategy::Stub

def self.next_id=(id)

def self.next_id=(id)
  @@next_id = id
end

def association(runner)

def association(runner)
  runner.run(:build_stubbed)
end

def clear_changes_information(result_instance)

def clear_changes_information(result_instance)
  if result_instance.respond_to?(:clear_changes_information)
    result_instance.clear_changes_information
  end
end

def destroyed?

def destroyed?
  nil
end

def has_settable_id?(result_instance)

def has_settable_id?(result_instance)
  !result_instance.class.respond_to?(:primary_key) ||
    result_instance.class.primary_key
end

def missing_created_at?(result_instance)

def missing_created_at?(result_instance)
  result_instance.respond_to?(:created_at) &&
    result_instance.respond_to?(:created_at=) &&
    result_instance.created_at.blank?
end

def missing_updated_at?(result_instance)

def missing_updated_at?(result_instance)
  result_instance.respond_to?(:updated_at) &&
    result_instance.respond_to?(:updated_at=) &&
    result_instance.updated_at.blank?
end

def new_record?

def new_record?
  false
end

def next_id

def next_id
  @@next_id += 1
end

def persisted?

def persisted?
  true
end

def result(evaluation)

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

def set_timestamps(result_instance)

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

def stub_database_interaction_on_result(result_instance)

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

def to_sym

def to_sym
  :stub
end