Sha256: 22b863c29f60bc3d911d98a6af9372afeafd6eda1f2973422d6754abb4b6d6d9
Contents?: true
Size: 1.04 KB
Versions: 2
Compression:
Stored size: 1.04 KB
Contents
module Services class BaseFinder < Services::Base disable_call_logging def call(ids = [], conditions = {}) ids, conditions = Array(ids), conditions.symbolize_keys special_conditions = conditions.extract!(:order, :limit, :page, :per_page) scope = object_class .select("DISTINCT #{object_class.table_name}.id") .order("#{object_class.table_name}.id") scope = scope.where(id: ids) unless ids.empty? scope = process(scope, conditions) scope = object_class.where(id: scope) special_conditions.each do |k, v| case k when :order order = if v == 'random' 'RANDOM()' else "#{object_class.table_name}.#{v}" end scope = scope.order(order) when :limit scope = scope.limit(v) when :page scope = scope.page(v) when :per_page scope = scope.per(v) else raise ArgumentError, "Unexpected special condition: #{k}" end end scope end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
services-2.0.1 | lib/services/base_finder.rb |
services-2.0.0 | lib/services/base_finder.rb |