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_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

Constructor Details

#initialize(*args) ⇒ Datatable

Returns a new instance of Datatable.



22
23
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
# File 'app/models/effective/datatable.rb', line 22

def initialize(*args)
  if args.present? && args.first != nil
    raise "#{self.class.name}.new() can only be initialized with a Hash like arguments" unless args.first.kind_of?(Hash)
    args.first.each { |k, v| self.attributes[k] = v }
  end

  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



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

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



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

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

Instance Method Details

#aggregatesObject



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

def aggregates
  @aggregates
end

#chartsObject



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

def charts
  @charts
end

#collectionObject



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

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



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

def collection_class
  @collection_class ||= (collection.respond_to?(:klass) ? collection.klass : self.class)
end

#empty?Boolean

Returns:

  • (Boolean)


117
118
119
# File 'app/models/effective/datatable.rb', line 117

def empty?
  total_records.to_i == 0
end

#model_nameObject

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



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

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

#present?Boolean

Returns:

  • (Boolean)


113
114
115
# File 'app/models/effective/datatable.rb', line 113

def present?
  total_records.to_i > 0
end

#scopesObject



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

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)


173
174
175
# File 'app/models/effective/datatable.rb', line 173

def simple?
  @simple == true
end

#table_columnsObject



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

def table_columns
  @table_columns
end

#to_jsonObject



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'app/models/effective/datatable.rb', line 96

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



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

def to_key; []; end

#to_paramObject



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

def to_param
  @to_param ||= self.class.name.underscore.sub('effective/datatables/', '')
end

#total_recordsObject



121
122
123
124
125
126
127
128
129
130
131
132
133
134
# File 'app/models/effective/datatable.rb', line 121

def total_records
  @total_records ||= (
    if active_record_collection?
      if collection_class.connection.respond_to?(:unprepared_statement)
        collection_sql = collection_class.connection.unprepared_statement { collection.to_sql }
        (collection_class.connection.execute("SELECT COUNT(*) FROM (#{collection_sql}) AS datatables_total_count").first.values.first rescue 1).to_i
      else
        (collection_class.connection.execute("SELECT COUNT(*) FROM (#{collection.to_sql}) AS datatables_total_count").first.values.first rescue 1).to_i
      end
    else
      collection.size
    end
  )
end

#view_contextObject



162
163
164
# File 'app/models/effective/datatable.rb', line 162

def view_context
  view
end