Icarus-Mod-Tools 1.9.0 → 2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9fba522a3f41d8d1c77402e95f59684594bb7be97a8227966e4b647777152f05
4
- data.tar.gz: 933ee795c5f13f964e1a866c0ce06549912c6e99c06c78fd687e5c25886bf148
3
+ metadata.gz: aba02b8c9f3f8a95dfaff8dc2a13914d9ec71153da336e2dc2ab954d6e5d6560
4
+ data.tar.gz: aad3f90f121957a893282dfc91cd424e21ecdbb155ecde1135f35644f86e8a3d
5
5
  SHA512:
6
- metadata.gz: 0cd6a08a77be86801059b2b63a81fb662583ca404391afa2fd9544dbda8549e0652ce4c7db9a5ff64edb04afd07b50b742e1473861639ea190eddd22dda70f03
7
- data.tar.gz: 1f28bff449d31ea47fa9166586dd10b996c466ed898ff53449a2cfd84fff98a5454418214fa479fa9976c0700ca88b12724c8b1f166b059093658d32862ee938
6
+ metadata.gz: 54dd466afe7f4f01a2deb0999752cc298ee52a2b1f4da0e1abf26c82677ecabf1a9f293765dc081d6f5c5e05ea017c57da1cbf9ac114a287df922c8ab40ba696
7
+ data.tar.gz: b6f4a7bf87a62d190928cbf42ca57864c8651a2f7e353869e6221364f7f3e2c7ce59e51b69818636afe99c1ada9dfdbde4dcc29a43981b6caeab913856d1a779
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- Icarus-Mod-Tools (1.9.0)
4
+ Icarus-Mod-Tools (2.0)
5
5
  google-cloud-firestore (~> 2.7)
6
6
  octokit (~> 6.0)
7
7
  paint (~> 2.3)
@@ -86,7 +86,7 @@ GEM
86
86
  guard-compat (~> 1.1)
87
87
  rspec (>= 2.99.0, < 4.0)
88
88
  json (2.6.3)
89
- jwt (2.6.0)
89
+ jwt (2.7.0)
90
90
  listen (3.8.0)
91
91
  rb-fsevent (~> 0.10, >= 0.10.3)
92
92
  rb-inotify (~> 0.9, >= 0.9.10)
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "firestore"
4
+ require "tools/modinfo"
4
5
 
5
6
  module Icarus
6
7
  module Mod
@@ -30,6 +31,29 @@ module Icarus
30
31
 
31
32
  puts firestore.update(:repositories, payload, merge: true) ? "Success" : "Failure"
32
33
  end
34
+
35
+ desc "mod", "Adds an entry to 'mods'"
36
+ method_option :modinfo, type: :string, required: true, default: "modinfo.json", desc: "Path to the modinfo.json file"
37
+ def mod
38
+ firestore = Firestore.new
39
+ data = options[:modinfo]
40
+
41
+ if data.nil? || !File.exist?(data)
42
+ warn "Invalid data file: #{data}"
43
+ exit 1
44
+ end
45
+
46
+ JSON.parse(File.read(data), symbolize_names: true)[:mods].each do |mod|
47
+ modinfo = Icarus::Mod::Tools::Modinfo.new(mod)
48
+
49
+ unless modinfo.valid?
50
+ warn "Invalid modinfo: #{modinfo.errors}"
51
+ exit 1
52
+ end
53
+
54
+ puts firestore.update(:mod, modinfo, merge: true) ? "Success" : "Failure"
55
+ end
56
+ end
33
57
  end
34
58
  end
35
59
  end
@@ -85,6 +85,8 @@ module Icarus
85
85
  def sync_list(type)
86
86
  sync = (type == :mods ? Icarus::Mod::Tools::Sync::Mods : Icarus::Mod::Tools::Sync::Tools).new(client: firestore)
87
87
 
88
+ puts "Syncing #{type} to #{Config.firebase.collections.send(type)}" if verbose > 1
89
+
88
90
  puts "Retrieving Info Data..." if verbose?
89
91
  info_array = sync.info_array
90
92
 
@@ -7,7 +7,7 @@ module Icarus
7
7
  class Baseinfo
8
8
  attr_reader :data, :id, :created_at, :updated_at
9
9
 
10
- HASHKEYS = %i[name author version compatibility description fileType fileURL imageURL readmeURL].freeze
10
+ HASHKEYS = %i[name author version compatibility description files imageURL readmeURL].freeze
11
11
 
12
12
  def initialize(data, id: nil, created: nil, updated: nil)
13
13
  @id = id
@@ -52,14 +52,14 @@ module Icarus
52
52
  end
53
53
 
54
54
  def valid?
