Icarus-Mod-Tools 1.9.0 → 2.0

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: 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