class EtFakeCcd::DataStoreService::InMemoryAdapter

Attributes

data[RW]
id[RW]

Public Class Methods

new() click to toggle source
# File lib/et_fake_ccd/data_store_service.rb, line 42
def initialize
  self.data = {}
  self.id = 10000000000
end

Public Instance Methods

fetch_all(jid:, ctid:, filters: {}, page: 1, sort_direction: 'asc', page_size: 25) click to toggle source
# File lib/et_fake_ccd/data_store_service.rb, line 65
def fetch_all(jid:, ctid:, filters: {}, page: 1, sort_direction: 'asc', page_size: 25)
  hash = data.dig(jid, ctid)
  return {} if hash.nil? || hash.empty?

  filtered_list = filter(hash, filters: filters)
  sorted_list = sort(filtered_list, sort_direction: sort_direction)
  paginate(sorted_list, page_size: page_size, page: page)
end
fetch_by_id(id, jid:, ctid:) click to toggle source
# File lib/et_fake_ccd/data_store_service.rb, line 61
def fetch_by_id(id, jid:, ctid:)
  data.dig(jid, ctid, id.to_s)
end
store(json, jid:, ctid:) click to toggle source
# File lib/et_fake_ccd/data_store_service.rb, line 47
def store(json, jid:, ctid:)
  self.id = id + 1
  if ctid =~ /Multiples/
    primary_case_ref = json.dig('data', 'caseIdCollection').first.dig('value', 'ethos_CaseReference')
    json['data']['multipleReference'] = next_case_reference(primary_case_ref[0,2]) if primary_case_ref && (json.dig('data', 'multipleReference').nil? || json.dig('data', 'multipleReference') == '')
  else
    json['data']['ethosCaseReference'] = next_case_reference(json.dig('data', 'feeGroupReference')[0,2].to_i) if json.dig('data', 'ethosCaseReference').nil? || json.dig('data', 'ethosCaseReference') == ''
  end
  data[jid] ||= {}
  data[jid][ctid] ||= {}
  data[jid][ctid][id.to_s] = json
  id.to_s
end
update_case_data(json, jid:, ctid:, cid:) click to toggle source
# File lib/et_fake_ccd/data_store_service.rb, line 74
def update_case_data(json, jid:, ctid:, cid:)
  existing = fetch_by_id(cid.to_s, jid: jid, ctid: ctid)
  existing['data'].merge!(json['data'])
end

Private Instance Methods

filter(list, filters:) click to toggle source
# File lib/et_fake_ccd/data_store_service.rb, line 93
def filter(list, filters:)
  return list if filters.nil? || filters.empty?

  list.select do |id, item|
    included?(item, filters: filters)
  end
end
get_attribute_by_json_path(item, key) click to toggle source
# File lib/et_fake_ccd/data_store_service.rb, line 113
def get_attribute_by_json_path(item, key)
  path = key.split('.')
  path[0] = 'data' if path[0] == 'case'
  item.dig(*path)
end
included?(item, filters:) click to toggle source
# File lib/et_fake_ccd/data_store_service.rb, line 107
def included?(item, filters:)
  filters.all? do |(key, value)|
    get_attribute_by_json_path(item, key) == value
  end
end
next_case_reference(office) click to toggle source
# File lib/et_fake_ccd/data_store_service.rb, line 89
def next_case_reference(office)
  "#{office}#{sequence_for_office(office).to_s.rjust(5, '0')}/#{Time.now.year}"
end
paginate(list, page_size:, page:) click to toggle source
# File lib/et_fake_ccd/data_store_service.rb, line 119
def paginate(list, page_size:, page:)
  arr = list.to_a[page_size * (page - 1) .. (page_size * page) - 1]
  arr.to_h
end
sequence_for_office(office_code) click to toggle source
# File lib/et_fake_ccd/data_store_service.rb, line 83
def sequence_for_office(office_code)
  @sequences ||= {}
  @sequences[office_code] ||= 0
  @sequences[office_code] += 1
end
sort(list, sort_direction:) click to toggle source
# File lib/et_fake_ccd/data_store_service.rb, line 101
def sort(list, sort_direction:)
  return list if sort_direction == 'asc'

  list.sort {|l, r| r <=> l}
end