Icarus-Mod-Tools 1.8.0 → 1.8.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: e89daa8f362dd79f861a471ca6793f767e753fd2627d0ba8e1845fedaace7d12
4
- data.tar.gz: a47625e44ac934097f21f17303068728926b9a32e814c81d09736bc49d08cefd
3
+ metadata.gz: d70aff1f7ed368044b414fdca605fa438e0fbfe68c2af436d534a233fc6bff17
4
+ data.tar.gz: e4467d443894344c50a2c3c663e262afd7e54cc806da308ecd16d732bcd2c844
5
5
  SHA512:
6
- metadata.gz: dd9a8c3c7d816b49d5e5f5828b66f87646b0fa9f8d01cd11ab8034a3572c0a1942e5459f51d22a518d70433b938d4041bfd8dfba0ea3943fa0dd82747a2980f2
7
- data.tar.gz: 2f82e939d00a943115b2c32432883fe6086a62da45e2749eb6db6d86f6bd73298c79d45ae808a23dbf4d612729d5510387b04159915a92ec43984f4e3239f3c6
6
+ metadata.gz: 26c83360237ab149e6738e60966df113f8ede55460f85b0b2de29dd690cea238cdfda8af0ffc70f288ca58765b535d18b2cfcb21e0619b0a8226bfe099e7fecc
7
+ data.tar.gz: 278435526ede69d45383920bee07fc3fc094924d022ed55c54141d00e9b53ef003d7688fb26bc4f251e3b13705b743013875583d553ca8c22198a7daeb590238
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/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.1)
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)
@@ -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
@@ -22,176 +22,110 @@ module Icarus
22
22
 
23
23
  desc "modinfo", "Reads from 'meta/repos/list' and Syncs any modinfo files we find (github only for now)"
24
24
  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
25
+ sync_info(:modinfo)
47
26
  end
48
27
 
49
28
  desc "proginfo", "Reads from 'meta/repos/list' and Syncs any proginfo files we find (github only for now)"
50
29
  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
30
+ sync_info(:proginfo)
73
31
  end
74
32
 
75
33
  desc "mods", "Reads from 'meta/modinfo/list' and updates the 'mods' database accordingly"
76
34
  method_option :check, type: :boolean, default: false, desc: "Validate modinfo without applying changes"
77
35
  def mods
78
- modsync = Icarus::Mod::Tools::ModSync.new
79
-
80
- puts "Retrieving modinfo Data..." if verbose?
81
- modinfo_array = modsync.modinfo_array
36
+ sync_list(:mods)
37
+ end
82
38
 
83
- puts "Retrieving mod Data..." if verbose?
84
- mod_array = modsync.mods
39
+ desc "progs", "Reads from 'meta/proginfo/list' and updates the 'progs' database accordingly"
40
+ method_option :check, type: :boolean, default: false, desc: "Validate proginfo without applying changes"
41
+ def progs
42
+ sync_list(:progs)
43
+ end
85
44
 
86
- return if options[:check]
45
+ no_commands do
46
+ def sync_info(type)
47
+ sync = (type == :modinfo ? Icarus::Mod::Tools::ModinfoSync : Icarus::Mod::Tools::ProginfoSync).new
87
48
 
88
- puts "Updating mod Data..." if verbose?
89
- modinfo_array.each do |mod|
90
- verb = "Creating"
49
+ puts "Retrieving repository Data..." if verbose?
50
+ repositories = sync.repositories
91
51
 
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
52
+ raise Icarus::Mod::Tools::Error, "Unable to find any repositories!" unless repositories.any?
94
53
 
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
54
+ puts "Retrieving Info Array..." if verbose?
55
+ info_array = sync.data(repositories, verbose: verbose > 1)&.map(&:download_url)&.compact
101
56
 
102
- print format("#{verb} %-<name>60s", name: "'#{mod.author || "NoOne"}/#{mod.name || "Unnamed"}'") if verbose > 1
57
+ raise Icarus::Mod::Tools::Error, "no .json files found for #{type}" unless info_array&.any?
103
58
 
