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.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -0
  3. data/lib/nexus_mods/api/api_limits.rb +64 -0
  4. data/lib/nexus_mods/api/category.rb +54 -0
  5. data/lib/nexus_mods/api/game.rb +106 -0
  6. data/lib/nexus_mods/api/mod.rb +141 -0
  7. data/lib/nexus_mods/api/mod_file.rb +116 -0
  8. data/lib/nexus_mods/api/user.rb +55 -0
  9. data/lib/nexus_mods/api_client.rb +182 -0
  10. data/lib/nexus_mods/cacheable_api.rb +52 -0
  11. data/lib/nexus_mods/cacheable_with_expiry.rb +70 -0
  12. data/lib/nexus_mods/core_extensions/cacheable/cache_adapters/persistent_json_adapter.rb +62 -0
  13. data/lib/nexus_mods/core_extensions/cacheable/method_generator.rb +62 -0
  14. data/lib/nexus_mods/file_cache.rb +71 -0
  15. data/lib/nexus_mods/version.rb +1 -1
  16. data/lib/nexus_mods.rb +32 -86
  17. data/spec/nexus_mods_test/factories/games.rb +135 -0
  18. data/spec/nexus_mods_test/factories/mod_files.rb +113 -0
  19. data/spec/nexus_mods_test/factories/mods.rb +144 -0
  20. data/spec/nexus_mods_test/helpers.rb +39 -14
  21. data/spec/nexus_mods_test/scenarios/nexus_mods/{api_limits_spec.rb → api/api_limits_spec.rb} +10 -3
  22. data/spec/nexus_mods_test/scenarios/nexus_mods/api/game_spec.rb +93 -0
  23. data/spec/nexus_mods_test/scenarios/nexus_mods/api/mod_file_spec.rb +73 -0
  24. data/spec/nexus_mods_test/scenarios/nexus_mods/api/mod_spec.rb +62 -0
  25. data/spec/nexus_mods_test/scenarios/nexus_mods_caching_spec.rb +88 -0
  26. metadata +37 -13
  27. data/lib/nexus_mods/api_limits.rb +0 -44
  28. data/lib/nexus_mods/category.rb +0 -37
  29. data/lib/nexus_mods/game.rb +0 -78
  30. data/lib/nexus_mods/mod.rb +0 -106
  31. data/lib/nexus_mods/mod_file.rb +0 -86
  32. data/lib/nexus_mods/user.rb +0 -37
  33. data/spec/nexus_mods_test/scenarios/nexus_mods/game_spec.rb +0 -180
  34. data/spec/nexus_mods_test/scenarios/nexus_mods/mod_file_spec.rb +0 -140
  35. data/spec/nexus_mods_test/scenarios/nexus_mods/mod_spec.rb +0 -185
@@ -1,9 +1,12 @@
1
1
  require 'digest'
2
2
  require 'webmock/rspec'
3
3
  require 'rspec/support/object_formatter'
4
+ require 'nexus_mods_test/factories/games'
5
+ require 'nexus_mods_test/factories/mods'
6
+ require 'nexus_mods_test/factories/mod_files'
4
7
  require 'nexus_mods'
5
8
 
6
- module NexusModsTests
9
+ module NexusModsTest
7
10
 
8
11
  module Helpers
9
12
 
@@ -72,6 +75,7 @@ module NexusModsTests
72
75
  # * *message* (String): Mocked returned message [default: 'OK']
73
76
  # * *json* (Object): Mocked JSON body [default: {}]
74
77
  # * *headers* (Hash<String,String>): Mocked additional HTTP headers [default: {}]
78
+ # * *times* (Integer): Number of times the call is expected [default: 1]
75
79
  def expect_http_call_to(
76
80
  host: 'api.nexusmods.com',
77
81
  http_method: :get,
@@ -80,7 +84,8 @@ module NexusModsTests
80
84
  code: 200,
81
85
  message: 'OK',
82
86
  json: {},
83
- headers: {}
87
+ headers: {},
88
+ times: 1
84
89
  )
