Icarus-Mod-Tools 1.8.1 → 1.8.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d70aff1f7ed368044b414fdca605fa438e0fbfe68c2af436d534a233fc6bff17
4
- data.tar.gz: e4467d443894344c50a2c3c663e262afd7e54cc806da308ecd16d732bcd2c844
3
+ metadata.gz: f5300a7aec66d731f9bea8dfec09626928ff51e0e611b3a6173f9c2ed5c4ebd8
4
+ data.tar.gz: c5bd016ddf8c8d4dd6631ae57c8202bed96ae4da587c8ab3999bbc5d656ed14d
5
5
  SHA512:
6
- metadata.gz: 26c83360237ab149e6738e60966df113f8ede55460f85b0b2de29dd690cea238cdfda8af0ffc70f288ca58765b535d18b2cfcb21e0619b0a8226bfe099e7fecc
7
- data.tar.gz: 278435526ede69d45383920bee07fc3fc094924d022ed55c54141d00e9b53ef003d7688fb26bc4f251e3b13705b743013875583d553ca8c22198a7daeb590238
6
+ metadata.gz: 4a7f0fce56f5ce4471763c001895af4308deaeb7bee335c08d9bc350d79daaf2c3c23accc546213472f0047b3e45c3deab5fd6d15a338084ff0df3378bc9a0e7
7
+ data.tar.gz: 4536666a6b5bbfd6ed61f0d3f97a6f05a33e377a5d7e211a4394e413c1721c6c0f312c774e04d926cb07075bfc5dbca7546f824c101568d343080fb6a266f8b6
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.6 - 2023-15
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
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- Icarus-Mod-Tools (1.8.1)
4
+ Icarus-Mod-Tools (1.8.2.1)
5
5
  google-cloud-firestore (~> 2.7)
6
6
  octokit (~> 6.0)
7
7
  paint (~> 2.3)
@@ -51,7 +51,6 @@ GEM
51
51
  gapic-common (>= 0.16.0, < 2.a)
52
52
  google-cloud-errors (~> 1.0)
53
53
  google-protobuf (3.21.12-x86_64-darwin)
54
- google-protobuf (3.21.12-x86_64-linux)
55
54
  googleapis-common-protos (1.4.0)
56
55
  google-protobuf (~> 3.14)
57
56
  googleapis-common-protos-types (~> 1.2)
@@ -68,9 +67,6 @@ GEM
68
67
  grpc (1.51.0-x86_64-darwin)
69
68
  google-protobuf (~> 3.21)
70
69
  googleapis-common-protos-types (~> 1.0)
71
- grpc (1.51.0-x86_64-linux)
72
- google-protobuf (~> 3.21)
73
- googleapis-common-protos-types (~> 1.0)
74
70
  guard (2.18.0)
75
71
  formatador (>= 0.2.4)
76
72
  listen (>= 2.7, < 4.0)
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
@@ -1,22 +1,32 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "tools/modinfo_sync"
4
- require "tools/proginfo_sync"
5
- require "tools/mod_sync"
6
- require "tools/prog_sync"
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"
16
19
  def all
20
+ puts "Running Proginfo Sync..." if verbose?
17
21
  invoke :proginfo
22
+
23
+ puts "Running Progs Sync..." if verbose?
18
24
  invoke :progs
25
+
26
+ puts "Running Modinfo Sync..." if verbose?
19
27
  invoke :modinfo
28
+
29
+ puts "Running Mods Sync..." if verbose?
20
30
  invoke :mods
21
31
  end
22
32
 
@@ -43,8 +53,12 @@ module Icarus
43
53
  end
44
54
 
45
55
  no_commands do
56
+ def firestore
57
+ $firestore ||= Firestore.new
58
+ end
59
+
46
60
  def sync_info(type)
47
- sync = (type == :modinfo ? Icarus::Mod::Tools::ModinfoSync : Icarus::Mod::Tools::ProginfoSync).new
61
+ sync = (type == :modinfo ? Icarus::Mod::Tools::Sync::Modinfo : Icarus::Mod::Tools::Sync::Proginfo).new(client: firestore)
48
62
 
49
63
  puts "Retrieving repository Data..." if verbose?
50
64
  repositories = sync.repositories
@@ -69,7 +83,7 @@ module Icarus
69
83
  end
70
84
 
71
85
  def sync_list(type)
72
- sync = (type == :mods ? Icarus::Mod::Tools::ModSync : Icarus::Mod::Tools::ProgSync).new
86
+ sync = (type == :mods ? Icarus::Mod::Tools::Sync::Mods : Icarus::Mod::Tools::Sync::Progs).new(client: firestore)
73
87
 
74
88
  puts "Retrieving Info Data..." if verbose?
75
89
  info_array = sync.info_array
@@ -128,6 +142,7 @@ module Icarus
128
142
  end
129
143
  end
130
144
  end
145
+ # rubocop:enable Style/GlobalVars
131
146
  end
132
147
  end
133
148
  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
@@ -19,12 +19,12 @@ module Icarus
19
19
  @repos ||= list(:repositories)
20
20
  end
21
21
 
22
- def modinfo_list
23
- @modinfo_list ||= list(:modinfo)
22
+ def modinfo
23
+ @modinfo ||= list(:modinfo)
24
24
  end
25
25
 
26
- def proginfo_list
27
- @proginfo_list ||= list(:proginfo)
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("#{type}_list") + [payload]).flatten.uniq
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
- ModSync.new.info_array
13
+ Sync::Mods.new.info_array
14
14
  when :proginfo
15
- ProgSync.new.info_array
15
+ Sync::Progs.new.info_array
16
16
  else
17
17
  raise ArgumentError, "Invalid type: #{type}"
18
18
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Icarus
4
4
  module Mod
5
- VERSION = "1.8.1"
5
+ VERSION = "1.8.2.1"
6
6
  end
7
7
  end
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.1
4
+ version: 1.8.2.1
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-27 00:00:00.000000000 Z
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/proginfo_sync.rb
107
- - lib/icarus/mod/tools/sync_helpers.rb
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