nexus_mods 1.0.0 → 1.1.1
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/README.md +12 -1
- data/examples/api_caching.rb +41 -0
- data/examples/api_limits.rb +12 -0
- data/examples/games.rb +8 -0
- data/examples/log_debug.rb +10 -0
- data/examples/mods.rb +24 -0
- data/lib/nexus_mods/version.rb +1 -1
- data/lib/nexus_mods.rb +4 -1
- data/spec/nexus_mods_test/helpers.rb +9 -1
- data/spec/nexus_mods_test/scenarios/nexus_mods/api/mod_spec.rb +0 -8
- data/spec/nexus_mods_test/scenarios/nexus_mods/nexus_mods_common_spec.rb +32 -0
- metadata +14 -3
- /data/spec/nexus_mods_test/scenarios/{nexus_mods_access_spec.rb → nexus_mods/nexus_mods_access_spec.rb} +0 -0
- /data/spec/nexus_mods_test/scenarios/{nexus_mods_caching_spec.rb → nexus_mods/nexus_mods_caching_spec.rb} +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9fd9e01b4661eaa68f2a7fea3c52907b55f9bb7379f1e8f5423742f164784b95
|
|
4
|
+
data.tar.gz: 8a87ea1ba913a9f41303918a338649065eef99d5c3b8ec75b4fb4bbdbd782bcc
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 382f42ee4d79d68ac34c6715fa3ad3f154a9376ff0b0b41b651804adaef512c681fa53a0d9112d1897757a8e77d3f8902bff468099fc78e48a97fc050f7d9bac
|
|
7
|
+
data.tar.gz: 6dd0631ddc2575c33da22390eeef859b3d01a1b805b566337add1eba2bb2fcd23925d250edde5b15d54a92cad5596125330645cff7f4a9eb13e3a2ef1be06f57
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
# [v1.1.1](https://github.com/Muriel-Salvan/nexus_mods/compare/v1.1.0...v1.1.1) (2023-04-10 19:39:28)
|
|
2
|
+
|
|
3
|
+
### Patches
|
|
4
|
+
|
|
5
|
+
* [Improved documentation and added examples](https://github.com/Muriel-Salvan/nexus_mods/commit/0eb3fd00e0d1ad34db04a30ab2043a49371dc64f)
|
|
6
|
+
|
|
7
|
+
# [v1.1.0](https://github.com/Muriel-Salvan/nexus_mods/compare/v1.0.0...v1.1.0) (2023-04-10 19:19:16)
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* [[Feature] Add log_level parameter while creating nexus_mods instance](https://github.com/Muriel-Salvan/nexus_mods/commit/1b6215be2d9b3a97076bb6b7bf665f8ec8e900ca)
|
|
12
|
+
|
|
1
13
|
# [v1.0.0](https://github.com/Muriel-Salvan/nexus_mods/compare/v0.6.0...v1.0.0) (2023-04-10 19:03:51)
|
|
2
14
|
|
|
3
15
|
### Breaking changes
|
data/README.md
CHANGED
|
@@ -2,6 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
Simple Ruby API letting you handle [NexusMods](https://www.nexusmods.com/) REST API.
|
|
4
4
|
|
|
5
|
+
## Main features
|
|
6
|
+
|
|
7
|
+
* Get the API **limits**.
|
|
8
|
+
* Get the **games** information.
|
|
9
|
+
* Get individual **mods** and **mod files** information.
|
|
10
|
+
* Configurable **caching** with expiry times to save API calls to nexusmods.com.
|
|
11
|
+
* All served in an object-oriented **API in full Ruby**.
|
|
12
|
+
|
|
13
|
+
See the [examples](examples) for more details on how to use it.
|
|
14
|
+
Those examples expect that you set a valid NexusMods API key in the `NEXUS_MODS_API_KEY` environment variable.
|
|
15
|
+
|
|
5
16
|
## Install
|
|
6
17
|
|
|
7
18
|
Via gem
|
|
@@ -54,7 +65,7 @@ Any contribution is welcome:
|
|
|
54
65
|
|
|
55
66
|
## Credits
|
|
56
67
|
|
|
57
|
-
- [Muriel Salvan]
|
|
68
|
+
- [Muriel Salvan](https://x-aeon.com/muriel)
|
|
58
69
|
|
|
59
70
|
## License
|
|
60
71
|
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
require 'nexus_mods'
|
|
2
|
+
require 'fileutils'
|
|
3
|
+
|
|
4
|
+
# Make sure a previous file for caching was not here before
|
|
5
|
+
test_api_cache_file = 'nexus_mods_test_api_cache.json'
|
|
6
|
+
FileUtils.rm_f test_api_cache_file
|
|
7
|
+
|
|
8
|
+
nexus_mods = NexusMods.new(
|
|
9
|
+
api_key: ENV.fetch('NEXUS_MODS_API_KEY'),
|
|
10
|
+
api_cache_file: test_api_cache_file
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
initial_remaining = nexus_mods.api_limits.daily_remaining
|
|
14
|
+
puts "Before fetching anything, daily API remaining is #{initial_remaining}"
|
|
15
|
+
|
|
16
|
+
puts 'Fetch the list of games (without using cache)...'
|
|
17
|
+
puts "Fetched #{nexus_mods.games.size} games."
|
|
18
|
+
|
|
19
|
+
puts "After fetching those games, daily API remaining is #{nexus_mods.api_limits.daily_remaining}"
|
|
20
|
+
|
|
21
|
+
puts 'Now we fetch again the list of games (this should use the cache)...'
|
|
22
|
+
puts "Fetched #{nexus_mods.games.size} games."
|
|
23
|
+
|
|
24
|
+
puts "After fetching those games a second time, daily API remaining is #{nexus_mods.api_limits.daily_remaining}"
|
|
25
|
+
|
|
26
|
+
puts 'Now we close the current NexusMods instance ad re-instantiate a new one from scratch using the same API cache file'
|
|
27
|
+
|
|
28
|
+
new_nexus_mods = NexusMods.new(
|
|
29
|
+
api_key: ENV.fetch('NEXUS_MODS_API_KEY'),
|
|
30
|
+
api_cache_file: test_api_cache_file
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
puts "Before fetching anything from the new instance, daily API remaining is #{new_nexus_mods.api_limits.daily_remaining}"
|
|
34
|
+
|
|
35
|
+
puts 'Now we fetch the list of games from the new instance (this should use the cache that was stored in the file)...'
|
|
36
|
+
puts "Fetched #{new_nexus_mods.games.size} games."
|
|
37
|
+
|
|
38
|
+
puts "After fetching those games from the new instance, daily API remaining is #{new_nexus_mods.api_limits.daily_remaining}"
|
|
39
|
+
|
|
40
|
+
puts
|
|
41
|
+
puts "As a conclusion, we used 2 instances of NexusMods that have fetched games 3 times, and it consumed #{initial_remaining - new_nexus_mods.api_limits.daily_remaining} real API call."
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
require 'nexus_mods'
|
|
2
|
+
|
|
3
|
+
api_limits = NexusMods.new(api_key: ENV.fetch('NEXUS_MODS_API_KEY')).api_limits
|
|
4
|
+
puts <<~EO_OUTPUT
|
|
5
|
+
API limits:
|
|
6
|
+
daily_limit: #{api_limits.daily_limit}
|
|
7
|
+
daily_remaining: #{api_limits.daily_remaining}
|
|
8
|
+
daily_reset: #{api_limits.daily_reset}
|
|
9
|
+
hourly_limit: #{api_limits.hourly_limit}
|
|
10
|
+
hourly_remaining: #{api_limits.hourly_remaining}
|
|
11
|
+
hourly_reset: #{api_limits.hourly_reset}
|
|
12
|
+
EO_OUTPUT
|
data/examples/games.rb
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
require 'nexus_mods'
|
|
2
|
+
|
|
3
|
+
games = NexusMods.new(api_key: ENV.fetch('NEXUS_MODS_API_KEY')).games
|
|
4
|
+
puts "Found a total of #{games.size} games."
|
|
5
|
+
puts 'Here is the top 10 by number of downloads:'
|
|
6
|
+
games.sort_by { |game| -game.downloads_count }[0..9].each do |game|
|
|
7
|
+
puts "* #{game.name} (#{game.mods_count} mods, #{game.downloads_count} downloads)"
|
|
8
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
require 'nexus_mods'
|
|
2
|
+
|
|
3
|
+
puts 'Example of fetching a mod with log debug activated, and without using the cache (so that we always see the query):'
|
|
4
|
+
puts
|
|
5
|
+
NexusMods.new(
|
|
6
|
+
api_key: ENV.fetch('NEXUS_MODS_API_KEY'),
|
|
7
|
+
log_level: :debug,
|
|
8
|
+
game_domain_name: 'skyrimspecialedition',
|
|
9
|
+
mod_id: 42_521
|
|
10
|
+
).mod(clear_cache: true)
|
data/examples/mods.rb
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require 'nexus_mods'
|
|
2
|
+
|
|
3
|
+
nexus_mods = NexusMods.new(
|
|
4
|
+
api_key: ENV.fetch('NEXUS_MODS_API_KEY'),
|
|
5
|
+
game_domain_name: 'skyrimspecialedition'
|
|
6
|
+
)
|
|
7
|
+
some_mod_ids = [
|
|
8
|
+
266,
|
|
9
|
+
2_347,
|
|
10
|
+
17_230,
|
|
11
|
+
42_521
|
|
12
|
+
]
|
|
13
|
+
puts 'Here are some details about a few mods for Skyrim Special Edition:'
|
|
14
|
+
puts
|
|
15
|
+
some_mod_ids.each do |mod_id|
|
|
16
|
+
mod = nexus_mods.mod(mod_id:)
|
|
17
|
+
mod_files = nexus_mods.mod_files(mod_id:)
|
|
18
|
+
puts <<~EO_OUTPUT
|
|
19
|
+
===== #{mod.name} (v#{mod.version}) by #{mod.uploader.name} (#{mod.downloads_count} downloads)
|
|
20
|
+
#{mod.summary}
|
|
21
|
+
* Last 5 files: #{mod_files.reverse[0..4].map(&:file_name).join(', ')}
|
|
22
|
+
|
|
23
|
+
EO_OUTPUT
|
|
24
|
+
end
|
data/lib/nexus_mods/version.rb
CHANGED
data/lib/nexus_mods.rb
CHANGED
|
@@ -46,6 +46,7 @@ class NexusMods
|
|
|
46
46
|
# * *mod_files*: Expiry associated to queries on mod files [default: 1 day]
|
|
47
47
|
# * *api_cache_file* (String): File used to store the NexusMods API cache, or nil for no cache [default: "#{Dir.tmpdir}/nexus_mods_api_cache.json"]
|
|
48
48
|
# * *logger* (Logger): The logger to be used for log messages [default: Logger.new(STDOUT)]
|
|
49
|
+
# * *log_level* (Symbol): The logger level to be set [default: :info]
|
|
49
50
|
def initialize(
|
|
50
51
|
api_key: nil,
|
|
51
52
|
game_domain_name: 'skyrimspecialedition',
|
|
@@ -54,12 +55,14 @@ class NexusMods
|
|
|
54
55
|
http_cache_file: "#{Dir.tmpdir}/nexus_mods_http_cache.json",
|
|
55
56
|
api_cache_expiry: {},
|
|
56
57
|
api_cache_file: "#{Dir.tmpdir}/nexus_mods_api_cache.json",
|
|
57
|
-
logger: Logger.new($stdout)
|
|
58
|
+
logger: Logger.new($stdout),
|
|
59
|
+
log_level: :info
|
|
58
60
|
)
|
|
59
61
|
@game_domain_name = game_domain_name
|
|
60
62
|
@mod_id = mod_id
|
|
61
63
|
@file_id = file_id
|
|
62
64
|
@logger = logger
|
|
65
|
+
@logger.level = log_level
|
|
63
66
|
@premium = false
|
|
64
67
|
@api_client = ApiClient.new(
|
|
65
68
|
api_key:,
|
|
@@ -66,12 +66,20 @@ module NexusModsTest
|
|
|
66
66
|
@nexus_mods
|
|
67
67
|
end
|
|
68
68
|
|
|
69
|
+
# Get NexusMods logs
|
|
70
|
+
#
|
|
71
|
+
# Result::
|
|
72
|
+
# * String: The NexusMods logs
|
|
73
|
+
def nexus_mods_logs
|
|
74
|
+
@nexus_mods_logger.string
|
|
75
|
+
end
|
|
76
|
+
|
|
69
77
|
# Reset the NexusMods instance.
|
|
70
78
|
# Dump the output if needed for debugging purposes.
|
|
71
79
|
def reset_nexus_mods
|
|
72
80
|
if @nexus_mods && test_debug?
|
|
73
81
|
puts '===== NexusMods output BEGIN ====='
|
|
74
|
-
puts
|
|
82
|
+
puts nexus_mods_logs
|
|
75
83
|
puts '===== NexusMods output END ====='
|
|
76
84
|
end
|
|
77
85
|
@nexus_mods = nil
|
|
@@ -6,14 +6,6 @@ describe NexusMods::Api::Mod do
|
|
|
6
6
|
expect_validate_user
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
-
it 'returns the default game domain name' do
|
|
10
|
-
expect(nexus_mods(game_domain_name: 'skyrimspecialedition').game_domain_name).to eq 'skyrimspecialedition'
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
it 'returns the default game mod id' do
|
|
14
|
-
expect(nexus_mods(mod_id: 2014).mod_id).to eq 2014
|
|
15
|
-
end
|
|
16
|
-
|
|
17
9
|
it 'returns a mod complete information' do
|
|
18
10
|
expect_http_call_to(
|
|
19
11
|
path: '/v1/games/skyrimspecialedition/mods/2014.json',
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
describe NexusMods do
|
|
2
|
+
|
|
3
|
+
context 'when testing authentication and access' do
|
|
4
|
+
|
|
5
|
+
it 'returns the default game domain name' do
|
|
6
|
+
expect_validate_user
|
|
7
|
+
expect(nexus_mods(game_domain_name: 'skyrimspecialedition').game_domain_name).to eq 'skyrimspecialedition'
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it 'returns the default game mod id' do
|
|
11
|
+
expect_validate_user
|
|
12
|
+
expect(nexus_mods(mod_id: 2014).mod_id).to eq 2014
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it 'accepts the log level' do
|
|
16
|
+
expect_validate_user(times: 2)
|
|
17
|
+
expect_http_call_to(
|
|
18
|
+
path: '/v1/games.json',
|
|
19
|
+
json: [],
|
|
20
|
+
times: 2
|
|
21
|
+
)
|
|
22
|
+
nexus_mods(log_level: :debug).games
|
|
23
|
+
log_debug = nexus_mods_logs
|
|
24
|
+
reset_nexus_mods
|
|
25
|
+
nexus_mods(log_level: :info).games
|
|
26
|
+
log_info = nexus_mods_logs
|
|
27
|
+
expect(log_debug.size).to be > log_info.size
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: nexus_mods
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.1.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Muriel Salvan
|
|
@@ -131,10 +131,20 @@ extra_rdoc_files:
|
|
|
131
131
|
- CHANGELOG.md
|
|
132
132
|
- LICENSE.md
|
|
133
133
|
- README.md
|
|
134
|
+
- examples/api_caching.rb
|
|
135
|
+
- examples/api_limits.rb
|
|
136
|
+
- examples/games.rb
|
|
137
|
+
- examples/log_debug.rb
|
|
138
|
+
- examples/mods.rb
|
|
134
139
|
files:
|
|
135
140
|
- CHANGELOG.md
|
|
136
141
|
- LICENSE.md
|
|
137
142
|
- README.md
|
|
143
|
+
- examples/api_caching.rb
|
|
144
|
+
- examples/api_limits.rb
|
|
145
|
+
- examples/games.rb
|
|
146
|
+
- examples/log_debug.rb
|
|
147
|
+
- examples/mods.rb
|
|
138
148
|
- lib/nexus_mods.rb
|
|
139
149
|
- lib/nexus_mods/api/api_limits.rb
|
|
140
150
|
- lib/nexus_mods/api/category.rb
|
|
@@ -157,8 +167,9 @@ files:
|
|
|
157
167
|
- spec/nexus_mods_test/scenarios/nexus_mods/api/game_spec.rb
|
|
158
168
|
- spec/nexus_mods_test/scenarios/nexus_mods/api/mod_file_spec.rb
|
|
159
169
|
- spec/nexus_mods_test/scenarios/nexus_mods/api/mod_spec.rb
|
|
160
|
-
- spec/nexus_mods_test/scenarios/nexus_mods_access_spec.rb
|
|
161
|
-
- spec/nexus_mods_test/scenarios/nexus_mods_caching_spec.rb
|
|
170
|
+
- spec/nexus_mods_test/scenarios/nexus_mods/nexus_mods_access_spec.rb
|
|
171
|
+
- spec/nexus_mods_test/scenarios/nexus_mods/nexus_mods_caching_spec.rb
|
|
172
|
+
- spec/nexus_mods_test/scenarios/nexus_mods/nexus_mods_common_spec.rb
|
|
162
173
|
- spec/nexus_mods_test/scenarios/rubocop_spec.rb
|
|
163
174
|
- spec/spec_helper.rb
|
|
164
175
|
homepage: https://github.com/Muriel-Salvan/nexus_mods
|
|
File without changes
|
|
File without changes
|