omegaup 0.3.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +5 -1
- data/Gemfile +0 -0
- data/lib/omega/base.rb +0 -0
- data/lib/omega/cli/contest.rb +27 -0
- data/lib/omega/cli.rb +36 -17
- data/lib/omega/client.rb +116 -2
- data/lib/omega/contest.rb +36 -5
- data/lib/omega/contest_run.rb +3 -1
- data/lib/omega/scoreboard.rb +9 -2
- data/lib/omega/user.rb +5 -1
- data/lib/omega/version.rb +1 -1
- data/lib/omega.rb +0 -0
- data/omega.gemspec +6 -1
- metadata +62 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 767e4b440acdf0d4b4f07d2fa568b0c05e78a8e066e1280765d49c6d62b23c46
|
4
|
+
data.tar.gz: 4151f5ade0af99d594d81e7cb1dae1259532d0627cc1c02f0499e1db03c4cec3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2511e42ce423bb7530f9e696e2a8f436fe547a9526731e3fc119952d63a014c0ef151b2ed78087b033009ee3420fe5bfee6495fe0b35f33a92aff90d62ee1488
|
7
|
+
data.tar.gz: b0816baf5e9fb16c43a9dbdb2e00b8c1462fd0f77ae33ce843c9fc03d42f6491e75d492a4d3847591cd9cf225589a6b2b23601ce333ee90c23873814cce80e90
|
data/.rubocop.yml
CHANGED
data/Gemfile
CHANGED
File without changes
|
data/lib/omega/base.rb
CHANGED
File without changes
|
data/lib/omega/cli/contest.rb
CHANGED
@@ -24,6 +24,16 @@ module Omega
|
|
24
24
|
puts "Failed users: \n- #{failed.join("\n- ")}"
|
25
25
|
end
|
26
26
|
|
27
|
+
def copy_users(contest, from)
|
28
|
+
target = omega.contest(contest)
|
29
|
+
source = omega.contest(from)
|
30
|
+
source.users.each do |user|
|
31
|
+
target.add_user(user)
|
32
|
+
rescue StandardError => e
|
33
|
+
puts "Error adding #{user}: #{e.message}"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
27
37
|
def user_data(user)
|
28
38
|
puts omega.user(user).full_data.to_yaml
|
29
39
|
end
|
@@ -41,6 +51,23 @@ module Omega
|
|
41
51
|
puts "#{contest_name}: #{e.message}"
|
42
52
|
end
|
43
53
|
|
54
|
+
def add_problem(contest_name, problem_name)
|
55
|
+
contest = omega.contest(contest_name)
|
56
|
+
contest.add_problem(problem_name)
|
57
|
+
rescue StandardError => e
|
58
|
+
puts "Error adding #{problem_name}: #{e.message}"
|
59
|
+
end
|
60
|
+
|
61
|
+
def copy_problems(contest_name, from)
|
62
|
+
contest = omega.contest(contest_name)
|
63
|
+
source = omega.contest(from)
|
64
|
+
source.problems.each do |problem|
|
65
|
+
contest.add_problem(problem[:alias])
|
66
|
+
rescue StandardError => e
|
67
|
+
puts "Error adding #{problem[:alias]}: #{e.message}"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
44
71
|
def download_sources(contest_name, path)
|
45
72
|
Dir.mkdir(path) unless File.directory?(path)
|
46
73
|
contest = omega.contest(contest_name)
|
data/lib/omega/cli.rb
CHANGED
@@ -19,40 +19,54 @@ module Omega
|
|
19
19
|
help
|
20
20
|
].freeze
|
21
21
|
|
22
|
-
|
23
|
-
puts %(
|
22
|
+
GENERAL_DOC = %(
|
24
23
|
OmegaUp CLI. Developed by OMIJal https://github.com/omijal/omegaup-cli.
|
25
24
|
Tool for interacting with omegaup from CLI and available throug ruby gems.
|
26
25
|
Commands:
|
27
|
-
|
28
|
-
-
|
29
|
-
|
30
|
-
|
31
|
-
|
26
|
+
- register-users Add a user or a bunch of users to the a contest.
|
27
|
+
- copy-problems Adds prob from another contest
|
28
|
+
- user Generates a dump of the user data in yml format.
|
29
|
+
- scoreboard Gets contest scoreboard with users and score.
|
30
|
+
- clarifications Gets contest clarifications.
|
31
|
+
- sources Downloads all code sources into path
|
32
32
|
Parametes:
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
33
|
+
--contest Contest name
|
34
|
+
--user Username or email
|
35
|
+
--user-file A file path containing a list of user one per line without
|
36
|
+
header
|
37
|
+
--open Filter to only open clarifications
|
38
|
+
--path Path to store results
|
39
39
|
Setup:
|
40
40
|
You need to add two env variables with your omegaup credentials.
|
41
41
|
OMEGAUP_URL *Optional* This is intended for development purpose, it will target
|
42
|
-
|
42
|
+
to https://omegaup.com by default.
|
43
43
|
OMEGAUP_USER *Required* Your OmegaUp Username or Email
|
44
44
|
OMEGAUP_PASS *Required* Your OmegaUp Password
|
45
|
-
|
45
|
+
)
|
46
|
+
|
47
|
+
def print_help
|
48
|
+
puts GENERAL_DOC
|
46
49
|
end
|
47
50
|
|
48
51
|
def initialize(_)
|
49
52
|
@cmd = ARGV.shift
|
50
53
|
|
51
54
|
@cmd_opts = case @cmd
|
55
|
+
when 'copy-problems'
|
56
|
+
Optimist.options do
|
57
|
+
opt :contest, 'Contest ShortName or identifier', type: :string
|
58
|
+
opt :from, 'Another constest that allows to clone users from another contest', type: :string
|
59
|
+
end
|
60
|
+
when 'add-problem'
|
61
|
+
Optimist.options do
|
62
|
+
opt :contest, 'Contest ShortName or identifier', type: :string
|
63
|
+
opt :problem, 'Problem name', type: :string
|
64
|
+
end
|
52
65
|
when 'register-users'
|
53
66
|
Optimist.options do
|
54
67
|
opt :contest, 'Contest ShortName or identifier', type: :string
|
55
68
|
opt :user, 'Username or email', type: :string
|
69
|
+
opt :from, 'Another constest that allows to clone users from another contest', type: :string
|
56
70
|
opt :user_file, 'A file containing the users list one per line and without header', type: :string
|
57
71
|
end
|
58
72
|
when 'user'
|
@@ -92,8 +106,8 @@ OMEGAUP_PASS *Required* Your OmegaUp Password
|
|
92
106
|
config = {
|
93
107
|
'omega' => {
|
94
108
|
'endpoint' => ENV['OMEGAUP_URL'] || 'https://omegaup.com',
|
95
|
-
'user' => ENV
|
96
|
-
'pass' => ENV
|
109
|
+
'user' => ENV.fetch('OMEGAUP_USER', nil),
|
110
|
+
'pass' => ENV.fetch('OMEGAUP_PASS', nil)
|
97
111
|
}
|
98
112
|
}
|
99
113
|
|
@@ -107,6 +121,7 @@ OMEGAUP_PASS *Required* Your OmegaUp Password
|
|
107
121
|
when 'register-users'
|
108
122
|
register_user(@cmd_opts[:contest], @cmd_opts[:user]) if @cmd_opts[:user]
|
109
123
|
register_users(@cmd_opts[:contest], @cmd_opts[:user_file]) if @cmd_opts[:user_file]
|
124
|
+
copy_users(@cmd_opts[:contest], @cmd_opts[:from]) if @cmd_opts[:from]
|
110
125
|
when 'user'
|
111
126
|
user_data(@cmd_opts[:user])
|
112
127
|
when 'scoreboard'
|
@@ -115,6 +130,10 @@ OMEGAUP_PASS *Required* Your OmegaUp Password
|
|
115
130
|
clarifications(@cmd_opts[:contest], @cmd_opts[:open])
|
116
131
|
when 'sources'
|
117
132
|
download_sources(@cmd_opts[:contest], @cmd_opts[:path])
|
133
|
+
when 'copy-problems'
|
134
|
+
copy_problems(@cmd_opts[:contest], @cmd_opts[:from])
|
135
|
+
when 'add-problem'
|
136
|
+
add_problem(@cmd_opts[:contest], @cmd_opts[:problem])
|
118
137
|
end
|
119
138
|
end
|
120
139
|
end
|
data/lib/omega/client.rb
CHANGED
@@ -4,10 +4,16 @@ require_relative 'contest'
|
|
4
4
|
require_relative 'scoreboard'
|
5
5
|
require_relative 'user'
|
6
6
|
require_relative 'contest_run'
|
7
|
+
require 'json'
|
8
|
+
require 'nokogiri'
|
7
9
|
|
8
10
|
require 'httparty'
|
9
11
|
|
10
12
|
module Omega
|
13
|
+
KAREL_LANGS = 'kp,kj'
|
14
|
+
OMI_LANGS = 'c11-gcc,c11-clang,cpp11-gcc,cpp11-clang,cpp17-gcc,cpp17-clang,cpp20-gcc,cpp20-clang'
|
15
|
+
ALL_LANGS = 'kp,kj,c11-gcc,c11-clang,cpp11-gcc,cpp11-clang,cpp17-gcc,cpp17-clang,cpp20-gcc,cpp20-clang,java,kt,py2,py3,rb,cs,pas,cat,hs,lua,go,rs,js'
|
16
|
+
|
11
17
|
class OmegaError < StandardError
|
12
18
|
attr_reader :data
|
13
19
|
|
@@ -18,6 +24,14 @@ module Omega
|
|
18
24
|
def message
|
19
25
|
"#{@data[:errorname]}::#{@data[:errorcode]} >> #{@data[:error]}"
|
20
26
|
end
|
27
|
+
|
28
|
+
def errorname
|
29
|
+
@data[:errorname]
|
30
|
+
end
|
31
|
+
|
32
|
+
def errorcode
|
33
|
+
@data[:errorcode]
|
34
|
+
end
|
21
35
|
end
|
22
36
|
|
23
37
|
class Client
|
@@ -30,7 +44,7 @@ module Omega
|
|
30
44
|
def perform_request(method, endpoint, data, retried = false)
|
31
45
|
url = "#{@config['endpoint']}#{endpoint}"
|
32
46
|
response = self.class.send(method, url, body: data)
|
33
|
-
body = JSON.parse(response.body, symbolize_names: true)
|
47
|
+
body = ::JSON.parse(response.body, symbolize_names: true)
|
34
48
|
|
35
49
|
if body[:errorcode] == 401 && !retried
|
36
50
|
login
|
@@ -67,6 +81,58 @@ module Omega
|
|
67
81
|
retry
|
68
82
|
end
|
69
83
|
|
84
|
+
def problem_details(problem_alias)
|
85
|
+
post('/api/problem/details', { problem_alias: })
|
86
|
+
end
|
87
|
+
|
88
|
+
def create_group(name, description: nil, alias: nil)
|
89
|
+
post('/api/group/create', name:, alias:, description:)
|
90
|
+
end
|
91
|
+
|
92
|
+
def create_contest(name:, short_name:, description:, start_time:, finish_time:,
|
93
|
+
public: false, penalty_calc_policy: 'sum', show_penalty: true,
|
94
|
+
points_decay_factor: '0', submissions_gap: '60', languages: ALL_LANGS, feedback: 'none',
|
95
|
+
penalty: '0', scoreboard: '100', penalty_type: 'none',
|
96
|
+
default_show_all_contestants_in_scoreboard: false,
|
97
|
+
show_scoreboard_after: true,
|
98
|
+
score_mode: 'partial',
|
99
|
+
needs_basic_information: false,
|
100
|
+
requests_user_information: 'no',
|
101
|
+
contest_for_teams: false)
|
102
|
+
post('/api/contest/create/', {
|
103
|
+
admin: true,
|
104
|
+
admission_mode: (public ? 'public' : 'private'),
|
105
|
+
alias: short_name,
|
106
|
+
archived: false,
|
107
|
+
opened: false,
|
108
|
+
penalty_calc_policy:,
|
109
|
+
show_penalty:,
|
110
|
+
title: name,
|
111
|
+
description:,
|
112
|
+
has_submissions: false,
|
113
|
+
start_time: start_time.to_time.to_i,
|
114
|
+
finish_time: finish_time.to_time.to_i,
|
115
|
+
points_decay_factor:,
|
116
|
+
submissions_gap:,
|
117
|
+
languages:,
|
118
|
+
feedback:,
|
119
|
+
penalty:,
|
120
|
+
scoreboard:,
|
121
|
+
penalty_type:,
|
122
|
+
default_show_all_contestants_in_scoreboard:,
|
123
|
+
show_scoreboard_after:,
|
124
|
+
score_mode:,
|
125
|
+
needs_basic_information:,
|
126
|
+
requests_user_information:,
|
127
|
+
contest_for_teams:
|
128
|
+
})
|
129
|
+
contest(short_name)
|
130
|
+
rescue OmegaError => e
|
131
|
+
raise e unless e.errorname == 'aliasInUse'
|
132
|
+
|
133
|
+
contest(short_name)
|
134
|
+
end
|
135
|
+
|
70
136
|
def scoreboard(name)
|
71
137
|
data = post('/api/contest/scoreboard/', { contest_alias: name })
|
72
138
|
Scoreboard.new(self, data)
|
@@ -86,6 +152,12 @@ module Omega
|
|
86
152
|
User.new(self, data)
|
87
153
|
end
|
88
154
|
|
155
|
+
def add_admin_group(contest, group)
|
156
|
+
post('/api/contest/addGroupAdmin', { contest_alias: contest, group: })
|
157
|
+
rescue OmegaError
|
158
|
+
# Omega seems to have a bug
|
159
|
+
end
|
160
|
+
|
89
161
|
def add_user_to_contest(user, contest)
|
90
162
|
post('/api/contest/addUser', { contest_alias: contest, usernameOrEmail: user })
|
91
163
|
end
|
@@ -99,8 +171,50 @@ module Omega
|
|
99
171
|
end
|
100
172
|
|
101
173
|
def contest_runs(contest, offset, page_size)
|
102
|
-
data = post('/api/contest/runs/', { contest_alias: contest, offset
|
174
|
+
data = post('/api/contest/runs/', { contest_alias: contest, offset:, rowcount: page_size })
|
103
175
|
data[:runs].map { |run| ContestRun.new(self, run) }
|
104
176
|
end
|
177
|
+
|
178
|
+
def add_problem_to_contest(contest, problem, points = 100)
|
179
|
+
post('/api/contest/addProblem', contest_alias: contest, problem_alias: problem, points:)
|
180
|
+
end
|
181
|
+
|
182
|
+
def add_user_to_group(group_name, username)
|
183
|
+
post('/api/group/addUser', group_alias: group_name, usernameOrEmail: username)
|
184
|
+
rescue OmegaError => e
|
185
|
+
raise if e.errorname != 'identityInGroup'
|
186
|
+
end
|
187
|
+
|
188
|
+
def get_payload_from_response_by_id(response_body, id)
|
189
|
+
page = Nokogiri::HTML(response_body)
|
190
|
+
script = page.at_css("script##{id}")
|
191
|
+
unless script
|
192
|
+
raise OmegaError.new(errorname: 'ScrapingError', errorcode: 404,
|
193
|
+
error: "Script with id #{id} not found")
|
194
|
+
end
|
195
|
+
|
196
|
+
script_content = script.content
|
197
|
+
# Extrayendo el contenido JSON del script
|
198
|
+
begin
|
199
|
+
::JSON.parse(script_content, symbolize_names: true)
|
200
|
+
rescue JSON::ParserError
|
201
|
+
raise OmegaError.new(errorname: 'ScrapingError', errorcode: 500, error: 'Unable to parse JSON data')
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
def scrap_get(endpoint, id = 'payload')
|
206
|
+
url = "#{@config['endpoint']}#{endpoint}"
|
207
|
+
response = self.class.get(url)
|
208
|
+
unless response.success?
|
209
|
+
raise OmegaError.new(errorname: 'HttpError', errorcode: response.code,
|
210
|
+
error: response.message)
|
211
|
+
end
|
212
|
+
|
213
|
+
body = get_payload_from_response_by_id(response.body, id)
|
214
|
+
|
215
|
+
raise OmegaError, body if body[:error]
|
216
|
+
|
217
|
+
body
|
218
|
+
end
|
105
219
|
end
|
106
220
|
end
|
data/lib/omega/contest.rb
CHANGED
@@ -9,6 +9,10 @@ module Omega
|
|
9
9
|
@client.scoreboard(data[:alias])
|
10
10
|
end
|
11
11
|
|
12
|
+
def problems
|
13
|
+
@data[:problems]
|
14
|
+
end
|
15
|
+
|
12
16
|
def runs(offset = 0, page_size = 100)
|
13
17
|
@client.contest_runs(data[:alias], offset, page_size)
|
14
18
|
end
|
@@ -27,6 +31,14 @@ module Omega
|
|
27
31
|
sources
|
28
32
|
end
|
29
33
|
|
34
|
+
def full_details
|
35
|
+
@full_details ||= @client.scrap_get("/contest/#{data[:alias]}/edit/")
|
36
|
+
end
|
37
|
+
|
38
|
+
def group_admin?(group_name)
|
39
|
+
full_details[:group_admins].any? { |group| group[:alias].casecmp(group_name).zero? }
|
40
|
+
end
|
41
|
+
|
30
42
|
def add_user(user)
|
31
43
|
if user.is_a?(String)
|
32
44
|
@client.add_user_to_contest(user, data[:alias])
|
@@ -39,6 +51,22 @@ module Omega
|
|
39
51
|
@client.clarifications(data[:alias])
|
40
52
|
end
|
41
53
|
|
54
|
+
def users
|
55
|
+
scoreboard.users
|
56
|
+
end
|
57
|
+
|
58
|
+
def alias
|
59
|
+
@data[:alias].downcase
|
60
|
+
end
|
61
|
+
|
62
|
+
def add_problem(name)
|
63
|
+
@client.add_problem_to_contest(data[:alias], name)
|
64
|
+
end
|
65
|
+
|
66
|
+
def add_admin_group(group)
|
67
|
+
@client.add_admin_group(data[:alias], group)
|
68
|
+
end
|
69
|
+
|
42
70
|
def observe(score_notifier, clar_noritifer)
|
43
71
|
last = current = scoreboard
|
44
72
|
sleep(5)
|
@@ -47,8 +75,8 @@ module Omega
|
|
47
75
|
clarifications.select { |clar| clar[:answer].nil? || clar[:answer].empty? }
|
48
76
|
.each { |clar| clar_noritifer.call(clar) }
|
49
77
|
sleep(300)
|
50
|
-
rescue StandardError =>
|
51
|
-
puts
|
78
|
+
rescue StandardError => e
|
79
|
+
puts e.message
|
52
80
|
sleep(3000)
|
53
81
|
end
|
54
82
|
end
|
@@ -62,14 +90,17 @@ module Omega
|
|
62
90
|
current_problem = current_score.score_for(name)
|
63
91
|
last_points = problem[:points]
|
64
92
|
current_points = current_problem[:points]
|
65
|
-
|
93
|
+
if current_points != last_points
|
94
|
+
score_notifier.call(data[:alias], score.username, name, current_points, last_points,
|
95
|
+
data[:alias])
|
96
|
+
end
|
66
97
|
end
|
67
98
|
end
|
68
99
|
# puts '-' * 60
|
69
100
|
last = current
|
70
101
|
sleep(15)
|
71
|
-
rescue StandardError =>
|
72
|
-
puts
|
102
|
+
rescue StandardError => e
|
103
|
+
puts e.message
|
73
104
|
sleep(3000)
|
74
105
|
end
|
75
106
|
end
|
data/lib/omega/contest_run.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'base'
|
2
4
|
|
3
5
|
module Omega
|
@@ -11,7 +13,7 @@ module Omega
|
|
11
13
|
end
|
12
14
|
|
13
15
|
def save_at(path)
|
14
|
-
File.write("#{path}/#{@data[:guid]}.yaml", { details
|
16
|
+
File.write("#{path}/#{@data[:guid]}.yaml", { details:, data: @data }.to_yaml)
|
15
17
|
end
|
16
18
|
end
|
17
19
|
end
|
data/lib/omega/scoreboard.rb
CHANGED
@@ -9,9 +9,8 @@ module Omega
|
|
9
9
|
|
10
10
|
def initialize(client, entry)
|
11
11
|
@username = entry[:username]
|
12
|
-
@client = client
|
13
12
|
@problems = entry[:problems] || []
|
14
|
-
|
13
|
+
super
|
15
14
|
end
|
16
15
|
|
17
16
|
def merge(score)
|
@@ -38,6 +37,10 @@ module Omega
|
|
38
37
|
end
|
39
38
|
nil
|
40
39
|
end
|
40
|
+
|
41
|
+
def to_h
|
42
|
+
@data[:problems]
|
43
|
+
end
|
41
44
|
end
|
42
45
|
|
43
46
|
class Scoreboard < Base
|
@@ -50,6 +53,10 @@ module Omega
|
|
50
53
|
end
|
51
54
|
end
|
52
55
|
|
56
|
+
def to_h
|
57
|
+
@data[:ranking].map { |username, entry| { username:, score: entry.to_h } }
|
58
|
+
end
|
59
|
+
|
53
60
|
def merge(board)
|
54
61
|
result = clone
|
55
62
|
board.data[:ranking].each do |user, score|
|
data/lib/omega/user.rb
CHANGED
@@ -7,7 +7,7 @@ module Omega
|
|
7
7
|
def full_data
|
8
8
|
{
|
9
9
|
data: @data,
|
10
|
-
problems_solved
|
10
|
+
problems_solved:,
|
11
11
|
resume: report
|
12
12
|
}
|
13
13
|
end
|
@@ -16,6 +16,10 @@ module Omega
|
|
16
16
|
@client.problems_solved(data[:username])[:problems]
|
17
17
|
end
|
18
18
|
|
19
|
+
def username
|
20
|
+
@data[:username]
|
21
|
+
end
|
22
|
+
|
19
23
|
def report
|
20
24
|
data = { score: 0, count: 0 }
|
21
25
|
problems_solved.each do |p|
|
data/lib/omega/version.rb
CHANGED
data/lib/omega.rb
CHANGED
File without changes
|
data/omega.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.name = 'omegaup'
|
9
9
|
spec.version = Omega::VERSION
|
10
10
|
spec.authors = ['Gilberto Vargas']
|
11
|
-
spec.email = ['
|
11
|
+
spec.email = ['tachomexgems@gmail.com']
|
12
12
|
|
13
13
|
spec.summary = 'File created for encrypting files using ssh keys'
|
14
14
|
spec.description = 'Allows to encrypt files using ssh keys'
|
@@ -25,6 +25,11 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_development_dependency 'amazing_print'
|
26
26
|
spec.add_development_dependency 'httparty'
|
27
27
|
spec.add_development_dependency 'minitest', '~> 5'
|
28
|
+
spec.add_development_dependency 'mocha'
|
28
29
|
spec.add_development_dependency 'optimist'
|
30
|
+
spec.add_development_dependency 'rack-minitest'
|
29
31
|
spec.add_development_dependency 'rake', '~> 10.0'
|
32
|
+
spec.add_development_dependency 'simplecov'
|
33
|
+
spec.add_development_dependency 'webmock'
|
34
|
+
spec.metadata['rubygems_mfa_required'] = 'true'
|
30
35
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: omegaup
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gilberto Vargas
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-07-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: amazing_print
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '5'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: mocha
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: optimist
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,6 +80,20 @@ dependencies:
|
|
66
80
|
- - ">="
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rack-minitest
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
69
97
|
- !ruby/object:Gem::Dependency
|
70
98
|
name: rake
|
71
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,9 +108,37 @@ dependencies:
|
|
80
108
|
- - "~>"
|
81
109
|
- !ruby/object:Gem::Version
|
82
110
|
version: '10.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: simplecov
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: webmock
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
83
139
|
description: Allows to encrypt files using ssh keys
|
84
140
|
email:
|
85
|
-
-
|
141
|
+
- tachomexgems@gmail.com
|
86
142
|
executables:
|
87
143
|
- omega
|
88
144
|
extensions: []
|
@@ -105,7 +161,8 @@ files:
|
|
105
161
|
homepage: https://github.com/omijal/omegaup-cli
|
106
162
|
licenses:
|
107
163
|
- MIT
|
108
|
-
metadata:
|
164
|
+
metadata:
|
165
|
+
rubygems_mfa_required: 'true'
|
109
166
|
post_install_message:
|
110
167
|
rdoc_options: []
|
111
168
|
require_paths:
|
@@ -121,7 +178,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
121
178
|
- !ruby/object:Gem::Version
|
122
179
|
version: '0'
|
123
180
|
requirements: []
|
124
|
-
rubygems_version: 3.
|
181
|
+
rubygems_version: 3.5.14
|
125
182
|
signing_key:
|
126
183
|
specification_version: 4
|
127
184
|
summary: File created for encrypting files using ssh keys
|