effective_datatables 2.0.6 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/controllers/effective/datatables_controller.rb +1 -1
- data/app/models/effective/active_record_datatable_tool.rb +3 -3
- data/app/models/effective/datatable.rb +1 -1
- data/app/models/effective/effective_datatable/dsl.rb +3 -3
- data/app/models/effective/effective_datatable/options.rb +14 -2
- data/app/models/effective/effective_datatable/rendering.rb +22 -0
- data/app/views/effective/datatables/_actions_column.html.haml +9 -6
- data/lib/effective_datatables.rb +3 -0
- data/lib/effective_datatables/version.rb +1 -1
- data/lib/generators/templates/effective_datatables.rb +24 -2
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0c2b41d68aae71ba0779f8dc2f8144dda6b5a892
|
4
|
+
data.tar.gz: 110fc6ea4011eca17caf7044ad0ef3801e5456f1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 06e528fa15d587e5ee09d3a934a37add14cdc4e1b2fc26981a7cd7c1e5e3d3d7f15a4afdfb2c7458646804f74275f2f44b7d19d30aa267721d34b3cfdeea5e67
|
7
|
+
data.tar.gz: cbf3aad24a9878efa02c50f97f5c3e0dae9f43b532b74aec9f327466cad905f6f576f6b329a1fa657d8b38c579fcd4dfed866354dd0363a93425a867090de4f5
|
@@ -7,7 +7,7 @@ module Effective
|
|
7
7
|
@datatable = find_datatable(params[:id]).try(:new, params[:attributes])
|
8
8
|
@datatable.view = view_context if !@datatable.nil?
|
9
9
|
|
10
|
-
EffectiveDatatables.authorized?(self, :index, @datatable.try(:collection_class) ||
|
10
|
+
EffectiveDatatables.authorized?(self, :index, @datatable.try(:collection_class) || @datatable.try(:class))
|
11
11
|
|
12
12
|
respond_to do |format|
|
13
13
|
format.html
|
@@ -23,7 +23,7 @@ module Effective
|
|
23
23
|
if [:string, :text].include?(order_column[:type]) && order_column[:sql_as_column] != true
|
24
24
|
collection.order("COALESCE(#{order_column[:column]}, '') #{order_direction}")
|
25
25
|
else
|
26
|
-
collection.order("#{order_column[:column]} #{order_direction} NULLS
|
26
|
+
collection.order("#{order_column[:column]} #{order_direction} NULLS LAST")
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
@@ -98,13 +98,13 @@ module Effective
|
|
98
98
|
collection
|
99
99
|
end
|
100
100
|
when :integer
|
101
|
-
collection.public_send(sql_op, "#{column} = :term", term: term.to_i)
|
101
|
+
collection.public_send(sql_op, "#{column} = :term", term: term.gsub(/\D/, '').to_i)
|
102
102
|
when :year
|
103
103
|
collection.public_send(sql_op, "EXTRACT(YEAR FROM #{column}) = :term", term: term.to_i)
|
104
104
|
when :price
|
105
105
|
price_in_cents = (term.gsub(/[^0-9|\.]/, '').to_f * 100.0).to_i
|
106
106
|
collection.public_send(sql_op, "#{column} = :term", term: price_in_cents)
|
107
|
-
when :currency
|
107
|
+
when :currency, :decimal
|
108
108
|
collection.public_send(sql_op, "#{column} = :term", term: term.gsub(/[^0-9|\.]/, '').to_f)
|
109
109
|
else
|
110
110
|
collection.public_send(sql_op, "#{column} = :term", term: term)
|
@@ -2,7 +2,7 @@ module Effective
|
|
2
2
|
class Datatable
|
3
3
|
attr_accessor :total_records, :display_records, :view, :attributes
|
4
4
|
|
5
|
-
delegate :render, :link_to, :mail_to, :number_to_currency, :to => :@view
|
5
|
+
delegate :render, :controller, :link_to, :mail_to, :number_to_currency, :to => :@view
|
6
6
|
|
7
7
|
include Effective::EffectiveDatatable::Dsl
|
8
8
|
extend Effective::EffectiveDatatable::Dsl::ClassMethods
|
@@ -36,9 +36,9 @@ module Effective
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def actions_column(options = {}, proc = nil, &block)
|
39
|
-
show = options.fetch(:show, false)
|
40
|
-
edit = options.fetch(:edit,
|
41
|
-
destroy = options.fetch(:destroy,
|
39
|
+
show = options.fetch(:show, (EffectiveDatatables.actions_column[:show] rescue false))
|
40
|
+
edit = options.fetch(:edit, (EffectiveDatatables.actions_column[:edit] rescue false))
|
41
|
+
destroy = options.fetch(:destroy, (EffectiveDatatables.actions_column[:destroy] rescue false))
|
42
42
|
name = options.fetch(:name, 'actions')
|
43
43
|
|
44
44
|
opts = {
|
@@ -124,13 +124,25 @@ module Effective
|
|
124
124
|
when :belongs_to
|
125
125
|
{
|
126
126
|
type: :select,
|
127
|
-
values:
|
127
|
+
values: (
|
128
|
+
if belongs_to[:klass].respond_to?(:datatables_filter)
|
129
|
+
Proc.new { belongs_to[:klass].datatables_filter }
|
130
|
+
else
|
131
|
+
Proc.new { belongs_to[:klass].all.map { |obj| [obj.to_s, obj.id] }.sort { |x, y| x[0] <=> y[0] } }
|
132
|
+
end
|
133
|
+
)
|
128
134
|
}
|
129
135
|
when :has_many
|
130
136
|
{
|
131
137
|
type: :select,
|
132
138
|
multiple: true,
|
133
|
-
values:
|
139
|
+
values: (
|
140
|
+
if has_many[:klass].respond_to?(:datatables_filter)
|
141
|
+
Proc.new { has_many[:klass].datatables_filter }
|
142
|
+
else
|
143
|
+
Proc.new { has_many[:klass].all.map { |obj| [obj.to_s, obj.id] }.sort { |x, y| x[0] <=> y[0] } }
|
144
|
+
end
|
145
|
+
)
|
134
146
|
}
|
135
147
|
when :effective_roles
|
136
148
|
{type: :select, values: EffectiveRoles.roles}
|
@@ -71,6 +71,20 @@ module Effective
|
|
71
71
|
}
|
72
72
|
locals.merge!(opts[:partial_locals]) if opts[:partial_locals]
|
73
73
|
|
74
|
+
if active_record_collection?
|
75
|
+
if locals[:show_action] == :authorize
|
76
|
+
locals[:show_action] = (EffectiveDatatables.authorized?(controller, :show, collection_class) rescue false)
|
77
|
+
end
|
78
|
+
|
79
|
+
if locals[:edit_action] == :authorize
|
80
|
+
locals[:edit_action] = (EffectiveDatatables.authorized?(controller, :edit, collection_class) rescue false)
|
81
|
+
end
|
82
|
+
|
83
|
+
if locals[:destroy_action] == :authorize
|
84
|
+
locals[:destroy_action] = (EffectiveDatatables.authorized?(controller, :destroy, collection_class) rescue false)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
74
88
|
rendered[name] = (render(
|
75
89
|
:partial => opts[:partial],
|
76
90
|
:as => opts[:partial_local],
|
@@ -117,6 +131,14 @@ module Effective
|
|
117
131
|
number_to_currency(value / 100.0)
|
118
132
|
when :currency
|
119
133
|
number_to_currency(value || 0)
|
134
|
+
when :integer
|
135
|
+
if EffectiveDatatables.integer_format.kind_of?(Symbol)
|
136
|
+
view.instance_exec { public_send(EffectiveDatatables.integer_format, value) }
|
137
|
+
elsif EffectiveDatatables.integer_format.respond_to?(:call)
|
138
|
+
view.instance_exec { EffectiveDatatables.integer_format.call(value) }
|
139
|
+
else
|
140
|
+
value
|
141
|
+
end
|
120
142
|
else
|
121
143
|
value
|
122
144
|
end
|
@@ -1,14 +1,17 @@
|
|
1
1
|
- if show_action
|
2
2
|
- url = (polymorphic_path([*controller_namespace, resource]) rescue nil) || (polymorphic_path(resource) rescue nil)
|
3
|
-
|
4
|
-
%
|
3
|
+
- if url.present?
|
4
|
+
%a{href: url, title: 'Show'}
|
5
|
+
%span.glyphicon.glyphicon-eye-open
|
5
6
|
|
6
7
|
- if edit_action
|
7
8
|
- url = (edit_polymorphic_path([*controller_namespace, resource]) rescue nil) || (edit_polymorphic_path(resource) rescue nil)
|
8
|
-
|
9
|
-
%
|
9
|
+
- if url.present?
|
10
|
+
%a{href: url, title: 'Edit'}
|
11
|
+
%span.glyphicon.glyphicon-edit
|
10
12
|
|
11
13
|
- if destroy_action
|
12
14
|
- url = (polymorphic_path([*controller_namespace, resource]) rescue nil) || (polymorphic_path(resource) rescue nil)
|
13
|
-
|
14
|
-
%
|
15
|
+
- if url.present?
|
16
|
+
%a{href: url, title: 'Delete', data: {method: :delete, confirm: 'Are you sure?'}}
|
17
|
+
%span.glyphicon.glyphicon-trash
|
data/lib/effective_datatables.rb
CHANGED
@@ -7,7 +7,10 @@ module EffectiveDatatables
|
|
7
7
|
mattr_accessor :authorization_method
|
8
8
|
mattr_accessor :date_format
|
9
9
|
mattr_accessor :datetime_format
|
10
|
+
mattr_accessor :integer_format
|
11
|
+
|
10
12
|
mattr_accessor :default_entries
|
13
|
+
mattr_accessor :actions_column # A Hash
|
11
14
|
|
12
15
|
def self.setup
|
13
16
|
yield self
|
@@ -23,10 +23,32 @@ EffectiveDatatables.setup do |config|
|
|
23
23
|
|
24
24
|
# Date & DateTime Format
|
25
25
|
# By default, format Date and DateTime values with the following
|
26
|
-
config.date_format =
|
27
|
-
config.datetime_format =
|
26
|
+
config.date_format = '%Y-%m-%d'
|
27
|
+
config.datetime_format = '%Y-%m-%d %H:%M'
|
28
|
+
|
29
|
+
# Format integer columns with the following proc or function
|
30
|
+
config.integer_format = :number_with_delimiter
|
28
31
|
|
29
32
|
# Default number of entries shown per page
|
30
33
|
# Valid options are: 10, 25, 50, 100, 250, 1000, :all
|
31
34
|
config.default_entries = 25
|
35
|
+
|
36
|
+
# When using the actions_column DSL method, apply the following behavior
|
37
|
+
# Valid values for each action are:
|
38
|
+
# true (always include a link to this action)
|
39
|
+
# false (never include a link to this action)
|
40
|
+
# :authorize (include link only if authorized - only works with ActiveRecord collections)
|
41
|
+
#
|
42
|
+
# When :authorize, a single check will be made via the above authorization_method
|
43
|
+
# to see if the current_user has permission to :show/:edit/:destroy the collection class, i.e. Post
|
44
|
+
# EffectiveDatatables.authorized? (:show || :edit || :destroy), Post
|
45
|
+
#
|
46
|
+
# For performance reasons, we only check the class once, not every individual resource.
|
47
|
+
# You can override this default by calling `actions_column show: false, edit: true, destroy: :authorize`
|
48
|
+
config.actions_column = {
|
49
|
+
show: :authorize,
|
50
|
+
edit: :authorize,
|
51
|
+
destroy: :authorize
|
52
|
+
}
|
53
|
+
|
32
54
|
end
|