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:
21
lib/model/game.rb
Normal file
21
lib/model/game.rb
Normal 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
3
lib/model/message.rb
Normal file
@@ -0,0 +1,3 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
Message = Struct.new(:timestamp, :username, :text)
|
||||
3
lib/model/wiki_page.rb
Normal file
3
lib/model/wiki_page.rb
Normal file
@@ -0,0 +1,3 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
WikiPage = Struct.new(:id, :path, :title, :description, :created_at, :locale, keyword_init: true)
|
||||
Reference in New Issue
Block a user