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