104
59
  if options[:dry_run]
105
- puts "Dry run; no changes will be made" if verbose > 1
106
- next
60
+ puts "Dry run; no changes will be made"
61
+ return
107
62
  end
108
63
 
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
64
+ puts "Saving to Firestore..." if verbose?
65
+ response = sync.update(info_array)
66
+ puts response ? "Success" : "Failure (may be no changes)" if verbose?
67
+ rescue Icarus::Mod::Tools::Error => e
68
+ warn e.message
116
69
  end
117
70
 
118
- puts "Created/Updated #{modinfo_array.count} mods" if verbose?
71
+ def sync_list(type)
72
+ sync = (type == :mods ? Icarus::Mod::Tools::ModSync : Icarus::Mod::Tools::ProgSync).new
119
73
 
120
- delete_array = mod_array.filter { |mod| modsync.find_modinfo(mod).nil? }
74
+ puts "Retrieving Info Data..." if verbose?
75
+ info_array = sync.info_array
121
76
 
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
77
+ puts "Retrieving List Data..." if verbose?
78
+ list_array = sync.send(type)
135
79
 
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
80
+ return if options[:check]
140
81
 
141
- puts "Retrieving proginfo Data..." if verbose?
142
- proginfo_array = progsync.proginfo_array
82
+ puts "Updating List Data..." if verbose?
83
+ info_array.each do |list|
84
+ verb = "Creating"
143
85
 
144
- puts "Retrieving progs Data..." if verbose?
145
- prog_array = progsync.progs
86
+ puts "Validating Info Data for #{list.uniq_name}..." if verbose > 2
87
+ warn "Skipping List #{list.uniq_name} due to validation errors" && next unless list.valid?
146
88
 
147
- return if options[:check]
89
+ doc_id = sync.find(list)
90
+ if doc_id
91
+ puts "Found existing list #{list.name} at #{doc_id}" if verbose > 2
92
+ list.id = doc_id
93
+ verb = "Updating"
94
+ end
148
95
 
149
- puts "Updating Program Data..." if verbose?
150
- proginfo_array.each do |prog|
151
- verb = "Creating"
96
+ print format("#{verb} %-<name>60s", name: "'#{list.author || "NoOne"}/#{list.name || "Unnamed"}'") if verbose > 1
152
97
 
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
98
+ if options[:dry_run]
99
+ puts "Dry run; no changes will be made" if verbose > 1
100
+ next
101
+ end
155
102
 
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"
103
+ response = sync.update(list)
104
+ puts format("%<status>10s", status: response ? "Success" : "Failure") if verbose > 1
161
105
  end
162
106
 
163
- print format("#{verb} %-<name>60s", name: "'#{prog.author || "NoOne"}/#{prog.name || "Unnamed"}'") if verbose > 1
164
-
165
107
  if options[:dry_run]
166
- puts "Dry run; no changes will be made" if verbose > 1
167
- next
108
+ puts "Dry run; no changes will be made" if verbose?
109
+ return
168
110
  end
169
111
 
170
- response = progsync.update(prog)
171
- puts format("%<status>10s", status: response ? "Success" : "Failure") if verbose > 1
172
- end
112
+ puts "Created/Updated #{info_array.count} Items" if verbose?
173
113
 
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?
114
+ delete_array = list_array.filter { |list| sync.find_info(list).nil? }
180
115
 
181
- delete_array = prog_array.filter { |prog| progsync.find_proginfo(prog).nil? }
116
+ return unless delete_array.any?
182
117
 
