Class: RBT::Cookbooks::GenerateHomepage

Inherits:
Base show all
Defined in:
lib/rbt/cookbooks/generate_homepage/generate_homepage.rb

Overview

RBT::Cookbooks::GenerateHomepage

Constant Summary collapse

LJUST =
#

LJUST

#
30
USE_THIS_DIRECTORY =
#

USE_THIS_DIRECTORY

The individual webpages are stored in a subdirectory within the log-directory.

#
"#{RBT.rbt_log_directory?}webpage_for_the_individual_entries/"
BR =
#

BR

#
'<br>'

Constants inherited from LeanPrototype

LeanPrototype::ALL_COLOUR_METHODS, LeanPrototype::ARRAY_KDE_KONSOLE_COLOURS_IN_USE, LeanPrototype::DAY_NAMES, LeanPrototype::NAMESPACE, LeanPrototype::SILENT_REDIRECTION

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#cat, #cd_back_to_the_current_working_directory, #consider_reporting_how_many_programs_are_registered, #cookbook_files?, #copy_recursively, #delete_code_of_conduct?, #determine_appdir_prefix_from_this_input, #directory_validation?, #do_not_show_names, #fast_return_file_size_of_this_program, #file_last_symlinked_program?, #file_programs_version_url, #gem_version, #is_a_64bit_system?, #is_ccache_available?, #is_porg_available?, #is_this_binary_registered?, #is_this_program_included?, #make_command?, #make_install_command?, #new_cookbook_instance_for, #program_exists?, #publish_list_of_all_programs_version, #rcp, registered_binaries?, #remove_symlink, #rename_kde_konsole_tab, #repackage, #report_n_programs, #report_working_directory, #return_compile_time_statistics, #return_n_random_characters, #return_version_of_this_program, #run_make_then_make_install, #sanitize_url1_entry, #set_source_directory, #show_overview_over_available_utility_scripts, #symlink_all_files_from_this_directory_to_that_directory, #system_tags?, #upload_list_of_all_programs_version, #use_yaml_database_for_tags?, #warn_and_exit, #wget

Methods inherited from LeanPrototype

