nexus_mods 0.1.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -0
- data/lib/nexus_mods/api/api_limits.rb +64 -0
- data/lib/nexus_mods/api/category.rb +54 -0
- data/lib/nexus_mods/api/game.rb +106 -0
- data/lib/nexus_mods/api/mod.rb +141 -0
- data/lib/nexus_mods/api/mod_file.rb +116 -0
- data/lib/nexus_mods/api/user.rb +55 -0
- data/lib/nexus_mods/api_client.rb +182 -0
- data/lib/nexus_mods/cacheable_api.rb +52 -0
- data/lib/nexus_mods/cacheable_with_expiry.rb +70 -0
- data/lib/nexus_mods/core_extensions/cacheable/cache_adapters/persistent_json_adapter.rb +62 -0
- data/lib/nexus_mods/core_extensions/cacheable/method_generator.rb +62 -0
- data/lib/nexus_mods/file_cache.rb +71 -0
- data/lib/nexus_mods/version.rb +1 -1
- data/lib/nexus_mods.rb +32 -86
- data/spec/nexus_mods_test/factories/games.rb +135 -0
- data/spec/nexus_mods_test/factories/mod_files.rb +113 -0
- data/spec/nexus_mods_test/factories/mods.rb +144 -0
- data/spec/nexus_mods_test/helpers.rb +39 -14
- data/spec/nexus_mods_test/scenarios/nexus_mods/{api_limits_spec.rb → api/api_limits_spec.rb} +10 -3
- data/spec/nexus_mods_test/scenarios/nexus_mods/api/game_spec.rb +93 -0
- data/spec/nexus_mods_test/scenarios/nexus_mods/api/mod_file_spec.rb +73 -0
- data/spec/nexus_mods_test/scenarios/nexus_mods/api/mod_spec.rb +62 -0
- data/spec/nexus_mods_test/scenarios/nexus_mods_caching_spec.rb +88 -0
- metadata +37 -13
- data/lib/nexus_mods/api_limits.rb +0 -44
- data/lib/nexus_mods/category.rb +0 -37
- data/lib/nexus_mods/game.rb +0 -78
- data/lib/nexus_mods/mod.rb +0 -106
- data/lib/nexus_mods/mod_file.rb +0 -86
- data/lib/nexus_mods/user.rb +0 -37
- data/spec/nexus_mods_test/scenarios/nexus_mods/game_spec.rb +0 -180
- data/spec/nexus_mods_test/scenarios/nexus_mods/mod_file_spec.rb +0 -140
- data/spec/nexus_mods_test/scenarios/nexus_mods/mod_spec.rb +0 -185
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 7858789972e8674c6ba24c53d36e4af87b09b8636e84faced240ff0edd1eb3fa
         | 
| 4 | 
            +
              data.tar.gz: 29df7fc4849e885e6a9aa705d1ae4868215e1181bdff8814d806787ff948790d
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 522c72b5d4cabff4d57609f9c593c5e75345c675343397e7e75c0bc10c7b29c8df72c26d7fa51bc73265bb8f0c025d3b929ef5a1810711928f416b851bedfef9
         | 
