Class: Roebe::BirthdayNotifications

Inherits:
Base show all
Defined in:
lib/roebe/classes/birthday_notifications.rb

Constant Summary collapse

YELLOW =
#

YELLOW

#
Colours::YELLOW
ARRAY_SKIP_THESE_NAMES =
#

ARRAY_SKIP_THESE_NAMES

The following names will be skipped.

#
[
  'Guido Wiedenegger'
]
FILE_CONTACTS =
#

FILE_CONTACTS

bl $MISC/YAML/contacts.yml

#
::Roebe.file_contacts
CONTACTS =

CONTACTS

FILE_CONTACTS
N_DAYS_IN_ADVANCE =
#

N_DAYS_IN_ADVANCE

#
14

Constants inherited from Base

Roebe::Base::COLOURS, Roebe::Base::HOME_DIRECTORY_OF_USER_X, Roebe::Base::N, Roebe::Base::NAMESPACE

Instance Method Summary collapse

Methods inherited from Base

#actions, #append_this_onto_that_file, #append_what_into, #be_silent, #be_verbose?, #beautiful_url, #burlywood, #call_next, #chdir, #cheerful_guy, #cliner, #complex_esystem, #convert_global_env, #copy_directory, #copy_file, #cornflowerblue, #create_directory, #crimson, #current_month?, #current_time?, #current_year?, #cyan, #darkcyan, #darkgreen, #darkkhaki, #darkslateblue, #deeppink, #delete_symlink, #do_not_use_the_base_colours, #do_use_the_base_colours, #e, #ecomment, #editor_to_use?, #efancy, #eimp, #emphasis, #ensure_main_encoding, #ensure_utf_encoding, #eparse, #esteelblue, #etomato, #ewarn, #exit_program, #firebrick, #get_current_day, #get_current_month, #get_files_and_directories, #get_files_from, #get_german_name_for_this_weekday, #gold, #green, #grey, #hh_mm_ss, #hh_mm_ss_day_month_year, #home_dir?, #home_directory_of_user_x?, #infer_the_namespace, #internal_hash?, #is_a_directory?, #is_a_file?, #is_a_jpg_file?, #is_an_image_file?, #is_archive?, #is_audio_file?, #is_in_studium_dir?, #is_multimedia_file?, #is_on_roebe?, #is_on_windows?, #is_studium_available?, #is_symlink?, #is_this_a_ruby_file?, #is_video_file?, #iso_encoding?, #le, #left_colour, #lightblue, #lightgreen, #lightseagreen, #lightsteelblue, #lime, #limegreen, #localhost_to_data, #log_directory?, #main_encoding?, #mediumorchid, #mediumpurple, #mediumseagreen, #mediumslateblue, #mediumspringgreen, #mediumturquoise, #mkdir_p, #mv, #n_days_in_this_month, #n_pages_in_this_pdf_file?, #namespace?, #no_file_exists_at, #ogrey, #olive, #olivedrab, #open_in_browser, #opne, #opnesystem, #opnn, #orange, #orchid, #orev, #palegoldenrod, #palevioletred, #pink, #powderblue, #programs_dir?, #project_base_dir?, #random_html_colour, #rds, #read_file_in_iso_encoding, #read_file_via_the_default_encoding, #read_lines_via_iso_encoding, #readlines_with_main_encoding, #register_sigint, #remove, #remove_directory, #remove_file, #rename_kde_konsole_tab, #replace_localhost_with_data, #report_pwd, #require_rescue, #reset_the_internal_hash, #return_all_directories_from_this_directory, #return_all_files_from_this_directory, #return_current_directory, #return_dd_mm_yyyy, #return_file_or_directory_of, #return_files_from_pwd, #return_last_part_of_the_current_directory, #return_utc, #right_arrow?, #right_colour, #roebe_log_directory?, #rosybrown, #royalblue, #ruby_base_directory?, #run_in_background, #run_rcfiles_then_run_ata_via_qdbus, #sandybrown, #sdir, #seagreen, #set_be_verbose, #set_xorg_buffer, #sfancy, #sfile, #show_help, #silent_redirection?, #simp, #simple_esystem, #skyblue, #slateblue, #slategray, #springgreen, #steelblue, #string_italic, #swarn, #symlink, #teal, #temp_dir?, #to_camelcase, #to_counted_hash, #tomato, #touch, #try_to_require_the_beautiful_url_gem, #try_to_require_the_html_template, #try_to_require_the_open_gem, #try_to_require_the_program_information_gem, #try_to_require_the_xorg_buffer, #use_colours?, #verbose_truth, #weekday?, #word_wrap, #write_what_into, #yellow

