roku_builder 3.10.7 → 3.11.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 +4 -4
- data/Gemfile.lock +17 -17
- data/bin/roku +4 -0
- data/lib/roku_builder.rb +2 -0
- data/lib/roku_builder/config_parser.rb +5 -0
- data/lib/roku_builder/controller.rb +2 -2
- data/lib/roku_builder/controller_commands.rb +1 -0
- data/lib/roku_builder/keyer.rb +51 -0
- data/lib/roku_builder/monitor.rb +38 -9
- data/lib/roku_builder/navigator.rb +5 -5
- data/lib/roku_builder/version.rb +1 -1
- data/roku_builder.gemspec +4 -4
- data/tests/roku_builder/monitor_test.rb +28 -14
- metadata +10 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c6dbac3c0fec31e905833e19647dd92bb3d4864d
|
4
|
+
data.tar.gz: 321dd14fbb7e7f5e6a29112958e0c5c66834927d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 55f1f1c4dd3b20aec47e227b28e4c69a028718c09adea8f068722129dc8ef03a3e467755c4f277cb7d5e6b8aa3c7d0fa081111fff9721fc72651600542fab1c5
|
7
|
+
data.tar.gz: d2d4f21e3ad6591a33bff630560b837086a385d5d882b1b060572ccc8af4515e4975c66906e82bef628302848934227549467ed513f1e405c9f13d1fbd68037c
|
data/Gemfile.lock
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
roku_builder (3.
|
5
|
-
faraday (~> 0.
|
4
|
+
roku_builder (3.11.0)
|
5
|
+
faraday (~> 0.10)
|
6
6
|
faraday-digestauth (~> 0.2)
|
7
7
|
git (~> 1.3)
|
8
8
|
net-ping (~> 2.0)
|
9
9
|
net-telnet (~> 0.1)
|
10
|
-
nokogiri (~> 1.
|
10
|
+
nokogiri (~> 1.7)
|
11
11
|
rubyzip (~> 1.2)
|
12
12
|
|
13
13
|
GEM
|
@@ -15,18 +15,18 @@ GEM
|
|
15
15
|
specs:
|
16
16
|
byebug (9.0.6)
|
17
17
|
coderay (1.1.1)
|
18
|
-
coveralls (0.8.
|
18
|
+
coveralls (0.8.17)
|
19
19
|
json (>= 1.8, < 3)
|
20
20
|
simplecov (~> 0.12.0)
|
21
21
|
term-ansicolor (~> 1.3)
|
22
22
|
thor (~> 0.19.1)
|
23
|
-
tins (
|
23
|
+
tins (~> 1.6)
|
24
24
|
docile (1.1.5)
|
25
25
|
em-websocket (0.5.1)
|
26
26
|
eventmachine (>= 0.12.9)
|
27
27
|
http_parser.rb (~> 0.6.0)
|
28
|
-
eventmachine (1.2.
|
29
|
-
faraday (0.
|
28
|
+
eventmachine (1.2.1)
|
29
|
+
faraday (0.10.1)
|
30
30
|
multipart-post (>= 1.2, < 3)
|
31
31
|
faraday-digestauth (0.2.1)
|
32
32
|
faraday (~> 0.7)
|
@@ -58,7 +58,7 @@ GEM
|
|
58
58
|
lumberjack (1.0.10)
|
59
59
|
method_source (0.8.2)
|
60
60
|
mini_portile2 (2.1.0)
|
61
|
-
minitest (5.
|
61
|
+
minitest (5.10.1)
|
62
62
|
minitest-autotest (1.0.3)
|
63
63
|
minitest-server (~> 1.0)
|
64
64
|
minitest-server (1.0.4)
|
@@ -69,7 +69,7 @@ GEM
|
|
69
69
|
net-http-digest_auth (1.4)
|
70
70
|
net-ping (2.0.1)
|
71
71
|
net-telnet (0.1.1)
|
72
|
-
nokogiri (1.
|
72
|
+
nokogiri (1.7.0.1)
|
73
73
|
mini_portile2 (~> 2.1.0)
|
74
74
|
notiffany (0.1.1)
|
75
75
|
nenv (~> 0.1)
|
@@ -78,11 +78,11 @@ GEM
|
|
78
78
|
coderay (~> 1.1.0)
|
79
79
|
method_source (~> 0.8.1)
|
80
80
|
slop (~> 3.4)
|
81
|
-
rake (
|
82
|
-
rb-fsevent (0.9.
|
81
|
+
rake (12.0.0)
|
82
|
+
rb-fsevent (0.9.8)
|
83
83
|
rb-inotify (0.9.7)
|
84
84
|
ffi (>= 0.5.0)
|
85
|
-
ruby_dep (1.
|
85
|
+
ruby_dep (1.5.0)
|
86
86
|
rubyzip (1.2.0)
|
87
87
|
shellany (0.0.1)
|
88
88
|
simplecov (0.12.0)
|
@@ -93,9 +93,9 @@ GEM
|
|
93
93
|
slop (3.6.0)
|
94
94
|
term-ansicolor (1.4.0)
|
95
95
|
tins (~> 1.0)
|
96
|
-
thor (0.19.
|
97
|
-
tins (1.
|
98
|
-
yard (0.9.
|
96
|
+
thor (0.19.4)
|
97
|
+
tins (1.13.0)
|
98
|
+
yard (0.9.6)
|
99
99
|
|
100
100
|
PLATFORMS
|
101
101
|
ruby
|
@@ -105,10 +105,10 @@ DEPENDENCIES
|
|
105
105
|
byebug (~> 9.0)
|
106
106
|
coveralls (~> 0.8)
|
107
107
|
guard-livereload (~> 2.5)
|
108
|
-
minitest (~> 5.
|
108
|
+
minitest (~> 5.10)
|
109
109
|
minitest-autotest (~> 1.0)
|
110
110
|
minitest-server (~> 1.0)
|
111
|
-
rake (~>
|
111
|
+
rake (~> 12.0)
|
112
112
|
roku_builder!
|
113
113
|
simplecov (~> 0.12)
|
114
114
|
yard (~> 0.9)
|
data/bin/roku
CHANGED
@@ -76,6 +76,10 @@ parser = OptionParser.new do |opts|
|
|
76
76
|
options[:key] = true
|
77
77
|
end
|
78
78
|
|
79
|
+
opts.on("--genkey", "Command: generate a new key") do
|
80
|
+
options[:genkey] = true
|
81
|
+
end
|
82
|
+
|
79
83
|
opts.on("--print ATTRIBUTE", "Command: Print attribute for scripting") do |a|
|
80
84
|
options[:print] = a
|
81
85
|
end
|
data/lib/roku_builder.rb
CHANGED
@@ -257,6 +257,11 @@ module RokuBuilder
|
|
257
257
|
if options[:profile]
|
258
258
|
configs[:profiler_config] = {command: options[:profile].to_sym}
|
259
259
|
end
|
260
|
+
#Create genkey config
|
261
|
+
configs[:genkey] = {}
|
262
|
+
if options[:out_file]
|
263
|
+
configs[:genkey][:out_file] = File.join(options[:out_folder], options[:out_file])
|
264
|
+
end
|
260
265
|
end
|
261
266
|
private_class_method :setup_simple_configs
|
262
267
|
end
|
@@ -162,7 +162,7 @@ module RokuBuilder
|
|
162
162
|
def self.commands
|
163
163
|
[:sideload, :package, :test, :deeplink,:configure, :validate, :delete,
|
164
164
|
:navigate, :navigator, :text, :build, :monitor, :update, :screencapture,
|
165
|
-
:key, :screen, :screens, :applist, :print, :profile, :dostage,
|
165
|
+
:key, :genkey, :screen, :screens, :applist, :print, :profile, :dostage,
|
166
166
|
:dounstage]
|
167
167
|
end
|
168
168
|
|
@@ -194,7 +194,7 @@ module RokuBuilder
|
|
194
194
|
# @return [Array<Symbol>] List of commands that require a device
|
195
195
|
def self.device_commands
|
196
196
|
[:sideload, :package, :test, :deeplink, :delete, :navigate, :navigator,
|
197
|
-
:text, :monitor, :screencapture, :applist, :profile ]
|
197
|
+
:text, :monitor, :screencapture, :applist, :profile, :key, :genkey ]
|
198
198
|
end
|
199
199
|
|
200
200
|
|
@@ -19,6 +19,7 @@ module RokuBuilder
|
|
19
19
|
screen: { klass: Navigator, method: :screen, config_key: :screen_config,
|
20
20
|
failure: FAILED_NAVIGATING },
|
21
21
|
key: { klass: Keyer, method: :rekey, config_key: :key },
|
22
|
+
genkey: { klass: Keyer, method: :genkey, config_key: :genkey },
|
22
23
|
screens: { klass: Navigator, method: :screens },
|
23
24
|
text: { klass: Navigator, method: :type, config_key: :text_config },
|
24
25
|
test: { klass: Tester, method: :run_tests, config_key: :test_config },
|
data/lib/roku_builder/keyer.rb
CHANGED
@@ -5,6 +5,57 @@ module RokuBuilder
|
|
5
5
|
# Change or get dev key
|
6
6
|
class Keyer < Util
|
7
7
|
|
8
|
+
def genkey(out_file: nil)
|
9
|
+
telnet_config = {
|
10
|
+
'Host' => @roku_ip_address,
|
11
|
+
'Port' => 8080
|
12
|
+
}
|
13
|
+
connection = Net::Telnet.new(telnet_config)
|
14
|
+
connection.puts("genkey")
|
15
|
+
waitfor_config = {
|
16
|
+
'Match' => /./,
|
17
|
+
'Timeout' => false
|
18
|
+
}
|
19
|
+
password = nil
|
20
|
+
dev_id = nil
|
21
|
+
while password.nil? or dev_id.nil?
|
22
|
+
connection.waitfor(waitfor_config) do |txt|
|
23
|
+
while line = txt.slice!(/^.*\n/) do
|
24
|
+
words = line.split
|
25
|
+
if words[0] == "Password:"
|
26
|
+
password = words[1]
|
27
|
+
elsif words[0] == "DevID:"
|
28
|
+
dev_id = words[1]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
connection.close
|
34
|
+
@logger.info("Password: "+password)
|
35
|
+
@logger.info("DevID: "+dev_id)
|
36
|
+
|
37
|
+
unless out_file
|
38
|
+
out_file = File.join("/tmp", "key_"+dev_id+".pkg")
|
39
|
+
end
|
40
|
+
|
41
|
+
Dir.mktmpdir { |dir|
|
42
|
+
ManifestManager.update_manifest({root_dir: dir, attributes: {}})
|
43
|
+
Dir.mkdir(File.join(dir, "source"))
|
44
|
+
File.open(File.join(dir, "source", "main.brs"), "w") do |io|
|
45
|
+
io.puts "sub main()"
|
46
|
+
io.puts " print \"Load\""
|
47
|
+
io.puts "end sub"
|
48
|
+
end
|
49
|
+
@device_config[:init_params] = {root_dir: dir}
|
50
|
+
loader = Loader.new(**@device_config)
|
51
|
+
loader.sideload()
|
52
|
+
@device_config.delete(:init_params)
|
53
|
+
packager = Packager.new(**@device_config)
|
54
|
+
packager.package(app_name_version: "key_"+dev_id, out_file: out_file, password: password)
|
55
|
+
@logger.info("Keyed PKG: "+out_file)
|
56
|
+
}
|
57
|
+
end
|
58
|
+
|
8
59
|
# Sets the key on the roku device
|
9
60
|
# @param keyed_pkg [String] Path for a package signed with the desired key
|
10
61
|
# @param password [String] Password for the package
|
data/lib/roku_builder/monitor.rb
CHANGED
@@ -16,6 +16,7 @@ module RokuBuilder
|
|
16
16
|
taskX: 8093,
|
17
17
|
profiler: 8080,
|
18
18
|
}
|
19
|
+
@show_prompt = false
|
19
20
|
end
|
20
21
|
|
21
22
|
# Monitor a development log on the Roku device
|
@@ -41,19 +42,47 @@ module RokuBuilder
|
|
41
42
|
end
|
42
43
|
end
|
43
44
|
}
|
45
|
+
# setup readline
|
46
|
+
|
47
|
+
libedit = false
|
48
|
+
begin
|
49
|
+
Readline.vi_editing_mode
|
50
|
+
rescue NotImplementedError
|
51
|
+
libedit = true
|
52
|
+
end
|
53
|
+
|
54
|
+
commands = [
|
55
|
+
"bsc", "bscs", "brkd", "bt", "classes", "cont", "cont", "down", "d",
|
56
|
+
"exit", "gc", "help", "last", "list", "next", "print", "p", "?", "step",
|
57
|
+
"s", "t", "over", "out", "up", "u", "var", "q"
|
58
|
+
].sort
|
59
|
+
commands.collect { |i| i += ' ' } if libedit
|
60
|
+
|
61
|
+
comp = proc { |s| commands.grep( /^#{Regexp.escape(s)}/ ) }
|
62
|
+
|
63
|
+
Readline.completion_append_character = " "
|
64
|
+
Readline.completion_proc = comp
|
65
|
+
|
66
|
+
|
44
67
|
running = true
|
45
68
|
@logger.unknown "Q to exit"
|
46
69
|
while running
|
47
70
|
begin
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
71
|
+
if @show_prompt
|
72
|
+
command = Readline.readline('BrightScript Debugger> ', true)
|
73
|
+
if command =~ /^\s*$/ or Readline::HISTORY.to_a[-2] == command
|
74
|
+
Readline::HISTORY.pop
|
75
|
+
end
|
76
|
+
case command
|
77
|
+
when "q"
|
78
|
+
thread.exit
|
79
|
+
running = false
|
80
|
+
else
|
81
|
+
@show_prompt = false
|
82
|
+
thread[:connection].puts(command)
|
83
|
+
end
|
55
84
|
else
|
56
|
-
|
85
|
+
sleep 0.01
|
57
86
|
end
|
58
87
|
rescue SystemExit, Interrupt
|
59
88
|
thread[:connection].puts("\C-c")
|
@@ -73,7 +102,7 @@ module RokuBuilder
|
|
73
102
|
puts line if !line.strip.empty?
|
74
103
|
end
|
75
104
|
if all_text.downcase == "BrightScript Debugger> ".downcase
|
76
|
-
|
105
|
+
@show_prompt = true
|
77
106
|
all_text = ""
|
78
107
|
end
|
79
108
|
all_text
|
@@ -131,11 +131,11 @@ module RokuBuilder
|
|
131
131
|
if char == "\u0003"
|
132
132
|
running = false
|
133
133
|
else
|
134
|
-
Thread.new(char) {|
|
135
|
-
if @mappings[
|
136
|
-
nav(commands:[@mappings[
|
137
|
-
elsif
|
138
|
-
type(text:
|
134
|
+
Thread.new(char) {|character|
|
135
|
+
if @mappings[character.to_sym] != nil
|
136
|
+
nav(commands:[@mappings[character.to_sym][0].to_sym])
|
137
|
+
elsif character.inspect.force_encoding("UTF-8").ascii_only?
|
138
|
+
type(text: character)
|
139
139
|
end
|
140
140
|
}
|
141
141
|
end
|
data/lib/roku_builder/version.rb
CHANGED
data/roku_builder.gemspec
CHANGED
@@ -21,17 +21,17 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.required_ruby_version = "~> 2.3"
|
22
22
|
|
23
23
|
spec.add_dependency "rubyzip", "~> 1.2"
|
24
|
-
spec.add_dependency "faraday", "~> 0.
|
24
|
+
spec.add_dependency "faraday", "~> 0.10"
|
25
25
|
spec.add_dependency "faraday-digestauth", "~> 0.2"
|
26
26
|
spec.add_dependency "git", "~> 1.3"
|
27
27
|
spec.add_dependency "net-ping", "~> 2.0"
|
28
28
|
spec.add_dependency "net-telnet", "~> 0.1"
|
29
|
-
spec.add_dependency "nokogiri", "~> 1.
|
29
|
+
spec.add_dependency "nokogiri", "~> 1.7"
|
30
30
|
|
31
31
|
spec.add_development_dependency "bundler", "~> 1.7"
|
32
|
-
spec.add_development_dependency "rake", "~>
|
32
|
+
spec.add_development_dependency "rake", "~> 12.0"
|
33
33
|
spec.add_development_dependency "byebug", "~> 9.0"
|
34
|
-
spec.add_development_dependency "minitest", "~> 5.
|
34
|
+
spec.add_development_dependency "minitest", "~> 5.10"
|
35
35
|
spec.add_development_dependency "minitest-autotest", "~> 1.0"
|
36
36
|
spec.add_development_dependency "minitest-server", "~> 1.0"
|
37
37
|
spec.add_development_dependency "simplecov", "~> 0.12"
|
@@ -12,19 +12,22 @@ class MonitorTest < Minitest::Test
|
|
12
12
|
logger: Logger.new("/dev/null")
|
13
13
|
}
|
14
14
|
monitor = RokuBuilder::Monitor.new(**device_config)
|
15
|
+
monitor.instance_variable_set(:@show_prompt, true)
|
15
16
|
|
16
17
|
connection.expect(:waitfor, nil) do |config|
|
17
18
|
assert_equal(/./, config['Match'])
|
18
19
|
assert_equal(false, config['Timeout'])
|
19
20
|
end
|
20
21
|
|
21
|
-
|
22
|
+
readline = proc {
|
22
23
|
sleep(0.1)
|
23
24
|
"q"
|
24
|
-
|
25
|
+
}
|
25
26
|
|
26
|
-
|
27
|
-
|
27
|
+
Readline.stub(:readline, readline) do
|
28
|
+
Net::Telnet.stub(:new, connection) do
|
29
|
+
monitor.monitor(type: :main)
|
30
|
+
end
|
28
31
|
end
|
29
32
|
|
30
33
|
connection.verify
|
@@ -39,6 +42,7 @@ class MonitorTest < Minitest::Test
|
|
39
42
|
logger: Logger.new("/dev/null")
|
40
43
|
}
|
41
44
|
monitor = RokuBuilder::Monitor.new(**device_config)
|
45
|
+
monitor.instance_variable_set(:@show_prompt, true)
|
42
46
|
|
43
47
|
connection.expect(:waitfor, nil) do |config, &blk|
|
44
48
|
assert_equal(/./, config['Match'])
|
@@ -47,14 +51,16 @@ class MonitorTest < Minitest::Test
|
|
47
51
|
blk.call(txt) == ""
|
48
52
|
end
|
49
53
|
|
50
|
-
|
54
|
+
readline = proc {
|
51
55
|
sleep(0.1)
|
52
56
|
"q"
|
53
|
-
|
57
|
+
}
|
54
58
|
|
55
|
-
|
56
|
-
|
57
|
-
monitor.
|
59
|
+
Readline.stub(:readline, readline) do
|
60
|
+
Net::Telnet.stub(:new, connection) do
|
61
|
+
monitor.stub(:manage_text, "") do
|
62
|
+
monitor.monitor(type: :main)
|
63
|
+
end
|
58
64
|
end
|
59
65
|
end
|
60
66
|
|
@@ -70,14 +76,19 @@ class MonitorTest < Minitest::Test
|
|
70
76
|
logger: Logger.new("/dev/null")
|
71
77
|
}
|
72
78
|
monitor = RokuBuilder::Monitor.new(**device_config)
|
79
|
+
monitor.instance_variable_set(:@show_prompt, true)
|
73
80
|
|
74
81
|
connection.expect(:waitfor, nil) do |config|
|
75
82
|
assert_equal(/./, config['Match'])
|
76
83
|
assert_equal(false, config['Timeout'])
|
77
84
|
end
|
78
|
-
connection.expect(:puts, nil
|
85
|
+
connection.expect(:puts, nil) do |text|
|
86
|
+
assert_equal("text", text)
|
87
|
+
monitor.instance_variable_set(:@show_prompt, true)
|
88
|
+
end
|
89
|
+
|
79
90
|
|
80
|
-
|
91
|
+
readline = proc {
|
81
92
|
@count ||= 0
|
82
93
|
sleep(0.1)
|
83
94
|
case @count
|
@@ -87,10 +98,12 @@ class MonitorTest < Minitest::Test
|
|
87
98
|
else
|
88
99
|
"q"
|
89
100
|
end
|
90
|
-
|
101
|
+
}
|
91
102
|
|
92
|
-
|
93
|
-
|
103
|
+
Readline.stub(:readline, readline) do
|
104
|
+
Net::Telnet.stub(:new, connection) do
|
105
|
+
monitor.monitor(type: :main)
|
106
|
+
end
|
94
107
|
end
|
95
108
|
|
96
109
|
connection.verify
|
@@ -105,6 +118,7 @@ class MonitorTest < Minitest::Test
|
|
105
118
|
logger: Logger.new("/dev/null")
|
106
119
|
}
|
107
120
|
monitor = RokuBuilder::Monitor.new(**device_config)
|
121
|
+
monitor.instance_variable_set(:@show_prompt, true)
|
108
122
|
monitor.instance_variable_set(:@mock, mock)
|
109
123
|
|
110
124
|
def monitor.puts(input)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: roku_builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- greeneca
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-01-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyzip
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '0.
|
33
|
+
version: '0.10'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '0.
|
40
|
+
version: '0.10'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: faraday-digestauth
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,14 +100,14 @@ dependencies:
|
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '1.
|
103
|
+
version: '1.7'
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '1.
|
110
|
+
version: '1.7'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: bundler
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -128,14 +128,14 @@ dependencies:
|
|
128
128
|
requirements:
|
129
129
|
- - "~>"
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: '
|
131
|
+
version: '12.0'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: '
|
138
|
+
version: '12.0'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: byebug
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -156,14 +156,14 @@ dependencies:
|
|
156
156
|
requirements:
|
157
157
|
- - "~>"
|
158
158
|
- !ruby/object:Gem::Version
|
159
|
-
version: '5.
|
159
|
+
version: '5.10'
|
160
160
|
type: :development
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
164
|
- - "~>"
|
165
165
|
- !ruby/object:Gem::Version
|
166
|
-
version: '5.
|
166
|
+
version: '5.10'
|
167
167
|
- !ruby/object:Gem::Dependency
|
168
168
|
name: minitest-autotest
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|