ifmeorg/ifme

View on GitHub
app/helpers/meetings_helper.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
# frozen_string_literal: true
module MeetingsHelper
  def get_meeting_members(meeting)
    meeting_spots = spots(meeting)
    in_meeting = in_meeting(meeting)
    if in_meeting.present?
      raw in_meeting
    elsif meeting_spots.present?
      raw meeting_spots
    else
      t('shared.meeting_info.not_attending_no_spots_left')
    end
  end

  def google_cal_actions(meeting)
    return {} unless current_user.oauth_enabled?

    generate_google_cal_actions_hash(meeting)
  end

  private

  def not_attending(id)
    t('shared.meeting_info.not_attending',
      join:
        link_to(
          t('common.actions.join'),
          join_meetings_path(meeting_id: id)
        ))
  end

  def attending(id)
    t('shared.meeting_info.attending') +
      ' ' +
      link_to(
        t('common.actions.leave'),
        leave_meetings_path(meeting_id: id)
      )
  end

  def one_spot(id)
    t('shared.meeting_info.not_attending_one_spot_left',
      join:
        link_to(
          t('common.actions.join'),
          join_meetings_path(meeting_id: id)
        ))
  end

  def many_spots(id, meeting_space)
    t('shared.meeting_info.not_attending_spots_left',
      number: meeting_space,
      join:
        link_to(
          t('common.actions.join'),
          join_meetings_path(meeting_id: id)
        ))
  end

  def in_meeting(meeting)
    if meeting.members.include?(current_user)
      attending(meeting.id)
    elsif meeting.maxmembers.zero?
      not_attending(meeting.id)
    end
  end

  def spots(meeting)
    meeting_space = meeting.maxmembers - meeting.members.count
    if meeting_space == 1
      one_spot(meeting.id)
    elsif meeting_space > 1
      many_spots(meeting.id, meeting_space)
    end
  end

  def generate_google_cal_actions_hash(meeting)
    return {} unless (meeting_member = meeting.meeting_member(current_user))

    return remove_from_google_cal_hash(meeting) if meeting_member.google_cal_event_id

    add_to_google_cal_hash(meeting)
  end

  def remove_from_google_cal_hash(meeting)
    {
      remove_from_google_cal: {
        name: t('meetings.google_cal.destroy.remove'),
        link: meeting_google_calendar_event_path(meeting),
        dataMethod: 'delete'
      }
    }
  end

  def add_to_google_cal_hash(meeting)
    {
      add_to_google_cal: {
        name: t('meetings.google_cal.create.add'),
        link: meeting_google_calendar_event_path(meeting),
        dataMethod: 'post'
      }
    }
  end
end