# typed: true

# DO NOT EDIT MANUALLY
# This is an autogenerated file for types exported from the `ancestry` gem.
# Please instead update this file by running `bin/tapioca gem ancestry`.

# source://ancestry//lib/ancestry/version.rb#1
module Ancestry
  class << self
    # The value changes the default way that ancestry is stored in the database
    #
    #    :materialized_path (default and legacy)
    #
    #        Ancestry is of the form null (for no ancestors) and 1/2/ for children
    #
    #    :materialized_path2 (preferred)
    #
    #        Ancestry is of the form '/' (for no ancestors) and '/1/2/' for children
    #
    # source://ancestry//lib/ancestry.rb#52
    def default_ancestry_format; end

    # source://ancestry//lib/ancestry.rb#56
    def default_ancestry_format=(value); end

    # The value represents the way the id looks for validation
    #
    #    '[0-9]+' (default) for integer ids
    #    '[-A-Fa-f0-9]{36}'    for uuids (though you can find other regular expressions)
    #
    # source://ancestry//lib/ancestry.rb#67
    def default_primary_key_format; end

    # source://ancestry//lib/ancestry.rb#71
    def default_primary_key_format=(value); end

    # The value changes the default way that ancestry is updated for associated records
    #
    #    :ruby (default and legacy value)
    #
    #        Child records will be loaded into memory and updated. callbacks will get called
    #        The callbacks of interest are those that cache values based upon the ancestry value
    #
    #    :sql (currently only valid in postgres)
    #
    #        Child records are updated in sql and callbacks will not get called.
    #        Associated records in memory will have the wrong ancestry value
    #
    # source://ancestry//lib/ancestry.rb#32
    def default_update_strategy; end

    # source://ancestry//lib/ancestry.rb#36
    def default_update_strategy=(value); end
  end
end

# source://ancestry//lib/ancestry/exceptions.rb#2
class Ancestry::AncestryException < ::RuntimeError; end

# source://ancestry//lib/ancestry/exceptions.rb#5
class Ancestry::AncestryIntegrityException < ::Ancestry::AncestryException; end

# source://ancestry//lib/ancestry/class_methods.rb#2
module Ancestry::ClassMethods
  # Get all nodes and sort them into an empty hash
  #
  # source://ancestry//lib/ancestry/class_methods.rb#41
  def arrange(options = T.unsafe(nil)); end

  # arranges array of nodes to a hierarchical hash
  #
  # If a node's parent is not included, the node will be included as if it is a top level node
  #
  # @param nodes [Array[Node]] nodes to be arranged
  #
  # source://ancestry//lib/ancestry/class_methods.rb#54
  def arrange_nodes(nodes); end

  # Arrangement to nested array for serialization
  # You can also supply your own serialization logic using blocks
  # also allows you to pass the order just as you can pass it to the arrange method
  #
  # source://ancestry//lib/ancestry/class_methods.rb#80
  def arrange_serializable(options = T.unsafe(nil), nodes = T.unsafe(nil), &block); end

  # Build ancestry from parent ids for migration purposes
  #
  # source://ancestry//lib/ancestry/class_methods.rb#215
  def build_ancestry_from_parent_ids!(column = T.unsafe(nil), parent_id = T.unsafe(nil), ancestor_ids = T.unsafe(nil)); end

  # Integrity checking
  # compromised tree integrity is unlikely without explicitly setting cyclic parents or invalid ancestry and circumventing validation
  # just in case, raise an AncestryIntegrityException if issues are detected
  # specify :report => :list to return an array of exceptions or :report => :echo to echo any error messages
  #
  # source://ancestry//lib/ancestry/class_methods.rb#127
  def check_ancestry_integrity!(options = T.unsafe(nil)); end

  # convert a hash of the form {node => children} to an array of nodes, child first
  #
  # @param arranged [Hash{Node => {Node => {}, Node => {}}}] arranged nodes
  #
  # source://ancestry//lib/ancestry/class_methods.rb#69
  def flatten_arranged_nodes(arranged, nodes = T.unsafe(nil)); end

  # Orphan strategy writer
  #
  # source://ancestry//lib/ancestry/class_methods.rb#25
  def orphan_strategy=(orphan_strategy); end

  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/class_methods.rb#244
  def primary_key_is_an_integer?; end

  # Rebuild depth cache if it got corrupted or if depth caching was just turned on
  #
  # @raise [Ancestry::AncestryException]
  #
  # source://ancestry//lib/ancestry/class_methods.rb#227
  def rebuild_depth_cache!; end

  # Integrity restoration
  #
  # source://ancestry//lib/ancestry/class_methods.rb#175
  def restore_ancestry_integrity!; end

  # Scope on relative depth options
  #
  # source://ancestry//lib/ancestry/class_methods.rb#13
  def scope_depth(depth_options, depth); end

  # Pseudo-preordered array of nodes.  Children will always follow parents,
  # This is deterministic unless the parents are missing *and* a sort block is specified
  #
  # source://ancestry//lib/ancestry/class_methods.rb#107
  def sort_by_ancestry(nodes, &block); end

  # Fetch tree node if necessary
  #
  # source://ancestry//lib/ancestry/class_methods.rb#4
  def to_node(object); end

  # source://ancestry//lib/ancestry/class_methods.rb#91
  def tree_view(column, data = T.unsafe(nil)); end

  # @yield [self.ancestry_base_class.default_scoped.unscope(:where)]
  #
  # source://ancestry//lib/ancestry/class_methods.rb#239
  def unscoped_where; end