85
90
  json_as_str = json.to_json
86
91
  mocked_etag = "W/\"#{Digest::MD5.hexdigest("#{path}|#{json_as_str}")}\""
@@ -93,19 +98,25 @@ module NexusModsTests
93
98
  else
94
99
  @expected_returned_etags << mocked_etag
95
100
  end
96
- stub_request(http_method, "https://#{host}#{path}").with(headers: expected_request_headers).to_return(
97
- status: [code, message],
98
- body: json_as_str,
99
- headers: DEFAULT_API_HEADERS.
100
- merge(
101
- 'etag' => mocked_etag
102
- ).
103
- merge(headers)
104
- )
101
+ @expected_stubs << [
102
+ stub_request(http_method, "https://#{host}#{path}").with(headers: expected_request_headers).to_return(
103
+ status: [code, message],
104
+ body: json_as_str,
105
+ headers: DEFAULT_API_HEADERS.
106
+ merge(
107
+ 'etag' => mocked_etag
108
+ ).
109
+ merge(headers)
110
+ ),
111
+ times
112
+ ]
105
113
  end
106
114
 
107
115
  # Expect a successfull call made to validate the user
108
- def expect_validate_user
116
+ #
117
+ # Parameters::
118
+ # * *times* (Integer): Number of times the call is expected [default: 1]
119
+ def expect_validate_user(times: 1)
109
120
  expect_http_call_to(
110
121
  path: '/v1/users/validate.json',
111
122
  json: {
@@ -118,7 +129,8 @@ module NexusModsTests
118
129
  profile_url: 'https://www.nexusmods.com/Contents/Images/noavatar.gif',
119
130
  is_supporter: false,
120
131
  is_premium: false
121
- }
132
+ },
133
+ times:
122
134
  )
123
135
  end
124
136
 
@@ -127,12 +139,25 @@ module NexusModsTests
127
139
  end
128
140
 
129
141
  RSpec.configure do |config|
130
- config.include NexusModsTests::Helpers
142
+ config.include NexusModsTest::Helpers
143
+ config.include NexusModsTest::Factories::Games
144
+ config.include NexusModsTest::Factories::Mods
145
+ config.include NexusModsTest::Factories::ModFiles
131
146
  config.before do
132
147
  @nexus_mods = nil
148
+ # Reload the ApiClient as it stores caches at class level
149
+ NexusMods::ApiClient.clear_cacheable_expiry_caches
133
150
  # Keep a list of the etags we should have returned, so that we know when queries should contain them
134
151
  # Array<String>
135
152
  @expected_returned_etags = []
153
+ # List of expected stubs and the number of times they were supposed to mock
154
+ # Array< [ WebMock::RequestStub, Integer ] >
155
+ @expected_stubs = []
156
+ end
157
+ config.after do
158
+ @expected_stubs.each do |(stub, times)|
159
+ expect(stub).to have_been_made.times(times)
160
+ end
136
161
  end
137
162
  end
138
163
 
@@ -1,10 +1,9 @@
1
- describe NexusMods::ApiLimits do
1
+ describe NexusMods::Api::ApiLimits do
2
2
 
3
3
  context 'when testing API limits' do
4
4
 
5
5
  it 'gets api limits' do
6
- expect_validate_user
7
- expect_validate_user
6
+ expect_validate_user(times: 2)
8
7
  api_limits = nexus_mods.api_limits
9
8
  expect(api_limits.daily_limit).to eq 2500
10
9
  expect(api_limits.daily_remaining).to eq 2500
@@ -14,6 +13,14 @@ describe NexusMods::ApiLimits do
14
13
  expect(api_limits.hourly_reset).to eq Time.parse('2019-10-02T16:00:00+00:00')
15
14
  end
16
15
 