#a_or_an?, #abbreviations?, #absolute_path, #action, #add_to_the_commandline_arguments, #all_binaries?, #all_files_from, #all_libraries?, #allowed_cookbook_entries?, #appdir_location_of?, #append_onto_the_internal_hash, #append_what_into, #archive_type_of?, #available_programs?, #be_quiet?, #be_verbose?, #begins_with_a_comment?, #capitalize_first_alphabetical_character, #cd_to_the_log_directory, #cd_to_the_temp_directory, #change_directory, #change_permission, #cheering_person?, #chmod, #chop_off_archive, #clear_commandline_arguments, #cliner, #coloured_and_padded_e, #coloured_and_padded_esystem, #coloured_esystem, #colourize_directory_for_system_results, #colourize_this_error, #colourize_this_file_path, #colourize_this_warning, #commandline_arguments?, #commandline_arguments_without_hyphens?, #comment, #convert_dd_mm_yyyy_to_its_long_variant, #convert_env_variable, #copy_directory, #copy_files, #cpr, #create_directory, #current_hour?, #dd_mmm_yyy, #debug, #debug?, #directory_expanded_cookbooks?, #disable_colours, #display_md5sum?, #do_not_debug, #does_the_cookbook_include_this_program?, #does_this_expanded_cookbook_file_exist_for_this_program?, #does_this_file_exist?, #does_this_file_exist_and_is_it_a_file?, #e, #eblue, #ecomment, #ecrimson, #edir, #editor?, #efancy, #eimp, #enable_colours, #enable_debug, #ensure_main_encoding_for, #eparse, #esystem, #esystem_gold, #etomato, #ewarn, #exit_program, #expanded_cookbooks_directory_exists?, #extract_this_archive, #extract_to?, #file_compiled_programs?, #file_dirname_retaining_trailing_slash, #file_predefined_installation_instructions?, #file_specification_of_registered_cookbook_entries, #find_cookbook_alias_for, #find_this_yaml_file, #first_argument?, #first_non_hyphen_argument?, #get_all_directories_from, #get_all_files_from, #get_all_programs, #get_date, #get_extended_date, #get_files_and_directories_from, #go_to_base_dir, #home_dir?, #host_system?, #infer_the_namespace, #internal_hash?, #internal_hash_set_commandline_arguments, #is_an_archive?, #is_directory?, #is_file?, #is_github_url?, #is_make_available?, #is_meson_installed?, #is_on_gobolinux?, #is_on_windows?, #is_roebe?, #is_superuser?, #is_symlink?, #is_this_a_header?, #is_this_a_library?, #is_this_program_included?, #iso_encoding?, #load_dataset_from_this_expanded_cookbook, #load_yaml, #load_yaml_file_from_the_cookbook_directory_for_this_program, #log_directory?, #main_encoding?, #meson_build_file_exists?, #months?, #move_file, #n_programs_are_available?, #n_programs_available?, #namespace?, #no_directory_exists_at, #no_directory_was_found_at, #no_opn, #no_such_file_exists, #open_in_browser, #open_in_editor, #opncomment, #opne, #opnef, #opnerev, #opnerror, #opnesystem, #opnewarn, #opnfancy, #opnn, #otomato, #packages_directory?, #path_to_this_expanded_cookbooks_dataset, #pkgconfig_directory?, #populate_the_internal_hash_with_default_values, #predefined_installation_instructions?, #prepend_this_commandline_argument, #program_version_of?, #project_base_directory?, #project_yaml_directory?, #query_path?, #rarrow?, #read_file, #read_file_in_default_encoding, #read_file_with_default_encoding, #readlines, #readlines_with_proper_encoding, #register_sigint, #registered_cookbook_entries?, #remove, #remove_archive_from_the_end, #remove_comments_from_each_line, #remove_directory, #remove_double_slashes, #remove_file, #remove_newlines, #remove_parens, #remove_symlink, #remove_the_first_commandline_argument, #remove_this_commandline_argument, #remove_this_entry_from_the_commandline_arguments, #remove_trailing_ANSII_escape_code, #remove_unnecessary_data_from_url, #rename, #report_pwd, #require_the_rbt_aliases, #reset_the_internal_hash, #return_all_archives_from_this_directory, #return_appdir_prefix, #return_commandline_arguments_with_leading_hyphens, #return_current_hour_minutes_second, #return_date, #return_day_of_the_month_based_on_utc, #return_full_time, #return_hours_minutes_seconds_based_on_utc, #return_location_to_this_programs_yaml_file, #return_month_based_on_this_number, #return_month_based_on_utc, #return_opnn, #return_program_name, #return_program_name_for_gobolinux_systems, #return_program_name_via_program_information, #return_pwd, #return_unicode_warning_symbol_or_empty_string, #return_utc, #return_utc_time_in_a_format_similar_to_slackware, #return_weekday_based_on_utc, #return_year_based_on_utc, #rev, #rpn, #run_simulation=, #run_simulation?, #sdir, #sdir_return_pwd, #set_be_silent, #set_be_verbose, #set_first_commandline_argument, #set_namespace, #set_use_colours, #set_use_opn, #set_xorg_buffer, #sfancy, #sfile, #silent_redirection?, #silently_create_this_directory_if_it_does_not_yet_exist, #simp, #source_base_directory?, #ssym, #stderr, #store_into_this_directory?, #string_right_arrow?, #swarn, #symlink, #sysbin_directory?, #sysetc_directory?, #sysinclude_directory?, #syslib_directory?, #sysshare_directory?, #system_directory?, #temp_directory?, #to_bool, #to_camelcase, #to_iso_encoding, #to_unicode, #today?, #touch, #try_to_require_beautiful_url, #try_to_require_the_environment_information_gem, #try_to_require_the_extracter_gem, #try_to_require_the_open_gem, #try_to_require_the_xorg_buffer, #try_to_require_wget, #try_to_return_a_special_compile_component, #unicode_cliner, #unicode_middle_cliner, #use_colours=, #use_colours?, #use_opn=, #use_opn?, #utf_encoding?, #verbose_truth, #word_wrap, #write_what_into, #write_what_into_via_unicode, #yes_or_no