55
- @warnings << "Version should be a version string" unless validate_version(version)
55
+ validate_version
56
+ validate_files if @data.key?(:files)
57
+ validate_filetype(fileType) if @data.key?(:fileType)
56
58
 
57
59
  %w[name author description].each do |key|
58
60
  @errors << "#{key.capitalize} cannot be blank" unless validate_string(@data[key.to_sym])
59
61
  end
60
62
 
61
- @errors << "Invalid fileType: #{fileType || "blank"}" unless validate_filetype(fileType)
62
-
63
63
  %w[fileURL imageURL readmeURL].each do |key|
64
64
  @errors << "Invalid URL #{key.capitalize}: #{@data[key.to_sym] || "blank"}" unless validate_url(@data[key.to_sym])
65
65
  end
@@ -67,12 +67,20 @@ module Icarus
67
67
  !errors?
68
68
  end
69
69
 
70
+ def file_types
71
+ files&.keys || []
72
+ end
73
+
74
+ def file_urls
75
+ files&.values || []
76
+ end
77
+
70
78
  def method_missing(method_name, *_args, &_block)
71
- @data[method_name.to_sym]&.strip
79
+ @data[method_name.to_sym] if @data.keys.include?(method_name.to_sym)
72
80
  end
73
81
 
74
82
  def respond_to_missing?(method_name, include_private = false)
75
- HASHKEYS.include?(method_name.to_sym) || super
83
+ @data.keys.include?(method_name.to_sym) || super
76
84
  end
77
85
 
78
86
  private
@@ -81,22 +89,32 @@ module Icarus
81
89
  /(zip|pak|exmodz?)/i
82
90
  end
83
91
 
92
+ def validate_string(string)
93
+ !(string.nil? || string.empty?)
94
+ end
95
+
84
96
  def validate_url(url)
85
97
  return true if url.nil? || url.empty?
86
98
 
87
99
  url =~ URI::DEFAULT_PARSER.make_regexp
88
100
  end
89
101
 
90
- def validate_filetype(filetype)
91
- filetype.match?(filetype_pattern)
102
+ def validate_files
103
+ @errors << "files cannot be blank" if @data.key?(:files) && @data[:files].keys.empty?
104
+
105
+ file_types.each { |file_type| validate_filetype(file_type) }
106
+
107
+ file_urls.each do |file_url|
108
+ @errors << "Invalid URL: #{file_url}" unless validate_url(file_url)
109
+ end
92
110
  end
93
111
 
94
- def validate_string(string)
95
- !(string.nil? || string.empty?)
112
+ def validate_filetype(file_type)
113
+ @errors << "Invalid fileType: #{file_type.upcase}" unless file_type&.match?(filetype_pattern)
96
114
  end
97
115
 
98
- def validate_version(version)
99
- version =~ /\d+\.\d+[.\d+]?/
116
+ def validate_version
117
+ @warnings << "Version should be a version string" unless version =~ /^\d+[.\d+]*/
100
118
  end
101
119
  end
102
120
  end
@@ -7,7 +7,25 @@ module Icarus
7
7
  module Tools
8
8
  # Sync methods
9
9
  class Modinfo < Baseinfo
10
- HASHKEYS = %i[name author version compatibility description long_description fileType fileURL imageURL readmeURL].freeze
10
+ HASHKEYS = %i[name author version compatibility description long_description files fileType fileURL imageURL readmeURL].freeze
11
+
12
+ def to_h
13
+ HASHKEYS.each_with_object({}) do |key, hash|
14
+ next if key == :files && @data[:files].nil?
15
+ next if %i[fileType fileURL].include?(key.to_sym) && !@data[:files].nil?
16
+ next if key == :long_description && @data[:long_description].nil?
17
+
18
+ hash[key] = @data[key]
19
+ end
20
+ end
21
+
22
+ def file_types
23
+ files&.keys || [@data[:fileType] || "pak"]
24
+ end
25
+
26
+ def file_urls
27
+ files&.values || [@data[:fileURL]].compact
28
+ end
11
29
 
12
30
  # rubocop:disable Naming/MethodName
13
31
  def fileType
@@ -7,6 +7,8 @@ module Icarus
7
7
  module Tools
8
8
  # Sync methods
9
9
  class Toolinfo < Baseinfo
10
+ HASHKEYS = %i[name author version compatibility description fileType fileURL imageURL readmeURL].freeze
11
+
10
12
  # rubocop:disable Naming/MethodName
11
13
  def fileType
12
14
  @data[:fileType] || "zip"
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Icarus
4
4
  module Mod
5
- VERSION = "1.9.0"
5
+ VERSION = "2.0"
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.9.0
4
+ version: '2.0'
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-28 00:00:00.000000000 Z
11
+ date: 2023-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: google-cloud-firestore