class CwCardUtils::ScryfallCmcData
Uses Singleton pattern to avoid loading the large JSON file multiple times
Handles conversion mana cost (CMC) data for Magic: The Gathering cards
def build_card_index
def build_card_index @card_index = {} @data.each do |card| @card_index[card["name"]] = card end end
def cmc_data
def cmc_data load_data_if_needed @data end
def find_card(name)
def find_card(name) load_data_if_needed @card_index[name] || @found_cards[name] ||= linear_search(name) rescue StandardError nil end
def initialize
def initialize super @data = nil @card_index = nil @found_cards = {} end
def linear_search(name)
def linear_search(name) @data.find { |card| card["name"] == name } end
def load_data_if_needed
def load_data_if_needed return if @data @data = JSON.parse(File.read(File.expand_path("../../data/scryfall.cards.cmc.json", __dir__))) build_card_index end