Class: AdminIt::CollectionContext
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Instance Attribute Details
#entity ⇒ Object
Returns the value of attribute entity.
60
61
62
|
# File 'lib/admin_it/context/collection_context.rb', line 60
def entity
@entity
end
|
Class Method Details
19
20
21
22
23
24
25
26
27
28
|
# File 'lib/admin_it/context/collection_context.rb', line 19
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
45
46
47
|
# File 'lib/admin_it/context/collection_context.rb', line 45
def self.collection?
true
end
|
.entities_getter ⇒ Object
41
42
43
|
# File 'lib/admin_it/context/collection_context.rb', line 41
def self.entities_getter
@entities
end
|
.filter(name, filter_class: nil, &block) ⇒ Object
30
31
32
33
34
35
36
37
38
39
|
# File 'lib/admin_it/context/collection_context.rb', line 30
def self.filter(name, filter_class: nil, &block)
assert_symbol(:name)
if @filters.key?(name)
filter = @filters[name] = Class.new(@filters[name]) if block_given?
else
filter_class = Filter if filter_class.nil? || !filter_class <= Filter
filter = @filters[name] = filter_class.create(name, self)
end
filter.instance_eval(&block) if block_given?
end
|
.filters(scope: :all) ⇒ Object
Originally defined in module
FiltersHolder
.path ⇒ Object
49
50
51
|
# File 'lib/admin_it/context/collection_context.rb', line 49
def self.path
AdminIt::Engine.routes.url_helpers.send("#{resource.plural}_path")
end
|
.sortable_fields(*names) ⇒ Object
53
54
55
56
57
58
|
# File 'lib/admin_it/context/collection_context.rb', line 53
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
138
139
140
|
# File 'lib/admin_it/context/collection_context.rb', line 138
def active_filter
@active_filter ||= filters.empty? ? nil : filters.first
end
|
#active_filter=(value) ⇒ Object
142
143
144
145
146
147
148
149
150
151
|
# File 'lib/admin_it/context/collection_context.rb', line 142
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
113
114
115
|
# File 'lib/admin_it/context/collection_context.rb', line 113
def all_filters
self.class.filters
end
|
#count ⇒ Object
196
197
198
199
200
201
202
|
# File 'lib/admin_it/context/collection_context.rb', line 196
def count
return @count unless @count.nil?
entities if @enumerator.nil?
@count = entities.count
end
|
#entities ⇒ Object
184
185
186
187
188
189
190
191
192
193
194
|
# File 'lib/admin_it/context/collection_context.rb', line 184
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
180
181
182
|
# File 'lib/admin_it/context/collection_context.rb', line 180
def entities=(value)
@entities = value
end
|
#filters ⇒ Object
117
118
119
|
# File 'lib/admin_it/context/collection_context.rb', line 117
def filters
(@filters ||= {}).values
end
|
#filters=(value) ⇒ Object
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
# File 'lib/admin_it/context/collection_context.rb', line 121
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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
|
# File 'lib/admin_it/context/collection_context.rb', line 161
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
|
#sortable ⇒ Object
157
158
159
|
# File 'lib/admin_it/context/collection_context.rb', line 157
def sortable
@sortable ||= sortable_fields.map(&:name)
end
|
#sortable_fields ⇒ Object
153
154
155
|
# File 'lib/admin_it/context/collection_context.rb', line 153
def sortable_fields
@sortable_fields ||= fields(scope: :sortable)
end
|
#sorting ⇒ Object
82
83
84
85
|
# File 'lib/admin_it/context/collection_context.rb', line 82
def sorting
return @sorting unless @sorting.nil?
self.sorting = self.class.default_sorting
end
|
#sorting=(value) ⇒ Object
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
# File 'lib/admin_it/context/collection_context.rb', line 87
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
|