Sha256: 9276cdb15ead2e59e5624b9d9cc7147af4b724c2ad1219d3336af193109d9793

Contents?: true

Size: 1.86 KB

Versions: 11

Compression:

Stored size: 1.86 KB

Contents

module ForestLiana
  class SchemaUtils

    def self.associations(active_record_class)
      active_record_class
        .reflect_on_all_associations
        .select {|a| !polymorphic?(a)}
    end

    def self.one_associations(active_record_class)
      self.associations(active_record_class).select do |x|
        [:has_one, :belongs_to].include?(x.macro)
      end
    end

    def self.many_associations(active_record_class)
      self.associations(active_record_class).select do |x|
        [:has_many, :has_and_belongs_to_many].include?(x.macro)
      end
    end

    def self.find_model_from_table_name(table_name)
      model = nil

      ForestLiana.models.each do |subclass|
        if subclass.abstract_class?
          model = self.find_model_from_abstract_class(subclass, table_name)
        elsif subclass.table_name == table_name
          model = subclass.base_class
        end

        break if model
      end

      model
    end

    def self.tables_names
      ActiveRecord::Base.connection.tables
    end

    private

    def self.polymorphic?(association)
      association.options[:polymorphic]
    end

    def self.find_model_from_abstract_class(abstract_class, table_name)
      abstract_class.subclasses.find do |subclass|
        if subclass.abstract_class?
          return self.find_model_from_table_name(subclass, table_name)
        else
          subclass.table_name == table_name
        end
      end
    end

    def self.model_included?(model)
      # NOTICE: all models are included by default.
      return true if ForestLiana.included_models.empty? &&
        ForestLiana.excluded_models.empty?

      if ForestLiana.included_models.any?
        ForestLiana.included_models.include?(model)
      else
        ForestLiana.excluded_models.exclude?(model)
      end
    end

    def self.habtm?(model)
      model.name.starts_with?('HABTM')
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
forest_liana-1.5.22 app/services/forest_liana/schema_utils.rb
forest_liana-1.5.21 app/services/forest_liana/schema_utils.rb
forest_liana-1.5.20 app/services/forest_liana/schema_utils.rb
forest_liana-1.5.19 app/services/forest_liana/schema_utils.rb
forest_liana-1.5.18 app/services/forest_liana/schema_utils.rb
forest_liana-1.5.17 app/services/forest_liana/schema_utils.rb
forest_liana-1.5.16 app/services/forest_liana/schema_utils.rb
forest_liana-1.5.15 app/services/forest_liana/schema_utils.rb
forest_liana-1.5.14 app/services/forest_liana/schema_utils.rb
forest_liana-1.5.13 app/services/forest_liana/schema_utils.rb
forest_liana-1.5.12 app/services/forest_liana/schema_utils.rb