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
50
51
52
# File 'app/models/effective/datatable.rb', line 24

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

  initialize_attributes(args)

  if respond_to?(:initialize_scopes)  # There was at least one scope defined in the scopes do .. end block
    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



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

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



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

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

Instance Method Details

#aggregatesObject



78
79
80
# File 'app/models/effective/datatable.rb', line 78

def aggregates
  @aggregates
end

#chartsObject



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

def charts
  @charts
end

#collectionObject



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

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()



106
107
108
# File 'app/models/effective/datatable.rb', line 106

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



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

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

#empty?Boolean

Returns:

  • (Boolean)


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

def empty?
  total_records == 0
end

#klass_scopesObject



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

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



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

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

#permitted_paramsObject



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

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

#present?Boolean

Returns:

  • (Boolean)


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

def present?
  total_records > 0
end

#scopesObject



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

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)


180
181
182
# File 'app/models/effective/datatable.rb', line 180

def simple?
  @simple == true
end

#table_columnsObject



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

def table_columns
  @table_columns
end

#to_jsonObject



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

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



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

def to_key; []; end

#to_paramObject



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

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

#total_recordsObject



135
136
137
# File 'app/models/effective/datatable.rb', line 135

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

#view_contextObject



169
170
171
# File 'app/models/effective/datatable.rb', line 169

def view_context
  view
end