Class: GettextI18nRails::ModelAttributesFinder

Inherits:
Object
  • Object
show all
Defined in:
lib/gettext_i18n_rails/model_attributes_finder.rb

Instance Method Summary collapse

Constructor Details

#initializeModelAttributesFinder

Returns a new instance of ModelAttributesFinder.



56
57
58
# File 'lib/gettext_i18n_rails/model_attributes_finder.rb', line 56

def initialize
  @existing_tables = ::ActiveRecord::Base.connection.data_sources
end

Instance Method Details

#find(options) ⇒ Object

options:

:ignore_tables => ['cars',/_settings$/,...]
:ignore_columns => ['id',/_id$/,...]

current connection —> href="'model_name','type'">cars’=>,…



47
48
49
50
51
52
53
54
# File 'lib/gettext_i18n_rails/model_attributes_finder.rb', line 47

def find(options)
  found = ActiveSupport::OrderedHash.new([])
  models.each do |model|
    attributes = model_attributes(model, options[:ignore_tables], options[:ignore_columns])
    found[model] = attributes.sort if attributes.any?
  end
  found
end

#ignored?(name, patterns) ⇒ Boolean

Returns:

  • (Boolean)


90
91
92
93
# File 'lib/gettext_i18n_rails/model_attributes_finder.rb', line 90

def ignored?(name,patterns)
  return false unless patterns
  patterns.detect{|p|p.to_s==name.to_s or (p.is_a?(Regexp) and name=~p)}
end

#model_attributes(model, ignored_tables, ignored_cols) ⇒ Object

Rails < 3.0 doesn’t have DescendantsTracker. Instead of iterating over ObjectSpace (slow) the decision was made NOT to support class hierarchies with abstract base classes in Rails 2.x



63
64
65
66
67
68
69
70
71
72
73
# File 'lib/gettext_i18n_rails/model_attributes_finder.rb', line 63

def model_attributes(model, ignored_tables, ignored_cols)
  if model.abstract_class?
    model.subclasses.reject {|m| ignored?(m.table_name, ignored_tables)}.inject([]) do |attrs, m|
      attrs.push(model_attributes(m, ignored_tables, ignored_cols)).flatten.uniq
    end
  elsif !ignored?(model.table_name, ignored_tables) && @existing_tables.include?(model.table_name)
    model.columns.reject { |c| ignored?(c.name, ignored_cols) }.collect { |c| c.name }
  else
    []
  end
end

#modelsObject



75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/gettext_i18n_rails/model_attributes_finder.rb', line 75

def models
  # Ensure autoloaders are set up before we attempt to eager load!
  Rails.application.autoloaders.each(&:setup) if Rails.application.respond_to?(:autoloaders)
  Rails.application.eager_load! # make sure that all models are loaded so that direct_descendants works
  descendants = ::ActiveRecord::Base.subclasses

  # In rails 5+ user models are supposed to inherit from ApplicationRecord
  if defined?(::ApplicationRecord)
    descendants += ApplicationRecord.subclasses
    descendants.delete ApplicationRecord
  end

  descendants.uniq.sort_by(&:name)
end