| 7 | 
            +
              data.tar.gz: 17b804dfc30795f57c5e862a4990b39aec762f0b3058513956204443e2ebfe59df5285ceda0634a6644cdcd8e45619a8248964bf3028b2aa96852cbc4dd69f9f
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,3 +1,15 @@ | |
| 1 | 
            +
            # [v0.3.0](https://github.com/Muriel-Salvan/nexus_mods/compare/v0.2.0...v0.3.0) (2023-04-10 09:13:43)
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            ### Features
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            * [[Feature] Implement caching of API queries with configurable expiry times](https://github.com/Muriel-Salvan/nexus_mods/commit/7f74e25d046adbcec394ce33a3802ed9e91f3a52)
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            # [v0.2.0](https://github.com/Muriel-Salvan/nexus_mods/compare/v0.1.1...v0.2.0) (2023-04-10 08:45:44)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            ### Features
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            * [[Feature] Make objects API comparable correctly](https://github.com/Muriel-Salvan/nexus_mods/commit/ff219c7050aa8421095c666fe2394c621f317e43)
         | 
| 12 | 
            +
             | 
| 1 13 | 
             
            # [v0.1.1](https://github.com/Muriel-Salvan/nexus_mods/compare/v0.1.0...v0.1.1) (2023-03-27 19:57:47)
         | 
| 2 14 |  | 
| 3 15 | 
             
            ### Patches
         | 
| @@ -0,0 +1,64 @@ | |
| 1 | 
            +
            class NexusMods
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              module Api
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                # Object giving the NexusMods API limits
         | 
| 6 | 
            +
                class ApiLimits
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  attr_reader(
         | 
| 9 | 
            +
                    *%i[
         | 
| 10 | 
            +
                      daily_limit
         | 
| 11 | 
            +
                      daily_remaining
         | 
| 12 | 
            +
                      daily_reset
         | 
| 13 | 
            +
                      hourly_limit
         | 
| 14 | 
            +
                      hourly_remaining
         | 
| 15 | 
            +
                      hourly_reset
         | 
| 16 | 
            +
                    ]
         | 
| 17 | 
            +
                  )
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  # Constructor
         | 
| 20 | 
            +
                  #
         | 
| 21 | 
            +
                  # Parameters::
         | 
| 22 | 
            +
                  # * *daily_limit* (Integer): The daily limit
         | 
| 23 | 
            +
                  # * *daily_remaining* (Integer): The daily remaining
         | 
| 24 | 
            +
                  # * *daily_reset* (Integer): The daily reset time
         | 
| 25 | 
            +
                  # * *hourly_limit* (Integer): The hourly limit
         | 
| 26 | 
            +
                  # * *hourly_remaining* (Integer): The hourly remaining
         | 
| 27 | 
            +
                  # * *hourly_reset* (Integer): The hourly reset time
         | 
| 28 | 
            +
                  def initialize(
         | 
| 29 | 
            +
                    daily_limit:,
         | 
| 30 | 
            +
                    daily_remaining:,
         | 
| 31 | 
            +
                    daily_reset:,
         | 
| 32 | 
            +
                    hourly_limit:,
         | 
| 33 | 
            +
                    hourly_remaining:,
         | 
| 34 | 
            +
                    hourly_reset:
         | 
| 35 | 
            +
                  )
         | 
| 36 | 
            +
                    @daily_limit = daily_limit
         | 
| 37 | 
            +
                    @daily_remaining = daily_remaining
         | 
| 38 | 
            +
                    @daily_reset = daily_reset
         | 
| 39 | 
            +
                    @hourly_limit = hourly_limit
         | 
| 40 | 
            +
                    @hourly_remaining = hourly_remaining
         | 
| 41 | 
            +
                    @hourly_reset = hourly_reset
         | 
| 42 | 
            +
                  end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                  # Equality operator
         | 
| 45 | 
            +
                  #
         | 
| 46 | 
            +
                  # Parameters::
         | 
| 47 | 
            +
                  # * *other* (Object): Other object to compare with
         | 
| 48 | 
            +
                  # Result::
         | 
| 49 | 
            +
                  # * Boolean: Are objects equal?
         | 
| 50 | 
            +
                  def ==(other)
         | 
| 51 | 
            +
                    other.is_a?(ApiLimits) &&
         | 
| 52 | 
            +
                      @daily_limit == other.daily_limit &&
         | 
| 53 | 
            +
                      @daily_remaining == other.daily_remaining &&
         | 
| 54 | 
            +
                      @daily_reset == other.daily_reset &&
         | 
| 55 | 
            +
                      @hourly_limit == other.hourly_limit &&
         | 
| 56 | 
            +
                      @hourly_remaining == other.hourly_remaining &&
         | 
| 57 | 
            +
                      @hourly_reset == other.hourly_reset
         | 
| 58 | 
            +
                  end
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
              end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
            end
         | 
| @@ -0,0 +1,54 @@ | |
| 1 | 
            +
            class NexusMods
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              module Api
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                # Categories defined for a game in NexusMods
         | 
| 6 | 
            +
                class Category
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  attr_reader(
         | 
| 9 | 
            +
                    *%i[
         | 
| 10 | 
            +
                      id
         | 
| 11 | 
            +
                      name
         | 
| 12 | 
            +
                    ]
         | 
| 13 | 
            +
                  )
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  attr_accessor(
         | 
| 16 | 
            +
                    *%i[
         | 
| 17 | 
            +
                      parent_category
         | 
| 18 | 
            +
                    ]
         | 
| 19 | 
            +
                  )
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  # Constructor
         | 
| 22 | 
            +
                  #
         | 
| 23 | 
            +
                  # Parameters::
         | 
| 24 | 
            +
                  # *id* (Integer): The category id
         | 
| 25 | 
            +
                  # *name* (String): The category id
         | 
| 26 | 
            +
                  # *parent_category* (Category or nil): The parent category, or nil if none [default: nil]
         | 
| 27 | 
            +
                  def initialize(
         | 
| 28 | 
            +
                    id:,
         | 
| 29 | 
            +
                    name:,
         | 
| 30 | 
            +
                    parent_category: nil
         | 
| 31 | 
            +
                  )
         | 
| 32 | 
            +
                    @id = id
         | 
| 33 | 
            +
                    @name = name
         | 
| 34 | 
            +
                    @parent_category = parent_category
         | 
| 35 | 
            +
                  end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                  # Equality operator
         | 
| 38 | 
            +
                  #
         | 
| 39 | 
            +
                  # Parameters::
         | 
| 40 | 
            +
                  # * *other* (Object): Other object to compare with
         | 
| 41 | 
            +
                  # Result::
         | 
| 42 | 
            +
                  # * Boolean: Are objects equal?
         | 
| 43 | 
            +
                  def ==(other)
         | 
| 44 | 
            +
                    other.is_a?(Category) &&
         | 
| 45 | 
            +
                      @id == other.id &&
         | 
| 46 | 
            +
                      @name == other.name &&
         | 
| 47 | 
            +
                      @parent_category == other.parent_category
         | 
| 48 | 
            +
                  end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
              end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
            end
         | 
| @@ -0,0 +1,106 @@ | |
| 1 | 
            +
            class NexusMods
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              module Api
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                # A NexusMods game.
         | 
| 6 | 
            +
                # Attributes info can be taken from there:
         | 
| 7 | 
            +
                # * https://github.com/Nexus-Mods/node-nexus-api/blob/master/docs/interfaces/_types_.igameinfo.md
         | 
| 8 | 
            +
                class Game
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  attr_reader(
         | 
| 11 | 
            +
                    *%i[
         | 
| 12 | 
            +
                      id
         | 
| 13 | 
            +
                      name
         | 
| 14 | 
            +
                      forum_url
         | 
| 15 | 
            +
                      nexusmods_url
         | 
| 16 | 
            +
                      genre
         | 
| 17 | 
            +
                      domain_name
         | 
| 18 | 
            +
                      approved_date
         | 
| 19 | 
            +
                      files_count
         | 
| 20 | 
            +
                      files_views
         | 
| 21 | 
            +
                      files_endorsements
         | 
| 22 | 
            +
                      downloads_count
         | 
| 23 | 
            +
                      authors_count
         | 
| 24 | 
            +
                      mods_count
         | 
| 25 | 
            +
                      categories
         | 
| 26 | 
            +
                    ]
         | 
| 27 | 
            +
                  )
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  # Constructor
         | 
| 30 | 
            +
                  #
         | 
| 31 | 
            +
                  # Parameters::
         | 
| 32 | 
            +
                  # * *id* (Integer): The game's id
         | 
| 33 | 
            +
                  # * *name* (String): The game's name
         | 
| 34 | 
            +
                  # * *forum_url* (String): The game's forum's URL
         | 
| 35 | 
            +
                  # * *nexusmods_url* (String): The game's NexusMods' URL
         | 
| 36 | 
            +
                  # * *genre* (String): The game's genre
         | 
| 37 | 
            +
                  # * *domain_name* (String): The game's domain's name
         | 
| 38 | 
            +
                  # * *approved_date* (Time): The game's approved date (time when the game was added)
         | 
| 39 | 
            +
                  # * *files_count* (Integer): The game's files' count [default: 0]
         | 
| 40 | 
            +
                  # * *files_views* (Integer): The game's files' views [default: 0]
         | 
| 41 | 
            +
                  # * *files_endorsements* (Integer): The game's files' endorsements [default: 0]
         | 
| 42 | 
            +
                  # * *downloads_count* (Integer): The game's downloads' count [default: 0]
         | 
| 43 | 
            +
                  # * *authors_count* (Integer): The game's authors's count [default: 0]
         | 
| 44 | 
            +
                  # * *mods_count* (Integer): The game's mods' count [default: 0]
         | 
| 45 | 
            +
                  # * *categories* (Array<Category>): The list of game's categories [default: []]
         | 
| 46 | 
            +
                  def initialize(
         | 
| 47 | 
            +
                    id:,
         | 
| 48 | 
            +
                    name:,
         | 
| 49 | 
            +
                    forum_url:,
         | 
| 50 | 
            +
                    nexusmods_url:,
         | 
| 51 | 
            +
                    genre:,
         | 
| 52 | 
            +
                    domain_name:,
         | 
| 53 | 
            +
                    approved_date:,
         | 
| 54 | 
            +
                    files_count: 0,
         | 
| 55 | 
            +
                    files_views: 0,
         | 
| 56 | 
            +
                    files_endorsements: 0,
         | 
| 57 | 
            +
                    downloads_count: 0,
         | 
| 58 | 
            +
                    authors_count: 0,
         | 
| 59 | 
            +
                    mods_count: 0,
         | 
| 60 | 
            +
                    categories: []
         | 
| 61 | 
            +
                  )
         | 
| 62 | 
            +
                    @id = id
         | 
| 63 | 
            +
                    @name = name
         | 
| 64 | 
            +
                    @forum_url = forum_url
         | 
| 65 | 
            +
                    @nexusmods_url = nexusmods_url
         | 
| 66 | 
            +
                    @genre = genre
         | 
| 67 | 
            +
                    @domain_name = domain_name
         | 
| 68 | 
            +
                    @approved_date = approved_date
         | 
| 69 | 
            +
                    @files_count = files_count
         | 
| 70 | 
            +
                    @files_views = files_views
         | 
| 71 | 
            +
                    @files_endorsements = files_endorsements
         | 
| 72 | 
            +
                    @downloads_count = downloads_count
         | 
| 73 | 
            +
                    @authors_count = authors_count
         | 
| 74 | 
            +
                    @mods_count = mods_count
         | 
| 75 | 
            +
                    @categories = categories
         | 
| 76 | 
            +
                  end
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                  # Equality operator
         | 
| 79 | 
            +
                  #
         | 
| 80 | 
            +
                  # Parameters::
         | 
| 81 | 
            +
                  # * *other* (Object): Other object to compare with
         | 
| 82 | 
            +
                  # Result::
         | 
| 83 | 
            +
                  # * Boolean: Are objects equal?
         | 
| 84 | 
            +
                  def ==(other)
         | 
| 85 | 
            +
                    other.is_a?(Game) &&
         | 
| 86 | 
            +
                      @id == other.id &&
         | 
| 87 | 
            +
                      @name == other.name &&
         | 
| 88 | 
            +
                      @forum_url == other.forum_url &&
         | 
| 89 | 
            +
                      @nexusmods_url == other.nexusmods_url &&
         | 
| 90 | 
            +
                      @genre == other.genre &&
         | 
| 91 | 
            +
                      @domain_name == other.domain_name &&
         | 
| 92 | 
            +
                      @approved_date == other.approved_date &&
         | 
| 93 | 
            +
                      @files_count == other.files_count &&
         | 
| 94 | 
            +
                      @files_views == other.files_views &&
         | 
| 95 | 
            +
                      @files_endorsements == other.files_endorsements &&
         | 
| 96 | 
            +
                      @downloads_count == other.downloads_count &&
         | 
| 97 | 
            +
                      @authors_count == other.authors_count &&
         | 
| 98 | 
            +
                      @mods_count == other.mods_count &&
         | 
| 99 | 
            +
                      @categories == other.categories
         | 
| 100 | 
            +
                  end
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                end
         | 
| 103 | 
            +
             | 
| 104 | 
            +
              end
         | 
| 105 | 
            +
             | 
| 106 | 
            +
            end
         | 
| @@ -0,0 +1,141 @@ | |
| 1 | 
            +
            class NexusMods
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              module Api
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                # A NexusMods mod.
         | 
| 6 | 
            +
                # Attributes info can be taken from there:
         | 
| 7 | 
            +
                # * https://github.com/Nexus-Mods/node-nexus-api/blob/master/docs/interfaces/_types_.imodinfo.md
         | 
| 8 | 
            +
                class Mod
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  attr_reader(
         | 
| 11 | 
            +
                    *%i[
         | 
| 12 | 
            +
                      uid
         | 
| 13 | 
            +
                      mod_id
         | 
| 14 | 
            +
                      game_id
         | 
| 15 | 
            +
                      allow_rating
         | 
| 16 | 
            +
                      domain_name
         | 
| 17 | 
            +
                      category_id
         | 
| 18 | 
            +
                      version
         | 
| 19 | 
            +
                      created_time
         | 
| 20 | 
            +
                      updated_time
         | 
| 21 | 
            +
                      author
         | 
| 22 | 
            +
                      contains_adult_content
         | 
| 23 | 
            +
                      status
         | 
| 24 | 
            +
                      available
         | 
| 25 | 
            +
                      uploader
         | 
| 26 | 
            +
                      name
         | 
| 27 | 
            +
                      summary
         | 
| 28 | 
            +
                      description
         | 
| 29 | 
            +
                      picture_url
         | 
| 30 | 
            +
                      downloads_count
         | 
| 31 | 
            +
                      unique_downloads_count
         | 
| 32 | 
            +
                      endorsements_count
         | 
| 33 | 
            +
                    ]
         | 
| 34 | 
            +
                  )
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  # Constructor
         | 
| 37 | 
            +
                  #
         | 
| 38 | 
            +
                  # Parameters::
         | 
| 39 | 
            +
                  # * *uid* (Integer): The mod's uid
         | 
| 40 | 
            +
                  # * *mod_id* (Integer): The mod's id
         | 
| 41 | 
            +
                  # * *game_id* (Integer): The mod's game id
         | 
| 42 | 
            +
                  # * *allow_rating* (Boolean): Does this mod allow endorsements?
         | 
| 43 | 
            +
                  # * *domain_name* (String): The mod's domain name
         | 
| 44 | 
            +
                  # * *category_id* (String): The mod's category id
         | 
| 45 | 
            +
                  # * *version* (String): The mod's version
         | 
| 46 | 
            +
                  # * *created_time* (Time): The mod's creation time
         | 
| 47 | 
            +
                  # * *updated_time* (Time): The mod's update time
         | 
| 48 | 
            +
                  # * *author* (String): The mod's author
         | 
| 49 | 
            +
                  # * *contains_adult_content* (Boolean): Does this mod contain adult content?
         | 
| 50 | 
            +
                  # * *status* (String): The mod's status
         | 
| 51 | 
            +
                  # * *available* (Boolean): Is the mod publicly available?
         | 
| 52 | 
            +
                  # * *uploader* (User): The mod's uploader information
         | 
| 53 | 
            +
                  # * *name* (String or nil): The mod's name, or nil if under moderation [default: nil]
         | 
| 54 | 
            +
                  # * *summary* (String or nil): The mod's summary, or nil if none [default: nil]
         | 
| 55 | 
            +
                  # * *description* (String or nil): The mod's description, or nil if none [default: nil]
         | 
| 56 | 
            +
                  # * *picture_url* (String): The mod's picture_url [default: nil]
         | 
| 57 | 
            +
                  # * *downloads_count* (Integer): The mod's downloads' count [default: 0]
         | 
| 58 | 
            +
                  # * *unique_downloads_count* (Integer): The mod's unique downloads' count [default: 0]
         | 
| 59 | 
            +
                  # * *endorsements_count* (Integer): The mod's endorsements' count [default: 0]
         | 
| 60 | 
            +
                  def initialize(
         | 
| 61 | 
            +
                    uid:,
         | 
| 62 | 
            +
                    mod_id:,
         | 
| 63 | 
            +
                    game_id:,
         | 
| 64 | 
            +
                    allow_rating:,
         | 
| 65 | 
            +
                    domain_name:,
         | 
| 66 | 
            +
                    category_id:,
         | 
| 67 | 
            +
                    version:,
         | 
| 68 | 
            +
                    created_time:,
         | 
| 69 | 
            +
                    updated_time:,
         | 
| 70 | 
            +
                    author:,
         | 
| 71 | 
            +
                    contains_adult_content:,
         | 
| 72 | 
            +
                    status:,
         | 
| 73 | 
            +
                    available:,
         | 
| 74 | 
            +
                    uploader:,
         | 
| 75 | 
            +
                    name: nil,
         | 
| 76 | 
            +
                    summary: nil,
         | 
| 77 | 
            +
                    description: nil,
         | 
| 78 | 
            +
                    picture_url: nil,
         | 
| 79 | 
            +
                    downloads_count: 0,
         | 
| 80 | 
            +
                    unique_downloads_count: 0,
         | 
| 81 | 
            +
                    endorsements_count: 0
         | 
| 82 | 
            +
                  )
         | 
| 83 | 
            +
                    @uid = uid
         | 
| 84 | 
            +
                    @mod_id = mod_id
         | 
| 85 | 
            +
                    @game_id = game_id
         | 
| 86 | 
            +
                    @allow_rating = allow_rating
         | 
| 87 | 
            +
                    @domain_name = domain_name
         | 
| 88 | 
            +
                    @category_id = category_id
         | 
| 89 | 
            +
                    @version = version
         | 
| 90 | 
            +
                    @created_time = created_time
         | 
| 91 | 
            +
                    @updated_time = updated_time
         | 
| 92 | 
            +
                    @author = author
         | 
| 93 | 
            +
                    @contains_adult_content = contains_adult_content
         | 
| 94 | 
            +
                    @status = status
         | 
| 95 | 
            +
                    @available = available
         | 
| 96 | 
            +
                    @uploader = uploader
         | 
| 97 | 
            +
                    @name = name
         | 
| 98 | 
            +
                    @summary = summary
         | 
| 99 | 
            +
                    @description = description
         | 
| 100 | 
            +
                    @picture_url = picture_url
         | 
| 101 | 
            +
                    @downloads_count = downloads_count
         | 
| 102 | 
            +
                    @unique_downloads_count = unique_downloads_count
         | 
| 103 | 
            +
                    @endorsements_count = endorsements_count
         | 
| 104 | 
            +
                  end
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                  # Equality operator
         | 
| 107 | 
            +
                  #
         | 
| 108 | 
            +
                  # Parameters::
         | 
| 109 | 
            +
                  # * *other* (Object): Other object to compare with
         | 
| 110 | 
            +
                  # Result::
         | 
| 111 | 
            +
                  # * Boolean: Are objects equal?
         | 
| 112 | 
            +
                  def ==(other)
         | 
| 113 | 
            +
                    other.is_a?(Mod) &&
         | 
| 114 | 
            +
                      @uid == other.uid &&
         | 
| 115 | 
            +
                      @mod_id == other.mod_id &&
         | 
| 116 | 
            +
                      @game_id == other.game_id &&
         | 
| 117 | 
            +
                      @allow_rating == other.allow_rating &&
         | 
| 118 | 
            +
                      @domain_name == other.domain_name &&
         | 
| 119 | 
            +
                      @category_id == other.category_id &&
         | 
| 120 | 
            +
                      @version == other.version &&
         | 
| 121 | 
            +
                      @created_time == other.created_time &&
         | 
| 122 | 
            +
                      @updated_time == other.updated_time &&
         | 
| 123 | 
            +
                      @author == other.author &&
         | 
| 124 | 
            +
                      @contains_adult_content == other.contains_adult_content &&
         | 
| 125 | 
            +
                      @status == other.status &&
         | 
| 126 | 
            +
                      @available == other.available &&
         | 
| 127 | 
            +
                      @uploader == other.uploader &&
         | 
| 128 | 
            +
                      @name == other.name &&
         | 
| 129 | 
            +
                      @summary == other.summary &&
         | 
| 130 | 
            +
                      @description == other.description &&
         | 
| 131 | 
            +
                      @picture_url == other.picture_url &&
         | 
| 132 | 
            +
                      @downloads_count == other.downloads_count &&
         | 
| 133 | 
            +
                      @unique_downloads_count == other.unique_downloads_count &&
         | 
| 134 | 
            +
                      @endorsements_count == other.endorsements_count
         | 
| 135 | 
            +
                  end
         | 
| 136 | 
            +
             | 
| 137 | 
            +
                end
         | 
| 138 | 
            +
             | 
| 139 | 
            +
              end
         | 
| 140 | 
            +
             | 
| 141 | 
            +
            end
         | 
| @@ -0,0 +1,116 @@ | |
| 1 | 
            +
            class NexusMods
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              module Api
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                # A NexusMods file.
         | 
| 6 | 
            +
                # Attributes info can be taken from there:
         | 
| 7 | 
            +
                # * https://github.com/Nexus-Mods/node-nexus-api/blob/master/docs/interfaces/_types_.ifileinfo.md
         | 
| 8 | 
            +
                class ModFile
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  attr_reader(
         | 
| 11 | 
            +
                    *%i[
         | 
| 12 | 
            +
                      ids
         | 
| 13 | 
            +
                      uid
         | 
| 14 | 
            +
                      id
         | 
| 15 | 
            +
                      name
         | 
| 16 | 
            +
                      version
         | 
| 17 | 
            +
                      category_id
         | 
| 18 | 
            +
                      category_name
         | 
| 19 | 
            +
                      is_primary
         | 
| 20 | 
            +
                      size
         | 
| 21 | 
            +
                      file_name
         | 
| 22 | 
            +
                      uploaded_time
         | 
| 23 | 
            +
                      mod_version
         | 
| 24 | 
            +
                      external_virus_scan_url
         | 
| 25 | 
            +
                      description
         | 
| 26 | 
            +
                      changelog_html
         | 
| 27 | 
            +
                      content_preview_url
         | 
| 28 | 
            +
                    ]
         | 
| 29 | 
            +
                  )
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                  # Constructor
         | 
| 32 | 
            +
                  #
         | 
| 33 | 
            +
                  # Parameters::
         | 
| 34 | 
            +
                  # * *ids* (Array<Integer>): The file's list of IDs
         | 
| 35 | 
            +
                  # * *uid* (Integer): The file's UID
         | 
| 36 | 
            +
                  # * *id* (Integer): The file's main ID
         | 
| 37 | 
            +
                  # * *name* (String): The file's name
         | 
| 38 | 
            +
                  # * *version* (String): The file's version
         | 
| 39 | 
            +
                  # * *category_id* (Symbol): The file's category's ID
         | 
| 40 | 
            +
                  # * *category_name* (String): The file's category_name
         | 
| 41 | 
            +
                  # * *is_primary* (String): Is this file the primary download one?
         | 
| 42 | 
            +
                  # * *size* (Integer): The file's size (in bytes)
         | 
| 43 | 
            +
                  # * *file_name* (String): The file's exact file name
         | 
| 44 | 
            +
                  # * *uploaded_time* (Time): The file's uploaded time
         | 
| 45 | 
            +
                  # * *mod_version* (String): The file's mod version
         | 
| 46 | 
            +
                  # * *external_virus_scan_url* (String): The URL of virus scan for this file
         | 
| 47 | 
            +
                  # * *description* (String): The file's description
         | 
| 48 | 
            +
                  # * *changelog_html* (String): The file's change log in HTML
         | 
| 49 | 
            +
                  # * *content_preview_url* (String): URL to a JSON that gives info on the file's content
         | 
| 50 | 
            +
                  def initialize(
         | 
| 51 | 
            +
                    ids:,
         | 
| 52 | 
            +
                    uid:,
         | 
| 53 | 
            +
                    id:,
         | 
| 54 | 
            +
                    name:,
         | 
| 55 | 
            +
                    version:,
         | 
| 56 | 
            +
                    category_id:,
         | 
| 57 | 
            +
                    category_name:,
         | 
| 58 | 
            +
                    is_primary:,
         | 
| 59 | 
            +
                    size:,
         | 
| 60 | 
            +
                    file_name:,
         | 
| 61 | 
            +
                    uploaded_time:,
         | 
| 62 | 
            +
                    mod_version:,
         | 
| 63 | 
            +
                    external_virus_scan_url:,
         | 
| 64 | 
            +
                    description:,
         | 
| 65 | 
            +
                    changelog_html:,
         | 
| 66 | 
            +
                    content_preview_url:
         | 
| 67 | 
            +
                  )
         | 
| 68 | 
            +
                    @ids = ids
         | 
| 69 | 
            +
                    @uid = uid
         | 
| 70 | 
            +
                    @id = id
         | 
| 71 | 
            +
                    @name = name
         | 
| 72 | 
            +
                    @version = version
         | 
| 73 | 
            +
                    @category_id = category_id
         | 
| 74 | 
            +
                    @category_name = category_name
         | 
| 75 | 
            +
                    @is_primary = is_primary
         | 
| 76 | 
            +
                    @size = size
         | 
| 77 | 
            +
                    @file_name = file_name
         | 
| 78 | 
            +
                    @uploaded_time = uploaded_time
         | 
| 79 | 
            +
                    @mod_version = mod_version
         | 
| 80 | 
            +
                    @external_virus_scan_url = external_virus_scan_url
         | 
| 81 | 
            +
                    @description = description
         | 
| 82 | 
            +
                    @changelog_html = changelog_html
         | 
| 83 | 
            +
                    @content_preview_url = content_preview_url
         | 
| 84 | 
            +
                  end
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                  # Equality operator
         | 
| 87 | 
            +
                  #
         | 
| 88 | 
            +
                  # Parameters::
         | 
| 89 | 
            +
                  # * *other* (Object): Other object to compare with
         | 
| 90 | 
            +
                  # Result::
         | 
| 91 | 
            +
                  # * Boolean: Are objects equal?
         | 
| 92 | 
            +
                  def ==(other)
         | 
| 93 | 
            +
                    other.is_a?(ModFile) &&
         | 
| 94 | 
            +
                      @ids == other.ids &&
         | 
| 95 | 
            +
                      @uid == other.uid &&
         | 
| 96 | 
            +
                      @id == other.id &&
         | 
| 97 | 
            +
                      @name == other.name &&
         | 
| 98 | 
            +
                      @version == other.version &&
         | 
| 99 | 
            +
                      @category_id == other.category_id &&
         | 
| 100 | 
            +
                      @category_name == other.category_name &&
         | 
| 101 | 
            +
                      @is_primary == other.is_primary &&
         | 
| 102 | 
            +
                      @size == other.size &&
         | 
| 103 | 
            +
                      @file_name == other.file_name &&
         | 
| 104 | 
            +
                      @uploaded_time == other.uploaded_time &&
         | 
| 105 | 
            +
                      @mod_version == other.mod_version &&
         | 
| 106 | 
            +
                      @external_virus_scan_url == other.external_virus_scan_url &&
         | 
| 107 | 
            +
                      @description == other.description &&
         | 
| 108 | 
            +
                      @changelog_html == other.changelog_html &&
         | 
| 109 | 
            +
                      @content_preview_url == other.content_preview_url
         | 
| 110 | 
            +
                  end
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                end
         | 
| 113 | 
            +
             | 
| 114 | 
            +
              end
         | 
| 115 | 
            +
             | 
| 116 | 
            +
            end
         | 
| @@ -0,0 +1,55 @@ | |
| 1 | 
            +
            class NexusMods
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              module Api
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                # A user on NExusMods.
         | 
| 6 | 
            +
                # Mainly used for uploaders information.
         | 
| 7 | 
            +
                class User
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  attr_reader(
         | 
| 10 | 
            +
                    *%i[
         | 
| 11 | 
            +
                      member_id
         | 
| 12 | 
            +
                      member_group_id
         | 
| 13 | 
            +
                      name
         | 
| 14 | 
            +
                      profile_url
         | 
| 15 | 
            +
                    ]
         | 
| 16 | 
            +
                  )
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  # Constructor
         | 
| 19 | 
            +
                  #
         | 
| 20 | 
            +
                  # Parameters::
         | 
| 21 | 
            +
                  # * *member_id* (Integer): The user's member id
         | 
| 22 | 
            +
                  # * *member_group_id* (Integer): The user's member group id
         | 
| 23 | 
            +
                  # * *name* (String): The user's name
         | 
| 24 | 
            +
                  # * *profile_url* (String): The user's profile URL
         | 
| 25 | 
            +
                  def initialize(
         | 
| 26 | 
            +
                    member_id:,
         | 
| 27 | 
            +
                    member_group_id:,
         | 
| 28 | 
            +
                    name:,
         | 
| 29 | 
            +
                    profile_url:
         | 
| 30 | 
            +
                  )
         | 
| 31 | 
            +
                    @member_id = member_id
         | 
| 32 | 
            +
                    @member_group_id = member_group_id
         | 
| 33 | 
            +
                    @name = name
         | 
| 34 | 
            +
                    @profile_url = profile_url
         | 
| 35 | 
            +
                  end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                  # Equality operator
         | 
| 38 | 
            +
                  #
         | 
| 39 | 
            +
                  # Parameters::
         | 
| 40 | 
            +
                  # * *other* (Object): Other object to compare with
         | 
| 41 | 
            +
                  # Result::
         | 
| 42 | 
            +
                  # * Boolean: Are objects equal?
         | 
| 43 | 
            +
                  def ==(other)
         | 
| 44 | 
            +
                    other.is_a?(User) &&
         | 
| 45 | 
            +
                      @member_id == other.member_id &&
         | 
| 46 | 
            +
                      @member_group_id == other.member_group_id &&
         | 
| 47 | 
            +
                      @name == other.name &&
         | 
| 48 | 
            +
                      @profile_url == other.profile_url
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
              end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
            end
         |