Class: Kadmin::Finder
- Inherits:
-
Object
- Object
- Kadmin::Finder
- Includes:
- Presentable
- Defined in:
- app/components/kadmin/finder.rb,
app/components/kadmin/finder/presenter.rb
Defined Under Namespace
Instance Attribute Summary collapse
-
#filters ⇒ Array<Kadmin::Finder::Filter>
readonly
Array of filters applied to the finder.
-
#pager ⇒ Kadmin::Pager
readonly
The pager to use (if any).
-
#scope ⇒ ActiveRecord::Relation
readonly
The base relation to find items from.
Instance Method Summary collapse
- #filter(name:, column:, value:) ⇒ Object
- #filtering? ⇒ Boolean
- #find! ⇒ Object
-
#initialize(scope) ⇒ Finder
constructor
A new instance of Finder.
-
#paginate(offset: nil, size: nil) ⇒ Kadmin::Finder
Itself.
-
#results ⇒ ActiveRecord::Relation
The filtered (and optionally paginated) results.
Methods included from Presentable
Constructor Details
#initialize(scope) ⇒ Finder
Returns a new instance of Finder
19 20 21 22 23 24 25 |
# File 'app/components/kadmin/finder.rb', line 19 def initialize(scope) @scope = scope @pager = nil @filters = {} @results = nil @filtering = false end |
Instance Attribute Details
#filters ⇒ Array<Kadmin::Finder::Filter> (readonly)
Returns array of filters applied to the finder
10 11 12 |
# File 'app/components/kadmin/finder.rb', line 10 def filters @filters end |
#pager ⇒ Kadmin::Pager (readonly)
Returns the pager to use (if any)
7 8 9 |
# File 'app/components/kadmin/finder.rb', line 7 def pager @pager end |
#scope ⇒ ActiveRecord::Relation (readonly)
Returns the base relation to find items from
13 14 15 |
# File 'app/components/kadmin/finder.rb', line 13 def scope @scope end |
Instance Method Details
#filter(name:, column:, value:) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 |
# File 'app/components/kadmin/finder.rb', line 30 def filter(name:, column:, value:) if column.present? && !@filters.key?(name) @filters[name] = Kadmin::Finder::Filter.new(column, value) if value.present? @scope = @scope.where("#{@scope.table_name}.`#{column}` LIKE ?", "%#{value}%".squeeze('%')) @filtering = true end end return self end |
#filtering? ⇒ Boolean
42 43 44 |
# File 'app/components/kadmin/finder.rb', line 42 def filtering? return @filtering end |
#find! ⇒ Object
72 73 74 75 76 |
# File 'app/components/kadmin/finder.rb', line 72 def find! @total_found = 0 @results = nil return results end |
#paginate(offset: nil, size: nil) ⇒ Kadmin::Finder
Returns itself
49 50 51 52 53 54 55 56 57 58 |
# File 'app/components/kadmin/finder.rb', line 49 def paginate(offset: nil, size: nil) offset = offset.to_i size = size.to_i if size.positive? && offset >= 0 @pager = Kadmin::Pager.new(size: size, offset: offset) end return self end |
#results ⇒ ActiveRecord::Relation
Returns the filtered (and optionally paginated) results
61 62 63 64 65 66 67 68 69 70 |
# File 'app/components/kadmin/finder.rb', line 61 def results return @results ||= begin results = @scope results = @pager.paginate(results) unless @pager.nil? Rails.logger.info('Right before loading') results.load Rails.logger.info('Right after loading') results end end |