16
+ it 'compares objects for equality' do
17
+ expect_validate_user(times: 3)
18
+ api_limits1 = nexus_mods.api_limits
19
+ api_limits2 = nexus_mods.api_limits
20
+ expect(api_limits1.object_id).not_to eq api_limits2.object_id
21
+ expect(api_limits1).to eq api_limits2
22
+ end
23
+
17
24
  end
18
25
 
19
26
  end
@@ -0,0 +1,93 @@
1
+ describe NexusMods::Api::Game do
2
+
3
+ context 'when testing games' do
4
+
5
+ before do
6
+ expect_validate_user
7
+ end
8
+
9
+ it 'returns the games list' do
10
+ expect_http_call_to(
11
+ path: '/v1/games.json',
12
+ json: [
13
+ json_game100,
14
+ json_game101
15
+ ]
16
+ )
17
+ games = nexus_mods.games.sort_by(&:id)
18
+ expect(games.size).to eq 2
19
+ expect_game_to_be_game100(games.first)
20
+ expect_game_to_be_game101(games[1])
21
+ end
22
+
23
+ it 'returns a game having missing parent category' do
24
+ expect_http_call_to(
25
+ path: '/v1/games.json',
26
+ json: [
27
+ {
28
+ 'id' => 100,
29
+ 'name' => 'Morrowind',
30
+ 'forum_url' => 'https://forums.nexusmods.com/index.php?/forum/111-morrowind/',
31
+ 'nexusmods_url' => 'http://www.nexusmods.com/morrowind',
32
+ 'genre' => 'RPG',
33
+ 'file_count' => 14_143,
34
+ 'downloads' => 20_414_985,
35
+ 'domain_name' => 'morrowind',
36
+ 'approved_date' => 1,
37
+ 'file_views' => 100_014_750,
38
+ 'authors' => 2062,
39
+ 'file_endorsements' => 719_262,
40
+ 'mods' => 6080,
41
+ 'categories' => [
42
+ {
43
+ 'category_id' => 1,
44
+ 'name' => 'Morrowind',
45
+ 'parent_category' => false
46
+ },
47
+ {
48
+ 'category_id' => 2,
49
+ 'name' => 'Buildings',
50
+ 'parent_category' => 3
51
+ }
52
+ ]
53
+ }
54
+ ]
55
+ )
56
+ game = nexus_mods.games.first
57
+ expect(game.id).to eq 100
58
+ expect(game.name).to eq 'Morrowind'
59
+ expect(game.forum_url).to eq 'https://forums.nexusmods.com/index.php?/forum/111-morrowind/'
60
+ expect(game.nexusmods_url).to eq 'http://www.nexusmods.com/morrowind'
61
+ expect(game.genre).to eq 'RPG'
62
+ expect(game.files_count).to eq 14_143
63
+ expect(game.downloads_count).to eq 20_414_985
64
+ expect(game.domain_name).to eq 'morrowind'
65
+ expect(game.approved_date).to eq Time.parse('1970-01-01 00:00:01 +0000')
66
+ expect(game.files_views).to eq 100_014_750
67
+ expect(game.authors_count).to eq 2062
68
+ expect(game.files_endorsements).to eq 719_262
69
+ expect(game.mods_count).to eq 6080
70
+ game_categories = game.categories
71
+ expect(game_categories.size).to eq 2
72
+ expect(game_categories.first.id).to eq 1
73
+ expect(game_categories.first.name).to eq 'Morrowind'
74
+ expect(game_categories.first.parent_category).to be_nil
75
+ expect(game_categories[1].id).to eq 2
76
+ expect(game_categories[1].name).to eq 'Buildings'
77
+ expect(game_categories[1].parent_category).to be_nil
78
+ end
79
+
80
+ it 'compares objects for equality' do
81
+ expect_http_call_to(
82
+ path: '/v1/games.json',
83
+ json: [json_game100]
84
+ )
85
+ game1 = nexus_mods.games.first
86
+ game2 = nexus_mods.games.first
87
+ expect(game1.object_id).not_to eq game2.object_id
88
+ expect(game1).to eq game2
89
+ end
90
+
91
+ end
92
+
93
+ end
@@ -0,0 +1,73 @@
1
+ describe NexusMods::Api::ModFile do
2
+
3
+ context 'when testing mod files' do
4
+
5
+ before do
6
+ expect_validate_user
7
+ end
8
+
9
+ # Example of JSON object returned by the API for a mod files list
10
+ let(:json_example_mod_files) do
11
+ [
12
+ json_mod_file2472,
13
+ json_mod_file2487
14
+ ]
15
+ end
16
+
17
+ # Expect a mod's files to be the example ones
18
+ #
19
+ # Parameters::
20
+ # * *mod_files* (Array<NexusMods::Api::File>): List of files to validate
21
+ def expect_mod_files_to_be_example(mod_files)
22
+ expect(mod_files.size).to eq 2
23
+ sorted_mod_files = mod_files.sort_by(&:id)
24
+ expect_mod_file_to_be2472(sorted_mod_files.first)
25
+ expect_mod_file_to_be2487(sorted_mod_files[1])
26
+ end
27
+
28
+ it 'returns a mod files list' do
29
+ expect_http_call_to(
30
+ path: '/v1/games/skyrimspecialedition/mods/2014/files.json',
31
+ json: { files: json_example_mod_files }
32
+ )
33
+ expect_mod_files_to_be_example(nexus_mods.mod_files(game_domain_name: 'skyrimspecialedition', mod_id: 2014))
34
+ end
35
+
36
+ it 'returns the default mod files list' do
37
+ expect_http_call_to(
38
+ path: '/v1/games/skyrimspecialedition/mods/2014/files.json',
39
+ json: { files: json_example_mod_files }
40
+ )
41
+ expect_mod_files_to_be_example(nexus_mods(mod_id: 2014).mod_files(game_domain_name: 'skyrimspecialedition'))
42
+ end
43
+
44
+ it 'returns mod files list for the default game' do
45
+ expect_http_call_to(
46
+ path: '/v1/games/skyrimspecialedition/mods/2014/files.json',
47
+ json: { files: json_example_mod_files }
48
+ )
49
+ expect_mod_files_to_be_example(nexus_mods(game_domain_name: 'skyrimspecialedition').mod_files(mod_id: 2014))
50
+ end
51
+
52
+ it 'returns mod files list for the default game and mod' do
53
+ expect_http_call_to(
54
+ path: '/v1/games/skyrimspecialedition/mods/2014/files.json',
55
+ json: { files: json_example_mod_files }
56
+ )
57
+ expect_mod_files_to_be_example(nexus_mods(game_domain_name: 'skyrimspecialedition', mod_id: 2014).mod_files)
58
+ end
59
+
60
+ it 'compares objects for equality' do
61
+ expect_http_call_to(
62
+ path: '/v1/games/skyrimspecialedition/mods/2014/files.json',
63
+ json: { files: [json_mod_file2472] }
64
+ )
65
+ mod_file1 = nexus_mods(game_domain_name: 'skyrimspecialedition', mod_id: 2014).mod_files.first
66
+ mod_file2 = nexus_mods(game_domain_name: 'skyrimspecialedition', mod_id: 2014).mod_files.first
67
+ expect(mod_file1.object_id).not_to eq mod_file2.object_id
68
+ expect(mod_file1).to eq mod_file2
69
+ end
70
+
71
+ end
72
+
73
+ end
@@ -0,0 +1,62 @@
1
+ describe NexusMods::Api::Mod do
2
+
3
+ context 'when testing mods' do
4
+
5
+ before do
6
+ expect_validate_user
7
+ end
8
+
9
+ it 'returns a mod complete information' do
10
+ expect_http_call_to(
11
+ path: '/v1/games/skyrimspecialedition/mods/2014.json',
12
+ json: json_complete_mod
13
+ )
14
+ expect_mod_to_be_complete(nexus_mods.mod(game_domain_name: 'skyrimspecialedition', mod_id: 2014))
15
+ end
16
+
17
+ it 'returns a mod partial information' do
18
+ expect_http_call_to(
19
+ path: '/v1/games/skyrimspecialedition/mods/2014.json',
20
+ json: json_partial_mod
21
+ )
22
+ expect_mod_to_be_partial(nexus_mods.mod(game_domain_name: 'skyrimspecialedition', mod_id: 2014))
23
+ end
24
+
25
+ it 'returns the default mod information' do
26
+ expect_http_call_to(
27
+ path: '/v1/games/skyrimspecialedition/mods/2014.json',
28
+ json: json_complete_mod
29
+ )
30
+ expect_mod_to_be_complete(nexus_mods(mod_id: 2014).mod(game_domain_name: 'skyrimspecialedition'))
31
+ end
32
+
33
+ it 'returns mod information for the default game' do
34
+ expect_http_call_to(
35
+ path: '/v1/games/skyrimspecialedition/mods/2014.json',
36
+ json: json_complete_mod
37
+ )
38
+ expect_mod_to_be_complete(nexus_mods(game_domain_name: 'skyrimspecialedition').mod(mod_id: 2014))
39
+ end
40
+
41
+ it 'returns mod information for the default game and mod' do
42
+ expect_http_call_to(
43
+ path: '/v1/games/skyrimspecialedition/mods/2014.json',
44
+ json: json_complete_mod
45
+ )
46
+ expect_mod_to_be_complete(nexus_mods(game_domain_name: 'skyrimspecialedition', mod_id: 2014).mod)
47
+ end
48
+
49
+ it 'compares objects for equality' do
50
+ expect_http_call_to(
51
+ path: '/v1/games/skyrimspecialedition/mods/2014.json',
52
+ json: json_complete_mod
53
+ )
54
+ mod1 = nexus_mods.mod(game_domain_name: 'skyrimspecialedition', mod_id: 2014)
55
+ mod2 = nexus_mods.mod(game_domain_name: 'skyrimspecialedition', mod_id: 2014)
56
+ expect(mod1.object_id).not_to eq mod2.object_id
57
+ expect(mod1).to eq mod2
58
+ end
59
+
60
+ end
61
+
62
+ end
@@ -0,0 +1,88 @@
1
+ describe NexusMods do
2
+
3
+ context 'when testing caching' do
4
+
5
+ it 'does not cache user queries' do
6
+ expect_validate_user(times: 3)
7
+ nexus_mods.api_limits
8
+ nexus_mods.api_limits
9
+ end
10
+
11
+ it 'caches games queries' do
12
+ expect_validate_user
13
+ expect_http_call_to(
14
+ path: '/v1/games.json',
15
+ json: [
16
+ json_game100,
17
+ json_game101
18
+ ]
19
+ )
20
+ games = nexus_mods.games
21
+ expect(nexus_mods.games).to eq(games)
22
+ end
23
+
24
+ it 'caches mod queries' do
25
+ expect_validate_user
26
+ expect_http_call_to(
27
+ path: '/v1/games/skyrimspecialedition/mods/2014.json',
28
+ json: json_complete_mod
29
+ )
30
+ mod = nexus_mods.mod(game_domain_name: 'skyrimspecialedition', mod_id: 2014)
31
+ expect(nexus_mods.mod(game_domain_name: 'skyrimspecialedition', mod_id: 2014)).to eq(mod)
32
+ end
33
+
34
+ it 'caches mod files queries' do
35
+ expect_validate_user
36
+ expect_http_call_to(
37
+ path: '/v1/games/skyrimspecialedition/mods/2014/files.json',
38
+ json: { files: [json_mod_file2472, json_mod_file2487] }
39
+ )
40
+ mod_files = nexus_mods.mod_files(game_domain_name: 'skyrimspecialedition', mod_id: 2014)
41
+ expect(nexus_mods.mod_files(game_domain_name: 'skyrimspecialedition', mod_id: 2014)).to eq(mod_files)
42
+ end
43
+
44
+ it 'expires games queries cache' do
45
+ expect_validate_user
46
+ expect_http_call_to(
47
+ path: '/v1/games.json',
48
+ json: [
49
+ json_game100,
50
+ json_game101
51
+ ],
52
+ times: 2
53
+ )
54
+ nexus_mods_instance = nexus_mods(api_cache_expiry: { games: 1 })
55
+ games = nexus_mods_instance.games
56
+ sleep 2
57
+ expect(nexus_mods_instance.games).to eq(games)
58
+ end
59
+
60
+ it 'expires mod queries cache' do
61
+ expect_validate_user
62
+ expect_http_call_to(
63
+ path: '/v1/games/skyrimspecialedition/mods/2014.json',
64
+ json: json_complete_mod,
65
+ times: 2
66
+ )
67
+ nexus_mods_instance = nexus_mods(api_cache_expiry: { mod: 1 })
68
+ mod = nexus_mods_instance.mod(game_domain_name: 'skyrimspecialedition', mod_id: 2014)
69
+ sleep 2
70
+ expect(nexus_mods_instance.mod(game_domain_name: 'skyrimspecialedition', mod_id: 2014)).to eq(mod)
71
+ end
72
+
73
+ it 'expires mod files queries cache' do
74
+ expect_validate_user
75
+ expect_http_call_to(
76
+ path: '/v1/games/skyrimspecialedition/mods/2014/files.json',
77
+ json: { files: [json_mod_file2472, json_mod_file2487] },
78
+ times: 2
79
+ )
80
+ nexus_mods_instance = nexus_mods(api_cache_expiry: { mod_files: 1 })
81
+ mod_files = nexus_mods_instance.mod_files(game_domain_name: 'skyrimspecialedition', mod_id: 2014)
82
+ sleep 2
83
+ expect(nexus_mods_instance.mod_files(game_domain_name: 'skyrimspecialedition', mod_id: 2014)).to eq(mod_files)
84
+ end
85
+
86
+ end
87
+
88
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nexus_mods
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Muriel Salvan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-27 00:00:00.000000000 Z
11
+ date: 2023-04-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '2.4'
41
+ - !ruby/object:Gem::Dependency
42
+ name: cacheable
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rspec
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -122,19 +136,29 @@ files:
122
136
  - LICENSE.md
