Class: Opal::CLI
- Inherits:
-
Object
- Object
- Opal::CLI
- Defined in:
- opal/lib/opal/cli.rb
Class Attribute Summary collapse
-
.stdout ⇒ Object
Returns the value of attribute stdout.
Instance Attribute Summary collapse
-
#argv ⇒ Object
readonly
Returns the value of attribute argv.
-
#compiler_options ⇒ Object
readonly
Returns the value of attribute compiler_options.
-
#debug ⇒ Object
readonly
Returns the value of attribute debug.
-
#evals ⇒ Object
readonly
Returns the value of attribute evals.
-
#exit_status ⇒ Object
readonly
Returns the value of attribute exit_status.
-
#file ⇒ Object
readonly
Returns the value of attribute file.
-
#filename ⇒ Object
readonly
Returns the value of attribute filename.
-
#gems ⇒ Object
readonly
Returns the value of attribute gems.
-
#load_paths ⇒ Object
readonly
Returns the value of attribute load_paths.
-
#no_exit ⇒ Object
readonly
Returns the value of attribute no_exit.
-
#options ⇒ Object
readonly
Returns the value of attribute options.
-
#output ⇒ Object
readonly
Returns the value of attribute output.
-
#port ⇒ Object
readonly
Returns the value of attribute port.
-
#preload ⇒ Object
readonly
Returns the value of attribute preload.
-
#requires ⇒ Object
readonly
Returns the value of attribute requires.
-
#stubs ⇒ Object
readonly
Returns the value of attribute stubs.
-
#verbose ⇒ Object
readonly
Returns the value of attribute verbose.
Instance Method Summary collapse
- #build ⇒ Object
- #compile? ⇒ Boolean
- #compiled_source ⇒ Object
- #compiler_option_names ⇒ Object
-
#evals_or_file ⇒ Object
Internal: Yelds a string of source code and the proper filename for either evals, stdin or a filepath.
-
#initialize(options = nil) ⇒ CLI
constructor
A new instance of CLI.
- #map ⇒ Object
- #puts(*args) ⇒ Object
- #run ⇒ Object
- #run_code ⇒ Object
- #runner ⇒ Object
- #sexp? ⇒ Boolean
- #show_compiled_source ⇒ Object
- #show_sexp ⇒ Object
- #skip_opal_require? ⇒ Boolean
Constructor Details
#initialize(options = nil) ⇒ CLI
Returns a new instance of CLI
Raises:
- (ArgumentError)
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
# File 'opal/lib/opal/cli.rb', line 28 def initialize options = nil options ||= {} # Runner @runner_type = options.delete(:runner) || :nodejs @port = options.delete(:port) || 3000 @options = options @compile = !!options.delete(:compile) @sexp = options.delete(:sexp) @file = options.delete(:file) @no_exit = options.delete(:no_exit) @argv = options.delete(:argv) || [] @evals = options.delete(:evals) || [] @requires = options.delete(:requires) || [] @load_paths = options.delete(:load_paths) || [] @gems = options.delete(:gems) || [] @stubs = options.delete(:stubs) || [] @preload = options.delete(:preload) || [] @output = options.delete(:output) || self.class.stdout || $stdout @verbose = options.fetch(:verbose, false); options.delete(:verbose) @debug = options.fetch(:debug, false); options.delete(:debug) @filename = options.fetch(:filename) { @file && @file.path }; options.delete(:filename) @skip_opal_require = options.delete(:skip_opal_require) @compiler_options = Hash[ *compiler_option_names.map do |option| key = option.to_sym next unless options.has_key? key value = options.delete(key) [key, value] end.compact.flatten ] raise ArgumentError, "no runnable code provided (evals or file)" if @evals.empty? and @file.nil? raise ArgumentError, "unknown options: #{options.inspect}" unless @options.empty? end
Class Attribute Details
.stdout ⇒ Object
Returns the value of attribute stdout
25 26 27
# File 'opal/lib/opal/cli.rb', line 25 def stdout @stdout end
Instance Attribute Details
#argv ⇒ Object (readonly)
Returns the value of attribute argv
8 9 10
# File 'opal/lib/opal/cli.rb', line 8 def argv @argv end
#compiler_options ⇒ Object (readonly)
Returns the value of attribute compiler_options
8 9 10
# File 'opal/lib/opal/cli.rb', line 8 def compiler_options @compiler_options end
#debug ⇒ Object (readonly)
Returns the value of attribute debug
8 9 10
# File 'opal/lib/opal/cli.rb', line 8 def debug @debug end
#evals ⇒ Object (readonly)
Returns the value of attribute evals
8 9 10
# File 'opal/lib/opal/cli.rb', line 8 def evals @evals end
#exit_status ⇒ Object (readonly)
Returns the value of attribute exit_status
89 90 91
# File 'opal/lib/opal/cli.rb', line 89 def exit_status @exit_status end
#file ⇒ Object (readonly)
Returns the value of attribute file
8 9 10
# File 'opal/lib/opal/cli.rb', line 8 def file @file end
#filename ⇒ Object (readonly)
Returns the value of attribute filename
8 9 10
# File 'opal/lib/opal/cli.rb', line 8 def filename @filename end
#gems ⇒ Object (readonly)
Returns the value of attribute gems
8 9 10
# File 'opal/lib/opal/cli.rb', line 8 def gems @gems end
#load_paths ⇒ Object (readonly)
Returns the value of attribute load_paths
8 9 10
# File 'opal/lib/opal/cli.rb', line 8 def load_paths @load_paths end
#no_exit ⇒ Object (readonly)
Returns the value of attribute no_exit
8 9 10
# File 'opal/lib/opal/cli.rb', line 8 def no_exit @no_exit end
#options ⇒ Object (readonly)
Returns the value of attribute options
8 9 10
# File 'opal/lib/opal/cli.rb', line 8 def options @options end
#output ⇒ Object (readonly)
Returns the value of attribute output
8 9 10
# File 'opal/lib/opal/cli.rb', line 8 def output @output end
#port ⇒ Object (readonly)
Returns the value of attribute port
8 9 10
# File 'opal/lib/opal/cli.rb', line 8 def port @port end
#preload ⇒ Object (readonly)
Returns the value of attribute preload
8 9 10
# File 'opal/lib/opal/cli.rb', line 8 def preload @preload end
#requires ⇒ Object (readonly)
Returns the value of attribute requires
8 9 10
# File 'opal/lib/opal/cli.rb', line 8 def requires @requires end
#stubs ⇒ Object (readonly)
Returns the value of attribute stubs
8 9 10
# File 'opal/lib/opal/cli.rb', line 8 def stubs @stubs end
#verbose ⇒ Object (readonly)
Returns the value of attribute verbose
8 9 10
# File 'opal/lib/opal/cli.rb', line 8 def verbose @verbose end
Instance Method Details
#build ⇒ Object
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
# File 'opal/lib/opal/cli.rb', line 91 def build builder = Opal ::Builder .new stubs: stubs, compiler_options: compiler_options builder.append_paths(*load_paths) gems.each { |gem_name| builder.use_gem gem_name } builder.build 'opal' unless skip_opal_require? preload.each { |path| builder.build_require(path) } # FLAGS builder.build_str '$VERBOSE = true', '(flags)' if verbose builder.build_str '$DEBUG = true', '(flags)' if debug # REQUIRES: -r requires.each do |local_require| builder.build(local_require) end evals_or_file do |contents, filename| builder.build_str(contents, filename) end builder.build_str 'Kernel.exit', '(exit)' unless no_exit builder end
#compile? ⇒ Boolean
Returns:
- (Boolean)
12 13 14
# File 'opal/lib/opal/cli.rb', line 12 def compile? @compile end
#compiled_source ⇒ Object
118 119 120
# File 'opal/lib/opal/cli.rb', line 118 def compiled_source build.to_s end
#compiler_option_names ⇒ Object
139 140 141 142 143 144 145 146 147 148
# File 'opal/lib/opal/cli.rb', line 139 def compiler_option_names %w[method_missingarity_checkdynamic_require_severitysource_map_enabledirb_enabledinline_operators] end
#evals_or_file ⇒ Object
Internal: Yelds a string of source code and the proper filename for either evals, stdin or a filepath.
152 153 154 155 156 157 158 159 160
# File 'opal/lib/opal/cli.rb', line 152 def evals_or_file if evals.any? yield evals.join("\n"), '-e' else if file and (filename != '-' or evals.empty?) yield file.read, filename end end end
#map ⇒ Object
#puts(*args) ⇒ Object
162 163 164
# File 'opal/lib/opal/cli.rb', line 162 def puts(*args) output.puts(*args) end
#run ⇒ Object
65 66 67 68 69 70 71
# File 'opal/lib/opal/cli.rb', line 65 def run case when sexp?; show_sexp when compile?; show_compiled_source else run_code end end
#run_code ⇒ Object
84 85 86 87
# File 'opal/lib/opal/cli.rb', line 84 def run_code runner.run(compiled_source, argv) @exit_status = runner.exit_status end
#runner ⇒ Object
73 74 75 76 77 78 79 80 81 82
# File 'opal/lib/opal/cli.rb', line 73 def runner @runner ||= case @runner_type when :server; CliRunners ::Server .new (output, port) when :nodejs; CliRunners ::Nodejs .new (output) when :phantomjs; CliRunners ::Phantomjs .new (output) when :applescript; CliRunners ::AppleScript .new (output) when :nashorn; CliRunners ::Nashorn .new (output) else raise ArgumentError, @runner_type.inspect end end
#sexp? ⇒ Boolean
Returns:
- (Boolean)
16 17 18
# File 'opal/lib/opal/cli.rb', line 16 def sexp? @sexp end
#show_compiled_source ⇒ Object
122 123 124
# File 'opal/lib/opal/cli.rb', line 122 def show_compiled_source puts compiled_source end
#show_sexp ⇒ Object
#skip_opal_require? ⇒ Boolean
Returns:
- (Boolean)
20 21 22
# File 'opal/lib/opal/cli.rb', line 20 def skip_opal_require? @skip_opal_require end