Module: TopNLoader
- Defined in:
- lib/top_n_loader.rb,
lib/top_n_loader/version.rb
Defined Under Namespace
Modules: SQLBuilder
Constant Summary collapse
- VERSION =
'1.0.3'
Class Method Summary collapse
- .load_associations(base_klass, ids, relation, limit:, order: nil) ⇒ Object
- .load_groups(klass, column, keys, limit:, order: nil, condition: nil) ⇒ Object
Class Method Details
.load_associations(base_klass, ids, relation, limit:, order: nil) ⇒ Object
7 8 9 10 11 12 13 14 15 16 |
# File 'lib/top_n_loader.rb', line 7 def load_associations(base_klass, ids, relation, limit:, order: nil) validate_ar_class! :base_klass, base_klass validate_limit! limit return Hash.new { [] } if ids.empty? || limit.zero? klass = base_klass.reflect_on_association(relation.to_sym).klass order_option = { limit: limit, **parse_order(klass, order) } sql = SQLBuilder.top_n_association_sql base_klass, klass, relation, **order_option records = klass.find_by_sql([sql, ids]) format_result(records, klass: klass, **order_option) end |
.load_groups(klass, column, keys, limit:, order: nil, condition: nil) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/top_n_loader.rb', line 18 def load_groups(klass, column, keys, limit:, order: nil, condition: nil) validate_ar_class! :klass, klass validate_limit! limit return Hash.new { [] } if keys.empty? || limit.zero? = { klass: klass, group_column: column, limit: limit, **parse_order(klass, order) } keys = keys.uniq batch_size = keys.size.fdiv(keys.size.fdiv(SQLBuilder.values_table_batch_size).ceil).ceil records = keys.each_slice(batch_size).flat_map do |batch_keys| klass.find_by_sql( SQLBuilder.top_n_group_sql( group_keys: batch_keys, condition: condition, ** ) ) end format_result records, ** end |