class SearchyJson::Data
Attributes
data_path[R]
primary_key[R]
scope[R]
search_fields[R]
Public Class Methods
new(data_path, primary_key:, search_fields: [])
click to toggle source
# File lib/searchy/data.rb, line 5 def initialize(data_path, primary_key:, search_fields: []) @data_path = data_path @primary_key = primary_key @search_fields = search_fields end
Public Instance Methods
call()
click to toggle source
# File lib/searchy/data.rb, line 11 def call @scope = parsed_data @scope = collected_by_primary_key @scope = sort_by_relevant scope end
Private Instance Methods
collected_by_primary_key()
click to toggle source
# File lib/searchy/data.rb, line 21 def collected_by_primary_key scope.inject({}) do |new_scope, data_item| key = data_item[primary_key] values = formatted_data(data_item) new_scope.merge(key => values) end end
formatted_data(data_item)
click to toggle source
# File lib/searchy/data.rb, line 38 def formatted_data(data_item) values = data_item.slice(*search_fields).values.flatten values.map { |item| item.delete(',').upcase.split(' ') }.flatten.uniq end
parsed_data()
click to toggle source
# File lib/searchy/data.rb, line 34 def parsed_data @parsed_data ||= JSON.parse(File.read(data_path)) end
sort_by_relevant()
click to toggle source
# File lib/searchy/data.rb, line 30 def sort_by_relevant scope.sort_by { |_primary_field, characters| characters.size }.to_h end