end

# source://ancestry//lib/ancestry/class_methods.rb#243
Ancestry::ClassMethods::ANCESTRY_UNCAST_TYPES = T.let(T.unsafe(nil), Array)

# source://ancestry//lib/ancestry/has_ancestry.rb#2
module Ancestry::HasAncestry
  # source://ancestry//lib/ancestry/has_ancestry.rb#108
  def acts_as_tree(*args); end

  # @raise [Ancestry::AncestryException]
  #
  # source://ancestry//lib/ancestry/has_ancestry.rb#3
  def has_ancestry(options = T.unsafe(nil)); end
end

# source://ancestry//lib/ancestry/instance_methods.rb#2
module Ancestry::InstanceMethods
  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#152
  def ancestor_of?(node); end

  # source://ancestry//lib/ancestry/instance_methods.rb#123
  def ancestors(depth_options = T.unsafe(nil)); end

  # Ancestors
  #
  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#94
  def ancestors?; end

  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#304
  def ancestry_callbacks_disabled?; end

  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#99
  def ancestry_changed?; end

  # Validate that the ancestors don't include itself
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#4
  def ancestry_exclude_self; end

  # Apply orphan strategy (before destroy - no changes)
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#24
  def apply_orphan_strategy; end

  # source://ancestry//lib/ancestry/instance_methods.rb#148
  def cache_depth; end

  # source://ancestry//lib/ancestry/instance_methods.rb#214
  def child_ids; end

  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#228
  def child_of?(node); end

  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#223
  def childless?; end

  # Children
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#210
  def children; end

  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#218
  def children?; end

  # source://ancestry//lib/ancestry/instance_methods.rb#68
  def decrease_parent_counter_cache; end

  # source://ancestry//lib/ancestry/instance_methods.rb#144
  def depth; end

  # source://ancestry//lib/ancestry/instance_methods.rb#263
  def descendant_ids(depth_options = T.unsafe(nil)); end

  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#267
  def descendant_of?(node); end

  # Descendants
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#259
  def descendants(depth_options = T.unsafe(nil)); end

  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#218
  def has_children?; end

  # Ancestors
  #
  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#94
  def has_parent?; end

  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#243
  def has_siblings?; end

  # Counter Cache
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#64
  def increase_parent_counter_cache; end

  # source://ancestry//lib/ancestry/instance_methods.rb#277
  def indirect_ids(depth_options = T.unsafe(nil)); end

  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#281
  def indirect_of?(node); end

  # Indirects
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#273
  def indirects(depth_options = T.unsafe(nil)); end

  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#223
  def is_childless?; end

  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#248
  def is_only_child?; end

  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#199
  def is_root?; end

  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#248
  def only_child?; end

  # source://ancestry//lib/ancestry/instance_methods.rb#173
  def parent; end

  # currently parent= does not work in after save callbacks
  # assuming that parent hasn't changed
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#160
  def parent=(parent); end

  # source://ancestry//lib/ancestry/instance_methods.rb#168
  def parent_id; end

  # source://ancestry//lib/ancestry/instance_methods.rb#164
  def parent_id=(new_parent_id); end

  # Ancestors
  #
  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#94
  def parent_id?; end

  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#181
  def parent_of?(node); end

  # source://ancestry//lib/ancestry/instance_methods.rb#140
  def path(depth_options = T.unsafe(nil)); end

  # source://ancestry//lib/ancestry/instance_methods.rb#128
  def path_ids; end

  # source://ancestry//lib/ancestry/instance_methods.rb#132
  def path_ids_before_last_save; end

  # source://ancestry//lib/ancestry/instance_methods.rb#136
  def path_ids_in_database; end

  # source://ancestry//lib/ancestry/instance_methods.rb#191
  def root; end

  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#199
  def root?; end

  # Root
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#187
  def root_id; end

  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#204
  def root_of?(node); end

  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#106
  def sane_ancestor_ids?; end

  # NOTE: includes self
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#239
  def sibling_ids; end

  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#253
  def sibling_of?(node); end

  # Siblings
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#234
  def siblings; end

  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#243
  def siblings?; end

  # Subtree
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#287
  def subtree(depth_options = T.unsafe(nil)); end

  # source://ancestry//lib/ancestry/instance_methods.rb#291
  def subtree_ids(depth_options = T.unsafe(nil)); end

  # Touch each of this record's ancestors (after save)
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#52
  def touch_ancestors_callback; end

  # Update descendants with new ancestry (after update)
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#9
  def update_descendants_with_new_ancestry; end

  # source://ancestry//lib/ancestry/instance_methods.rb#80
  def update_parent_counter_cache; end

  # Callback disabling
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#297
  def without_ancestry_callbacks; end

  private

  # works with after save context (hence before_last_save)
  #
  # source://ancestry//lib/ancestry/instance_methods.rb#322
  def unscoped_current_and_previous_ancestors; end

  # source://ancestry//lib/ancestry/instance_methods.rb#309
  def unscoped_descendants; end

  # source://ancestry//lib/ancestry/instance_methods.rb#315
  def unscoped_descendants_before_save; end

  # source://ancestry//lib/ancestry/instance_methods.rb#328
  def unscoped_find(id); end

  # source://ancestry//lib/ancestry/instance_methods.rb#334
  def unscoped_where; end
