Introduce model/ and repository/ structure under lib/

Models: Message, WikiPage, Game (typed structs instead of raw hashes)
Repositories: MessageBoard, OnlineUsers, WikiClient, CatalogClient
bbs.rb uses attribute access (page.title, game.play_path, …) throughout

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-30 09:37:57 +02:00
parent 75d1063572
commit 6856b073f6
8 changed files with 68 additions and 38 deletions

21
lib/model/game.rb Normal file
View File

@@ -0,0 +1,21 @@
# frozen_string_literal: true
class Game
attr_reader :title, :platform, :author, :desc,
:play_path, :download_path, :source_path, :docs_path,
:release_count
def initialize(entry)
sw = entry['software'] || {}
latest = entry['latestRelease'] || {}
@title = sw['title'].to_s
@platform = sw['platform'].to_s
@author = sw['author'].to_s
@desc = sw['desc'].to_s
@play_path = latest['htmlFolderPath'].to_s
@download_path = latest['cartridgePath'].to_s
@source_path = latest['sourcePath'].to_s
@docs_path = latest['docsFolderPath'].to_s
@release_count = (entry['releases'] || []).length
end
end

3
lib/model/message.rb Normal file
View File

@@ -0,0 +1,3 @@
# frozen_string_literal: true
Message = Struct.new(:timestamp, :username, :text)

3
lib/model/wiki_page.rb Normal file
View File

@@ -0,0 +1,3 @@
# frozen_string_literal: true
WikiPage = Struct.new(:id, :path, :title, :description, :created_at, :locale, keyword_init: true)