curseforge 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 48378e345c14758cf0a44b052ce525164bb67dc26d8c5427de1094f17cfcad15
4
- data.tar.gz: 4b8b18a3339139baf1307c585bd92104a3e204d267c4c38f929d87940928a254
3
+ metadata.gz: da00e0c6338f15e272e1bb866b455dfa60cdcb69db648945fa31c55aaf9f492d
4
+ data.tar.gz: d5e4efcba49878147bc0b707b22aca679de07de44af2466aaa9013d8b92aa171
5
5
  SHA512:
6
- metadata.gz: a5aeee4b11bdb9252da519cf8faae58441f5370c2ad5abc80462397d06d2f84a0ea65ce1c8a1414a940a1677191783aea50b4aef9970c3bcd89a6b328d4e2959
7
- data.tar.gz: 3063fd94bee136ac1ab2943ede304a1011e8cdec13234abb72d4f8cc8bbd0e4644f867a94128caa4ed2b53ca8eb6c4f4ca159cdd9f57db6c9de5a593adfedbe6
6
+ metadata.gz: ede150b6b6210a9078a0127819501446f78358255780275ba007b2b6df0b07a8cf463d0b33e8a74d465ea68b7b407318bc1126e0b4917775239568ceb9e695d0
7
+ data.tar.gz: 3b5c9ee72dea8ad134225164c6c5e0eb6f6512a7fe0446d72cee80c341ea49bc814789fb9b8f53c4bd63a78d29aed665881f42b3d1425b8c2e68dd1179623ba8
data/.env.example ADDED
@@ -0,0 +1 @@
1
+ CURSEFORGE_TOKEN='token'
@@ -0,0 +1,11 @@
1
+ class CurseForge
2
+ class Error < StandardError
3
+ attr_reader :response
4
+
5
+ def initialize(response, message)
6
+ super(message)
7
+
8
+ @response = response
9
+ end
10
+ end
11
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class CurseForge
4
- VERSION = '0.1.1'
5
- end
4
+ VERSION = '0.3.0'
5
+ end
data/lib/curseforge.rb CHANGED
@@ -7,30 +7,32 @@ require 'json'
7
7
  # by PackBuilder.io
8
8
  class CurseForge
9
9
  require_relative 'curseforge/version'
10
+ require_relative 'curseforge/error'
10
11
 
11
- def initialize(token)
12
+ def initialize(token, **options)
12
13
  @token = token
13
- @api = Faraday.new(
14
- url: 'https://api.curseforge.com',
15
- headers: { 'x-api-key' => @token }
16
- )
14
+
15
+ options[:url] ||= 'https://api.curseforge.com'
16
+ options[:headers] ||= {}
17
+ options[:headers]["x-api-key"] = @token
18
+ @api = Faraday.new(options)
17
19
  end
18
20
 
19
21
  # @param [Integer] mod_id
20
22
  # @raise [Faraday::Error]
21
23
  # @return [Hash]
22
- # @see https://docs.curseforge.com/rest-api/#schemaget%20mod%20response
24
+ # @see https://docs.curseforge.com/rest-api/#get-mod
23
25
  def get_mod(mod_id)
24
- get_request("/v1/mods/#{mod_id}")
26
+ req(:get, "/v1/mods/#{mod_id}")
25
27
  end
26
28
 
27
29
  # @param [Array<Integer>] mod_ids
28
30
  # @param [Boolean] filter_pc_only
29
31
  # @raise [Faraday::Error]
30
32
  # @return [Hash]
31
- # @see https://docs.curseforge.com/rest-api/#schemaget%20mods%20response
33
+ # @see https://docs.curseforge.com/rest-api/#get-mods
32
34
  def get_mods(*mods_ids, filter_pc_only: true)
33
- post_request('/v1/mods', body: {
35
+ req(:post, '/v1/mods', body: {
34
36
  modIds: mods_ids,
35
37
  filterPCOnly: filter_pc_only
36
38
  }.to_json, headers: { 'Content-Type' => 'application/json' })["data"]
@@ -39,7 +41,7 @@ class CurseForge
39
41
  # @param [Hash] json
40
42
  # @raise [Faraday::Error]
41
43
  # @return [Hash]
42
- # @see https://docs.curseforge.com/rest-api/#schemaget%20mods%20response
44
+ # @see https://docs.curseforge.com/rest-api/#get-mods
43
45
  # @example
44
46
  # require 'json'
45
47
  # require 'curseforge'
@@ -50,7 +52,7 @@ class CurseForge
50
52
  # client = CurseForge.new('token')
51
53
  # mods = client.get_mods_from_manifest(json)
52
54
  def get_mods_from_manifest(json)
53
- get_mods(json['files'].map(&:projectID))
55
+ get_mods(*json['files'].map { |f| f['projectID'] })
54
56
  end
55
57
 
56
58
  # Filters mods based on the given query parameters.
@@ -79,20 +81,17 @@ class CurseForge
79
81
  # @see https://docs.curseforge.com/rest-api/#schemasearch%20mods%20response
80
82
  def search_mods(game_id, **query)
81
83
  query[:gameId] = game_id
82
- get_request('/v1/mods/search', body: query)
84
+ req(:get, '/v1/mods/search', body: query)
83
85
  end
84
86
 
85
87
  private
86
88
 
87
- def req(method, path, body: nil, headers: nil)
88
- @api.send(method, path, body, headers)
89
- end
90
-
91
- %i[get post put delete].each do |method|
92
- define_method(:"#{method}_request") do |path, body: nil, headers: nil|
93
- resp = req(method, path, body: body, headers: headers)
89
+ def req(method, path, body: nil, headers: nil)
90
+ resp = @api.send(method, path, body, headers)
91
+ raise CurseForge::Error.new(resp, "received #{resp.status}") unless resp.success?
94
92
 
95
93
  JSON.parse(resp.body)
94
+ rescue JSON::ParserError => e
95
+ raise CurseForge::Error.new(resp, e.message)
96
96
  end
97
- end
98
97
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: curseforge
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
  - Goob-Hub
8
8
  - Dylan Hackworth
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-12-27 00:00:00.000000000 Z
11
+ date: 2025-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -32,6 +32,7 @@ executables: []
32
32
  extensions: []
33
33
  extra_rdoc_files: []
34
34
  files:
35
+ - ".env.example"
35
36
  - ".rspec"
36
37
  - CHANGELOG.md
37
38
  - CODE_OF_CONDUCT.md
@@ -39,6 +40,7 @@ files:
39
40
  - README.md
40
41
  - Rakefile
41
42
  - lib/curseforge.rb
43
+ - lib/curseforge/error.rb
42
44
  - lib/curseforge/version.rb
43
45
  - sig/curseforge.rbs
44
46
  homepage: https://github.com/packbuilder/curseforge/