Module: AbAdmin::Concerns::Utilities::ClassMethods
- Defined in:
- lib/ab_admin/concerns/utilities.rb
Instance Method Summary collapse
- #all_columns_names ⇒ Object
- #all_ids ⇒ Object
- #all_models ⇒ Object
- #all_translated_attribute_names ⇒ Object
- #full_truncate ⇒ Object
- #generate_token(column = :guid) ⇒ Object
- #han(attr) ⇒ Object
- #max_time ⇒ Object
- #max_time_by_scope(scope) ⇒ Object
- #quote_column(col_name) ⇒ Object
- #update_counter_column(col, ass) ⇒ Object
- #update_counter_columns(*args) ⇒ Object
Instance Method Details
#all_columns_names ⇒ Object
96 97 98 99 100 101 102 |
# File 'lib/ab_admin/concerns/utilities.rb', line 96 def all_columns_names if translates? column_names + all_translated_attribute_names + translated_attribute_names.map(&:to_s) else column_names end end |
#all_ids ⇒ Object
26 27 28 |
# File 'lib/ab_admin/concerns/utilities.rb', line 26 def all_ids select(:id).map(&:id) end |
#all_models ⇒ Object
30 31 32 33 34 |
# File 'lib/ab_admin/concerns/utilities.rb', line 30 def all_models Dir.glob(Rails.root.to_s + '/app/models/**/*.rb').each { |file| require file } ActiveRecord::Base.descendants.find_all { |model| model.table_exists? } #ActiveRecord::Base.descendants.find_all { |model| model.descends_from_active_record? } end |
#all_translated_attribute_names ⇒ Object
86 87 88 89 90 91 92 93 94 |
# File 'lib/ab_admin/concerns/utilities.rb', line 86 def all_translated_attribute_names if translates? ::I18n.available_locales.map do |loc| translated_attribute_names.map { |attr| "#{attr}_#{loc}" } end.flatten else [] end end |
#full_truncate ⇒ Object
20 21 22 23 24 |
# File 'lib/ab_admin/concerns/utilities.rb', line 20 def full_truncate destroy_all truncate! const_get(:Translation).truncate! if translates? end |
#generate_token(column = :guid) ⇒ Object
104 105 106 107 108 109 |
# File 'lib/ab_admin/concerns/utilities.rb', line 104 def generate_token(column=:guid) loop do token = ::Devise.friendly_token break token unless to_adapter.find_first({column => token}) end end |
#han(attr) ⇒ Object
36 37 38 |
# File 'lib/ab_admin/concerns/utilities.rb', line 36 def han(attr) human_attribute_name(attr) end |
#max_time ⇒ Object
12 13 14 |
# File 'lib/ab_admin/concerns/utilities.rb', line 12 def max_time Rails.cache.fetch("by_class_#{name}", expires_in: 60) { maximum(:updated_at).to_i } end |
#max_time_by_scope(scope) ⇒ Object
16 17 18 |
# File 'lib/ab_admin/concerns/utilities.rb', line 16 def max_time_by_scope(scope) Rails.cache.fetch("by_class_#{name}_#{scope}", expires_in: 60) { send(scope).maximum(:updated_at).to_i } end |
#quote_column(col_name) ⇒ Object
40 41 42 |
# File 'lib/ab_admin/concerns/utilities.rb', line 40 def quote_column(col_name) "#{quoted_table_name}.#{connection.quote_column_name(col_name)}" end |
#update_counter_column(col, ass) ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/ab_admin/concerns/utilities.rb', line 59 def update_counter_column(col, ass) assoc = reflect_on_association(ass) if assoc if assoc.[:through] assoc_count = reflect_on_association(assoc.[:through]) if assoc.klass.quoted_table_name == quoted_table_name add_from = '' add_cond = '1=1' else add_from = "INNER JOIN #{assoc.klass.quoted_table_name} ON #{assoc_count.klass.quoted_table_name}.#{assoc.foreign_key} = #{assoc.klass.quoted_table_name}.id" add_cond = assoc.sanitized_conditions || '1=1' end else assoc_count = assoc add_from = '' add_cond = assoc.sanitized_conditions || '1=1' end count_klass = assoc_count.klass query = <<-SQL UPDATE #{quoted_table_name} SET #{col} = (SELECT COUNT(#{count_klass.quoted_table_name}.id) FROM #{count_klass.quoted_table_name} #{add_from} WHERE #{quoted_table_name}.id = #{count_klass.quoted_table_name}.#{assoc_count.foreign_key} AND #{add_cond}) SQL connection.execute(query) end end |
#update_counter_columns(*args) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/ab_admin/concerns/utilities.rb', line 44 def update_counter_columns(*args) args.each do |counter_column| assoc = reflect_on_association(counter_column.to_s.sub(/_count$/, '').to_sym) if assoc count_klass = assoc.klass query = <<-SQL UPDATE #{quoted_table_name} SET #{counter_column} = (SELECT COUNT(#{count_klass.quoted_table_name}.id) FROM #{count_klass.quoted_table_name} WHERE #{quoted_table_name}.id = #{count_klass.quoted_table_name}.#{assoc.foreign_key}) SQL connection.execute(query) end end end |