Class: Factorix::API::MODInfo

Inherits:
Data
  • Object
show all
Defined in:
lib/factorix/api/mod_info.rb,
lib/factorix/api/mod_info.rb

Overview

MOD information from MOD Portal API

Represents MOD metadata from various API endpoints:

  • /api/mods (list)

  • /api/mods/#name (Short)

  • /api/mods/#name/full (Full)

Defined Under Namespace

Classes: Detail

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name:, title:, owner:, downloads_count:, summary: nil, category: nil, score: nil, thumbnail: nil, latest_release: nil, releases: nil, **detail_fields) ⇒ MODInfo

Create MODInfo from API response hash

Parameters:

  • name (String)

    MOD name

  • title (String)

    MOD title

  • owner (String)

    owner username

  • summary (String, nil) (defaults to: nil)

    summary

  • downloads_count (Integer)

    download count

  • category (String, nil) (defaults to: nil)

    category value

  • score (Float, nil) (defaults to: nil)

    score

  • thumbnail (String, nil) (defaults to: nil)

    thumbnail path

  • latest_release (Hash, nil) (defaults to: nil)

    latest release data

  • releases (Array<Hash>, nil) (defaults to: nil)

    releases data

  • detail (Hash, nil)

    detail data



136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
# File 'lib/factorix/api/mod_info.rb', line 136

def initialize(name:, title:, owner:, downloads_count:, summary: nil, category: nil, score: nil, thumbnail: nil, latest_release: nil, releases: nil, **detail_fields)
  summary ||= ""
  category = Category.for(category || "")
  score ||= 0.0
  thumbnail = thumbnail ? build_thumbnail_uri(thumbnail) : nil
  latest_release = latest_release ? Release[**latest_release] : nil
  releases = (releases || []).filter_map {|r|
    # NOTE: begin is required because {...} blocks cannot use rescue directly
    begin
      Release[**r]
    rescue RangeError => e
      # Skip releases with invalid version numbers
      Container[:logger].warn("Skipping release #{name}@#{r[:version]}: #{e.message}")
      nil
    end
  }

  # Filter detail_fields to only include keys that Detail.new accepts
  # Exclude deprecated fields like github_path
  detail = Detail[**detail_fields.slice(*DETAIL_ALLOWED_KEYS)] if all_required_detail_fields?(detail_fields)

  super(name:, title:, owner:, summary:, downloads_count:, category:, score:, thumbnail:, latest_release:, releases:, detail:)
end

Instance Attribute Details

#categoryCategory (readonly)

Returns MOD category.

Returns:



42
43
44
# File 'lib/factorix/api/mod_info.rb', line 42

def category
  @category
end

#detailDetail? (readonly)

Returns detailed information (Full API only).

Returns:

  • (Detail, nil)

    detailed information (Full API only)



42
43
44
# File 'lib/factorix/api/mod_info.rb', line 42

def detail
  @detail
end

#downloads_countInteger (readonly)

Returns total number of downloads.

Returns:

  • (Integer)

    total number of downloads



42
43
44
# File 'lib/factorix/api/mod_info.rb', line 42

def downloads_count
  @downloads_count
end

#latest_releaseRelease? (readonly)

Returns latest release (list API without namelist).

Returns:

  • (Release, nil)

    latest release (list API without namelist)



42
43
44
# File 'lib/factorix/api/mod_info.rb', line 42

def latest_release
  @latest_release
end

#nameString (readonly)

Returns internal MOD name (unique identifier).

Returns:

  • (String)

    internal MOD name (unique identifier)



42
43
44
# File 'lib/factorix/api/mod_info.rb', line 42

def name
  @name
end

#ownerString (readonly)

Returns MOD owner username.

Returns:

  • (String)

    MOD owner username



42
43
44
# File 'lib/factorix/api/mod_info.rb', line 42

def owner
  @owner
end

#releasesArray<Release> (readonly)

Returns all releases.

Returns:

  • (Array<Release>)

    all releases



42
43
44
# File 'lib/factorix/api/mod_info.rb', line 42

def releases
  @releases
end

#scoreFloat (readonly)

Returns MOD score/rating.

Returns:

  • (Float)

    MOD score/rating



42
43
44
# File 'lib/factorix/api/mod_info.rb', line 42

def score
  @score
end

#summaryString (readonly)

Returns short description.

Returns:

  • (String)

    short description



42
43
44
# File 'lib/factorix/api/mod_info.rb', line 42

def summary
  @summary
end

#thumbnailURI::HTTPS? (readonly)

Returns thumbnail image URL.

Returns:

  • (URI::HTTPS, nil)

    thumbnail image URL



42
43
44
# File 'lib/factorix/api/mod_info.rb', line 42

def thumbnail
  @thumbnail
end

#titleString (readonly)

Returns human-readable MOD title.

Returns:

  • (String)

    human-readable MOD title



42
43
44
# File 'lib/factorix/api/mod_info.rb', line 42

def title
  @title
end