Sha256: 48dc4721f1806d751023403203dfcc17870fdcf7ffc9d34c72b9f1194b0d1fe7

Contents?: true

Size: 1.92 KB

Versions: 2

Compression:

Stored size: 1.92 KB

Contents

# frozen_string_literal: true

require 'active_record'
require 'ids_of_all_dependencies'
require 'nullify_dependencies'

class AssociationWithValue
  delegate_missing_to :@association

  def initialize(association, value)
    @association = association
    @value = value
  end
end

class Model < ActiveRecord::Base
  include IdsOfAllDependencies
  include NullifyDependencies

  self.abstract_class = true

  def attributes_without_id
    self.attributes.reject{|k, v| k == "id"}
  end

  def associations_hash
    self.associations.map do |association|
      [association.name, association]
    end.to_h
  end

  def associations
    self.class.reflect_on_all_associations.map do |association|
      value = self.send(association.name)
      AssociationWithValue.new(association, value)
    end
  end

  def associations_without_belongs_to
    self.associations.select { |a| a.macro != :belongs_to }
  end

  def self.get_model(name)
    self.subclasses.find{ |m| m.name == name.to_s.camelcase }
  end

  def self.get_model_by_table_name(name)
    self.subclasses.find{ |m| m.table_name == name.to_s }
  end

  def self.ids_of_subclasses_entries
    self.subclasses.map do |subclass|
      [subclass.name, subclass.all.map(&:id)] if subclass.any?
    end.compact.to_h
  end

  def self.sum_of_subclasses_rows(except: [])
    self.subclasses.map do |subclass|
      next 0 if except.include?(subclass.table_name) || except.include?(subclass.name)

      subclass.all.size
    end.reduce(:+)
  end

  def self.subclasses_counts(except: [])
    self.subclasses.map do |subclass|
      next [subclass.name, 0] if except.include?(subclass.table_name) || except.include?(subclass.name)

      [subclass.name, subclass.all.size]
    end.to_h
  end


  def removed?
    begin
      reload
      false
    rescue ActiveRecord::RecordNotFound => e
      true
    end
  end
end

ActiveSupport::Inflector.inflections(:en) do |inflect|
  inflect.irregular 'abuse', 'abuses'
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
travis-backup-for-v3-0.1.1 lib/model.rb
travis-backup-for-v3-0.1.0 lib/model.rb