end

# store ancestry as grandparent_id/parent_id
# root a=nil,id=1   children=id,id/%      == 1, 1/%
# 3: a=1/2,id=3     children=a/id,a/id/%  == 1/2/3, 1/2/3/%
#
# source://ancestry//lib/ancestry/materialized_path.rb#5
module Ancestry::MaterializedPath
  # source://ancestry//lib/ancestry/materialized_path.rb#18
  def ancestors_of(object); end

  # source://ancestry//lib/ancestry/materialized_path.rb#91
  def ancestry_root; end

  # source://ancestry//lib/ancestry/materialized_path.rb#30
  def children_of(object); end

  # source://ancestry//lib/ancestry/materialized_path.rb#57
  def descendant_before_save_conditions(object); end

  # source://ancestry//lib/ancestry/materialized_path.rb#52
  def descendant_conditions(object); end

  # source://ancestry//lib/ancestry/materialized_path.rb#47
  def descendants_by_ancestry(ancestry); end

  # source://ancestry//lib/ancestry/materialized_path.rb#43
  def descendants_of(object); end

  # indirect = anyone who is a descendant, but not a child
  #
  # source://ancestry//lib/ancestry/materialized_path.rb#37
  def indirects_of(object); end

  # source://ancestry//lib/ancestry/materialized_path.rb#24
  def inpath_of(object); end

  # source://ancestry//lib/ancestry/materialized_path.rb#74
  def ordered_by_ancestry(order = T.unsafe(nil)); end

  # source://ancestry//lib/ancestry/materialized_path.rb#87
  def ordered_by_ancestry_and(order); end

  # source://ancestry//lib/ancestry/materialized_path.rb#10
  def path_of(object); end

  # source://ancestry//lib/ancestry/materialized_path.rb#14
  def roots; end

  # source://ancestry//lib/ancestry/materialized_path.rb#68
  def siblings_of(object); end

  # source://ancestry//lib/ancestry/materialized_path.rb#62
  def subtree_of(object); end

  private

  # source://ancestry//lib/ancestry/materialized_path.rb#108
  def ancestry_format_regexp; end

  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/materialized_path.rb#104
  def ancestry_nil_allowed?; end

  # source://ancestry//lib/ancestry/materialized_path.rb#97
  def ancestry_validation_options; end

  class << self
    # @private
    #
    # source://ancestry//lib/ancestry/materialized_path.rb#6
    def extended(base); end
  end