123
137
  - README.md
124
138
  - lib/nexus_mods.rb
125
- - lib/nexus_mods/api_limits.rb
126
- - lib/nexus_mods/category.rb
127
- - lib/nexus_mods/game.rb
128
- - lib/nexus_mods/mod.rb
129
- - lib/nexus_mods/mod_file.rb
130
- - lib/nexus_mods/user.rb
139
+ - lib/nexus_mods/api/api_limits.rb
140
+ - lib/nexus_mods/api/category.rb
141
+ - lib/nexus_mods/api/game.rb
142
+ - lib/nexus_mods/api/mod.rb
143
+ - lib/nexus_mods/api/mod_file.rb
144
+ - lib/nexus_mods/api/user.rb
145
+ - lib/nexus_mods/api_client.rb
146
+ - lib/nexus_mods/cacheable_api.rb
147
+ - lib/nexus_mods/cacheable_with_expiry.rb
148
+ - lib/nexus_mods/core_extensions/cacheable/cache_adapters/persistent_json_adapter.rb
149
+ - lib/nexus_mods/core_extensions/cacheable/method_generator.rb
150
+ - lib/nexus_mods/file_cache.rb
131
151
  - lib/nexus_mods/version.rb
152
+ - spec/nexus_mods_test/factories/games.rb
153
+ - spec/nexus_mods_test/factories/mod_files.rb
154
+ - spec/nexus_mods_test/factories/mods.rb
132
155
  - spec/nexus_mods_test/helpers.rb
