module Scopiform::Helpers::ClassMethods

Public Instance Methods

aliases_for(name) click to toggle source
# File lib/scopiform/helpers.rb, line 34
def aliases_for(name)
  attribute_aliases_inverted[name.to_s] || []
end
association(name) click to toggle source
# File lib/scopiform/helpers.rb, line 43
def association(name)
  name = resolve_alias(name)
  association = reflect_on_association(name)

  association.klass if association.present? && !association.polymorphic?
  association
rescue NameError
  logger.warn "Unable to load class for association `#{name}` in model `#{self.name}`"
  nil
end
attribute_aliases() click to toggle source
Calls superclass method
# File lib/scopiform/helpers.rb, line 14
def attribute_aliases
  alias_hash = super

  key = primary_key.to_s
  alias_hash = alias_hash.merge('id' => key) if key != 'id'

  alias_hash
end
attribute_aliases_inverted() click to toggle source
# File lib/scopiform/helpers.rb, line 23
def attribute_aliases_inverted
  attribute_aliases.each_with_object({}) { |(k, v), o| (o[v] ||= []) << k }
end
column(name) click to toggle source
# File lib/scopiform/helpers.rb, line 38
def column(name)
  name = resolve_alias(name)
  safe_columns_hash[name.to_s]
end
enum_attribute?(name) click to toggle source
# File lib/scopiform/helpers.rb, line 54
def enum_attribute?(name)
  defined_enums.include? name.to_s
end
resolve_alias(name) click to toggle source
# File lib/scopiform/helpers.rb, line 27
def resolve_alias(name)
  name_str = name.to_s
  return attribute_aliases[name_str] if attribute_aliases[name_str].present?

  name_str
end
scopiform_arel(ctx) click to toggle source
# File lib/scopiform/helpers.rb, line 58
def scopiform_arel(ctx)
  ctx&.arel_table || arel_table
end

Protected Instance Methods

safe_columns() click to toggle source
# File lib/scopiform/helpers.rb, line 64
def safe_columns
  @safe_columns ||= columns
rescue *safe_column_rescue_errors
  logger.warn "Unable to load columns for `#{name}`"
  @safe_columns = []
end
safe_columns_hash() click to toggle source
# File lib/scopiform/helpers.rb, line 71
def safe_columns_hash
  @safe_columns_hash ||= columns_hash
rescue *safe_column_rescue_errors
  logger.warn "Unable to load columns_hash for `#{name}`"
  @safe_columns_hash = {}
end

Private Instance Methods

safe_column_rescue_errors() click to toggle source
# File lib/scopiform/helpers.rb, line 80
def safe_column_rescue_errors
  [
    ActiveRecord::StatementInvalid,
    Object.const_defined?('TinyTds') ? TinyTds::Error : nil,
  ]
end