class Komagire::KeyList::Converter

Attributes

attribute[R]
content_class_name[R]
delimiter[R]

Public Class Methods

new(content_class_name, attribute, delimiter) click to toggle source
# File lib/komagire/key_list.rb, line 69
def initialize(content_class_name, attribute, delimiter)
  @content_class_name = content_class_name
  @attribute = attribute
  @delimiter = delimiter
end

Public Instance Methods

convert(value) click to toggle source
# File lib/komagire/key_list.rb, line 75
def convert(value)
  convert_to_cskeys(value) || ''
end
convert_to_cskeys(value) click to toggle source
# File lib/komagire/key_list.rb, line 79
def convert_to_cskeys(value)
  case value
  when String
    value
  when Komagire::KeyList
    if value.content_class_name == content_class_name && value.attribute == attribute
      return value.cskeys
    end

    raise DifferentContentClass
  else
    values = if value.is_a?(Array) then value
             elsif value.respond_to?(:to_a) then value.to_a
             elsif value.respond_to?(:to_ary) then value.to_ary
             else
               raise ArgumentError
             end
    convert_to_cskeys_from_array(values.compact)
  end
end
convert_to_cskeys_from_array(values) click to toggle source
# File lib/komagire/key_list.rb, line 100
def convert_to_cskeys_from_array(values)
  if values.all? { |v| v.is_a?(String) }
    values.join(delimiter)
  elsif values.all? { |v| v.is_a?(content_class_name.constantize) }
    values.map(&attribute).join(delimiter)
  else
    raise ArgumentError
  end
end