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