183
- return unless delete_array.any?
118
+ puts "Deleting outdated items..." if verbose?
119
+ delete_array.each do |list|
120
+ print format("Deleting %-<name>60s", name: "'#{list.author || "NoOne"}/#{list.name || "Unnamed'"}") if verbose > 1
121
+ response = sync.delete(list)
122
+ puts format("%<status>10s", status: response ? "Success" : "Failure") if verbose > 1
123
+ end
184
124
 
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
125
+ puts "Deleted #{delete_array.count} outdated items" if verbose?
126
+ rescue Icarus::Mod::Tools::Error => e
127
+ warn e.message
190
128
  end
191
-
192
- puts "Deleted #{delete_array.count} outdated programs" if verbose?
193
- rescue Icarus::Mod::Tools::Error => e
194
- warn e.message
195
129
  end
196
130
  end
197
131
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "tools/modinfo_validate"
3
+ require "tools/validator"
4
4
 
5
5
  module Icarus
6
6
  module Mod
@@ -9,35 +9,46 @@ module Icarus
9
9
  class Validate < SubcommandBase
10
10
  desc "modinfo", "Reads modinfo data from 'meta/modinfo/list' and Validates syntax of modfiles"
11
11
  def modinfo
12
- exit_code = 0
13
- modinfo_validate = Icarus::Mod::Tools::ModinfoValidate.new
12
+ validate(:modinfo)
13
+ end
14
+
15
+ desc "proginfo", "Reads proginfo data from 'meta/proginfo/list' and Validates syntax of progfiles"
16
+ def proginfo
17
+ validate(:proginfo)
18
+ end
14
19
 
15
- puts "Validating Entries..." if verbose?
16
- max_length = modinfo_validate.modinfo_array.map { |modinfo| modinfo.uniq_name.length }.max
20
+ no_commands do
21
+ def validate(type)
22
+ exit_code = 0
23
+ validator = Icarus::Mod::Tools::Validator.new(type)
17
24
 
18
- modinfo_validate.modinfo_array.each do |modinfo|
19
- print Paint[format("%s %-#{max_length}s", "Running validation steps on", modinfo.uniq_name), :cyan, :bright] if verbose > 1
25
+ puts "Validating Entries..." if verbose?
26
+ max_length = validator.array.map { |info| info.uniq_name.length }.max + 1
20
27
 
21
- modinfo.validate
28
+ validator.array.each do |info|
29
+ print Paint[format("%s %-#{max_length}s", "Running validation steps on", info.uniq_name), :cyan, :bright] if verbose > 1
22
30
 
23
- if modinfo.errors.empty? && modinfo.warnings.empty?
24
- puts Paint["SUCCESS", :green, :bright] if verbose > 1
25
- next
26
- end
31
+ info.valid?
27
32
 
28
- if modinfo.errors.any?
29
- exit_code = 1
30
- puts Paint["ERROR", :red, :bright] if verbose? && verbose > 1
31
- warn modinfo.errors.map { |error| Paint[error, :red] }.join("\n")
33
+ unless info.errors? || info.warnings?
34
+ puts Paint["SUCCESS", :green, :bright] if verbose > 1
35
+ next
36
+ end
37
+
38
+ if info.errors?
39
+ exit_code = 1
40
+ puts Paint["ERROR", :red, :bright] if verbose? && verbose > 1
41
+ puts info.errors.map { |error| Paint["#{error} in #{info.uniq_name}", :red] }.join("\n")
42
+ puts "\n" if verbose > 1
43
+ end
44
+
45
+ puts Paint["WARNING", :yellow, :bright] if info.warnings.any? && verbose > 1
46
+ puts info.warnings.map { |warning| Paint["#{warning} in #{info.uniq_name}", :yellow] }.join("\n")
32
47
  puts "\n" if verbose > 1
33
48
  end
34
49
 
35
- puts Paint["WARNING", :yellow, :bright] if modinfo.warnings.any? && verbose > 1
36
- puts modinfo.warnings.map { |warning| Paint["#{warning} in #{modinfo.uniq_name}", :yellow] }.join("\n")
37
- puts "\n" if verbose > 1
50
+ exit exit_code
38
51
  end
39
-
40
- exit exit_code
41
52
  end
42
53
  end
43
54
  end
@@ -5,7 +5,7 @@ module Icarus
5
5
  module Tools
6
6
  # Base class for Modinfo and Proginfo
7
7
  class Baseinfo
8
- attr_reader :data, :errors, :id, :created_at, :updated_at, :warnings
8
+ attr_reader :data, :id, :created_at, :updated_at
9
9
 
10
10
  HASHKEYS = %i[name author version compatibility description fileType fileURL imageURL readmeURL].freeze
11
11
 
@@ -23,8 +23,24 @@ module Icarus
23
23
  @data = data.is_a?(String) ? JSON.parse(data, symbolize_names: true) : data
24
24
  end
25
25
 
26
+ def errors
27
+ @errors.compact.uniq
28
+ end
29
+
30
+ def errors?
31
+ @errors.compact.any?
32
+ end
33
+
34
+ def warnings
35
+ @warnings.compact.uniq
36
+ end
37
+
38
+ def warnings?
39
+ @warnings.compact.any?
40
+ end
41
+
26
42
  def uniq_name
27
- "#{author}/#{name}"
43
+ "#{author.strip}/#{name.strip}"
28
44
  end
29
45
 
30
46
  def to_json(*args)
@@ -35,7 +51,7 @@ module Icarus
35
51
  HASHKEYS.each_with_object({}) { |key, hash| hash[key] = @data[key] }
36
52
  end
37
53
 
38
- def validate
54
+ def valid?
39
55
  @warnings << "Version should be a version string" unless validate_version(version)
40
56
 
41
57
  %w[name author description].each do |key|
@@ -48,10 +64,10 @@ module Icarus
48
64
  @errors << "Invalid URL #{key.capitalize}: #{@data[key.to_sym] || "blank"}" unless validate_url(@data[key.to_sym])
49
65
  end
50
66
 
51
- @errors.empty?
67
+ !errors?
52
68
  end
53
69
 
54
- def method_missing(method_name, *_args, &)
70
+ def method_missing(method_name, *_args, &_block)
55
71
  @data[method_name.to_sym]&.strip
56
72
  end
57
73
 
@@ -61,6 +77,10 @@ module Icarus
61
77
 
62
78
  private
63
79
 
80
+ def filetype_pattern
81
+ /(zip|pak|exmodz?)/i
82
+ end
83
+
64
84
  def validate_url(url)
65
85
  return true if url.nil? || url.empty?
66
86
 
@@ -68,7 +88,7 @@ module Icarus
68
88
  end
69
89
 
70
90
  def validate_filetype(filetype)
71
- %w[pak zip exmod].include?(filetype.downcase)
91
+ filetype.match?(filetype_pattern)
72
92
  end
73
93
 
74
94
  def validate_string(string)
@@ -18,8 +18,8 @@ module Icarus
18
18
  @firestore.mods
19
19
  end
20
20
 
21
- def modinfo_array
22
- @modinfo_array ||= @firestore.modinfo_list.map do |url|
21
+ def info_array
22
+ @info_array ||= @firestore.modinfo_list.map do |url|
23
23
  retrieve_from_url(url)[:mods].map { |mod| Modinfo.new(mod) if mod[:name] =~ /[a-z0-9]+/i }
24
24
  rescue Icarus::Mod::Tools::RequestFailed
25
25
  warn "Skipped; Failed to retrieve #{url}"
@@ -30,12 +30,12 @@ module Icarus
30
30
  end.flatten.compact
31
31
  end
32
32
 
33
- def find_mod(modinfo)
33
+ def find(modinfo)
34
34
  @firestore.find_by_type(type: "mods", name: modinfo.name, author: modinfo.author)&.id
35
35
  end
36
36
 
37
- def find_modinfo(modinfo)
38
- @modinfo_array.find { |mod| mod.name == modinfo.name }
37
+ def find_info(modinfo)
38
+ @info_array.find { |mod| mod.name == modinfo.name }
39
39
  end
40
40
 
41
41
  def update(modinfo)
@@ -29,7 +29,7 @@ module Icarus
29
29
  retrieve_from_url(url)
30
30
  end
31
31
 
32
- def modinfo_data(repositories, verbose: false)
32
+ def data(repositories, verbose: false)
33
33
  repositories.map do |repo|
34
34
  print "searching #{repo}..." if verbose
35
35
 
@@ -18,8 +18,8 @@ module Icarus
18
18
  @firestore.progs
19
19
  end
20
20
 
21
- def proginfo_array
22
- @proginfo_array ||= @firestore.proginfo_list.map do |url|
21
+ def info_array
22
+ @info_array ||= @firestore.proginfo_list.map do |url|
23
23
  retrieve_from_url(url)[:programs].map { |prog| Proginfo.new(prog) if prog[:name] =~ /[a-z0-9]+/i }
24
24
  rescue Icarus::Mod::Tools::RequestFailed
25
25
  warn "Skipped; Failed to retrieve #{url}"
@@ -30,12 +30,12 @@ module Icarus
30
30
  end.flatten.compact
31
31
  end
32
32
 
33
- def find_prog(proginfo)
33
+ def find(proginfo)
34
34
  @firestore.find_by_type(type: "progs", name: proginfo.name, author: proginfo.author)&.id
35
35
  end
36
36
 
37
- def find_proginfo(proginfo)
38
- @proginfo_array.find { |prog| prog.name == proginfo.name }
37
+ def find_info(proginfo)
38
+ @info_array.find { |prog| prog.name == proginfo.name }
39
39
  end
40
40
 
41
41
  def update(proginfo)
@@ -12,6 +12,12 @@ module Icarus
12
12
  @data[:fileType] || "zip"
13
13
  end
14
14
  # rubocop:enable Naming/MethodName
15
+
16
+ private
17
+
18
+ def filetype_pattern
19
+ /(zip|exe)/i
20
+ end
15
21
  end
16
22
  end
17
23
  end
@@ -29,7 +29,7 @@ module Icarus
29
29
  retrieve_from_url(url)
30
30
  end
31
31
 
32
- def proginfo_data(repositories, verbose: false)
32
+ def data(repositories, verbose: false)
33
33
  repositories.map do |repo|
34
34
  print "searching #{repo}..." if verbose
35
35
 
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Icarus
4
+ module Mod
5
+ module Tools
6
+ # Validate Methods
7
+ class Validator
8
+ attr_reader :array
9
+
10
+ def initialize(type)
11
+ @array = case type
12
+ when :modinfo
13
+ ModSync.new.info_array
14
+ when :proginfo
15
+ ProgSync.new.info_array
16
+ else
17
+ raise ArgumentError, "Invalid type: #{type}"
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Icarus
4
4
  module Mod
5
- VERSION = "1.8.0"
5
+ VERSION = "1.8.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.0
4
+ version: 1.8.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-23 00:00:00.000000000 Z
11
+ date: 2023-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: google-cloud-firestore
@@ -101,11 +101,11 @@ files:
101
101
  - lib/icarus/mod/tools/mod_sync.rb
102
102
  - lib/icarus/mod/tools/modinfo.rb
103
103
  - lib/icarus/mod/tools/modinfo_sync.rb
104
- - lib/icarus/mod/tools/modinfo_validate.rb
105
104
  - lib/icarus/mod/tools/prog_sync.rb
106
105
  - lib/icarus/mod/tools/proginfo.rb
107
106
  - lib/icarus/mod/tools/proginfo_sync.rb
108
107
  - lib/icarus/mod/tools/sync_helpers.rb
108
+ - lib/icarus/mod/tools/validator.rb
109
109
  - lib/icarus/mod/version.rb
110
110
  - sig/database/sync/sync.rbs
111
111
  homepage: https://github.com/DonovanMods/icarus-mod-tools
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Icarus
4
- module Mod
5
- module Tools
6
- # Validate Methods
7
- class ModinfoValidate
8
- attr_reader :modinfo_array
9
-
10
- def initialize
11
- @modinfo_array = ModSync.new.modinfo_array
12
- end
13
- end
14
- end
15
- end
16
- end