Sha256: d5a92f97e0c469e3eee370f3fda6446a2c38af4dc16a1a34cce329d104e5c06d
Contents?: true
Size: 1.89 KB
Versions: 2
Compression:
Stored size: 1.89 KB
Contents
# frozen_string_literal: true module IronBank # A local store for exported records. # module Local def find(id) store[id] || super end def find_each return enum_for(:find_each) unless block_given? values = store.values values.any? ? values.each { |record| yield record } : super end def all store.any? ? store.values : super end def first store.any? ? store.values.first : super end def where(conditions, limit: IronBank::Actions::Query::DEFAULT_ZUORA_LIMIT) records = store.values.select do |record| conditions.all? { |field, value| record.public_send(field) == value } end records.any? ? records : super end def reset_store @store = nil end private # NOTE: Handle associations within the CSV export. E.g., when reading the # `ProductRatePlan.csv` file, we have `ProductRatePlan.Id` and # `Product.Id` fields. We want to end up with `id` and `product_id` # respectively. def underscore_header lambda do |header| parts = header.split(".") header = parts.first.casecmp?(object_name) ? parts.last : parts.join IronBank::Utils.underscore(header).to_sym end end def store @store ||= File.exist?(file_path) ? load_records : {} end def load_records CSV.foreach(file_path, **csv_options).with_object({}) do |row, store| store[row[:id]] = new(row.to_h.compact) end end def csv_options { headers: true, header_converters: [underscore_header], converters: csv_converters } end def csv_converters %i[ decimal_integer decimal_float ] end def file_path File.expand_path( "#{object_name}.csv", IronBank.configuration.export_directory ) end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
iron_bank-5.0.1 | lib/iron_bank/local.rb |
iron_bank-5.0.0 | lib/iron_bank/local.rb |