class DTK::Client::Render
Constants
- WARNING_KEY
Attributes
render_type[R]
semantic_datatype[R]
Public Class Methods
new(render_type, semantic_datatype = nil)
click to toggle source
# File lib/client/render.rb, line 38 def initialize(render_type, semantic_datatype = nil) @render_type = render_type @semantic_datatype = semantic_datatype end
render(ruby_obj, opts = {})
click to toggle source
opts can have keys
:semantic_datatype :adapter - way to pass in already created adapter :print_error_table - Boolean (default: false) :table_definition - pverride to table def associated with semantic_datatype
value returned is Boolean indicating whether any additional print needed
# File lib/client/render.rb, line 51 def self.render(ruby_obj, opts = {}) wrap_to_handle_warning_message(ruby_obj) do |ruby_obj| render_type = opts[:render_type] if render_type == Type::TABLE render_opts = { :print_error_table => opts[:print_error_table], :footnote => opts[:footnote] } get_adapter(Type::TABLE, opts).render(ruby_obj, render_opts) elsif ruby_obj.kind_of?(::Hash) get_adapter(render_type, opts).render(ruby_obj) elsif ruby_obj.kind_of?(::Array) get_adapter(render_type, opts).render(ruby_obj) elsif ruby_obj.kind_of?(::String) ruby_obj else raise Error.new('ruby_obj has unexpected type') end end end
Private Class Methods
create_adapter(render_type, opts = {})
click to toggle source
# File lib/client/render.rb, line 104 def self.create_adapter(render_type, opts = {}) klass = const_get snake_to_camel_case(render_type) klass.new(render_type, opts) end
get_adapter(render_type, opts = {})
click to toggle source
opts can have keys
:adapter - way to pass in already created adapter :semantic_datatype
# File lib/client/render.rb, line 96 def self.get_adapter(render_type, opts = {}) return opts[:adapter] if opts[:adapter] raise Error.new('No type is given') unless render_type AdapterCache.get?(render_type, opts[:semantic_datatype]) || AdapterCache.set(create_adapter(render_type, opts)) end
wrap_to_handle_warning_message(ruby_obj, &body)
click to toggle source
# File lib/client/render.rb, line 75 def self.wrap_to_handle_warning_message(ruby_obj, &body) warning_message = nil passed_ruby_obj = ruby_obj if ruby_obj.kind_of?(::Hash) if warning_message = ruby_obj[WARNING_KEY] # remove warning key passed_ruby_obj = ruby_obj.inject({}) { |h, (k, v)| h.merge(k == WARNING_KEY ? {} : { k => v }) } end end body.call(passed_ruby_obj) OsUtil.print_warning(warning_message) if warning_message end
Private Instance Methods
render_text(text)
click to toggle source
# File lib/client/render.rb, line 89 def render_text(text) STDOUT << text end