require 'json' require 'securerandom' require 'fileutils' # Simple file-backed store for reusable ZPL/ESC-POS label templates -- one # JSON file per label under DIR, similar in spirit to brother_ql_web's own # label repository. No per-printer targeting yet (type just says which print # path to use); that can be added once labels can target any of the five # printers via the Brother API. class LabelRepository def initialize(dir) @dir = dir FileUtils.mkdir_p(@dir) end # type: "zpl" or "escpos" def all(type: nil) Dir.glob(File.join(@dir, '*.json')).map { |f| JSON.parse(File.read(f)) } .select { |l| type.nil? || l['type'] == type } .sort_by { |l| l['name'].downcase } end def find(id) path = path_for(id) return nil unless File.exist?(path) JSON.parse(File.read(path)) end def save(name:, type:, content:) id = SecureRandom.uuid label = { 'id' => id, 'name' => name, 'type' => type, 'content' => content } File.write(path_for(id), JSON.generate(label)) label end def delete(id) File.delete(path_for(id)) if File.exist?(path_for(id)) end private def path_for(id) File.join(@dir, "#{id}.json") end end