class TelegramMeetupBot::Calendar

Attributes

date[R]
storage[R]
time[R]
user[R]

Public Class Methods

formated_users_for_date(date) click to toggle source
# File lib/telegram_meetup_bot/calendar.rb, line 31
def self.formated_users_for_date(date)
  storage = Initializers::ConfigLoader.storage
  users = storage.get_users_for_date(date)
  users.map! do |user|
    username = user[:username] ? " @#{user[:username]}" : ''
    "#{user[:first_name]}#{username} #{user[:time]}"
  end
  users.join("\n")
end
new(args) click to toggle source
# File lib/telegram_meetup_bot/calendar.rb, line 5
def initialize(args)
  @storage = Initializers::ConfigLoader.storage
  @date = args.fetch(:date)
  @user = args.fetch(:user)
  @time = args[:time]
end
submited_days_by_user(username) click to toggle source
# File lib/telegram_meetup_bot/calendar.rb, line 52
def self.submited_days_by_user(username)
  storage = Initializers::ConfigLoader.storage
  dates = storage.get_all_available_dates
  min, max = build_dates_window(Date.today.month)
  username.downcase!

  dates = dates.keep_if do |date, users_yml|
    date >= min && date <= max &&
      YAML.load(users_yml).any? { |u| u[:username].downcase == username }
  end

  dates.sort.map { |date, _| date.match(/\d\d$/) }.join(', ')
end
submited_days_of_month(month) click to toggle source
# File lib/telegram_meetup_bot/calendar.rb, line 41
def self.submited_days_of_month(month)
  storage = Initializers::ConfigLoader.storage
  dates = storage.get_all_available_dates
  min, max = build_dates_window(month)

  dates = dates.keep_if { |date, _| date >= min && date <= max }.sort
  dates.map do |date, users_yml|
    "#{date.match(/\d\d$/)}(#{YAML.load(users_yml).count})"
  end.join(', ')
end

Private Class Methods

build_dates_window(month) click to toggle source
# File lib/telegram_meetup_bot/calendar.rb, line 91
def self.build_dates_window(month)
  today = Date.today
  year = month < today.month ? today.next_year.year : today.year
  max = Date.new(year, month, -1).to_s
  min = today.month == month ? today.to_s : Date.new(year, month, 1).to_s

  [min, max]
end

Public Instance Methods

add_user_to_date() click to toggle source
# File lib/telegram_meetup_bot/calendar.rb, line 12
def add_user_to_date
  process_user do |users, saved_user|
    return if saved_user == user_hash
    users.delete(saved_user) if saved_user
    users << user_hash
    storage.set_users_to_date(users, date)
  end
end
delete_user_from_date() click to toggle source
# File lib/telegram_meetup_bot/calendar.rb, line 21
def delete_user_from_date
  process_user do |users, saved_user|
    if saved_user
      users.delete(saved_user)
      update_or_clean_date(users)
      true
    end
  end
end

Private Instance Methods

process_user() { |users, saved_user| ... } click to toggle source
# File lib/telegram_meetup_bot/calendar.rb, line 68
def process_user(&block)
  users = storage.get_users_for_date(date)
  saved_user = users.find { |u| u[:id] == user.id }

  yield users, saved_user
end
update_or_clean_date(users) click to toggle source
# File lib/telegram_meetup_bot/calendar.rb, line 83
def update_or_clean_date(users)
  if users.any?
    storage.set_users_to_date(users, date)
  else
    storage.delete_date(date)
  end
end
user_hash() click to toggle source
# File lib/telegram_meetup_bot/calendar.rb, line 75
def user_hash
  @user_hash ||= if time
    user.to_h.merge(time: time)
  else
    user.to_h
  end
end