Class: AdminIt::CollectionContext
Class Attribute Summary collapse
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Class Attribute Details
.default_sorting ⇒ Object
Returns the value of attribute default_sorting.
9
10
11
|
# File 'lib/admin_it/context/collection_context.rb', line 9
def default_sorting
@default_sorting
end
|
.entities_getter ⇒ Object
Returns the value of attribute entities_getter.
9
10
11
|
# File 'lib/admin_it/context/collection_context.rb', line 9
def entities_getter
@entities_getter
end
|
Instance Attribute Details
Returns the value of attribute entity.
43
44
45
|
# File 'lib/admin_it/context/collection_context.rb', line 43
def entity
@entity
end
|
Class Method Details
17
18
19
20
21
22
23
24
25
26
|
# File 'lib/admin_it/context/collection_context.rb', line 17
def self.before_configure
return if resource.nil?
visible = fields(scope: :visible).map(&:field_name)
@filters = Hash[
resource.filters
.select { |f| f <= FieldFilter }
.select { |f| visible.include?(f.field.field_name) }
.map { |f| [f.filter_name, f] }
]
end
|
.collection? ⇒ Boolean
28
29
30
|
# File 'lib/admin_it/context/collection_context.rb', line 28
def self.collection?
true
end
|
32
33
34
|
# File 'lib/admin_it/context/collection_context.rb', line 32
def self.path
AdminIt::Engine.routes.url_helpers.send("#{resource.plural}_path")
end
|
.sortable_fields(*names) ⇒ Object
36
37
38
39
40
41
|
# File 'lib/admin_it/context/collection_context.rb', line 36
def self.sortable_fields(*names)
names = names.ensure_symbols
fields.each do |_field|
_field.sortable = names.include?(_field.field_name)
end
end
|
Instance Method Details
#active_filter ⇒ Object
121
122
123
|
# File 'lib/admin_it/context/collection_context.rb', line 121
def active_filter
@active_filter ||= filters.empty? ? nil : filters.first
end
|
#active_filter=(value) ⇒ Object
125
126
127
128
129
130
131
132
133
134
|
# File 'lib/admin_it/context/collection_context.rb', line 125
def active_filter=(value)
if value.nil?
active_filter
elsif value.is_a?(Class) && value <= Filter
@active_filter = value
elsif value.is_a?(String)
value = value.to_sym
@active_filter = filters.find { |f| f.name == value }
end
end
|
#all_filters ⇒ Object
96
97
98
|
# File 'lib/admin_it/context/collection_context.rb', line 96
def all_filters
self.class.filters
end
|
179
180
181
182
183
184
185
|
# File 'lib/admin_it/context/collection_context.rb', line 179
def count
return @count unless @count.nil?
entities if @enumerator.nil?
@count = entities.count
end
|
167
168
169
170
171
172
173
174
175
176
177
|
# File 'lib/admin_it/context/collection_context.rb', line 167
def entities
self.entity = nil
collection = self
@enumerator ||= Enumerator.new do |yielder|
@entities.each do |v|
collection.entity = v
yielder << v
end
collection.entity = nil
end
end
|
#entities=(value) ⇒ Object
163
164
165
|
# File 'lib/admin_it/context/collection_context.rb', line 163
def entities=(value)
@entities = value
end
|
100
101
102
|
# File 'lib/admin_it/context/collection_context.rb', line 100
def filters
(@filters ||= {}).values
end
|
#filters=(value) ⇒ Object
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
# File 'lib/admin_it/context/collection_context.rb', line 104
def filters=(value)
if value.is_a?(Array)
@filters = Hash[
value.select { |f| f.is_a?(Filter) }.map { |f| [f.name, f] }
]
elsif value.is_a?(Hash)
self.filters = value.values
elsif value.is_a?(String)
@filters ||= {}
value.strip!
@filters = {} if value.empty?
Filter.apply(value, @filters, self.class.filters)
else
@filters = {}
end
end
|
#load_context ⇒ Object
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
|
# File 'lib/admin_it/context/collection_context.rb', line 144
def load_context
collection =
if entities_getter.nil?
if controller.respond_to?("#{resource.name}_entities")
controller.send("#{resource.name}_entities", name)
elsif controller.respond_to?(:entities)
controller.entities(entity_class, name)
else
load_entities
end
else
entities_getter.call
end
filters.each do |filter|
collection = filter.apply(collection)
end
self.entities = collection
end
|
140
141
142
|
# File 'lib/admin_it/context/collection_context.rb', line 140
def sortable
@sortable ||= sortable_fields.map(&:name)
end
|
#sortable_fields ⇒ Object
136
137
138
|
# File 'lib/admin_it/context/collection_context.rb', line 136
def sortable_fields
@sortable_fields ||= fields(scope: :sortable)
end
|
65
66
67
68
|
# File 'lib/admin_it/context/collection_context.rb', line 65
def sorting
return @sorting unless @sorting.nil?
self.sorting = self.class.default_sorting
end
|
#sorting=(value) ⇒ Object
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
# File 'lib/admin_it/context/collection_context.rb', line 70
def sorting=(value)
value = value.to_s if value.is_a?(Symbol)
if value.is_a?(Array)
@sorting = value
elsif value.is_a?(String) && !value.empty?
@sorting = [] unless /\W[+\-]\w/ =~ value
@sorting ||= []
sortable = self.class.fields(scope: :sortable).map(&:field_name)
value.split(/[;,|]/).each do |sort|
sort.strip!
if sort[0] == '-'
sort = sort[1..-1] + ':'
@sorting.delete_if { |s| s.index(sort) == 0 }
else
sort = sort[1..-1] if sort[0] == '+'
sort, order = sort.split(':')
order = 'asc' if order != 'desc'
sort = sort.to_sym
@sorting << "#{sort}:#{order}" if sortable.include?(sort)
end
end
else
@sorting = []
end
end
|