Methods included from Roebe::Base::CommandlineArguments

#append_onto_the_commandline_arguments, #clear_commandline_arguments, #commandline_arguments?, #commandline_arguments_as_string?, #commandline_arguments_without_leading_hyphens?, #first_argument?, #first_argument_without_leading_hyphens?, #has_an_argument_been_passed?, #remove_hyphened_arguments_from_the_commandline_arguments, #return_commandline_arguments_with_leading_hyphens, #second_argument?, #set_commandline_arguments

Constructor Details

#initialize(optional_set_n_days_in_advance = nil, run_already = true) ⇒ BirthdayNotifications

#

initialize

#


51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/roebe/classes/birthday_notifications.rb', line 51

def initialize(
    optional_set_n_days_in_advance = nil,
    run_already                    = true
  )
  reset
  set_n_days_in_advance(
    optional_set_n_days_in_advance
  )
  case run_already
  when :do_not_run_yet
    run_already = false
  end
  if block_given?
    yielded = yield
    if yielded.is_a? Hash
      if yielded.has_key? :n_days_in_advance
        set_n_days_in_advance(
          yielded.delete(:n_days_in_advance)
        )
      end
      if yielded.has_key? :be_quiet
        set_be_quiet(yielded.delete(:be_quiet))
      end
    end
  end
  run if run_already
end

Instance Method Details

#append_the_current_year_to_the_main_hashObject

#

append_the_current_year_to_the_main_hash

This method will simply append the current year, e. g. 2020, to the main Hash.

#


241
242
243
244
245
246
247
# File 'lib/roebe/classes/birthday_notifications.rb', line 241

def append_the_current_year_to_the_main_hash
  current_year = Time.now.year
  @hash_birthday_candidates.transform_keys! {|this_key|
    this_key = this_key.dup if this_key.frozen?
    this_key << ".#{current_year}"
  }
end

#erevObject

#

erev

#


252
253
254
# File 'lib/roebe/classes/birthday_notifications.rb', line 252

def erev
  print rev
end

#hash_birthday_candidates?Boolean Also known as: main_hash?

#

hash_birthday_candidates?

#

Returns:

  • (Boolean)


259
260
261
# File 'lib/roebe/classes/birthday_notifications.rb', line 259

def hash_birthday_candidates?
  @hash_birthday_candidates
end

#hash_birthdays?Boolean Also known as: hash_birthdays

#

hash_birthdays?

#

Returns:

  • (Boolean)


202
203
204
# File 'lib/roebe/classes/birthday_notifications.rb', line 202

def hash_birthdays?
  @hash_birthdays
end

#load_contacts(file_contacts = FILE_CONTACTS) ⇒ Object

#

load_contacts

#


127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
# File 'lib/roebe/classes/birthday_notifications.rb', line 127

def load_contacts(
    file_contacts = FILE_CONTACTS
  )
  if File.exist?('/home/x/DATA/misc/YAML/contacts.yml') and
    !File.exist?(file_contacts)
    file_contacts = '/home/x/DATA/misc/YAML/contacts.yml'
  end
  unless File.exist? file_contacts
    e 'Can not load the contacts as the file '+file_contacts+
      ' does not exist.'
    return
  end
  begin
    @contacts = YAML.load_file(file_contacts)
  rescue Psych::SyntaxError => error
    e 'This file has a syntax error.'
    pp error
    @contacts = nil
  end
  # ======================================================================= #
  # The entries will be like this:
  #
  #  ["Foo Bar", "0699 SOME_NUMBER", "[email protected]",
  #   "DD.MM.YYYY", "SomePlace 6", 286386272]
  #
  # ======================================================================= #
  @contacts.each { |c|
    geburtstag = c[3]
    if geburtstag # The birthday. If the registered dude has a birthday defined at all, continue.
      name = c[0] # The name of the guy in the contacts field.
      splitted = geburtstag.to_s.split('.')[0..-2] # This is ok, because we have no real interest in the year.
      _ = splitted.join('.')
      value = @current_day + @n_days_in_advance # Here we alert x days in advance.
      which_day = splitted.first.to_i
      range = (@current_day..value)
      if range.include?(which_day) # At first we simply add anyone whose value could be correct.
        unless ARRAY_SKIP_THESE_NAMES.include? name
          @hash_birthday_candidates[_] = name
        end
      end
    end
  } if @contacts