133
- - spec/nexus_mods_test/scenarios/nexus_mods/api_limits_spec.rb
134
- - spec/nexus_mods_test/scenarios/nexus_mods/game_spec.rb
135
- - spec/nexus_mods_test/scenarios/nexus_mods/mod_file_spec.rb
136
- - spec/nexus_mods_test/scenarios/nexus_mods/mod_spec.rb
156
+ - spec/nexus_mods_test/scenarios/nexus_mods/api/api_limits_spec.rb
157
+ - spec/nexus_mods_test/scenarios/nexus_mods/api/game_spec.rb
158
+ - spec/nexus_mods_test/scenarios/nexus_mods/api/mod_file_spec.rb
159
+ - spec/nexus_mods_test/scenarios/nexus_mods/api/mod_spec.rb
137
160
  - spec/nexus_mods_test/scenarios/nexus_mods_access_spec.rb
161
+ - spec/nexus_mods_test/scenarios/nexus_mods_caching_spec.rb
138
162
  - spec/nexus_mods_test/scenarios/rubocop_spec.rb
139
163
  - spec/spec_helper.rb
140
164
  homepage: https://github.com/Muriel-Salvan/nexus_mods
@@ -158,7 +182,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
158
182
  - !ruby/object:Gem::Version
159
183
  version: '0'
