class RailsBestPractices::Core::ModelAssociations

Model associations container.

Public Class Methods

new() click to toggle source
# File lib/rails_best_practices/core/model_associations.rb, line 7
def initialize
  @associations = {}
end

Public Instance Methods

add_association(model_name, association_name, association_meta, association_class = nil) click to toggle source

@param [String] model name @param [String] association name @param [String] association meta, has_many, has_one, belongs_to and has_and_belongs_to_many @param [String] association class name

# File lib/rails_best_practices/core/model_associations.rb, line 16
def add_association(model_name, association_name, association_meta, association_class = nil)
  @associations[model_name] ||= {}
  @associations[model_name][association_name] = {
    'meta' => association_meta, 'class_name' => association_class || association_name.classify
  }
end
each() { |model, model_associations| ... } click to toggle source

delegate each to @associations.

# File lib/rails_best_practices/core/model_associations.rb, line 44
def each
  @associations.each { |model, model_associations| yield model, model_associations }
end
get_association(model_name, association_name) click to toggle source

Get a model association.

@param [String] model name @param [String] association name @return [Hash] {“meta” => association_meta, “class_name” => association_class}

# File lib/rails_best_practices/core/model_associations.rb, line 28
def get_association(model_name, association_name)
  associations = @associations[model_name]
  associations && associations[association_name]
end
get_association_class_name(table_name, association_name) click to toggle source

Get association's class name

@param [String] table name @param [String] association_name @return [String] association's class name

# File lib/rails_best_practices/core/model_associations.rb, line 53
def get_association_class_name(table_name, association_name)
  (
    associations =
      @associations.select { |model, _model_associations| model.gsub('::', '').tableize == table_name }.values
        .first
  ) && (association_meta = associations.select { |name, _meta| name == association_name }.values.first) &&
    association_meta['class_name']
end
is_association?(model_name, association_name) click to toggle source

If it is a model's association.

@param [String] model name @param [String] association name @return [Boolean] true if it is the model's association

# File lib/rails_best_practices/core/model_associations.rb, line 38
def is_association?(model_name, association_name)
  associations = @associations[model_name]
  !!(associations && associations[association_name])
end