class Tablets::Renderer

Prepares markup. Renders table without any data

Attributes

initialize_instantly[R]
params[R]
tablet[R]

Public Class Methods

new(tablet, params, opts = {}) click to toggle source

Initializes renderer with tablet and params

# File lib/tablets/renderer.rb, line 9
def initialize(tablet, params, opts = {})
  @tablet = tablet
  @params = params
  @initialize_instantly = opts.fetch(:initialize_instantly, false)
end

Public Instance Methods

render(view_context) click to toggle source

Renders table in view_context

# File lib/tablets/renderer.rb, line 16
def render(view_context)
  view_context.render(partial: 'tablets/tablet', locals: locals)
end

Private Instance Methods

columns_definitions() click to toggle source

Calculates column options and applies options on top

...
columns do
  [{
    title: 'Title',
    order: 'posts.title',
    data: :title,
    options: { className: 'post-title' }
  }]
end
...

renderer.columns_definitions #=> [{
  targets: 0,
  searchable: false,
  orderable: true,
  className: 'post-title'
}]
# File lib/tablets/renderer.rb, line 72
def columns_definitions
  tablet.columns.map.with_index do |column, index|
    {
      targets:    index,
      searchable: column[:search].present?,
      orderable:  column[:order].present?
    }.merge!(column[:options] || {})
  end
end
data_path() click to toggle source

Returns path to data

# File lib/tablets/renderer.rb, line 83
def data_path
  Tablets::Engine.routes.url_helpers.data_path(tablet.name)
end
id() click to toggle source

Id for HTML container. Includes name and params with values

renderer = Tablets::Renderer.new(:posts, user_id: 1)
renderer.id #=> 'posts_user_id_1'
# File lib/tablets/renderer.rb, line 41
def id
  [tablet.name, params.to_a, 'tablet'].flatten.map(&:to_s).join('_')
end
locals() click to toggle source

Prepares locals for tablet partial

# File lib/tablets/renderer.rb, line 25
def locals
  {
    id: id,
    name: tablet.name,
    columns: tablet.columns,
    options: resulting_options,
    params: params,
    initialize_instantly: initialize_instantly
  }
end
resulting_options() click to toggle source

Calculates resulting options.

# File lib/tablets/renderer.rb, line 46
def resulting_options
  {}.merge(Tablets.options)
    .merge(columnDefs: columns_definitions, ajax: data_path)
    .merge(tablet.options)
end