Sha256: 13a01c1696ca6a4488b06ce6f52d19f5d9d18902f13b4aa1376a833d2b39a530
Contents?: true
Size: 1.89 KB
Versions: 6
Compression:
Stored size: 1.89 KB
Contents
# frozen_string_literal: true require 'json' require 'mysql2' require 'set' require_relative 'args' # Config for a single database. class DatabaseConfig attr_reader :display_name, :description, :url_path, :joins, :saved_path, :table_aliases, :client_params def initialize(hash) @display_name = Args.fetch_non_empty_string(hash, :display_name).strip @description = Args.fetch_non_empty_string(hash, :description).strip @url_path = Args.fetch_non_empty_string(hash, :url_path).strip raise ArgumentError, 'url_path should start with a /' unless @url_path.start_with?('/') raise ArgumentError, 'url_path should not end with a /' if @url_path.length > 1 && @url_path.end_with?('/') @saved_path = Args.fetch_non_empty_string(hash, :saved_path).strip @joins = Args.fetch_optional_array(hash, :joins) || [] @joins.map do |join| next if join.is_a?(Hash) && join.keys.size == 2 && join[:label].is_a?(String) && !join[:label].strip.empty? && join[:apply].is_a?(String) && !join[:apply].strip.empty? raise ArgumentError, "invalid join #{join.to_json}" end @table_aliases = Args.fetch_optional_hash(hash, :table_aliases) || {} @table_aliases = @table_aliases.each do |table, a| raise ArgumentError, "invalid alias for table #{table} (#{a}), expected string" unless a.is_a?(String) end duplicate_aliases = @table_aliases.reject { |(_, v)| @table_aliases.values.count(v) == 1 }.to_h.values.to_set if @table_aliases.values.to_set.size < @table_aliases.values.size raise ArgumentError, "duplicate table aliases: #{duplicate_aliases.join(', ')}" end @client_params = Args.fetch_non_empty_hash(hash, :client_params) end def with_client(&block) client = Mysql2::Client.new(@client_params) result = block.call(client) client.close client = nil result ensure client&.close end end
Version data entries
6 entries across 6 versions & 1 rubygems