class DynamicScaffold::ListBuilder

Attributes

add_button[W]
destroy_buttons[W]
edit_buttons[W]

Public Class Methods

new(config) click to toggle source
# File lib/dynamic_scaffold/list_builder.rb, line 5
def initialize(config)
  @config = config
  @items = []
  @sorter = nil
  @order = []
  @title = nil
  @filter = nil
  @row_class_block = nil
  @add_button = true
  @edit_buttons = true
  @destroy_buttons = true
end

Public Instance Methods

add_button(&block) click to toggle source
# File lib/dynamic_scaffold/list_builder.rb, line 106
def add_button(&block)
  if block_given?
    @add_button_block = block
  elsif @add_button_block
    @config.controller.view_context.instance_exec(&@add_button_block)
  else
    @add_button
  end
end
build_sql(scope_params) click to toggle source
# File lib/dynamic_scaffold/list_builder.rb, line 79
def build_sql(scope_params)
  sql = @config.model.all
  sql = sql.where scope_params
  ret = @config.controller.instance_exec(sql, &@filter) unless @filter.nil?
  sql = ret unless ret.nil?
  unless sql.is_a? ::ActiveRecord::Relation
    raise(
      Error::InvalidOperation,
      'You must return ActiveRecord::Relation from filter block'
    )
  end
  sql
end
destroy_buttons(record = nil, &block) click to toggle source
# File lib/dynamic_scaffold/list_builder.rb, line 126
def destroy_buttons(record = nil, &block)
  if block_given?
    @destroy_buttons_block = block
  elsif record.present? && @destroy_buttons_block
    @config.controller.view_context.instance_exec(record, &@destroy_buttons_block)
  else
    @destroy_buttons
  end
end
edit_buttons(record = nil, &block) click to toggle source
# File lib/dynamic_scaffold/list_builder.rb, line 116
def edit_buttons(record = nil, &block)
  if block_given?
    @edit_buttons_block = block
  elsif record.present? && @edit_buttons_block
    @config.controller.view_context.instance_exec(record, &@edit_buttons_block)
  else
    @edit_buttons
  end
end
filter(&block) click to toggle source
# File lib/dynamic_scaffold/list_builder.rb, line 93
def filter(&block)
  @filter = block if block_given?
  @filter
end
item(*args, &block) click to toggle source
# File lib/dynamic_scaffold/list_builder.rb, line 33
def item(*args, &block)
  item = List::Item.new(@config, *args, block)
  @items << item
  item
end
items() click to toggle source
# File lib/dynamic_scaffold/list_builder.rb, line 39
def items
  if @items.empty?
    @config.model.column_names.each do |column|
      @items << List::Item.new(@config, column, nil)
    end
  end
  @items
end
order(*args) click to toggle source
# File lib/dynamic_scaffold/list_builder.rb, line 56
def order(*args)
  @order = args unless args.empty?
  @order
end
page_param_name() click to toggle source
# File lib/dynamic_scaffold/list_builder.rb, line 24
def page_param_name
  pagination ? pagination.param_name : nil
end
pagination(options = nil) click to toggle source
# File lib/dynamic_scaffold/list_builder.rb, line 18
def pagination(options = nil)
  @pagination = List::Pagination.new(options) unless options.nil?

  @pagination
end
row_class(record = nil, &block) click to toggle source
# File lib/dynamic_scaffold/list_builder.rb, line 98
def row_class(record = nil, &block)
  if block_given?
    @row_class_block = block
  elsif record.present? && @row_class_block
    @config.controller.view_context.instance_exec(record, &@row_class_block)
  end
end
sorter(params = nil) click to toggle source
# File lib/dynamic_scaffold/list_builder.rb, line 28
def sorter(params = nil)
  @sorter = params if params
  @sorter
end
sorter_attribute() click to toggle source
# File lib/dynamic_scaffold/list_builder.rb, line 48
def sorter_attribute
  @sorter.keys.first
end
sorter_direction() click to toggle source
# File lib/dynamic_scaffold/list_builder.rb, line 52
def sorter_direction
  @sorter.values.first
end
title(*args, &block) click to toggle source
# File lib/dynamic_scaffold/list_builder.rb, line 61
def title(*args, &block)
  if args[0].is_a?(Symbol) || args[0].is_a?(String) || block_given?
    @title = {
      column_name: args[0],
      block: block
    }
  else
    record = args[0]
    return @config.controller.view_context.instance_exec(record, &@title[:block]) if @title[:block]

    record.public_send(@title[:column_name])
  end
end
title?() click to toggle source
# File lib/dynamic_scaffold/list_builder.rb, line 75
def title?
  @title.present?
end