module CompositePrimaryKeys
  ID_SEP     = ','
  ID_SET_SEP = ';'

  module ArrayExtension
    def to_composite_keys
      CompositeKeys.new(self)
    end

    def to_composite_ids
      CompositeIds.new(self)
    end
  end

  class CompositeArray < Array
    def to_s
      join(ID_SEP)
    end
  end

  class CompositeKeys < CompositeArray

  end

  class CompositeIds < CompositeArray

  end
end

Array.send(:include, CompositePrimaryKeys::ArrayExtension)
