module Coltrane::Renderers::Renderer

Public Instance Methods

render(model, **options) click to toggle source
# File lib/coltrane/renderers/renderer.rb, line 6
def render(model, **options)
  model
    .yield_self { |model| model_class_list(model) }
    .yield_self { |model_classes| renderer_class(*model_classes) }
    .value_or   { raise("Renderer doesn't implements #{model.class}") }
    .new(model, **options)
    .render
end

Private Instance Methods

model_class_list(model) click to toggle source
# File lib/coltrane/renderers/renderer.rb, line 17
def model_class_list(model)
  model
    .class
    .ancestors
    .yield_self { |classes| classes[0...classes.index(Object)]  }
end
renderer_class(*classes) click to toggle source
# File lib/coltrane/renderers/renderer.rb, line 24
def renderer_class(*classes)
  return if classes.empty?
  Try() { classes }
    .fmap { |classes|
       classes
        .first
        .to_s
        .gsub('Coltrane::', '')
        .gsub('::', '')
        .prepend("#{self.name}::")
        .concat('Drawer')
        .yield_self {|class_name| Object.const_get(class_name) }
    }
    .to_maybe
    .or(renderer_class(*classes[1..-1]))
end