Class: GettextI18nRails::ModelAttributesFinder
- Inherits:
-
Object
- Object
- GettextI18nRails::ModelAttributesFinder
- Defined in:
- lib/gettext_i18n_rails/model_attributes_finder.rb
Instance Method Summary collapse
-
#find(options) ⇒ Object
options: :ignore_tables => [‘cars’,/_settings$/,…] :ignore_columns => [‘id’,/_id$/,…] current connection —> href="'model_name','type'">cars’=>,….
- #ignored?(name, patterns) ⇒ Boolean
-
#model_attributes(model, ignored_tables, ignored_cols) ⇒ Object
Rails < 3.0 doesn’t have DescendantsTracker.
- #models ⇒ Object
Instance Method Details
#find(options) ⇒ Object
options:
:ignore_tables => ['cars',/_settings$/,...]
:ignore_columns => ['id',/_id$/,...]
current connection —> href="'model_name','type'">cars’=>,…
35 36 37 38 39 40 41 42 |
# File 'lib/gettext_i18n_rails/model_attributes_finder.rb', line 35 def find() found = ActiveSupport::OrderedHash.new([]) models.each do |model| attributes = model_attributes(model, [:ignore_tables], [:ignore_columns]) found[model] = attributes.sort if attributes.any? end found end |
#ignored?(name, patterns) ⇒ Boolean
73 74 75 76 |
# File 'lib/gettext_i18n_rails/model_attributes_finder.rb', line 73 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
47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/gettext_i18n_rails/model_attributes_finder.rb', line 47 def model_attributes(model, ignored_tables, ignored_cols) return [] if model.abstract_class? && Rails::VERSION::MAJOR < 3 if model.abstract_class? model.direct_descendants.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) model.columns.reject { |c| ignored?(c.name, ignored_cols) }.collect { |c| c.name } else [] end end |
#models ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/gettext_i18n_rails/model_attributes_finder.rb', line 61 def models if Rails::VERSION::MAJOR > 2 Rails.application.eager_load! # make sure that all models are loaded so that direct_descendants works ::ActiveRecord::Base.direct_descendants else ::ActiveRecord::Base.connection.tables \ .map { |t| table_name_to_namespaced_model(t) } \ .compact \ .collect { |c| c.superclass.abstract_class? ? c.superclass : c } end.uniq.sort_by(&:name) end |