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