class AdminIt::CollectionContext

Attributes

default_sorting[R]
entities_getter[R]
entities[W]
entity[RW]

Public Class Methods

before_configure() click to toggle source
# File lib/admin_it/context/collection_context.rb, line 22
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?() click to toggle source
# File lib/admin_it/context/collection_context.rb, line 37
def self.collection?
  true
end
path() click to toggle source
# File lib/admin_it/context/collection_context.rb, line 41
def self.path
  AdminIt::Engine.routes.url_helpers.send("#{resource.plural}_path")
end
show_in_dialog?() click to toggle source
# File lib/admin_it/context/collection_context.rb, line 33
def self.show_in_dialog?
  @show_in_dialog.nil? ? @show_in_dialog = true : @show_in_dialog == true
end
sortable_fields(*names) click to toggle source
# File lib/admin_it/context/collection_context.rb, line 45
def self.sortable_fields(*names)
  names = names.ensure_array(:flatten, :ensure_symbol, :compact, :uniq)
  fields.each do |_field|
    _field.sortable = names.include?(_field.field_name)
  end
end

Public Instance Methods

active_filter() click to toggle source
# File lib/admin_it/context/collection_context.rb, line 131
def active_filter
  @active_filter ||= filters.empty? ? nil : filters.first
end
active_filter=(value) click to toggle source
# File lib/admin_it/context/collection_context.rb, line 135
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(scope: :all) click to toggle source
# File lib/admin_it/context/collection_context.rb, line 106
def all_filters(scope: :all)
  self.class.filters(scope: scope)
end
count() click to toggle source
# File lib/admin_it/context/collection_context.rb, line 189
def count
  return @count unless @count.nil?
  # apply filters and limits first
  entities if @enumerator.nil?
  # if @count is not setted yet - calculate it
  @count = entities.count
end
entities() click to toggle source

def entities=(value)

@entities = value

end

# File lib/admin_it/context/collection_context.rb, line 177
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
filters() click to toggle source
# File lib/admin_it/context/collection_context.rb, line 110
def filters
  (@filters ||= {}).values
end
filters=(value) click to toggle source
# File lib/admin_it/context/collection_context.rb, line 114
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() click to toggle source
# File lib/admin_it/context/collection_context.rb, line 154
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() click to toggle source
# File lib/admin_it/context/collection_context.rb, line 150
def sortable
  @sortable ||= sortable_fields.map(&:name)
end
sortable_fields() click to toggle source
# File lib/admin_it/context/collection_context.rb, line 146
def sortable_fields
  @sortable_fields ||= fields(scope: :sortable)
end
sorting() click to toggle source
# File lib/admin_it/context/collection_context.rb, line 75
def sorting
  return @sorting unless @sorting.nil?
  self.sorting = self.class.default_sorting
end
sorting=(value) click to toggle source
# File lib/admin_it/context/collection_context.rb, line 80
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

Protected Instance Methods

load_entities() click to toggle source
# File lib/admin_it/context/collection_context.rb, line 199
def load_entities
  []
end