Class: Effective::Datatable

Constant Summary

Constants included from EffectiveDatatable::Rendering

EffectiveDatatable::Rendering::BLANK

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from EffectiveDatatable::Dsl

datatable

Methods included from EffectiveDatatable::Options

#initialize_attributes, #initialize_chart_options, #initialize_datatable_options, #initialize_scope_options, #quote_sql

Methods included from EffectiveDatatable::Hooks

#finalize, #order_column, #search_column

Methods included from EffectiveDatatable::Helpers

#convert_to_column_type

Methods included from EffectiveDatatable::Charts

#charts_data

Methods included from EffectiveDatatable::Ajax

#display_entries, #display_table_columns, #order_direction, #order_index, #order_name, #page, #per_page, #per_page=, #search_terms

Methods included from EffectiveDatatable::Dsl::Scopes

#scope

Methods included from EffectiveDatatable::Dsl::Datatable

#actions_column, #aggregate, #array_column, #bulk_actions_column, #default_entries, #default_order, #table_column

Methods included from EffectiveDatatable::Dsl::Charts

#chart

Methods included from EffectiveDatatable::Dsl::BulkActions

#bulk_action, #bulk_action_content, #bulk_action_divider, #bulk_download

Constructor Details

#initialize(*args) ⇒ Datatable

Returns a new instance of Datatable.



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'app/models/effective/datatable.rb', line 24

def initialize(*args)
  initialize_attributes(args)

  if respond_to?(:initialize_scopes) # There was at least one scope defined in the scopes do .. end block
    initialize_scopes
    initialize_scope_options
  end

  if respond_to?(:initialize_datatable)
    initialize_datatable          # This creates @table_columns based on the DSL datatable do .. end block
    initialize_datatable_options  # This normalizes all the options
  end

  if respond_to?(:initialize_charts)
    initialize_charts
    initialize_chart_options
  end

  unless active_record_collection? || array_collection?
    raise "Unsupported collection type. Should be ActiveRecord class, ActiveRecord relation, or an Array of Arrays [[1, 'something'], [2, 'something else']]"
  end

  if @default_order.present? && !table_columns.key?((@default_order.keys.first rescue nil))
    raise "default_order :#{(@default_order.keys.first rescue 'nil')} must exist as a table_column or array_column"
  end
end

Instance Attribute Details

#attributesObject

Any attributes set on initialize will be echoed back and available to the class



80
81
82
# File 'app/models/effective/datatable.rb', line 80

def attributes
  @attributes
end

#display_recordsObject

Returns the value of attribute display_records.



3
4
5
# File 'app/models/effective/datatable.rb', line 3

def display_records
  @display_records
end

#simpleObject

These two options control the render behaviour of a datatable



6
7
8
# File 'app/models/effective/datatable.rb', line 6

def simple
  @simple
end

#table_html_classObject

These two options control the render behaviour of a datatable



6
7
8
# File 'app/models/effective/datatable.rb', line 6

def table_html_class
  @table_html_class
end

#viewObject

Returns the value of attribute view.



3
4
5
# File 'app/models/effective/datatable.rb', line 3

def view
  @view
end

Class Method Details

.model_nameObject

Searching & Filters



91
92
93
# File 'app/models/effective/datatable.rb', line 91

def self.model_name # Searching & Filters
  @model_name ||= ActiveModel::Name.new(self)
end

Instance Method Details

#aggregatesObject



75
76
77
# File 'app/models/effective/datatable.rb', line 75

def aggregates
  @aggregates
end

#chartsObject



71
72
73
# File 'app/models/effective/datatable.rb', line 71

def charts
  @charts
end

#collectionObject



99
100
101
# File 'app/models/effective/datatable.rb', line 99

def collection
  raise "You must define a collection. Something like an ActiveRecord User.all or an Array of Arrays [[1, 'something'], [2, 'something else']]"
end

#collection_classObject

This is set by initialize_datatable_options()



103
104
105
# File 'app/models/effective/datatable.rb', line 103

def collection_class  # This is set by initialize_datatable_options()
  @collection_class  # Will be either User/Post/etc or Array
end

#current_scopeObject

The currently selected (klass) scope



63
64
65
# File 'app/models/effective/datatable.rb', line 63

def current_scope # The currently selected (klass) scope
  attributes[:current_scope]
end

#empty?Boolean

Returns:

  • (Boolean)


128
129
130
# File 'app/models/effective/datatable.rb', line 128

def empty?
  total_records == 0 && current_scope.blank?
end

#klass_scopesObject



59
60
61
# File 'app/models/effective/datatable.rb', line 59

def klass_scopes
  scopes.select { |name, options| options[:klass_scope] }
end

#model_nameObject

Instance method. In Rails 4.2 this needs to be defined on the instance, before it was on the class



87
88
89
# File 'app/models/effective/datatable.rb', line 87

def model_name # Searching & Filters
  @model_name ||= ActiveModel::Name.new(self.class)
end

#permitted_paramsObject



67
68
69
# File 'app/models/effective/datatable.rb', line 67

def permitted_params
  scopes.keys + [:current_scope, :referer]
end

#present?Boolean

Returns:

  • (Boolean)


124
125
126
# File 'app/models/effective/datatable.rb', line 124

def present?
  total_records > 0 || current_scope.present?
end

#scopesObject



55
56
57
# File 'app/models/effective/datatable.rb', line 55

def scopes
  @scopes
end

#simple?Boolean

When simple only a table will be rendered with no sorting, no filtering, no export buttons, no pagination, no per page, no colReorder default sorting only, default visibility only, all records returned, and responsive enabled

Returns:

  • (Boolean)


177
178
179
# File 'app/models/effective/datatable.rb', line 177

def simple?
  @simple == true
end

#table_columnsObject



51
52
53
# File 'app/models/effective/datatable.rb', line 51

def table_columns
  @table_columns
end

#to_jsonObject



107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'app/models/effective/datatable.rb', line 107

def to_json
  raise 'Effective::Datatable to_json called with a nil view.  Please call render_datatable(@datatable) or @datatable.view = view before this method' unless view.present?

  @json ||= begin
    data = table_data

    {
      draw: (params[:draw] || 0),
      data: (data || []),
      recordsTotal: (total_records || 0),
      recordsFiltered: (display_records || 0),
      aggregates: (aggregate_data(data) || []),
      charts: (charts_data || {})
    }
  end
end

#to_keyObject

Searching & Filters



84
# File 'app/models/effective/datatable.rb', line 84

def to_key; []; end

#to_paramObject



95
96
97
# File 'app/models/effective/datatable.rb', line 95

def to_param
  @to_param ||= self.class.name.underscore
end

#total_recordsObject



132
133
134
# File 'app/models/effective/datatable.rb', line 132

def total_records
  @total_records ||= (active_record_collection? ? active_record_collection_size(the_collection) : the_collection.size)
end

#view_contextObject



166
167
168
# File 'app/models/effective/datatable.rb', line 166

def view_context
  view
end