roku_builder 3.10.7 → 3.11.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
  SHA1:
3
- metadata.gz: 375387f31b52479dc262e78bc5f8d7e57efbb186
4
- data.tar.gz: ba455138e37db3c4e69042f10cbdd2e908cb357d
3
+ metadata.gz: c6dbac3c0fec31e905833e19647dd92bb3d4864d
4
+ data.tar.gz: 321dd14fbb7e7f5e6a29112958e0c5c66834927d
5
5
  SHA512:
6
- metadata.gz: b1b336f9b7798a53e52974dd28bd08ba13a5a4de4da99dfc759e627dd6dcd68647a721378d367e4260bf9f1fba3ff39e8f440325cb5fdb5b0f2f8328a47fccd7
7
- data.tar.gz: 9df9712dd4c33de3dc47a06aeed09593da3b84ef8fd86fe173fc5b3ceb6b73bf073842c1332540458a044aa1e75afe9f8a475e7ee3ea375259bc145318be0ef3
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.10.6)
5
- faraday (~> 0.9)
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.6)
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.15)
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 (>= 1.6.0, < 2)
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.0.1)
29
- faraday (0.9.2)
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.9.1)
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.6.8.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 (11.3.0)
82
- rb-fsevent (0.9.7)
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.4.0)
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.1)
97
- tins (1.12.0)
98
- yard (0.9.5)
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.9)
108
+ minitest (~> 5.10)
109
109
  minitest-autotest (~> 1.0)
110
110
  minitest-server (~> 1.0)
111
- rake (~> 11.2)
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
@@ -20,6 +20,8 @@ require 'pstore'
20
20
  require 'nokogiri'
21
21
  #navigator
22
22
  require 'io/console'
23
+ #monitor
24
+ require 'readline'
23
25
 
24
26
  require "roku_builder/controller"
25
27
  require "roku_builder/controller_commands"
@@ -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 },
@@ -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
@@ -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
- command = gets.chomp
49
- case command
50
- when "q"
51
- thread.exit
52
- running = false
53
- when "stop"
54
- thread[:connection].puts("\C-c")
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
- thread[:connection].puts(command)
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
- print all_text
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) {|char|
135
- if @mappings[char.to_sym] != nil
136
- nav(commands:[@mappings[char.to_sym][0].to_sym])
137
- elsif char.inspect.force_encoding("UTF-8").ascii_only?
138
- type(text: char)
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
@@ -2,5 +2,5 @@
2
2
 
3
3
  module RokuBuilder
4
4
  # Version of the RokuBuilder Gem
5
- VERSION = "3.10.7"
5
+ VERSION = "3.11.0"
6
6
  end
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.9"
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.6"
29
+ spec.add_dependency "nokogiri", "~> 1.7"
30
30
 
31
31
  spec.add_development_dependency "bundler", "~> 1.7"
32
- spec.add_development_dependency "rake", "~> 11.2"
32
+ spec.add_development_dependency "rake", "~> 12.0"
33
33
  spec.add_development_dependency "byebug", "~> 9.0"
34
- spec.add_development_dependency "minitest", "~> 5.9"
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
- def monitor.gets
22
+ readline = proc {
22
23
  sleep(0.1)
23
24
  "q"
24
- end
25
+ }
25
26
 
26
- Net::Telnet.stub(:new, connection) do
27
- monitor.monitor(type: :main)
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
- def monitor.gets
54
+ readline = proc {
51
55
  sleep(0.1)
52
56
  "q"
53
- end
57
+ }
54
58
 
55
- Net::Telnet.stub(:new, connection) do
56
- monitor.stub(:manage_text, "") do
57
- monitor.monitor(type: :main)
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, ["text"])
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
- def monitor.gets
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
- end
101
+ }
91
102
 
92
- Net::Telnet.stub(:new, connection) do
93
- monitor.monitor(type: :main)
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.10.7
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: 2016-12-06 00:00:00.000000000 Z
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.9'
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.9'
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.6'
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.6'
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: '11.2'
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: '11.2'
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.9'
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.9'
166
+ version: '5.10'
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: minitest-autotest
169
169
  requirement: !ruby/object:Gem::Requirement