Sha256: a1abcf3737b8032290c4bb5657b085e323df550febfdaabc3905da4e849477ee

Contents?: true

Size: 1.05 KB

Versions: 3

Compression:

Stored size: 1.05 KB

Contents

module Ahnnotate
  module Facet
    module Models
      class ResolveActiveRecordModels
        include ProcParty

        def call(object_space)
          tree = {}
          object_space.each do |_class_name, extracted_class|
            superclass = extracted_class.superclass

            tree[superclass] ||= Set.new
            tree[superclass].add(extracted_class)
          end

          activerecord_family =
            gather_family(object_space["::ActiveRecord::Base"], tree)

          activerecord_family.each do |individual|
            individual.is_a_kind_of_activerecord_base = true
          end

          object_space.values - [object_space[""], object_space["::ActiveRecord::Base"]]
        end

        private

        def gather_family(node, tree)
          gather_family_helper(node, tree).flatten
        end

        def gather_family_helper(node, tree)
          if tree[node].nil?
            return node
          end

          [node] + tree[node].map { |child| gather_family_helper(child, tree) }
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
ahnnotate-0.4.0 lib/ahnnotate/facet/models/resolve_active_record_models.rb
ahnnotate-0.3.0 lib/ahnnotate/facet/models/resolve_active_record_models.rb
ahnnotate-0.2.0 lib/ahnnotate/facet/models/resolve_active_record_models.rb