end

#redObject

#

red

#


188
189
190
# File 'lib/roebe/classes/birthday_notifications.rb', line 188

def red
  Colours::RED
end

#report(be_silent_when_hash_is_empty = @be_silent) ⇒ Object

#

report (report tag)

Report to the user.

#


211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
# File 'lib/roebe/classes/birthday_notifications.rb', line 211

def report(
    be_silent_when_hash_is_empty = @be_silent
  )
  if @hash_birthday_candidates.empty?
    unless be_silent_when_hash_is_empty
      end_day = Time.now + (60 * 60 * 24) * @n_days_in_advance
      opn; e red+'No match was found. Noone seems to have a birthday '
      opn; e red+'within the next coming `'+@n_days_in_advance.to_s+'` '+
                 'days. (Included up to: '+end_day.strftime('%d.%m.%Y')+')'
    end
  else
    unless @be_silent
      e rev+'We found these Birthday candidates ('+
         YELLOW+@n_days_in_advance.to_s+Colours::LIGHTBLUE+
         rev+' days in advance'+rev+'):'
      @hash_birthday_candidates.each { |birthdate, name|
        e Colours::LIGHTBLUE+'  '+name+': '+
          Colours::YELLOW+birthdate+'.'+@current_year
      }
      erev
    end
  end
end

#report_when_nothing_was_foundObject

#

report_when_nothing_was_found

#


174
175
176
# File 'lib/roebe/classes/birthday_notifications.rb', line 174

def report_when_nothing_was_found
  @be_silent = false
end

#resetObject

#

reset (reset tag)

#


82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/roebe/classes/birthday_notifications.rb', line 82

def reset
  super()
  infer_the_namespace
  set_n_days_in_advance(N_DAYS_IN_ADVANCE)
  # ======================================================================= #
  # === @be_silent
  # ======================================================================= #
  @be_silent = true
  # ======================================================================= #
  # === @hash_birthday_candidates
  #
  # This hash will keep our results, of people who may have a birthday
  # soon.
  # ======================================================================= #
  @hash_birthday_candidates = {}
  # ======================================================================= #
  # === @current_day
  # ======================================================================= #
  @current_day   = Date.today.day
  # ======================================================================= #
  # === @current_month
  # ======================================================================= #
  @current_month = Date.today.month
  # ======================================================================= #
  # === @current_year
  # ======================================================================= #
  @current_year  = Date.today.year.to_s
end

#revObject

#

rev

#


195
196
197
# File 'lib/roebe/classes/birthday_notifications.rb', line 195

def rev
  Colours::GREEN
end

#runObject

#

run

#


266
267
268
269
# File 'lib/roebe/classes/birthday_notifications.rb', line 266

def run
  load_contacts
  report
end

#set_be_quiet(i) ⇒ Object

#

set_be_quiet

#


181
182
183
# File 'lib/roebe/classes/birthday_notifications.rb', line 181

def set_be_quiet(i)
  @be_silent = i
end

#set_n_days_in_advance(i = N_DAYS_IN_ADVANCE) ⇒ Object Also known as: set_n_days

#

set_n_days_in_advance

#


114
115
116
117
118
119
120
121
122
# File 'lib/roebe/classes/birthday_notifications.rb', line 114

def set_n_days_in_advance(i = N_DAYS_IN_ADVANCE)
  i = i.first if i.is_a? Array
  i = N_DAYS_IN_ADVANCE if i.nil? # Assign default in this case.
  case i
  when /help/
    e 'The default is '+N_DAYS_IN_ADVANCE.to_s+' days into the future.'
  end
  @n_days_in_advance = i.to_i
end