Class: Roebe::MonthlyActivityOnRubygems

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

Overview

Roebe::MonthlyActivityOnRubygems

Constant Summary collapse

DEFAULT_INPUT =
#

DEFAULT_INPUT

#
'bioroebe'
REMOTE_URL =
#

REMOTE_URL

#
'https://rubygems.org/gems/'

Constants inherited from Base

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

Class Method Summary collapse

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, #erev, #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, #red, #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, #rev, #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 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(i = nil, run_already = true) ⇒ MonthlyActivityOnRubygems

#

initialize

#


35
36
37
38
39
40
41
42
# File 'lib/roebe/classes/monthly_activity_on_rubygems.rb', line 35

def initialize(
    i           = nil,
    run_already = true
  )
  reset
  set_input(i)
  run if run_already
end

Class Method Details

.[](i = '') ⇒ Object

#

[]

#


162
163
164
# File 'lib/roebe/classes/monthly_activity_on_rubygems.rb', line 162

def self.[](i = '')
  new
end

Instance Method Details

#dataset?Boolean

#

dataset?

#

Returns:

  • (Boolean)


136
137
138
# File 'lib/roebe/classes/monthly_activity_on_rubygems.rb', line 136

def dataset?
  @dataset
end

#input?Boolean

#

input?

#

Returns:

  • (Boolean)


85
86
87
# File 'lib/roebe/classes/monthly_activity_on_rubygems.rb', line 85

def input?
  @input
end

#obtain_remote_datasetObject

#

obtain_remote_dataset

#


143
144
145
146
147
148
# File 'lib/roebe/classes/monthly_activity_on_rubygems.rb', line 143

def obtain_remote_dataset
  url = input?
  e 'Now checking for the project '+simp(project_name?)+' on the '\
    'remote URL `'+simp(url)+'`.'
  @dataset = open(url).read
end

#original_input?Boolean Also known as: project_name?

#

original_input?

#

Returns:

  • (Boolean)


78
79
80
# File 'lib/roebe/classes/monthly_activity_on_rubygems.rb', line 78

def original_input?
  @original_input
end

#reportObject

#

report

#


169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
# File 'lib/roebe/classes/monthly_activity_on_rubygems.rb', line 169

def report
  e; e 'We have found the following results.'; e
  @hash.each_pair {|year, dataset|
    e 'In the year '+simp(year)+' we have found:'
    e
    dataset.each_pair {|month, file_size|
      current_month = month

      index_for_the_current_month  = Date::MONTHNAMES.index(month)
      index_for_the_previous_month = index_for_the_current_month - 1
      
      previous_month = Date::MONTHNAMES[index_for_the_previous_month]
      _ = @hash[year]

      file_size_of_the_previous_month = _[previous_month].to_i
      # =================================================================== #
      # === Re-assign for December
      # =================================================================== #
      if previous_month.nil? and current_month == 'January'
        previous_month = 'December'
        new_year = (year.to_i - 1).to_s # Oddly enough the year is stored as a String.
        file_size_of_the_previous_month = @hash[new_year][previous_month].to_i
      end

      # =================================================================== #
      # === We have to check whether the previous month exists. If not
      #     then we will assume a file size difference of 0, hard set.
      # =================================================================== #
      if _.has_key? previous_month
        @size_difference = (_[current_month].to_i - file_size_of_the_previous_month)
      else # Else we do not have the key, so we should try the next month.
        if previous_month == 'December' and current_month == 'January'
        else
          @size_difference = (_[current_month].to_i - _[Date::MONTHNAMES[index_for_the_previous_month-1]].to_i)
        end
      end

      month = (month.strip+':').ljust(10)
      e '  '+month+' '+sfancy(file_size.to_s.strip.rjust(7))+
        ' (The previous month was '+(previous_month+';').ljust(10)+' size'\
        ' increase was +'+
        orange(@size_difference.to_s.rjust(2))+' KB'
    }; e
  }
end

#resetObject

#

reset (reset tag)

#


47
48
49
50
51
52
# File 'lib/roebe/classes/monthly_activity_on_rubygems.rb', line 47

def reset
  super()
  set_original_input
  @size_difference = 0
  try_to_require_open_uri
end

#runObject

#

run (run tag)

#


153
154
155
156
157
# File 'lib/roebe/classes/monthly_activity_on_rubygems.rb', line 153

def run
  obtain_remote_dataset
  sanitize_dataset
  report
end

#sanitize_dataset(i = @dataset) ⇒ Object

#

sanitize_dataset

#


92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/roebe/classes/monthly_activity_on_rubygems.rb', line 92

def sanitize_dataset(i = @dataset)
  # ======================================================================= #
  # Start at part "versions since"
  # ======================================================================= #
  start_position = i.index(/versions since/)
  # ======================================================================= #
  # Re-assign from this start position to the end of the "file".
  # ======================================================================= #
  @input = @input[start_position..-1]
  # ======================================================================= #
  # Each entry has this format then:
  #   version | date | size
  # We are interested only in date and size, so first we must scan all
  # results here via a happy regex.
  #
  # Rubular link is at:
  #   http://rubular.com/r/a9iimZCw1n
  # ======================================================================= #
  regex_to_use = /<small class="gem__version__date">- (....* \d{1,2}, \d\d\d\d)<\/small>\s+<span class="gem__version__date">(\(\d+ KB\))<\/span>/
  results = i.scan(regex_to_use)
  @hash = {}
  # ======================================================================= #
  # We can iterate over our results next:
  # ======================================================================= #
  results.each {|array|
  # ======================================================================= #
   # The variable array will look like this:
   #   ["February 20, 2014", "(46 KB)"],
   # ======================================================================= #
   date      = array.first
   year      = date.split(',').last.strip
   month     = date.split(' ').first.strip
   file_size = array.last.delete('(').delete(')')
   # ======================================================================= #
   # First define the year.
   # ======================================================================= #
   @hash[year] = {} unless @hash.has_key? year
   @hash[year][month] = file_size unless @hash[year].has_key? month
  }
end

#set_input(i = '') ⇒ Object

#

set_input

#


57
58
59
60
61
62
63
64
65
66
# File 'lib/roebe/classes/monthly_activity_on_rubygems.rb', line 57

def set_input(i = '')
  i = i.first if i.is_a? Array
  i = i.to_s.dup
  i = DEFAULT_INPUT if i.empty?
  set_original_input(i)
  if i.include? '/'
    i = File.basename(i)
  end
  @input = REMOTE_URL+i.to_s+'/versions'
end

#set_original_input(i = nil) ⇒ Object

#

set_original_input

#


71
72
73
# File 'lib/roebe/classes/monthly_activity_on_rubygems.rb', line 71

def set_original_input(i = nil)
  @original_input = i
end