Icarus-Mod-Tools 1.8.1 → 1.8.2
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/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
|