Class: Factorix::API::MODPortalAPI
- Inherits:
-
Object
- Object
- Factorix::API::MODPortalAPI
- Defined in:
- lib/factorix/api/mod_portal_api.rb
Overview
API client for retrieving MOD list and details without authentication
Corresponds to: wiki.factorio.com/Mod_portal_API
Instance Method Summary collapse
-
#get_mod(name) ⇒ Hash{Symbol => untyped}
Retrieve basic information for a specific MOD.
-
#get_mod_full(name) ⇒ Hash{Symbol => untyped}
Retrieve detailed information for a specific MOD.
-
#get_mods(*namelist, hide_deprecated: nil, page: nil, page_size: nil, sort: nil, sort_order: nil, version: nil) ⇒ Hash{Symbol => untyped}
Retrieve MOD list with optional filters.
-
#on_mod_changed(event) ⇒ void
Event handler for mod.changed event Invalidates cached MOD information when a MOD is modified on the portal.
Instance Method Details
#get_mod(name) ⇒ Hash{Symbol => untyped}
Retrieve basic information for a specific MOD
54 55 56 57 58 59 60 61 |
# File 'lib/factorix/api/mod_portal_api.rb', line 54 def get_mod(name) logger.debug "Fetching MOD: name=#{name}" encoded_name = ERB::Util.url_encode(name) uri = build_uri("/api/mods/#{encoded_name}") fetch_with_cache(uri) rescue HTTPNotFoundError raise MODNotOnPortalError, "MOD '#{name}' not found on portal" end |
#get_mod_full(name) ⇒ Hash{Symbol => untyped}
Retrieve detailed information for a specific MOD
68 69 70 71 72 73 74 75 |
# File 'lib/factorix/api/mod_portal_api.rb', line 68 def get_mod_full(name) logger.debug "Fetching full MOD info: name=#{name}" encoded_name = ERB::Util.url_encode(name) uri = build_uri("/api/mods/#{encoded_name}/full") fetch_with_cache(uri) rescue HTTPNotFoundError raise MODNotOnPortalError, "MOD '#{name}' not found on portal" end |
#get_mods(*namelist, hide_deprecated: nil, page: nil, page_size: nil, sort: nil, sort_order: nil, version: nil) ⇒ Hash{Symbol => untyped}
Retrieve MOD list with optional filters
35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/factorix/api/mod_portal_api.rb', line 35 def get_mods(*namelist, hide_deprecated: nil, page: nil, page_size: nil, sort: nil, sort_order: nil, version: nil) validate_page_size!(page_size) if page_size validate_sort!(sort) if sort validate_sort_order!(sort_order) if sort_order validate_version!(version) if version params = {namelist: namelist.sort, hide_deprecated:, page:, page_size:, sort:, sort_order:, version:} params.reject! {|_k, v| v.is_a?(Array) && v.empty? } params.compact! logger.debug "Fetching MOD list: params=#{params.inspect}" uri = build_uri("/api/mods", **params) fetch_with_cache(uri) end |
#on_mod_changed(event) ⇒ void
This method returns an undefined value.
Event handler for mod.changed event Invalidates cached MOD information when a MOD is modified on the portal
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/factorix/api/mod_portal_api.rb', line 82 def on_mod_changed(event) mod_name = event[:mod] encoded_name = ERB::Util.url_encode(mod_name) # Invalidate get_mod cache mod_uri = build_uri("/api/mods/#{encoded_name}") mod_cache_key = mod_uri.to_s cache.with_lock(mod_cache_key) { cache.delete(mod_cache_key) } # Invalidate get_mod_full cache full_uri = build_uri("/api/mods/#{encoded_name}/full") full_cache_key = full_uri.to_s cache.with_lock(full_cache_key) { cache.delete(full_cache_key) } logger.debug("Invalidated cache for MOD", mod: mod_name) end |