160
184
  requirements: []
161
- rubygems_version: 3.4.6
185
+ rubygems_version: 3.4.10
162
186
  signing_key:
163
187
  specification_version: 4
164
188
  summary: Access NexusMods REST API from Ruby
@@ -1,44 +0,0 @@
1
- class NexusMods
2
-
3
- # Object giving the NexusMods API limits
4
- class ApiLimits
5
-
6
- attr_reader(
7
- *%i[
8
- daily_limit
9
- daily_remaining
10
- daily_reset
11
- hourly_limit
12
- hourly_remaining
13
- hourly_reset
14
- ]
15
- )
16
-
17
- # Constructor
18
- #
19
- # Parameters::
20
- # * *daily_limit* (Integer): The daily limit
21
- # * *daily_remaining* (Integer): The daily remaining
22
- # * *daily_reset* (Integer): The daily reset time
23
- # * *hourly_limit* (Integer): The hourly limit
24
- # * *hourly_remaining* (Integer): The hourly remaining
25
- # * *hourly_reset* (Integer): The hourly reset time
26
- def initialize(
27
- daily_limit:,
28
- daily_remaining:,
29
- daily_reset:,
30
- hourly_limit:,
31
- hourly_remaining:,
32
- hourly_reset:
33
- )
34
- @daily_limit = daily_limit
35
- @daily_remaining = daily_remaining
36
- @daily_reset = daily_reset
37
- @hourly_limit = hourly_limit
38
- @hourly_remaining = hourly_remaining
39
- @hourly_reset = hourly_reset
40
- end
41
-
42
- end
43
-
44
- end
@@ -1,37 +0,0 @@
1
- class NexusMods
2
-
3
- # Categories defined for a game in NexusMods
4
- class Category
5
-
6
- attr_reader(
7
- *%i[
8
- id
9
- name
10
- ]
11
- )
12
-
13
- attr_accessor(
14
- *%i[
15
- parent_category
16
- ]
17
- )
18
-
19
- # Constructor
20
- #
21
- # Parameters::
22
- # *id* (Integer): The category id
23
- # *name* (String): The category id
24
- # *parent_category* (Category or nil): The parent category, or nil if none [default: nil]
25
- def initialize(
26
- id:,
27
- name:,
28
- parent_category: nil
29
- )
30
- @id = id
31
- @name = name
32
- @parent_category = parent_category
33
- end
34
-
35
- end
36
-
37
- end