Icarus-Mod-Tools 1.8.0 → 1.8.2

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: e89daa8f362dd79f861a471ca6793f767e753fd2627d0ba8e1845fedaace7d12
4
- data.tar.gz: a47625e44ac934097f21f17303068728926b9a32e814c81d09736bc49d08cefd
3
+ metadata.gz: 63aa634da9108a8b439681f4bce95519bd04ba0e2cc416c5c2632502e8aa3c35
4
+ data.tar.gz: dce88dc6da4c3c43199973de099c7a578641ce03082bbac2a8943fcd69e6aa40
5
5
  SHA512:
6
- metadata.gz: dd9a8c3c7d816b49d5e5f5828b66f87646b0fa9f8d01cd11ab8034a3572c0a1942e5459f51d22a518d70433b938d4041bfd8dfba0ea3943fa0dd82747a2980f2
7
- data.tar.gz: 2f82e939d00a943115b2c32432883fe6086a62da45e2749eb6db6d86f6bd73298c79d45ae808a23dbf4d612729d5510387b04159915a92ec43984f4e3239f3c6
6
+ metadata.gz: 030db22ed72e78fec9a03a6f5412d35143492cd19080095b59efcafb47feb3db78b4a5cafc04edc1880e626f30d6127d35a470a7998ffe4403873672bf4002d0
7
+ data.tar.gz: 025040c5268bc151ea186573fb21dc083c51d4e9a5b5666fad8c988642aabbe4fe515fb882fe4ba0c03500357a8ea37cd868cfe1f1b5dc25c1f4456066f8d4d2
data/.rubocop.yml CHANGED
@@ -38,11 +38,17 @@ Metrics/AbcSize:
38
38
  Exclude:
