class Komagire::KeyList

Attributes

attribute[R]
content_class_name[R]

Public Class Methods

new(content_class_name, attribute, cskeys, options = {}) click to toggle source

@param [String] content_class_name @param [Symbol] attribute @param [String] cskeys comma separated keys @param [Hash] options @option options [String] :delimiter (Komagire::DEFAULT_DELIMITER)

Calls superclass method
# File lib/komagire/key_list.rb, line 18
def initialize(content_class_name, attribute, cskeys, options = {})
  @content_class_name = content_class_name
  @attribute = attribute
  @delimiter = options[:delimiter] || Komagire::DEFAULT_DELIMITER
  @sort = options[:sort] || false
  @cskeys = _convert(cskeys)
  super(_find_by_cskeys)
end

Public Instance Methods

cskeys() click to toggle source

comma separated keys

@return [String]

# File lib/komagire/key_list.rb, line 30
def cskeys
  key_values = compact.map(&@attribute).uniq.tap {|values| values.sort! if @sort }
  ([''] + key_values + ['']).join(@delimiter)
end
freeze() click to toggle source
Calls superclass method
# File lib/komagire/key_list.rb, line 35
def freeze
  case __getobj__
  when ActiveRecord::Relation
    # avoid ActiveRecord::Relation is frozen
  else
    super
  end
end

Private Instance Methods

_convert(cskeys) click to toggle source
# File lib/komagire/key_list.rb, line 46
def _convert(cskeys)
  Converter.new(@content_class_name, @attribute, @delimiter).convert(cskeys)
end
_find_by_cskeys() click to toggle source
# File lib/komagire/key_list.rb, line 54
def _find_by_cskeys
  keys = _keys
  return [] if keys.empty?

  values = content_class_name.constantize.where(@attribute => keys).compact
  if @sort
    values.sort_by { |v| v.public_send(@attribute) }
  else
    values.index_by { |v| v.public_send(@attribute).to_s }.values_at(*keys)
  end
end
_keys() click to toggle source
# File lib/komagire/key_list.rb, line 50
def _keys
  @cskeys.split(@delimiter).uniq
end