Sha256: 07a77b817bb4ff8c81a824548d993365c24d4ce76dfbf4703d462aa6862aa9a3

Contents?: true

Size: 1.22 KB

Versions: 1

Compression:

Stored size: 1.22 KB

Contents

module SwitchUserHelper
  SelectOption = Struct.new(:label, :scope_id)
  def switch_user_select(options = {})
    return unless available?

    if provider.current_user
      selected_user = "user_#{provider.current_user.id}"
    else
      selected_user = nil
    end

    grouped_options_container = {}.tap do |h|
      SwitchUser.all_users.each do |record|
        scope = record.is_a?(SwitchUser::GuestRecord) ? :Guest : record.scope.to_s.capitalize
        h[scope] ||= []
        h[scope] << [record.label, record.scope_id]
      end
    end

    option_tags = grouped_options_for_select(grouped_options_container.to_a, selected_user)

    render :partial => "switch_user/widget",
           :locals => {
             :option_tags => option_tags,
             :classes => options[:class],
             :styles => options[:style],
           }
  end

  private

  def user_tag_value(user, id_name, scope)
    identifier = user.send(id_name)

    "#{scope}_#{identifier}"
  end

  def user_tag_label(user, name)
    name.respond_to?(:call) ? name.call(user) : user.send(name)
  end

  def available?
    SwitchUser.guard_class.new(controller, provider).view_available?
  end

  def provider
    SwitchUser::Provider.init(controller)
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
switch_user-1.3.0 app/helpers/switch_user_helper.rb