Class: RUIC

Inherits:
Object
  • Object
show all
Defined in:
lib/ruic.rb,
lib/ruic.rb,
lib/ruic/version.rb

Defined Under Namespace

Modules: SelfInspecting

Constant Summary collapse

DEFAULTMETADATA =
'C:/Program Files (x86)/NVIDIA Corporation/UI Composer 8.0/res/DataModelMetadata/en-us/MetaData.xml'
VERSION =
'0.2.5'

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(metadata = DEFAULTMETADATA) ⇒ RUIC

Returns a new instance of RUIC.



49
50
51
52
# File 'lib/ruic.rb', line 49

def initialize( =DEFAULTMETADATA )
	@metadata = 
	@apps = {}
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *a) ⇒ Object



74
75
76
# File 'lib/ruic.rb', line 74

def method_missing(name,*a)
	@apps[name] || (name=~/^app\d*/ ? "(no #{name} loaded)".extend(SelfInspecting) : super)
end

Class Method Details

.run(opts = {}) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/ruic.rb', line 18

def self.run(opts={})
	opts = opts
	ruic = nil
	if opts[:script]
		script = File.read(opts[:script],encoding:'utf-8')
		Dir.chdir(File.dirname(opts[:script])) do
			ruic = self.new
			ruic.uia(opts[:uia]) if opts[:uia]
			ruic.env.eval(script,opts[:script])
		end
	end

	if opts[:repl]
		location = (ruic && ruic.app && ruic.app.respond_to?(:file) && ruic.app.file) || opts[:uia] || opts[:script] || '.'
		Dir.chdir( File.dirname(location) ) do
			ruic ||= self.new.tap{ |r| r.uia(opts[:uia]) if opts[:uia] }
			require 'ripl/irb'
			require 'ripl/multi_line'
			require 'ripl/multi_line/live_error.rb'
			require_relative 'ruic/ripl-after-result'
			Ripl::MultiLine.engine = Ripl::MultiLine::LiveError
			Ripl::Shell.include Ripl::MultiLine.engine
			Ripl::Shell.include Ripl::AfterResult
			Ripl.config.merge! prompt:"", result_prompt:'#=> ', multi_line_prompt:'  ', irb_verbose:false, after_result:"\n"
			ARGV.clear # So that RIPL doesn't try to interpret the options
			puts "(RUIC v#{RUIC::VERSION} interactive session; 'quit' or ctrl-d to end)"
			Ripl.start binding:ruic.env
		end
	end
end

Instance Method Details

#assert(condition = :CONDITIONNOTSUPPLIED, msg = nil, &block) ⇒ Object



78
79
80
81
82
83
84
85
86
87
88
# File 'lib/ruic.rb', line 78

def assert(condition=:CONDITIONNOTSUPPLIED,msg=nil,&block)
	if block && condition==:CONDITIONNOTSUPPLIED || condition.is_a?(String)
		msg = condition.is_a?(String) ? condition : yield
		condition = msg.is_a?(String) ? eval(msg,block.binding) : msg
	end
	unless condition
		file, line, _ = caller.first.split(':')
		puts "#{msg && "#{msg} : "}assertion failed (#{file} line #{line})"
		exit 1
	end
end

#envObject



64
65
66
# File 'lib/ruic.rb', line 64

def env
	@env ||= binding
end

#inspectObject



92
93
94
# File 'lib/ruic.rb', line 92

def inspect
	"<RUIC #{@apps.empty? ? "(no app loaded)" : Hash[ @apps.map{ |id,app| [id,File.basename(app.file)] } ]}>"
end

#metadata(path) ⇒ Object



54
55
56
# File 'lib/ruic.rb', line 54

def (path)
	@metadata = path
end

#show(*a) ⇒ Object



90
# File 'lib/ruic.rb', line 90

def show(*a); puts *a.map(&:to_s); end

#uia(path) ⇒ Object



58
59
60
61
62
# File 'lib/ruic.rb', line 58

def uia(path)
	meta = UIC.Meta @metadata
	name = @apps.empty? ? :app : :"app#{@apps.length+1}"
	@apps[name] = UIC.App(meta,path)
end