Icarus-Mod-Tools 1.8.1 → 1.8.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES.md +14 -4
- data/Gemfile.lock +1 -1
- data/README.md +24 -0
- data/lib/icarus/mod/cli/sync.rb +14 -6
- data/lib/icarus/mod/cli/validate.rb +2 -0
- data/lib/icarus/mod/firestore.rb +5 -5
- data/lib/icarus/mod/tools/sync/helpers.rb +26 -0
- data/lib/icarus/mod/tools/sync/modinfo.rb +58 -0
- data/lib/icarus/mod/tools/sync/mods.rb +53 -0
- data/lib/icarus/mod/tools/sync/proginfo.rb +58 -0
- data/lib/icarus/mod/tools/sync/progs.rb +53 -0
- data/lib/icarus/mod/tools/validator.rb +2 -2
- data/lib/icarus/mod/version.rb +1 -1
- metadata +7 -7
- data/lib/icarus/mod/tools/mod_sync.rb +0 -51
- data/lib/icarus/mod/tools/modinfo_sync.rb +0 -56
- data/lib/icarus/mod/tools/prog_sync.rb +0 -51
- data/lib/icarus/mod/tools/proginfo_sync.rb +0 -56
- data/lib/icarus/mod/tools/sync_helpers.rb +0 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 63aa634da9108a8b439681f4bce95519bd04ba0e2cc416c5c2632502e8aa3c35
|
4
|
+
data.tar.gz: dce88dc6da4c3c43199973de099c7a578641ce03082bbac2a8943fcd69e6aa40
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 030db22ed72e78fec9a03a6f5412d35143492cd19080095b59efcafb47feb3db78b4a5cafc04edc1880e626f30d6127d35a470a7998ffe4403873672bf4002d0
|
7
|
+
data.tar.gz: 025040c5268bc151ea186573fb21dc083c51d4e9a5b5666fad8c988642aabbe4fe515fb882fe4ba0c03500357a8ea37cd868cfe1f1b5dc25c1f4456066f8d4d2
|
data/CHANGES.md
CHANGED
@@ -4,19 +4,29 @@ All notable changes to this project will be documented in this file.
|
|
4
4
|
|
5
5
|
## History (reverse chronological order)
|
6
6
|
|
7
|
-
### v1.
|
7
|
+
### v1.8 - 2023-01-27
|
8
|
+
|
9
|
+
- Added support for `proginfo.json` files
|
10
|
+
- Refactored to better utilize caching
|
11
|
+
|
12
|
+
### v1.7 - 2023-01-20
|
13
|
+
|
14
|
+
- Added `validation` command
|
15
|
+
- Added `--dry-run` to `sync` commands
|
16
|
+
|
17
|
+
### v1.6 - 2023-01-15
|
8
18
|
|
9
19
|
- Added `--check` to `sync mods` to check for updates without downloading
|
10
20
|
- Added support for `readmeURL` in `modinfo.json`
|
11
21
|
|
12
|
-
### v1.5 - 2023-08
|
22
|
+
### v1.5 - 2023-01-08
|
13
23
|
|
14
24
|
- Moved source into the DonovanMods Github organization
|
15
25
|
- Added `long_description` to `modinfo.json`
|
16
26
|
- Added `imageURL` to `modinfo.json`
|
17
27
|
- bugfixes
|
18
28
|
|
19
|
-
### v1.4 - 2023-03
|
29
|
+
### v1.4 - 2023-01-03
|
20
30
|
|
21
31
|
**BREAKING CHANGES!**
|
22
32
|
|
@@ -25,7 +35,7 @@ You'll need to move your ENV variables to a config file. See the README for more
|
|
25
35
|
- Read configuration from `~/.imtconfig.json`
|
26
36
|
- bugfixes
|
27
37
|
|
28
|
-
### v1.3 - 2023-02
|
38
|
+
### v1.3 - 2023-01-02
|
29
39
|
|
30
40
|
- First public release
|
31
41
|
- Added sorting and filtering to the `list mods` command
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -52,9 +52,17 @@ imt [options] [command]
|
|
52
52
|
### Commands
|
53
53
|
|
54
54
|
```sh
|
55
|
+
Commands:
|
55
56
|
imt add # Adds entries to the databases
|
57
|
+
imt help [COMMAND] # Describe available commands or one specific command
|
56
58
|
imt list # Lists the databases
|
57
59
|
imt sync # Syncs the databases
|
60
|
+
imt validate # Validates various entries
|
61
|
+
|
62
|
+
Options:
|
63
|
+
-C, [--config=CONFIG] # Path to the config file
|
64
|
+
# Default: /Users/dyoung/.imtconfig.json
|
65
|
+
-V, [--version], [--no-version] # Print the version and exit
|
58
66
|
```
|
59
67
|
|
60
68
|
#### `imt add`
|
@@ -63,9 +71,13 @@ imt [options] [command]
|
|
63
71
|
Commands:
|
64
72
|
imt add help [COMMAND] # Describe subcommands or one specific subcommand
|
65
73
|
imt add modinfo # Adds an entry to 'meta/modinfo/list'
|
74
|
+
imt add proginfo # Adds an entry to 'meta/proginfo/list'
|
66
75
|
imt add repos # Adds an entry to 'meta/repos/list'
|
67
76
|
|
68
77
|
Options:
|
78
|
+
-C, [--config=CONFIG] # Path to the config file
|
79
|
+
# Default: /Users/dyoung/.imtconfig.json
|
80
|
+
-V, [--version], [--no-version] # Print the version and exit
|
69
81
|
-v, [--verbose], [--no-verbose] # Increase verbosity. May be repeated for even more verbosity.
|
70
82
|
# Default: [true]
|
71
83
|
```
|
@@ -77,9 +89,14 @@ Commands:
|
|
77
89
|
imt list help [COMMAND] # Describe subcommands or one specific subcommand
|
78
90
|
imt list modinfo # Displays data from 'meta/modinfo/list'
|
79
91
|
imt list mods # Displays data from 'mods'
|
92
|
+
imt list proginfo # Displays data from 'meta/proginfo/list'
|
93
|
+
imt list progs # Displays data from 'progs'
|
80
94
|
imt list repos # Displays data from 'meta/repos/list'
|
81
95
|
|
82
96
|
Options:
|
97
|
+
-C, [--config=CONFIG] # Path to the config file
|
98
|
+
# Default: /Users/dyoung/.imtconfig.json
|
99
|
+
-V, [--version], [--no-version] # Print the version and exit
|
83
100
|
-v, [--verbose], [--no-verbose] # Increase verbosity. May be repeated for even more verbosity.
|
84
101
|
# Default: [true]
|
85
102
|
```
|
@@ -88,13 +105,20 @@ Options:
|
|
88
105
|
|
89
106
|
```sh
|
90
107
|
Commands:
|
108
|
+
imt sync all # Run all sync jobs
|
91
109
|
imt sync help [COMMAND] # Describe subcommands or one specific subcommand
|
92
110
|
imt sync modinfo # Reads from 'meta/repos/list' and Syncs any modinfo files we find (github only for now)
|
93
111
|
imt sync mods # Reads from 'meta/modinfo/list' and updates the 'mods' database accordingly
|
112
|
+
imt sync proginfo # Reads from 'meta/repos/list' and Syncs any proginfo files we find (github only for now)
|
113
|
+
imt sync progs # Reads from 'meta/proginfo/list' and updates the 'progs' database accordingly
|
94
114
|
|
95
115
|
Options:
|
116
|
+
-C, [--config=CONFIG] # Path to the config file
|
117
|
+
# Default: /Users/dyoung/.imtconfig.json
|
118
|
+
-V, [--version], [--no-version] # Print the version and exit
|
96
119
|
-v, [--verbose], [--no-verbose] # Increase verbosity. May be repeated for even more verbosity.
|
97
120
|
# Default: [true]
|
121
|
+
[--dry-run], [--no-dry-run] # Dry run (no changes will be made)
|
98
122
|
```
|
99
123
|
|
100
124
|
## Development
|
data/lib/icarus/mod/cli/sync.rb
CHANGED
@@ -1,15 +1,18 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "tools/
|
4
|
-
require "tools/
|
5
|
-
require "tools/
|
6
|
-
require "tools/
|
3
|
+
require "tools/sync/modinfo"
|
4
|
+
require "tools/sync/proginfo"
|
5
|
+
require "tools/sync/mods"
|
6
|
+
require "tools/sync/progs"
|
7
7
|
|
8
8
|
module Icarus
|
9
9
|
module Mod
|
10
10
|
module CLI
|
11
11
|
# Sync CLI command definitions
|
12
|
+
# rubocop:disable Style/GlobalVars
|
12
13
|
class Sync < SubcommandBase
|
14
|
+
$firestore = nil
|
15
|
+
|
13
16
|
class_option :dry_run, type: :boolean, default: false, desc: "Dry run (no changes will be made)"
|
14
17
|
|
15
18
|
desc "all", "Run all sync jobs"
|
@@ -43,8 +46,12 @@ module Icarus
|
|
43
46
|
end
|
44
47
|
|
45
48
|
no_commands do
|
49
|
+
def firestore
|
50
|
+
$firestore ||= Firestore.new
|
51
|
+
end
|
52
|
+
|
46
53
|
def sync_info(type)
|
47
|
-
sync = (type == :modinfo ? Icarus::Mod::Tools::
|
54
|
+
sync = (type == :modinfo ? Icarus::Mod::Tools::Sync::Modinfo : Icarus::Mod::Tools::Sync::Proginfo).new(client: firestore)
|
48
55
|
|
49
56
|
puts "Retrieving repository Data..." if verbose?
|
50
57
|
repositories = sync.repositories
|
@@ -69,7 +76,7 @@ module Icarus
|
|
69
76
|
end
|
70
77
|
|
71
78
|
def sync_list(type)
|
72
|
-
sync = (type == :mods ? Icarus::Mod::Tools::
|
79
|
+
sync = (type == :mods ? Icarus::Mod::Tools::Sync::Mods : Icarus::Mod::Tools::Sync::Progs).new(client: firestore)
|
73
80
|
|
74
81
|
puts "Retrieving Info Data..." if verbose?
|
75
82
|
info_array = sync.info_array
|
@@ -128,6 +135,7 @@ module Icarus
|
|
128
135
|
end
|
129
136
|
end
|
130
137
|
end
|
138
|
+
# rubocop:enable Style/GlobalVars
|
131
139
|
end
|
132
140
|
end
|
133
141
|
end
|
@@ -25,6 +25,7 @@ module Icarus
|
|
25
25
|
puts "Validating Entries..." if verbose?
|
26
26
|
max_length = validator.array.map { |info| info.uniq_name.length }.max + 1
|
27
27
|
|
28
|
+
# rubocop:disable Lint/FormatParameterMismatch
|
28
29
|
validator.array.each do |info|
|
29
30
|
print Paint[format("%s %-#{max_length}s", "Running validation steps on", info.uniq_name), :cyan, :bright] if verbose > 1
|
30
31
|
|
@@ -46,6 +47,7 @@ module Icarus
|
|
46
47
|
puts info.warnings.map { |warning| Paint["#{warning} in #{info.uniq_name}", :yellow] }.join("\n")
|
47
48
|
puts "\n" if verbose > 1
|
48
49
|
end
|
50
|
+
# rubocop:enable Lint/FormatParameterMismatch
|
49
51
|
|
50
52
|
exit exit_code
|
51
53
|
end
|
data/lib/icarus/mod/firestore.rb
CHANGED
@@ -19,12 +19,12 @@ module Icarus
|
|
19
19
|
@repos ||= list(:repositories)
|
20
20
|
end
|
21
21
|
|
22
|
-
def
|
23
|
-
@
|
22
|
+
def modinfo
|
23
|
+
@modinfo ||= list(:modinfo)
|
24
24
|
end
|
25
25
|
|
26
|
-
def
|
27
|
-
@
|
26
|
+
def proginfo
|
27
|
+
@proginfo ||= list(:proginfo)
|
28
28
|
end
|
29
29
|
|
30
30
|
def mods
|
@@ -72,7 +72,7 @@ module Icarus
|
|
72
72
|
|
73
73
|
case type.to_sym
|
74
74
|
when :modinfo, :proginfo
|
75
|
-
update_array = (send(
|
75
|
+
update_array = (send(type) + [payload]).flatten.uniq
|
76
76
|
response = @client.doc(collections.send(type)).set({ list: update_array }, merge:) if update_array.any?
|
77
77
|
when :repositories
|
78
78
|
response = @client.doc(collections.repositories).set({ list: payload }, merge:)
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "uri"
|
4
|
+
require "net/http"
|
5
|
+
require "json"
|
6
|
+
|
7
|
+
module Icarus
|
8
|
+
module Mod
|
9
|
+
module Tools
|
10
|
+
module Sync
|
11
|
+
class RequestFailed < StandardError; end
|
12
|
+
|
13
|
+
# Sync helper methods
|
14
|
+
module Helpers
|
15
|
+
def retrieve_from_url(url)
|
16
|
+
res = Net::HTTP.get_response(URI(url))
|
17
|
+
|
18
|
+
raise RequestFailed, "HTTP Request failed for #{url} (#{res.code}): #{res.message}" unless res&.code == "200"
|
19
|
+
|
20
|
+
JSON.parse(res.body, symbolize_names: true)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "firestore"
|
4
|
+
require "github"
|
5
|
+
require "tools/sync/helpers"
|
6
|
+
|
7
|
+
module Icarus
|
8
|
+
module Mod
|
9
|
+
module Tools
|
10
|
+
module Sync
|
11
|
+
# Sync methods
|
12
|
+
class Modinfo
|
13
|
+
include Helpers
|
14
|
+
|
15
|
+
def initialize(client: nil)
|
16
|
+
@firestore = client || Firestore.new
|
17
|
+
@github = Github.new
|
18
|
+
@repositories = []
|
19
|
+
end
|
20
|
+
|
21
|
+
def repositories
|
22
|
+
@firestore.repos
|
23
|
+
end
|
24
|
+
|
25
|
+
def update(modinfo_array)
|
26
|
+
@firestore.update(:modinfo, modinfo_array)
|
27
|
+
end
|
28
|
+
|
29
|
+
def modinfo(url)
|
30
|
+
retrieve_from_url(url)
|
31
|
+
end
|
32
|
+
|
33
|
+
def data(repositories, verbose: false)
|
34
|
+
repositories.map do |repo|
|
35
|
+
print "searching #{repo}..." if verbose
|
36
|
+
|
37
|
+
case repo
|
38
|
+
when /github/
|
39
|
+
@github.repository = repo
|
40
|
+
modinfo_url = @github.find("modinfo.json")
|
41
|
+
|
42
|
+
unless modinfo_url
|
43
|
+
puts "Skipped...no modinfo.json" if verbose
|
44
|
+
next
|
45
|
+
end
|
46
|
+
|
47
|
+
puts "Found!" if verbose
|
48
|
+
modinfo_url
|
49
|
+
else
|
50
|
+
puts "Skipped...repository type not supported yet" if verbose
|
51
|
+
end
|
52
|
+
end.compact
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "firestore"
|
4
|
+
require "tools/sync/helpers"
|
5
|
+
|
6
|
+
module Icarus
|
7
|
+
module Mod
|
8
|
+
module Tools
|
9
|
+
module Sync
|
10
|
+
# Sync methods
|
11
|
+
class Mods
|
12
|
+
include Helpers
|
13
|
+
|
14
|
+
def initialize(client: nil)
|
15
|
+
@firestore = client || Firestore.new
|
16
|
+
end
|
17
|
+
|
18
|
+
def mods
|
19
|
+
@firestore.mods
|
20
|
+
end
|
21
|
+
|
22
|
+
def info_array
|
23
|
+
@info_array ||= @firestore.modinfo.map do |url|
|
24
|
+
retrieve_from_url(url)[:mods].map { |mod| Tools::Modinfo.new(mod) if mod[:name] =~ /[a-z0-9]+/i }
|
25
|
+
rescue Icarus::Mod::Tools::Sync::RequestFailed
|
26
|
+
warn "Skipped; Failed to retrieve #{url}"
|
27
|
+
next
|
28
|
+
rescue JSON::ParserError => e
|
29
|
+
warn "Skipped; Invalid JSON: #{e.full_message}"
|
30
|
+
next
|
31
|
+
end.flatten.compact
|
32
|
+
end
|
33
|
+
|
34
|
+
def find(modinfo)
|
35
|
+
@firestore.find_by_type(type: "mods", name: modinfo.name, author: modinfo.author)&.id
|
36
|
+
end
|
37
|
+
|
38
|
+
def find_info(modinfo)
|
39
|
+
@info_array.find { |mod| mod.name == modinfo.name }
|
40
|
+
end
|
41
|
+
|
42
|
+
def update(modinfo)
|
43
|
+
@firestore.update(:mod, modinfo, merge: false)
|
44
|
+
end
|
45
|
+
|
46
|
+
def delete(modinfo)
|
47
|
+
@firestore.delete(:mod, modinfo)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "firestore"
|
4
|
+
require "github"
|
5
|
+
require "tools/sync/helpers"
|
6
|
+
|
7
|
+
module Icarus
|
8
|
+
module Mod
|
9
|
+
module Tools
|
10
|
+
module Sync
|
11
|
+
# Sync methods
|
12
|
+
class Proginfo
|
13
|
+
include Helpers
|
14
|
+
|
15
|
+
def initialize(client: nil)
|
16
|
+
@firestore = client || Firestore.new
|
17
|
+
@github = Github.new
|
18
|
+
@repositories = []
|
19
|
+
end
|
20
|
+
|
21
|
+
def repositories
|
22
|
+
@firestore.repos
|
23
|
+
end
|
24
|
+
|
25
|
+
def update(proginfo_array)
|
26
|
+
@firestore.update(:proginfo, proginfo_array)
|
27
|
+
end
|
28
|
+
|
29
|
+
def proginfo(url)
|
30
|
+
retrieve_from_url(url)
|
31
|
+
end
|
32
|
+
|
33
|
+
def data(repositories, verbose: false)
|
34
|
+
repositories.map do |repo|
|
35
|
+
print "searching #{repo}..." if verbose
|
36
|
+
|
37
|
+
case repo
|
38
|
+
when /github/
|
39
|
+
@github.repository = repo
|
40
|
+
proginfo_url = @github.find("proginfo.json")
|
41
|
+
|
42
|
+
unless proginfo_url
|
43
|
+
puts "Skipped...no proginfo.json" if verbose
|
44
|
+
next
|
45
|
+
end
|
46
|
+
|
47
|
+
puts "Found!" if verbose
|
48
|
+
proginfo_url
|
49
|
+
else
|
50
|
+
puts "Skipped...repository type not supported yet" if verbose
|
51
|
+
end
|
52
|
+
end.compact
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "firestore"
|
4
|
+
require "tools/sync/helpers"
|
5
|
+
|
6
|
+
module Icarus
|
7
|
+
module Mod
|
8
|
+
module Tools
|
9
|
+
module Sync
|
10
|
+
# Sync methods
|
11
|
+
class Progs
|
12
|
+
include Helpers
|
13
|
+
|
14
|
+
def initialize(client: nil)
|
15
|
+
@firestore = client || Firestore.new
|
16
|
+
end
|
17
|
+
|
18
|
+
def progs
|
19
|
+
@firestore.progs
|
20
|
+
end
|
21
|
+
|
22
|
+
def info_array
|
23
|
+
@info_array ||= @firestore.proginfo.map do |url|
|
24
|
+
retrieve_from_url(url)[:programs].map { |prog| Tools::Proginfo.new(prog) if prog[:name] =~ /[a-z0-9]+/i }
|
25
|
+
rescue Icarus::Mod::Tools::Sync::RequestFailed
|
26
|
+
warn "Skipped; Failed to retrieve #{url}"
|
27
|
+
next
|
28
|
+
rescue JSON::ParserError => e
|
29
|
+
warn "Skipped; Invalid JSON: #{e.full_message}"
|
30
|
+
next
|
31
|
+
end.flatten.compact
|
32
|
+
end
|
33
|
+
|
34
|
+
def find(proginfo)
|
35
|
+
@firestore.find_by_type(type: "progs", name: proginfo.name, author: proginfo.author)&.id
|
36
|
+
end
|
37
|
+
|
38
|
+
def find_info(proginfo)
|
39
|
+
@info_array.find { |prog| prog.name == proginfo.name }
|
40
|
+
end
|
41
|
+
|
42
|
+
def update(proginfo)
|
43
|
+
@firestore.update(:prog, proginfo, merge: false)
|
44
|
+
end
|
45
|
+
|
46
|
+
def delete(proginfo)
|
47
|
+
@firestore.delete(:prog, proginfo)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -10,9 +10,9 @@ module Icarus
|
|
10
10
|
def initialize(type)
|
11
11
|
@array = case type
|
12
12
|
when :modinfo
|
13
|
-
|
13
|
+
Sync::Mods.new.info_array
|
14
14
|
when :proginfo
|
15
|
-
|
15
|
+
Sync::Progs.new.info_array
|
16
16
|
else
|
17
17
|
raise ArgumentError, "Invalid type: #{type}"
|
18
18
|
end
|
data/lib/icarus/mod/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: Icarus-Mod-Tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.8.
|
4
|
+
version: 1.8.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Donovan Young
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-01-
|
11
|
+
date: 2023-01-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: google-cloud-firestore
|
@@ -98,13 +98,13 @@ files:
|
|
98
98
|
- lib/icarus/mod/github.rb
|
99
99
|
- lib/icarus/mod/tools.rb
|
100
100
|
- lib/icarus/mod/tools/baseinfo.rb
|
101
|
-
- lib/icarus/mod/tools/mod_sync.rb
|
102
101
|
- lib/icarus/mod/tools/modinfo.rb
|
103
|
-
- lib/icarus/mod/tools/modinfo_sync.rb
|
104
|
-
- lib/icarus/mod/tools/prog_sync.rb
|
105
102
|
- lib/icarus/mod/tools/proginfo.rb
|
106
|
-
- lib/icarus/mod/tools/
|
107
|
-
- lib/icarus/mod/tools/
|
103
|
+
- lib/icarus/mod/tools/sync/helpers.rb
|
104
|
+
- lib/icarus/mod/tools/sync/modinfo.rb
|
105
|
+
- lib/icarus/mod/tools/sync/mods.rb
|
106
|
+
- lib/icarus/mod/tools/sync/proginfo.rb
|
107
|
+
- lib/icarus/mod/tools/sync/progs.rb
|
108
108
|
- lib/icarus/mod/tools/validator.rb
|
109
109
|
- lib/icarus/mod/version.rb
|
110
110
|
- sig/database/sync/sync.rbs
|
@@ -1,51 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "firestore"
|
4
|
-
require "tools/sync_helpers"
|
5
|
-
|
6
|
-
module Icarus
|
7
|
-
module Mod
|
8
|
-
module Tools
|
9
|
-
# Sync methods
|
10
|
-
class ModSync
|
11
|
-
include SyncHelpers
|
12
|
-
|
13
|
-
def initialize
|
14
|
-
@firestore = Firestore.new
|
15
|
-
end
|
16
|
-
|
17
|
-
def mods
|
18
|
-
@firestore.mods
|
19
|
-
end
|
20
|
-
|
21
|
-
def info_array
|
22
|
-
@info_array ||= @firestore.modinfo_list.map do |url|
|
23
|
-
retrieve_from_url(url)[:mods].map { |mod| Modinfo.new(mod) if mod[:name] =~ /[a-z0-9]+/i }
|
24
|
-
rescue Icarus::Mod::Tools::RequestFailed
|
25
|
-
warn "Skipped; Failed to retrieve #{url}"
|
26
|
-
next
|
27
|
-
rescue JSON::ParserError => e
|
28
|
-
warn "Skipped; Invalid JSON: #{e.full_message}"
|
29
|
-
next
|
30
|
-
end.flatten.compact
|
31
|
-
end
|
32
|
-
|
33
|
-
def find(modinfo)
|
34
|
-
@firestore.find_by_type(type: "mods", name: modinfo.name, author: modinfo.author)&.id
|
35
|
-
end
|
36
|
-
|
37
|
-
def find_info(modinfo)
|
38
|
-
@info_array.find { |mod| mod.name == modinfo.name }
|
39
|
-
end
|
40
|
-
|
41
|
-
def update(modinfo)
|
42
|
-
@firestore.update(:mod, modinfo, merge: false)
|
43
|
-
end
|
44
|
-
|
45
|
-
def delete(modinfo)
|
46
|
-
@firestore.delete(:mod, modinfo)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "firestore"
|
4
|
-
require "github"
|
5
|
-
require "tools/sync_helpers"
|
6
|
-
|
7
|
-
module Icarus
|
8
|
-
module Mod
|
9
|
-
module Tools
|
10
|
-
# Sync methods
|
11
|
-
class ModinfoSync
|
12
|
-
include SyncHelpers
|
13
|
-
|
14
|
-
def initialize
|
15
|
-
@firestore = Firestore.new
|
16
|
-
@github = Github.new
|
17
|
-
@repositories = []
|
18
|
-
end
|
19
|
-
|
20
|
-
def repositories
|
21
|
-
@firestore.repos
|
22
|
-
end
|
23
|
-
|
24
|
-
def update(modinfo_array)
|
25
|
-
@firestore.update(:modinfo, modinfo_array)
|
26
|
-
end
|
27
|
-
|
28
|
-
def modinfo(url)
|
29
|
-
retrieve_from_url(url)
|
30
|
-
end
|
31
|
-
|
32
|
-
def data(repositories, verbose: false)
|
33
|
-
repositories.map do |repo|
|
34
|
-
print "searching #{repo}..." if verbose
|
35
|
-
|
36
|
-
case repo
|
37
|
-
when /github/
|
38
|
-
@github.repository = repo
|
39
|
-
modinfo_url = @github.find("modinfo.json")
|
40
|
-
|
41
|
-
unless modinfo_url
|
42
|
-
puts "Skipped...no modinfo.json" if verbose
|
43
|
-
next
|
44
|
-
end
|
45
|
-
|
46
|
-
puts "Found!" if verbose
|
47
|
-
modinfo_url
|
48
|
-
else
|
49
|
-
puts "Skipped...repository type not supported yet" if verbose
|
50
|
-
end
|
51
|
-
end.compact
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "firestore"
|
4
|
-
require "tools/sync_helpers"
|
5
|
-
|
6
|
-
module Icarus
|
7
|
-
module Mod
|
8
|
-
module Tools
|
9
|
-
# Sync methods
|
10
|
-
class ProgSync
|
11
|
-
include SyncHelpers
|
12
|
-
|
13
|
-
def initialize
|
14
|
-
@firestore = Firestore.new
|
15
|
-
end
|
16
|
-
|
17
|
-
def progs
|
18
|
-
@firestore.progs
|
19
|
-
end
|
20
|
-
|
21
|
-
def info_array
|
22
|
-
@info_array ||= @firestore.proginfo_list.map do |url|
|
23
|
-
retrieve_from_url(url)[:programs].map { |prog| Proginfo.new(prog) if prog[:name] =~ /[a-z0-9]+/i }
|
24
|
-
rescue Icarus::Mod::Tools::RequestFailed
|
25
|
-
warn "Skipped; Failed to retrieve #{url}"
|
26
|
-
next
|
27
|
-
rescue JSON::ParserError => e
|
28
|
-
warn "Skipped; Invalid JSON: #{e.full_message}"
|
29
|
-
next
|
30
|
-
end.flatten.compact
|
31
|
-
end
|
32
|
-
|
33
|
-
def find(proginfo)
|
34
|
-
@firestore.find_by_type(type: "progs", name: proginfo.name, author: proginfo.author)&.id
|
35
|
-
end
|
36
|
-
|
37
|
-
def find_info(proginfo)
|
38
|
-
@info_array.find { |prog| prog.name == proginfo.name }
|
39
|
-
end
|
40
|
-
|
41
|
-
def update(proginfo)
|
42
|
-
@firestore.update(:prog, proginfo, merge: false)
|
43
|
-
end
|
44
|
-
|
45
|
-
def delete(proginfo)
|
46
|
-
@firestore.delete(:prog, proginfo)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "firestore"
|
4
|
-
require "github"
|
5
|
-
require "tools/sync_helpers"
|
6
|
-
|
7
|
-
module Icarus
|
8
|
-
module Mod
|
9
|
-
module Tools
|
10
|
-
# Sync methods
|
11
|
-
class ProginfoSync
|
12
|
-
include SyncHelpers
|
13
|
-
|
14
|
-
def initialize
|
15
|
-
@firestore = Firestore.new
|
16
|
-
@github = Github.new
|
17
|
-
@repositories = []
|
18
|
-
end
|
19
|
-
|
20
|
-
def repositories
|
21
|
-
@firestore.repos
|
22
|
-
end
|
23
|
-
|
24
|
-
def update(proginfo_array)
|
25
|
-
@firestore.update(:proginfo, proginfo_array)
|
26
|
-
end
|
27
|
-
|
28
|
-
def proginfo(url)
|
29
|
-
retrieve_from_url(url)
|
30
|
-
end
|
31
|
-
|
32
|
-
def data(repositories, verbose: false)
|
33
|
-
repositories.map do |repo|
|
34
|
-
print "searching #{repo}..." if verbose
|
35
|
-
|
36
|
-
case repo
|
37
|
-
when /github/
|
38
|
-
@github.repository = repo
|
39
|
-
proginfo_url = @github.find("proginfo.json")
|
40
|
-
|
41
|
-
unless proginfo_url
|
42
|
-
puts "Skipped...no proginfo.json" if verbose
|
43
|
-
next
|
44
|
-
end
|
45
|
-
|
46
|
-
puts "Found!" if verbose
|
47
|
-
proginfo_url
|
48
|
-
else
|
49
|
-
puts "Skipped...repository type not supported yet" if verbose
|
50
|
-
end
|
51
|
-
end.compact
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "uri"
|
4
|
-
require "net/http"
|
5
|
-
require "json"
|
6
|
-
|
7
|
-
module Icarus
|
8
|
-
module Mod
|
9
|
-
module Tools
|
10
|
-
class RequestFailed < StandardError; end
|
11
|
-
|
12
|
-
# Sync helper methods
|
13
|
-
module SyncHelpers
|
14
|
-
def retrieve_from_url(url)
|
15
|
-
res = Net::HTTP.get_response(URI(url))
|
16
|
-
|
17
|
-
raise Icarus::Mod::Tools::RequestFailed, "HTTP Request failed for #{url} (#{res.code}): #{res.message}" unless res&.code == "200"
|
18
|
-
|
19
|
-
JSON.parse(res.body, symbolize_names: true)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|