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