end

# store ancestry as /grandparent_id/parent_id/
# root: a=/,id=1    children=#{a}#{id}/% == /1/%
# 3:    a=/1/2/,id=3 children=#{a}#{id}/% == /1/2/3/%
#
# source://ancestry//lib/ancestry/materialized_path2.rb#5
module Ancestry::MaterializedPath2
  include ::Ancestry::MaterializedPath

  # source://ancestry//lib/ancestry/materialized_path2.rb#27
  def ancestry_root; end

  # source://ancestry//lib/ancestry/materialized_path2.rb#23
  def descendants_by_ancestry(ancestry); end

  # source://ancestry//lib/ancestry/materialized_path2.rb#13
  def indirects_of(object); end

  # source://ancestry//lib/ancestry/materialized_path2.rb#19
  def ordered_by_ancestry(order = T.unsafe(nil)); end

  private

  # source://ancestry//lib/ancestry/materialized_path2.rb#37
  def ancestry_format_regexp; end

  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/materialized_path2.rb#33
  def ancestry_nil_allowed?; end

  class << self
    # @private
    #
    # source://ancestry//lib/ancestry/materialized_path2.rb#8
    def extended(base); end
  end
end

# source://ancestry//lib/ancestry/materialized_path2.rb#41
module Ancestry::MaterializedPath2::InstanceMethods
  # @raise [Ancestry::AncestryException]
  #
  # source://ancestry//lib/ancestry/materialized_path2.rb#42
  def child_ancestry; end

  # @raise [Ancestry::AncestryException]
  #
  # source://ancestry//lib/ancestry/materialized_path2.rb#48
  def child_ancestry_before_save; end

  # source://ancestry//lib/ancestry/materialized_path2.rb#54
  def generate_ancestry(ancestor_ids); end
end

# source://ancestry//lib/ancestry/materialized_path.rb#112
module Ancestry::MaterializedPath::InstanceMethods
  # source://ancestry//lib/ancestry/materialized_path.rb#123
  def ancestor_ids; end

  # source://ancestry//lib/ancestry/materialized_path.rb#119
  def ancestor_ids=(value); end

  # source://ancestry//lib/ancestry/materialized_path.rb#131
  def ancestor_ids_before_last_save; end

  # source://ancestry//lib/ancestry/materialized_path.rb#127
  def ancestor_ids_in_database; end

  # optimization - better to go directly to column and avoid parsing
  #
  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/materialized_path.rb#114
  def ancestors?; end

  # private (public so class methods can find it)
  # The ancestry value for this record's children (before save)
  # This is technically child_ancestry_was
  #
  # @raise [Ancestry::AncestryException]
  #
  # source://ancestry//lib/ancestry/materialized_path.rb#151
  def child_ancestry; end

  # @raise [Ancestry::AncestryException]
  #
  # source://ancestry//lib/ancestry/materialized_path.rb#157
  def child_ancestry_before_save; end

  # source://ancestry//lib/ancestry/materialized_path.rb#169
  def generate_ancestry(ancestor_ids); end

  # optimization - better to go directly to column and avoid parsing
  #
  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/materialized_path.rb#114
  def has_parent?; end

  # source://ancestry//lib/ancestry/materialized_path.rb#139
  def parent_id_before_last_save; end

  # source://ancestry//lib/ancestry/materialized_path.rb#135
  def parent_id_in_database; end

  # source://ancestry//lib/ancestry/materialized_path.rb#163
  def parse_ancestry_column(obj); end

  # optimization - better to go directly to column and avoid parsing
  #
  # @return [Boolean]
  #
  # source://ancestry//lib/ancestry/materialized_path.rb#144
  def sibling_of?(node); end
end

# source://ancestry//lib/ancestry/materialized_path_pg.rb#2
module Ancestry::MaterializedPathPg
  # Update descendants with new ancestry (after update)
  #
  # source://ancestry//lib/ancestry/materialized_path_pg.rb#4
  def update_descendants_with_new_ancestry; end
end

# source://ancestry//lib/ancestry/version.rb#2
Ancestry::VERSION = T.let(T.unsafe(nil), String)