Constructor Details

#initialize(i = nil, run_already = true) ⇒ GenerateHomepage

#

initialize

#


59
60
61
62
63
64
65
66
67
# File 'lib/rbt/cookbooks/generate_homepage/generate_homepage.rb', line 59

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

Class Method Details

.[](i = '') ⇒ Object

#

RBT::Cookbooks::GenerateHomepage[]

#


519
520
521
# File 'lib/rbt/cookbooks/generate_homepage/generate_homepage.rb', line 519

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

Instance Method Details

#_(i) ⇒ Object

#

i

#


138
139
140
141
# File 'lib/rbt/cookbooks/generate_homepage/generate_homepage.rb', line 138

def _(i)
  i = i.to_s.dup
  @string << "#{i}#{N}"
end

#a(i, optional_arguments = nil) ⇒ Object

#

a

This method essentially creates a <a> href tag.

#


455
456
457
458
459
460
461
462
463
464
465
466
467
# File 'lib/rbt/cookbooks/generate_homepage/generate_homepage.rb', line 455

def a(
    i, optional_arguments = nil
  )
  if optional_arguments
    result = HtmlTags.a(i, optional_arguments)
  else
    result = HtmlTags.a(i)
  end
  if result.nil?
    opne "The result for #{i} is nil."
  end
  return result
end

#brObject

#

br

#


432
433
434
# File 'lib/rbt/cookbooks/generate_homepage/generate_homepage.rb', line 432

def br
  BR
end

#cdivObject

#

cdiv

#


446
447
448
# File 'lib/rbt/cookbooks/generate_homepage/generate_homepage.rb', line 446

def cdiv
  HtmlTags.cdiv
end

#cookbooks_include_this_program?(i) ⇒ Boolean

#

cookbooks_include_this_program?

#

Returns:

  • (Boolean)


209
210
211
# File 'lib/rbt/cookbooks/generate_homepage/generate_homepage.rb', line 209

def cookbooks_include_this_program?(i)
  RBT.does_include?(i)
end

#current_timeObject

#

current_time

#


163
164
165
# File 'lib/rbt/cookbooks/generate_homepage/generate_homepage.rb', line 163

def current_time
  return_day_month_year+' '+return_hours_minutes_seconds
end

#dataset?Boolean Also known as: data?

#

dataset?

#

Returns:

  • (Boolean)


216
217
218
# File 'lib/rbt/cookbooks/generate_homepage/generate_homepage.rb', line 216

def dataset?
  @dataset
end

#feedback_where_to_storeObject

#

feedback_where_to_store

#


223
224
225
# File 'lib/rbt/cookbooks/generate_homepage/generate_homepage.rb', line 223

def feedback_where_to_store
  opne 'We will store in the directory `'+sdir(store_where?)+rev+'`.'
end

#file_location?Boolean

#

file_location?

#

Returns:

  • (Boolean)


202
203
204
# File 'lib/rbt/cookbooks/generate_homepage/generate_homepage.rb', line 202

def file_location?
  @file_location
end

#generate_a_webpage_for_this_program(program, index) ⇒ Object

#

generate_a_webpage_for_this_program

#


230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
# File 'lib/rbt/cookbooks/generate_homepage/generate_homepage.rb', line 230

