Class: ReportsKit::Reports::GenerateAutocompleteResults

Inherits:
Object
  • Object
show all
Defined in:
lib/reports_kit/reports/generate_autocomplete_results.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(params, properties, context_record: nil) ⇒ GenerateAutocompleteResults

Returns a new instance of GenerateAutocompleteResults.



6
7
8
9
10
11
# File 'lib/reports_kit/reports/generate_autocomplete_results.rb', line 6

def initialize(params, properties, context_record: nil)
  self.params = params
  self.filter_key = params[:key]
  self.filter = Reports::PropertiesToFilter.new(properties, context_record: context_record).perform(filter_key)
  self.context_record = context_record
end

Instance Attribute Details

#context_recordObject

Returns the value of attribute context_record.



4
5
6
# File 'lib/reports_kit/reports/generate_autocomplete_results.rb', line 4

def context_record
  @context_record
end

#filterObject

Returns the value of attribute filter.



4
5
6
# File 'lib/reports_kit/reports/generate_autocomplete_results.rb', line 4

def filter
  @filter
end

#filter_keyObject

Returns the value of attribute filter_key.



4
5
6
# File 'lib/reports_kit/reports/generate_autocomplete_results.rb', line 4

def filter_key
  @filter_key
end

#paramsObject

Returns the value of attribute params.



4
5
6
# File 'lib/reports_kit/reports/generate_autocomplete_results.rb', line 4

def params
  @params
end

Instance Method Details

#performObject

Raises:

  • (ArgumentError)


13
14
15
16
17
18
19
20
21
22
# File 'lib/reports_kit/reports/generate_autocomplete_results.rb', line 13

def perform
  raise ArgumentError.new("Could not find a model for filter_key: '#{filter_key}'") unless model
  return autocomplete_results_method.call(params: params, context_record: context_record, relation: relation) if autocomplete_results_method
  results = relation
  results = results.limit(10_000)
  results = results.map { |result| { id: result.id, text: result.to_s } }
  results = results.sort_by { |result| result[:text].downcase }
  results = filter_results(results)
  results.first(100)
end