39
39
  - lib/icarus/mod/cli/*.rb # Thor command files
40
40
 
41
+ Metrics/BlockLength:
42
+ Enabled: false
43
+
41
44
  Metrics/ClassLength:
42
45
  Enabled: false
43
46
 
44
47
  Metrics/MethodLength:
45
- Max: 50
48
+ Enabled: false
49
+
50
+ Naming/BlockForwarding:
51
+ EnforcedStyle: explicit
46
52
 
47
53
  RSpec/MultipleMemoizedHelpers:
48
54
  Enabled: false
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.0)
4
+ Icarus-Mod-Tools (1.8.2)
5
5
  google-cloud-firestore (~> 2.7)
6
6
  octokit (~> 6.0)
7
7
  paint (~> 2.3)
@@ -14,7 +14,7 @@ GEM
14
14
  public_suffix (>= 2.0.2, < 6.0)
15
15
  ast (2.4.2)
16
16
  coderay (1.1.3)
17
- concurrent-ruby (1.1.10)
17
+ concurrent-ruby (1.2.0)
18
18
  diff-lcs (1.5.0)
19
19
  faraday (2.7.4)
20
20
  faraday-net_http (>= 2.0, < 3.1)
@@ -38,7 +38,7 @@ GEM
38
38
  google-cloud-env (1.6.0)
39
39
  faraday (>= 0.17.3, < 3.0)
40
40
  google-cloud-errors (1.3.0)
41
- google-cloud-firestore (2.8.0)
41
+ google-cloud-firestore (2.9.0)
42
42
  concurrent-ruby (~> 1.0)
43
43
  google-cloud-core (~> 1.5)
44
44
  google-cloud-firestore-v1 (~> 0.0)
@@ -65,10 +65,10 @@ GEM
65
65
  multi_json (~> 1.11)
66
66
  os (>= 0.9, < 2.0)
67
67
  signet (>= 0.16, < 2.a)
68
- grpc (1.50.0-x86_64-darwin)
68
+ grpc (1.51.0-x86_64-darwin)
69
69
  google-protobuf (~> 3.21)
70
70
  googleapis-common-protos-types (~> 1.0)
71
- grpc (1.50.0-x86_64-linux)
71
+ grpc (1.51.0-x86_64-linux)
72
72
  google-protobuf (~> 3.21)
73
73
  googleapis-common-protos-types (~> 1.0)
74
74
  guard (2.18.0)
@@ -131,7 +131,7 @@ GEM
131
131
  diff-lcs (>= 1.2.0, < 2.0)
132
132
  rspec-support (~> 3.12.0)
133
133
  rspec-support (3.12.0)
134
- rubocop (1.43.0)
134
+ rubocop (1.44.1)
135
135
  json (~> 2.3)
136
136
  parallel (~> 1.10)
137
137
  parser (>= 3.2.0.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
@@ -15,6 +15,14 @@ module Icarus
15
15
  puts firestore.update(:modinfo, payload, merge: true) ? "Success" : "Failure"
16
16
  end
17
17
 
18
+ desc "proginfo", "Adds an entry to 'meta/proginfo/list'"
19
+ def proginfo(item)
20
+ firestore = Firestore.new
21
+ payload = [firestore.list(:proginfo), item].flatten.compact
22
+
23
+ puts firestore.update(:proginfo, payload, merge: true) ? "Success" : "Failure"
24
+ end
25
+
18
26
  desc "repos", "Adds an entry to 'meta/repos/list'"
19
27
  def repos(item)
20
28
  firestore = Firestore.new
@@ -33,63 +33,75 @@ module Icarus
33
33
  method_option :sort, type: :string, default: "name", desc: "Sort by field (name, author, etc.)"
34
34
  method_option :filter, type: :array, default: [], desc: "Filter by field (name, author, etc.)"
35
35
  def mods
36
- valid_keys = Icarus::Mod::Tools::Modinfo::HASHKEYS + [:updated_at]
36
+ list_for_type(:mods)
37
+ end
37
38
 
38
- sort_field = options[:sort]&.to_sym
39
+ desc "progs", "Displays data from 'progs'"
40
+ method_option :sort, type: :string, default: "name", desc: "Sort by field (name, author, etc.)"
41
+ method_option :filter, type: :array, default: [], desc: "Filter by field (name, author, etc.)"
42
+ def progs
43
+ list_for_type(:progs)
44
+ end
39
45
 
40
- filter = !options[:filter].empty?
46
+ no_commands do
47
+ def list_for_type(type)
48
+ klass = type == :mods ? Icarus::Mod::Tools::Modinfo : Icarus::Mod::Tools::Proginfo
49
+ valid_keys = klass::HASHKEYS + [:updated_at]
50
+ sort_field = options[:sort]&.to_sym
51
+ filter = !options[:filter].empty?
41
52
 
42
- if filter
43
- filter_field = options[:filter].first&.to_sym
44
- filter_value = options[:filter].last&.to_s
53
+ if filter
54
+ filter_field = options[:filter].first&.to_sym
55
+ filter_value = options[:filter].last&.to_s
45
56
 
46
- raise Icarus::Mod::Tools::Error, "Invalid filter option #{options[:filter]}" unless options[:filter].empty? || options[:filter]&.count == 2
57
+ raise Icarus::Mod::Tools::Error, "Invalid filter option #{options[:filter]}" unless options[:filter].empty? || options[:filter]&.count == 2
47
58
 
48
- raise Icarus::Mod::Tools::Error, "Invalid filter field '#{filter_field}'" unless filter_field && valid_keys.include?(filter_field)
49
- end
59
+ raise Icarus::Mod::Tools::Error, "Invalid filter field '#{filter_field}'" unless filter_field && valid_keys.include?(filter_field)
60
+ end
50
61
 
51
- raise Icarus::Mod::Tools::Error, "Invalid sort field '#{sort_field}'" unless valid_keys.include?(sort_field)
62
+ raise Icarus::Mod::Tools::Error, "Invalid sort field '#{sort_field}'" unless valid_keys.include?(sort_field)
52
63
 
53
- puts "Sorted by #{sort_field}" if sort_field && verbose > 2
54
- puts "Filtered by #{filter_field} = #{filter_value}" if filter_field && verbose > 2
64
+ puts "Sorted by #{sort_field}" if sort_field && verbose > 2
65
+ puts "Filtered by #{filter_field} = #{filter_value}" if filter_field && verbose > 2
55
66
 
56
- mods = Firestore.new.list(:mods)
67
+ items = Firestore.new.list(type)
57
68
 
58
- # Filter by field
59
- mods.select! { |mod| mod.send(filter_field).downcase =~ /#{filter_value&.downcase}/ } if filter_field
69
+ # Filter by field
70
+ items.select! { |item| item.send(filter_field).downcase =~ /#{filter_value&.downcase}/ } if filter_field
60
71
 
61
- if mods.empty?
62
- puts "no mods found" if verbose?
63
- return
64
- end
72
+ if items.empty?
73
+ puts "no entries found" if verbose?
74
+ return
75
+ end
65
76
 
66
- header_format = "%-<name>50s %-<author>20s %-<version>10s %-<updated_at>20s"
67
- header_format += " %-<id>20s %<description>s" if verbose > 1
68
-
69
- if verbose?
70
- puts format(
71
- header_format,
72
- name: "NAME",
73
- author: "AUTHOR",
74
- version: "VERSION",
75
- updated_at: "LAST UPDATED",
76
- id: "ID",
77
- description: "DESCRIPTION"
78
- )
79
- end
77
+ header_format = "%-<name>50s %-<author>20s %-<version>10s %-<updated_at>20s"
78
+ header_format += " %-<id>20s %<description>s" if verbose > 1
80
79
 
81
- # Sort by field, optionally subsorting by name
82
- (sort_field == :name ? mods.sort_by(&:name) : mods.sort_by { |mod| [mod.send(sort_field), mod.name] }).each do |mod|
83
- data_format = "%-<name>50s %-<author>20s v%-<version>10s%-<updated_at>20s"
84
- data_format += " %-<id>20s %<description>s" if verbose > 1
80
+ if verbose?
81
+ puts format(
82
+ header_format,
83
+ name: "NAME",
84
+ author: "AUTHOR",
85
+ version: "VERSION",
86
+ updated_at: "LAST UPDATED",
87
+ id: "ID",
88
+ description: "DESCRIPTION"
89
+ )
90
+ end
85
91
 
86
- puts format(data_format, mod.to_h.merge(id: mod.id, updated_at: mod.updated_at.strftime("%Y-%m-%d %H:%M:%S")))
87
- end
92
+ # Sort by field, optionally subsorting by name
93
+ (sort_field == :name ? items.sort_by(&:name) : items.sort_by { |item| [item.send(sort_field), item.name] }).each do |item|
94
+ data_format = "%-<name>50s %-<author>20s v%-<version>10s%-<updated_at>20s"
95
+ data_format += " %-<id>20s %<description>s" if verbose > 1
88
96
 
89
- puts "Total: #{mods.count}" if verbose?
90
- rescue Icarus::Mod::Tools::Error => e
91
- puts e.message
92
- exit 1
97
+ puts format(data_format, item.to_h.merge(id: item.id, updated_at: item.updated_at.strftime("%Y-%m-%d %H:%M:%S")))
98
+ end
99
+
100
+ puts "Total: #{items.count}" if verbose?
101
+ rescue Icarus::Mod::Tools::Error => e
102
+ puts e.message
103
+ exit 1
104
+ end
93
105
  end
94
106
  end
95
107
  end
@@ -1,15 +1,18 @@
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"
@@ -22,178 +25,117 @@ module Icarus
22
25
 
23
26
  desc "modinfo", "Reads from 'meta/repos/list' and Syncs any modinfo files we find (github only for now)"
24
27
  def modinfo
25
- modinfo_sync = Icarus::Mod::Tools::ModinfoSync.new
26
-
27
- puts "Retrieving repository Data..." if verbose?
28
- repositories = modinfo_sync.repositories
29
-
30
- raise Icarus::Mod::Tools::Error, "Unable to find any repositories!" unless repositories.any?
31
-
32
- puts "Retrieving modinfo Array..." if verbose?
33
- modinfo_array = modinfo_sync.modinfo_data(repositories, verbose: verbose > 1)&.map(&:download_url)&.compact
34
-
35
- raise Icarus::Mod::Tools::Error, "No modinfo.json files found" unless modinfo_array&.any?
36
-
37
- if options[:dry_run]
38
- puts "Dry run; no changes will be made"
39
- return
40
- end
41
-
42
- puts "Saving to Firestore..." if verbose?
43
- response = modinfo_sync.update(modinfo_array)
44
- puts response ? "Success" : "Failure (may be no changes)" if verbose?
45
- rescue Icarus::Mod::Tools::Error => e
46
- warn e.message
28
+ sync_info(:modinfo)
47
29
  end
48
30
 
49
31
  desc "proginfo", "Reads from 'meta/repos/list' and Syncs any proginfo files we find (github only for now)"
50
32
  def proginfo
51
- proginfo_sync = Icarus::Mod::Tools::ProginfoSync.new
52
-
53
- puts "Retrieving repository Data..." if verbose?
54
- repositories = proginfo_sync.repositories
55
-
56
- raise Icarus::Mod::Tools::Error, "Unable to find any repositories!" unless repositories.any?
57
-
58
- puts "Retrieving proginfo Array..." if verbose?
59
- proginfo_array = proginfo_sync.proginfo_data(repositories, verbose: verbose > 1)&.map(&:download_url)&.compact
60
-
61
- raise Icarus::Mod::Tools::Error, "no proginfo.json files found" unless proginfo_array&.any?
62
-
63
- if options[:dry_run]
64
- puts "Dry run; no changes will be made"
65
- return
66
- end
67
-
68
- puts "Saving to Firestore..." if verbose?
69
- response = proginfo_sync.update(proginfo_array)
70
- puts response ? "Success" : "Failure (may be no changes)" if verbose?
71
- rescue Icarus::Mod::Tools::Error => e
72
- warn e.message
33
+ sync_info(:proginfo)
73
34
  end
74
35
 
75
36
  desc "mods", "Reads from 'meta/modinfo/list' and updates the 'mods' database accordingly"
76
37
  method_option :check, type: :boolean, default: false, desc: "Validate modinfo without applying changes"
77
38
  def mods
78
- modsync = Icarus::Mod::Tools::ModSync.new
39
+ sync_list(:mods)
40
+ end
79
41
 
80
- puts "Retrieving modinfo Data..." if verbose?
81
- modinfo_array = modsync.modinfo_array
42
+ desc "progs", "Reads from 'meta/proginfo/list' and updates the 'progs' database accordingly"
43
+ method_option :check, type: :boolean, default: false, desc: "Validate proginfo without applying changes"
44
+ def progs
45
+ sync_list(:progs)
46
+ end
82
47
 
83
- puts "Retrieving mod Data..." if verbose?
84
- mod_array = modsync.mods
48
+ no_commands do
49
+ def firestore
50
+ $firestore ||= Firestore.new
51
+ end
85
52
 
86
- return if options[:check]
53
+ def sync_info(type)
54
+ sync = (type == :modinfo ? Icarus::Mod::Tools::Sync::Modinfo : Icarus::Mod::Tools::Sync::Proginfo).new(client: firestore)
87
55
 
88
- puts "Updating mod Data..." if verbose?
89
- modinfo_array.each do |mod|
90
- verb = "Creating"
56
+ puts "Retrieving repository Data..." if verbose?
57
+ repositories = sync.repositories
91
58
 
92
- puts "Validating modinfo Data for #{mod.uniq_name}..." if verbose > 2
93
- warn "Skipping mod #{mod.uniq_name} due to validation errors" && next unless mod.validate
59
+ raise Icarus::Mod::Tools::Error, "Unable to find any repositories!" unless repositories.any?
94
60
 
95
- doc_id = modsync.find_mod(mod)
96
- if doc_id
97
- puts "Found existing mod #{mod.name} at #{doc_id}" if verbose > 2
98
- mod.id = doc_id
99
- verb = "Updating"
100
- end
61
+ puts "Retrieving Info Array..." if verbose?
62
+ info_array = sync.data(repositories, verbose: verbose > 1)&.map(&:download_url)&.compact
101
63
 
102
- print format("#{verb} %-<name>60s", name: "'#{mod.author || "NoOne"}/#{mod.name || "Unnamed"}'") if verbose > 1
64
+ raise Icarus::Mod::Tools::Error, "no .json files found for #{type}" unless info_array&.any?
103
65
 
104
66
  if options[:dry_run]
105
- puts "Dry run; no changes will be made" if verbose > 1
106
- next
67
+ puts "Dry run; no changes will be made"
68
+ return
107
69
  end
108
70
 
109
- response = modsync.update(mod)
110
- puts format("%<status>10s", status: response ? "Success" : "Failure") if verbose > 1
111
- end
112
-
113
- if options[:dry_run]
114
- puts "Dry run; no changes will be made" if verbose?
115
- return
71
+ puts "Saving to Firestore..." if verbose?
72
+ response = sync.update(info_array)
73
+ puts response ? "Success" : "Failure (may be no changes)" if verbose?
74
+ rescue Icarus::Mod::Tools::Error => e
75
+ warn e.message
116
76
  end
117
77
 
118
- puts "Created/Updated #{modinfo_array.count} mods" if verbose?
78
+ def sync_list(type)
79
+ sync = (type == :mods ? Icarus::Mod::Tools::Sync::Mods : Icarus::Mod::Tools::Sync::Progs).new(client: firestore)
119
80
 
120
- delete_array = mod_array.filter { |mod| modsync.find_modinfo(mod).nil? }
81
+ puts "Retrieving Info Data..." if verbose?
82
+ info_array = sync.info_array
121
83
 
122
- return unless delete_array.any?
123
-
124
- puts "Deleting outdated mods..." if verbose?
125
- delete_array.each do |mod|
126
- print format("Deleting %-<name>60s", name: "'#{mod.author || "NoOne"}/#{mod.name || "Unnamed'"}") if verbose > 1
127
- response = modsync.delete(mod)
128
- puts format("%<status>10s", status: response ? "Success" : "Failure") if verbose > 1
129
- end
130
-
131
- puts "Deleted #{delete_array.count} outdated mods" if verbose?
132
- rescue Icarus::Mod::Tools::Error => e
133
- warn e.message
134
- end
84
+ puts "Retrieving List Data..." if verbose?
85
+ list_array = sync.send(type)
135
86
 
136
- desc "progs", "Reads from 'meta/proginfo/list' and updates the 'progs' database accordingly"
137
- method_option :check, type: :boolean, default: false, desc: "Validate proginfo without applying changes"
138
- def progs
139
- progsync = Icarus::Mod::Tools::ProgSync.new
87
+ return if options[:check]
140
88
 
141
- puts "Retrieving proginfo Data..." if verbose?
142
- proginfo_array = progsync.proginfo_array
89
+ puts "Updating List Data..." if verbose?
90
+ info_array.each do |list|
91
+ verb = "Creating"
143
92
 
144
- puts "Retrieving progs Data..." if verbose?
145
- prog_array = progsync.progs
93
+ puts "Validating Info Data for #{list.uniq_name}..." if verbose > 2
94
+ warn "Skipping List #{list.uniq_name} due to validation errors" && next unless list.valid?
146
95
 
147
- return if options[:check]
96
+ doc_id = sync.find(list)
97
+ if doc_id
98
+ puts "Found existing list #{list.name} at #{doc_id}" if verbose > 2
99
+ list.id = doc_id
100
+ verb = "Updating"
101
+ end
148
102
 
149
- puts "Updating Program Data..." if verbose?
150
- proginfo_array.each do |prog|
151
- verb = "Creating"
103
+ print format("#{verb} %-<name>60s", name: "'#{list.author || "NoOne"}/#{list.name || "Unnamed"}'") if verbose > 1
152
104
 
153
- puts "Validating proginfo Data for #{prog.uniq_name}..." if verbose > 2
154
- warn "Skipping program #{prog.uniq_name} due to validation errors" && next unless prog.validate
105
+ if options[:dry_run]
106
+ puts "Dry run; no changes will be made" if verbose > 1
107
+ next
108
+ end
155
109
 
156
- doc_id = progsync.find_prog(prog)
157
- if doc_id
158
- puts "Found existing program #{prog.name} at #{doc_id}" if verbose > 2
159
- prog.id = doc_id
160
- verb = "Updating"
110
+ response = sync.update(list)
111
+ puts format("%<status>10s", status: response ? "Success" : "Failure") if verbose > 1
161
112
  end
162
113
 
163
- print format("#{verb} %-<name>60s", name: "'#{prog.author || "NoOne"}/#{prog.name || "Unnamed"}'") if verbose > 1
164
-
165
114
  if options[:dry_run]
166
- puts "Dry run; no changes will be made" if verbose > 1
167
- next
115
+ puts "Dry run; no changes will be made" if verbose?
116
+ return
168
117
  end
169
118
 
170
- response = progsync.update(prog)
171
- puts format("%<status>10s", status: response ? "Success" : "Failure") if verbose > 1
172
- end
119
+ puts "Created/Updated #{info_array.count} Items" if verbose?
173
120
 
174
- if options[:dry_run]
175
- puts "Dry run; no changes will be made" if verbose?
176
- return
177
- end
178
-
179
- puts "Created/Updated #{proginfo_array.count} Programs" if verbose?
121
+ delete_array = list_array.filter { |list| sync.find_info(list).nil? }
180
122
 
181
- delete_array = prog_array.filter { |prog| progsync.find_proginfo(prog).nil? }
123
+ return unless delete_array.any?
182
124
 
183
- return unless delete_array.any?
125
+ puts "Deleting outdated items..." if verbose?
126
+ delete_array.each do |list|
127
+ print format("Deleting %-<name>60s", name: "'#{list.author || "NoOne"}/#{list.name || "Unnamed'"}") if verbose > 1
128
+ response = sync.delete(list)
129
+ puts format("%<status>10s", status: response ? "Success" : "Failure") if verbose > 1
130
+ end
184
131
 
185
- puts "Deleting outdated programs..." if verbose?
186
- delete_array.each do |prog|
187
- print format("Deleting %-<name>60s", name: "'#{prog.author || "NoOne"}/#{prog.name || "Unnamed'"}") if verbose > 1
188
- response = progsync.delete(prog)
189
- puts format("%<status>10s", status: response ? "Success" : "Failure") if verbose > 1
132
+ puts "Deleted #{delete_array.count} outdated items" if verbose?
133
+ rescue Icarus::Mod::Tools::Error => e
134
+ warn e.message
190
135
  end
191
-
192
- puts "Deleted #{delete_array.count} outdated programs" if verbose?
193
- rescue Icarus::Mod::Tools::Error => e
194
- warn e.message
195
136
  end
196
137
  end
138
+ # rubocop:enable Style/GlobalVars
197
139
  end
198
140
  end
199
141
  end