def generate_a_webpage_for_this_program(
    program, index
  )
  obtain_dataset_for(program)
  # ======================================================================= #
  # Ok now we have the dataset. Start to build up the html page, by
  # using the data stored in the cookbook-object.
  # ======================================================================= #
  program_name        = dataset?.program_name?
  program_version     = dataset?.program_version?
  short_name          = dataset?.short_name?.to_s
  url1                = dataset?.url1?
  url2                = dataset?.url2?
  size                = dataset?.size?
  md5sum              = dataset?.md5sum?
  deps                = dataset?.deps?
  extra_information   = dataset?.extra_information?.to_s.strip
  blfs_entry          = dataset?.blfs?
  if extra_information.start_with? '"'
    extra_information[0,1] = ''
  end
  if extra_information.end_with? '"'
    extra_information.chop!
    extra_information.strip!
  end
  binaries            = dataset?.binaries?.join(', ').strip.chop
  libraries           = dataset?.libraries?.join(', ').strip.chop
  the_program_before  = @array_available_programs[index-1]
  the_next_program_is = @array_available_programs[index+1]
  opne royalblue(
         ((index+1).to_s+')').to_s.ljust(6)
       )+
       rev+'Working on the program `'+
       slateblue(program.to_s.ljust(LJUST))+
       rev+'` next (Version: '+
       royalblue(program_version.to_s.rjust(10))+
       rev+').'
  _ '<html>'
  _ HtmlTags.title(program_name)
  # ======================================================================= #
  # Next, define some basic CSS style
  # ======================================================================= #
  _ '<style>
     div.top_navigation {
       background: #ecedef;
       margin:  0;
       padding: 0.3em .5em;
       border: 1px solid black;
     }
     pre {
       font-size: larger;
     }
     </style>'
  _ '<body style="font-size: 1.2em">'
  # ======================================================================= #
  # === The top header
  # ======================================================================= #
  _ '<div class="top_navigation">'
  _ h1(short_name)
  _ cdiv
  use_this_name = short_name.to_s.dup
  if use_this_name.empty?
    use_this_name = program_name.to_s
  end
  _ '<h2>Introduction to '+use_this_name.capitalize+'</h2>'
  what = @string
  # ======================================================================= #
  # We need to save the file somewhere, so determine the name.
  # ======================================================================= #
  into = use_this_directory+use_this_name.downcase+'.html'
  set_file_location(into)
  # ======================================================================= #
  # Next add the program description:
  # ======================================================================= #
  dataset_as_pre_tag = HtmlTags.pre(dataset?.raw_description?)
  _ HtmlTags.p(dataset_as_pre_tag,'','','margin-left:2em; width: 70%;')
  # ======================================================================= #
  # Show the extra information next.              (extra information tag)
  # ======================================================================= #
  unless extra_information.empty?
    _ '<h3>Extra information</h3>'
    formatted_extra_information = extra_information.gsub(/#{N}/,'<br>')
    _ HtmlTags.p(formatted_extra_information,
        '','','margin-left:2.5em'
      )
  end
  # ======================================================================= #
  # Next, the "Package Information" subsection follows:
  # ======================================================================= #
  _ HtmlTags.h3('Package Information')
  _ "This program is available at the following URL:#{br}#{br}"
  _ '<p>'
  _ a(url1, css_style: 'margin-left:2em; margin-top:1em; 
     padding: 1.5em; border: 2px solid darkblue;
     border-radius: 15px;
     font-weight:800; background-color: #f0fff0;')+br+br
  if url2
    _ BR
    _ 'Additionally, this is most likely another good URL resource:'+br+br
    _ a(url2, css_style: 'margin-left:2em; font-weight:800;')
  end
  _ '</p>'
  _ '<ul>'
  _ '<li><p><b>MD5-sum:</b> '+md5sum.to_s+' </p></li>'
  use_this_size = (size.to_f / 1024 / 1024).round(5).to_s
  _ '<li><p><b>Download size:</b> '+use_this_size+' MB </p></li>'
  _ '</ul>'
  # ======================================================================= #
  # === Dependencies
  #
  # We will next provide a link to the other dependencies.
  # ======================================================================= #
  if deps
    unless deps.empty?
      _ '<h4>Dependencies for the project <b>'+program_name.to_s+':</h4>'
      _ p # Paragraph.
        deps.each {|dependency|
          _ HtmlTags.span(dependency, style: 'margin-left: 3em')
          _ ''
          _ HtmlTags.a(dependency+'.html') 
          _ br
        }
      _ '</p>'
    end
  end
  # ======================================================================= #
  # === BLFS subsection
  #
  # We add a link to the remote LFS/BLFS entry, should it exist.
  # ======================================================================= #
  unless blfs_entry.empty?
    first_entry = blfs_entry.first
    _ '<div style="margin-bottom:2px">'
    _ '<h4>the LFS/BLFS entry can be seen here:</h4>'
    _ HtmlTags.a(
        content: first_entry.to_s,
        css_style: 'margin-left:3em'
      ) 
    _ '</div>'
  end 
  # ======================================================================= #
  # === Contents
  #
  # Add the contents subsection next.
  # ======================================================================= #
  _ '<div style="margin-bottom:1em">'
  _ '  <h3>Content</h3>'
  unless binaries.to_s.empty?
    _ '  <b style="margin-left:2em">Installed Programs:</b> '+binaries.to_s+'<br>'
  end
  unless libraries.to_s.empty?
    _ '  <b style="margin-left:2em">Installed Libraries:</b> '+libraries.to_s+'<br>'
  end
  # ======================================================================= #
  # We don't track installed directories as of yet.
  # ======================================================================= #
  _ '  <b style="margin-left:2em">Installed Directories: (Not yet implemented)</b><br>'
  _ '</div>'
  # ======================================================================= #
  # Add the next and previous program to the chain. These are links
  # that the user can click on.
  # ======================================================================= #
  begin
    if the_program_before
      _ a(the_program_before+'.html')
      _ ' | ' # Add a separator.
    end
    _ a(the_next_program_is+'.html')
  rescue NoMethodError; end # Do a silent rescue though. 
  _ br+br+'<i>This file was autogenerated at <b>'+current_time+'</b></i>'
  _ '</body></html>'
  write_what_into(what, into)
  reset_string
end

#generate_all_webpagesObject

#

generate_all_webpages

This method will generate all the various .html webpages.

#


474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
# File 'lib/rbt/cookbooks/generate_homepage/generate_homepage.rb', line 474

def generate_all_webpages
  notify_the_user_how_we_will_start
  # ======================================================================= #
  # We must create the directory if it does not yet exist.
  # ======================================================================= #
  unless File.directory? use_this_directory
    mkdir(use_this_directory)
  end
  # ======================================================================= #
  # cd into that directory.
  # ======================================================================= #
  cd use_this_directory
  # ======================================================================= #
  # Ok, next we iterate over all programs:
  # ======================================================================= #
  @array_available_programs = available_programs?
  @array_available_programs.each_with_index {|program, index|
    generate_a_webpage_for_this_program(program, index)
  }
  report_where_there_file_is
end

#h1(i) ⇒ Object

#

h1

#


420
421
422
# File 'lib/rbt/cookbooks/generate_homepage/generate_homepage.rb', line 420

def h1(i)
  HtmlTags.h1(i)
end

#input?Boolean

#

input?

#

Returns:

  • (Boolean)


131
132
133
# File 'lib/rbt/cookbooks/generate_homepage/generate_homepage.rb', line 131

def input?
  @input
end

#notify_the_user_how_we_will_startObject

#

notify_the_user_how_we_will_start

#


154
155
156
157
158
# File 'lib/rbt/cookbooks/generate_homepage/generate_homepage.rb', line 154

def notify_the_user_how_we_will_start
  opne 'Now generating a '+slateblue('LFS-like homepage')+'.'
  opne 'We will use this directory as our base directory:'
  opne '  '+sdir(use_this_directory)
end

#obtain_dataset_for(i) ⇒ Object

#

obtain_dataset_for

#


408
409
410
411
412
413
414
415
# File 'lib/rbt/cookbooks/generate_homepage/generate_homepage.rb', line 408

def obtain_dataset_for(i)
  sanitize_cookbook = action(:SanitizeCookbook, i) { :fast }
  opne "Obtaining information from the file "+
       "#{sfile(sanitize_cookbook.file)}#{rev}."
  #sanitize_cookbook.initialize_raw_cookbook(i)
  #sanitize_cookbook.sync_everything
  @dataset = sanitize_cookbook
end

#pObject

#

p

#


439
440
441
# File 'lib/rbt/cookbooks/generate_homepage/generate_homepage.rb', line 439

def p
  HtmlTags.p
end

#report_where_there_file_is(i = @file_location) ⇒ Object

#

report_where_there_file_is

#


191
192
193
194
195
196
197
# File 'lib/rbt/cookbooks/generate_homepage/generate_homepage.rb', line 191

def report_where_there_file_is(i = @file_location)
  where = (File.dirname(i)+'/').squeeze('/')
  opne 'The files are now available at'
  e
  opne '  `'+sdir(where)+'`.'
  e
end

#resetObject

#

reset (reset tag)

#


72
73
74
75
76
77
# File 'lib/rbt/cookbooks/generate_homepage/generate_homepage.rb', line 72

def reset
  super()
  infer_the_namespace
  reset_string
  set_file_location # Initialize with a default value.
end

#reset_stringObject

#

reset_string

#


82
83
84
# File 'lib/rbt/cookbooks/generate_homepage/generate_homepage.rb', line 82

def reset_string
  @string = ''.dup
end

#return_day_month_yearObject

#

return_day_month_year

#


177
178
179
# File 'lib/rbt/cookbooks/generate_homepage/generate_homepage.rb', line 177

def return_day_month_year
  Time.now.strftime('%d.%m.%Y') # => '13.12.2015
end

#return_hours_minutes_secondsObject

#

return_hours_minutes_seconds

#


170
171
172
# File 'lib/rbt/cookbooks/generate_homepage/generate_homepage.rb', line 170

def return_hours_minutes_seconds
  Time.now.strftime('%H:%M:%S') # => '05:44:39'
end

#runObject

#

run (run tag)

#


499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
# File 'lib/rbt/cookbooks/generate_homepage/generate_homepage.rb', line 499

def run
  # ======================================================================= #
  # The next if-clause is valid for when the user did input a program
  # name such as 'ruby'. In that case we will NOT generate all
  # webpages.
  # ======================================================================= #
  if input? and
     cookbooks_include_this_program?(input?.sub(/\.yml$/,''))
    _ = "#{File.dirname(file_location?)}/#{input?}.html"
    set_xorg_buffer(_)
    opne "#{rev}Next opening `#{simp(_)}#{rev}` in a browser tab."
    open_in_browser(_) # We open it in the browser as well.
  else
    generate_all_webpages # This will generate all the various individual .html files.
  end
end

#set_file_location(i = use_this_directory+'ruby.html') ⇒ Object

#

set_file_location

#


184
185
186
# File 'lib/rbt/cookbooks/generate_homepage/generate_homepage.rb', line 184

def set_file_location(i = use_this_directory+'ruby.html')
  @file_location = i
end

#set_input(i = '') ⇒ Object

#

set_input

#


104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/rbt/cookbooks/generate_homepage/generate_homepage.rb', line 104

def set_input(i = '')
  i = i.first if i.is_a? Array
  i = i.to_s.dup if i
  case i # case tag
  # ======================================================================= #
  # === genhomepage --l?
  # ======================================================================= #
  when '--location?',
       '--location',
       '--l?',
       'LOCATION',
       'WHERE'
    feedback_where_to_store
    exit
  # ======================================================================= #
  # === genhomepage --help
  # ======================================================================= #
  when /^-?-?help$/i
    show_help
    exit
  end
  @input = i
end

#show_helpObject

#

show_help

#


89
90
91
92
93
94
95
96
97
98
99
# File 'lib/rbt/cookbooks/generate_homepage/generate_homepage.rb', line 89

def show_help
  e
  e 'Currently this class responds to these instructions:'
  e
  ecomment '  ['+sfancy('name')+'] # Give the name of the program '\
           'you wish to open in a browser tab.'
  e
  ecomment '         # No argument - this is the default way to invoke it.'
  ecomment '         # In this case, we will generate a lot of .html files.'
  e
end

#use_this_directory?Boolean Also known as: use_this_directory, store_where?

#

use_this_directory?

#

Returns:

  • (Boolean)


146
147
148
# File 'lib/rbt/cookbooks/generate_homepage/generate_homepage.rb', line 146

def use_this_directory?
  USE_THIS_DIRECTORY
end