ftp_paradise 1.4.5 → 1.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of ftp_paradise might be problematic. Click here for more details.

Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +152 -28
  3. data/bin/{iftp → ftp_paradise_shell} +1 -1
  4. data/doc/README.gen +97 -15
  5. data/doc/todo/{TODO_FOR_FTP_PARADISE_PROJECT.md → todo_for_the_ftp_paradise_project.md} +0 -0
  6. data/ftp_paradise.gemspec +30 -39
  7. data/lib/ftp_paradise/base/base.rb +375 -0
  8. data/lib/ftp_paradise/colours/colours.rb +27 -27
  9. data/lib/ftp_paradise/colours/use_colours.rb +6 -1
  10. data/lib/ftp_paradise/configuration/configuration.rb +7 -4
  11. data/lib/ftp_paradise/connection/README.md +0 -0
  12. data/lib/ftp_paradise/connection/connection.rb +2782 -15
  13. data/lib/ftp_paradise/constants/constants.rb +91 -5
  14. data/lib/ftp_paradise/entry/entry.rb +42 -5
  15. data/lib/ftp_paradise/{connection → gui/gtk3/ftp_client}/constants.rb +33 -21
  16. data/lib/ftp_paradise/gui/{shared_code/ftp_paradise/ftp_paradise_module.rb → gtk3/ftp_client/ftp_client.rb} +658 -170
  17. data/lib/ftp_paradise/gui/gtk3/ftp_client/misc.rb +27 -0
  18. data/lib/ftp_paradise/project/project.rb +11 -15
  19. data/lib/ftp_paradise/requires/require_class_connection.rb +7 -0
  20. data/lib/ftp_paradise/requires/require_net_ftp.rb +7 -0
  21. data/lib/ftp_paradise/requires/require_the_ftp_paradise_project.rb +4 -3
  22. data/lib/ftp_paradise/requires/require_the_ftp_paradise_project_with_the_GUI_bindings.rb +1 -1
  23. data/lib/ftp_paradise/requires/require_the_toplevel_methods.rb +1 -0
  24. data/lib/ftp_paradise/{interactive_ftp → shell}/menu.rb +554 -448
  25. data/lib/ftp_paradise/shell/shell.rb +2321 -0
  26. data/lib/ftp_paradise/toplevel_methods/connect.rb +3 -0
  27. data/lib/ftp_paradise/toplevel_methods/dataset.rb +111 -0
  28. data/lib/ftp_paradise/toplevel_methods/file_related_actions.rb +4 -3
  29. data/lib/ftp_paradise/toplevel_methods/ftp_object.rb +6 -5
  30. data/lib/ftp_paradise/toplevel_methods/login_name.rb +6 -4
  31. data/lib/ftp_paradise/toplevel_methods/misc.rb +19 -0
  32. data/lib/ftp_paradise/toplevel_methods/opn.rb +1 -1
  33. data/lib/ftp_paradise/toplevel_methods/password.rb +4 -2
  34. data/lib/ftp_paradise/toplevel_methods/port.rb +4 -1
  35. data/lib/ftp_paradise/toplevel_methods/remote_url.rb +11 -5
  36. data/lib/ftp_paradise/toplevel_methods/upload_and_download.rb +1 -0
  37. data/lib/ftp_paradise/version/version.rb +6 -1
  38. data/lib/ftp_paradise/www/web_interface.cgi +1 -1
  39. data/lib/ftp_paradise/yaml/automatically_connect_on_startup_of_the_interactive_ftp_shell.yml +0 -0
  40. data/lib/ftp_paradise/yaml/debug.yml +0 -0
  41. data/lib/ftp_paradise/yaml/open_in_default_editor.yml +0 -0
  42. data/lib/ftp_paradise/yaml/show_full_names.yml +0 -0
  43. data/lib/ftp_paradise/yaml/use_colours.yml +0 -0
  44. data/test/testing_minimal_pure_net_ftp_example_to_connect.rb +13 -3
  45. metadata +52 -126
  46. data/lib/ftp_paradise/base/cliner.rb +0 -23
  47. data/lib/ftp_paradise/base/colours.rb +0 -83
  48. data/lib/ftp_paradise/base/prototype.rb +0 -171
  49. data/lib/ftp_paradise/base/reset.rb +0 -29
  50. data/lib/ftp_paradise/connection/data.rb +0 -164
  51. data/lib/ftp_paradise/connection/debug.rb +0 -78
  52. data/lib/ftp_paradise/connection/directory_handling.rb +0 -271
  53. data/lib/ftp_paradise/connection/do_login.rb +0 -108
  54. data/lib/ftp_paradise/connection/download.rb +0 -86
  55. data/lib/ftp_paradise/connection/file_handling.rb +0 -174
  56. data/lib/ftp_paradise/connection/ftp_object.rb +0 -21
  57. data/lib/ftp_paradise/connection/initialize.rb +0 -88
  58. data/lib/ftp_paradise/connection/initialize_a_new_net_ftp_object_with_this_url.rb +0 -20
  59. data/lib/ftp_paradise/connection/is_connected.rb +0 -46
  60. data/lib/ftp_paradise/connection/misc.rb +0 -474
  61. data/lib/ftp_paradise/connection/notify.rb +0 -71
  62. data/lib/ftp_paradise/connection/password.rb +0 -47
  63. data/lib/ftp_paradise/connection/port.rb +0 -33
  64. data/lib/ftp_paradise/connection/remote_pwd.rb +0 -72
  65. data/lib/ftp_paradise/connection/remote_url.rb +0 -164
  66. data/lib/ftp_paradise/connection/remove.rb +0 -143
  67. data/lib/ftp_paradise/connection/reset.rb +0 -78
  68. data/lib/ftp_paradise/connection/run.rb +0 -18
  69. data/lib/ftp_paradise/connection/set_array_available_hosts.rb +0 -27
  70. data/lib/ftp_paradise/connection/set_input.rb +0 -18
  71. data/lib/ftp_paradise/connection/show.rb +0 -153
  72. data/lib/ftp_paradise/connection/sync_ftp_object_onto_the_main_namespace.rb +0 -24
  73. data/lib/ftp_paradise/connection/transfer_mode.rb +0 -163
  74. data/lib/ftp_paradise/connection/upload.rb +0 -253
  75. data/lib/ftp_paradise/connection/use_default_dataset.rb +0 -40
  76. data/lib/ftp_paradise/connection/username.rb +0 -42
  77. data/lib/ftp_paradise/constants/misc.rb +0 -57
  78. data/lib/ftp_paradise/constants/namespace.rb +0 -14
  79. data/lib/ftp_paradise/constants/newline.rb +0 -14
  80. data/lib/ftp_paradise/constants/roebe.rb +0 -31
  81. data/lib/ftp_paradise/constants/roebe_ftp_constants.rb +0 -233
  82. data/lib/ftp_paradise/gui/gtk2/ftp_paradise.rb +0 -34
  83. data/lib/ftp_paradise/gui/gtk3/ftp_paradise.rb +0 -34
  84. data/lib/ftp_paradise/interactive_ftp/constants.rb +0 -103
  85. data/lib/ftp_paradise/interactive_ftp/directory_handling.rb +0 -216
  86. data/lib/ftp_paradise/interactive_ftp/help.rb +0 -50
  87. data/lib/ftp_paradise/interactive_ftp/initialize.rb +0 -27
  88. data/lib/ftp_paradise/interactive_ftp/interactive_ftp.rb +0 -998
  89. data/lib/ftp_paradise/interactive_ftp/main_loop.rb +0 -51
  90. data/lib/ftp_paradise/interactive_ftp/misc.rb +0 -208
  91. data/lib/ftp_paradise/interactive_ftp/mode.rb +0 -124
  92. data/lib/ftp_paradise/interactive_ftp/readline.rb +0 -113
  93. data/lib/ftp_paradise/interactive_ftp/remove.rb +0 -97
  94. data/lib/ftp_paradise/interactive_ftp/reset.rb +0 -90
  95. data/lib/ftp_paradise/interactive_ftp/run.rb +0 -22
  96. data/lib/ftp_paradise/interactive_ftp/show.rb +0 -184
  97. data/lib/ftp_paradise/interactive_ftp/upload.rb +0 -90
  98. data/lib/ftp_paradise/interactive_ftp/user_input.rb +0 -53
  99. data/lib/ftp_paradise/toplevel_methods/can_connect_to_remote_site.rb +0 -28
  100. data/lib/ftp_paradise/toplevel_methods/clear_user_dataset.rb +0 -28
  101. data/lib/ftp_paradise/toplevel_methods/data.rb +0 -31
  102. data/lib/ftp_paradise/toplevel_methods/determine_user_dataset_from_this_hash.rb +0 -37
@@ -1,22 +0,0 @@
1
- #!/usr/bin/ruby -w
2
- # Encoding: UTF-8
3
- # frozen_string_literal: true
4
- # =========================================================================== #
5
- # require 'ftp_paradise/interactive_ftp/run.rb'
6
- # =========================================================================== #
7
- module FtpParadise
8
-
9
- class InteractiveFtp # === FtpParadise::InteractiveFtp
10
-
11
- # ========================================================================= #
12
- # === run
13
- # ========================================================================= #
14
- def run
15
- set_passive :be_verbose
16
- pass_commandline_arguments_into_the_menu # <- Must come before startup_actions().
17
- startup_actions
18
- do_login # Next, login.
19
- enter_main_loop
20
- end
21
-
22
- end; end
@@ -1,184 +0,0 @@
1
- #!/usr/bin/ruby -w
2
- # Encoding: UTF-8
3
- # frozen_string_literal: true
4
- # =========================================================================== #
5
- # require 'ftp_paradise/interactive_ftp/show.rb'
6
- # =========================================================================== #
7
- module FtpParadise
8
-
9
- class InteractiveFtp
10
-
11
- # ========================================================================= #
12
- # === show_remote_directories
13
- # ========================================================================= #
14
- def show_remote_directories
15
- e "The remote directories at #{sdir(return_remote_pwd)} are:"
16
- e
17
- ftp?.return_remote_directories.each_with_index {|dir, index|
18
- index += 1
19
- e index.to_s.rjust(3)+') '+sdir(dir)
20
- }
21
- e
22
- end
23
-
24
- # ========================================================================= #
25
- # === show_remote_files
26
- #
27
- # Use this method to show all remote files on a FTP site.
28
- # ========================================================================= #
29
- def show_remote_files(
30
- mode = nil
31
- ) # Show the content of the remote host.
32
- ftp?.show_remote_files
33
- end
34
-
35
- # ========================================================================= #
36
- # === show_hosts
37
- # ========================================================================= #
38
- def show_hosts
39
- e "The available hosts are:#{N}#{N}"
40
- ftp?.array_available_hosts.each {|host|
41
- e simp(" #{host}")
42
- }; e
43
- end
44
-
45
- # ========================================================================= #
46
- # === show_remote_listing
47
- #
48
- # This will display the remote file listing.
49
- # ========================================================================= #
50
- def show_remote_listing
51
- ftp?.show_remote_listing
52
- end
53
-
54
- # ========================================================================= #
55
- # === show_status
56
- # ========================================================================= #
57
- def show_status
58
- cliner {
59
- # e
60
- # show_help # <- Disabled as of May 2017.
61
- e
62
- report_where_we_are_connected_to
63
- report_remote_directory # Added Dec 2011.
64
- report_local_dir
65
- # debug_it
66
- e
67
- }
68
- end
69
-
70
- # ========================================================================= #
71
- # === show_title
72
- #
73
- # Use this method to give us the title
74
- # ========================================================================= #
75
- def show_title
76
- e return_title
77
- end
78
-
79
- # ========================================================================= #
80
- # === show_history
81
- #
82
- # This method can be used to display the input-history of the user.
83
- # ========================================================================= #
84
- def show_history # History tag.
85
- e "The history for #{sfancy(return_title)} is:"
86
- @history.each_with_index { |key, index|
87
- e '%3s' % (index+1).to_s+' '+key
88
- }
89
- end
90
-
91
- # ========================================================================= #
92
- # === show_which_files_we_did_download_so_far
93
- # ========================================================================= #
94
- def show_which_files_we_did_download_so_far
95
- if @array_downloaded_files.empty?
96
- e 'We did not yet download any file.'
97
- else
98
- e 'We downloaded these files so far:'
99
- pp @array_downloaded_files
100
- end
101
- end
102
-
103
- # ========================================================================= #
104
- # === show_ftp_docu
105
- #
106
- # This method will show where to find ruby's ftp docu.
107
- # ========================================================================= #
108
- def show_ftp_docu
109
- e
110
- e ' https://www.ruby-doc.org/stdlib/libdoc/net/ftp/rdoc/Net/FTP.html'
111
- e
112
- end
113
-
114
- # ========================================================================= #
115
- # === show_ftp_yaml_file
116
- # ========================================================================= #
117
- def show_ftp_yaml_file
118
- e 'The yaml file in question can be found at:'
119
- e
120
- e " #{sfile(FILE_ROEBE_FTP)}"
121
- e
122
- end
123
-
124
- # ========================================================================= #
125
- # === show_modtime_of
126
- # ========================================================================= #
127
- def show_modtime_of(i)
128
- e "The modification time of #{sfile(i)} is:"
129
- e
130
- e ' '+sfancy(ftp?.modification_time_of?(i))
131
- e
132
- end
133
-
134
- # ========================================================================= #
135
- # === display_configuration_options (show config tag)
136
- #
137
- # This method will show the configuration settings.
138
- #
139
- # You can invoke this in an interactive FTP session by doing this:
140
- #
141
- # config?
142
- #
143
- # ========================================================================= #
144
- def display_configuration_options # Config tag.
145
- cliner {
146
- if @file.to_s.empty?
147
- e '@file is: unassigned as of yet'
148
- else
149
- e '@file is: '+sfancy(@file.to_s)
150
- end
151
- e '@local_directory is: '+sfancy(@local_directory.to_s)
152
- e '@splitted is: '+sfancy(@splitted.to_s)
153
- e 'Will we use the Readline module? '+
154
- sfancy(verbose_truth(use_readline?))
155
- e 'Will we show full names (with full path)? '+
156
- sfancy(verbose_truth(show_full_names?))
157
- e 'What is the base directory? '+
158
- sfancy(@config.base_directory.to_s)
159
- }
160
- end
161
-
162
- # ========================================================================= #
163
- # === show_available_connections
164
- # ========================================================================= #
165
- def show_available_connections(
166
- i = ARRAY_AVAILABLE_HOSTS
167
- )
168
- i.each_with_index {|entry, index|
169
- e "#{index} #{entry}"
170
- } if Object.const_defined? :RoebeFtpConstants
171
- end
172
-
173
- # ========================================================================= #
174
- # === show_www_component
175
- # ========================================================================= #
176
- def show_www_component
177
- e 'Make sure to visit:'
178
- path = '$RSRC/ftp_paradise/lib/ftp_paradise/www/sinatra_web_interface.rb'
179
- e " #{sfancy(path)}"
180
- _ = get_env_of("ruby #{path}")
181
- esystem _
182
- end
183
-
184
- end; end
@@ -1,90 +0,0 @@
1
- #!/usr/bin/ruby -w
2
- # Encoding: UTF-8
3
- # frozen_string_literal: true
4
- # =========================================================================== #
5
- # require 'ftp_paradise/interactive_ftp/upload.rb'
6
- # =========================================================================== #
7
- module FtpParadise
8
-
9
- class InteractiveFtp # === FtpParadise::Interactive
10
-
11
- # ========================================================================= #
12
- # === upload (upload tag)
13
- #
14
- # Use this method to upload something locally to the remote site.
15
- #
16
- # You can also upload several files in one go - to do this, try
17
- # one of these ways:
18
- #
19
- # upload 7,8 # This would upload file position 7 and 8.
20
- # upload 1..293
21
- #
22
- # ========================================================================= #
23
- def upload(
24
- i = Dir['*']
25
- )
26
- # ======================================================================= #
27
- # We will always work with an Array past the following point.
28
- # ======================================================================= #
29
- i = [i].flatten.compact # Safeguard against nil.
30
- if i.empty?
31
- i << @file if @file
32
- end
33
- i.map! {|entry|
34
- if entry.include?('-') and !entry.include?('.') # Assume a range was given like 1-20.
35
- splitted = entry.split('-')
36
- entry = (splitted[0] .. splitted[1]).to_a
37
- elsif entry.include?('..') # Assume a range such as: upload 1..25
38
- entry =~ /(\d+)\.\.(\d+)/
39
- start_position = $1.to_s.dup.to_i
40
- end_position = $2.to_s.dup.to_i
41
- entry = return_local_files[start_position, end_position]
42
- elsif entry.include?(',')
43
- splitted = i.split(',')
44
- entry = (splitted[0] .. splitted[1]).to_a
45
- elsif (entry == 'ALL') or (entry == '*')
46
- entry = Dir['*']
47
- elsif entry.include?('*.') or entry.include?('*')
48
- entry = Dir[entry]
49
- end
50
- entry
51
- }
52
- i.flatten!
53
- i.compact!
54
- if on_roebe? and !is_connected?
55
- connect_to :shevy
56
- end
57
- i.each {|this_file|
58
- if this_file =~ /^\d+$/ # upload only a specific number.
59
- sorted = Dir['*'].sort
60
- if i.is_a? Array
61
- i = i.first
62
- end
63
- this_file = sorted[i.to_i - 1]
64
- end
65
- _ = this_file # default to upload to 'all'
66
- if File.exist?(_)
67
- # =================================================================== #
68
- # Next, some files will always be in binary mode. These are
69
- # defined in the Array ARRAY_BINARY_FILES.
70
- # =================================================================== #
71
- if ARRAY_BINARY_FILES.include?(File.extname(_).delete('.')) and
72
- (@mode != :binary)
73
- use_binary_mode
74
- end
75
- case @mode
76
- when :ascii
77
- set_file(_)
78
- ftp?.upload(_) # And now, call the functionality in the FTP lib.
79
- else
80
- ftp?.upload_binary(_)
81
- end
82
- else
83
- opne swarn('But the file `')+
84
- sfile(i)+
85
- swarn('` does not exist.')
86
- end
87
- }
88
- end
89
-
90
- end; end
@@ -1,53 +0,0 @@
1
- #!/usr/bin/ruby -w
2
- # Encoding: UTF-8
3
- # frozen_string_literal: true
4
- # =========================================================================== #
5
- # require 'ftp_paradise/interactive_ftp/user_input.rb'
6
- # =========================================================================== #
7
- module FtpParadise
8
-
9
- class InteractiveFtp # === FtpParadise::InteractiveFtp
10
-
11
- # ========================================================================= #
12
- # === obtain_user_input
13
- #
14
- # This method will obtain user input, and assign it to the variable
15
- # @user_input.
16
- # ========================================================================= #
17
- def obtain_user_input
18
- if @use_readline
19
- user_input = Readline.readline('', true)
20
- Readline::HISTORY.pop if user_input.strip.empty?
21
- else
22
- user_input = $stdin.gets.chomp
23
- end
24
- # ======================================================================= #
25
- # Get rid of potential '#' comments in the input.
26
- # ======================================================================= #
27
- if user_input.include? '#'
28
- user_input = user_input[0 .. user_input.index('#')-1]
29
- end
30
- user_input.strip! # Get rid of ' ' empty characters.
31
- _ = user_input
32
- unless _.empty? # append to history.
33
- try_to_append_this_to_the_history(_)
34
- end
35
- # ======================================================================= #
36
- # If the user did input a ';' character then we will assume that he
37
- # wants to send multiple commands. We will however NOT assume so
38
- # if the string also includes a 'http://' - in that case, we assume
39
- # a HTTP URL instead.
40
- # ======================================================================= #
41
- if user_input.include? ';' and !user_input.include?('http://')
42
- user_input = user_input.split(';')
43
- else
44
- user_input = [user_input] # In this case simply turn it into an Array.
45
- end
46
- # ======================================================================= #
47
- # The @user_input variable should always be an Array.
48
- # ======================================================================= #
49
- @user_input = user_input
50
- end; alias get_user_input obtain_user_input # === get_user_input
51
- alias fetch_user_input obtain_user_input # === fetch_user_input
52
-
53
- end; end
@@ -1,28 +0,0 @@
1
- #!/usr/bin/ruby -w
2
- # Encoding: UTF-8
3
- # frozen_string_literal: true
4
- # =========================================================================== #
5
- # require 'ftp_paradise/toplevel_methods/can_connect_to_remote_site.rb'
6
- # =========================================================================== #
7
- module FtpParadise
8
-
9
- # ========================================================================= #
10
- # === FtpParadise.can_connect_to_remote_site?
11
- #
12
- # This method can be used to query whether we can connect to a remote
13
- # website via the FtpParadise project.
14
- #
15
- # The method will return a boolean: either true or false.
16
- # ========================================================================= #
17
- def self.can_connect_to_remote_site?
18
- require 'ftp_paradise/connection/connection.rb'
19
- ftp = FtpParadise::Connection.new(:dont_run_yet) { :use_default_dataset }
20
- ftp.be_quiet
21
- return ftp.is_connected?
22
- end
23
-
24
- end
25
-
26
- if __FILE__ == $PROGRAM_NAME
27
- p FtpParadise.can_connect_to_remote_site?
28
- end
@@ -1,28 +0,0 @@
1
- #!/usr/bin/ruby -w
2
- # Encoding: UTF-8
3
- # frozen_string_literal: true
4
- # =========================================================================== #
5
- # require 'ftp_paradise/toplevel_methods/clear_user_dataset.rb'
6
- # =========================================================================== #
7
- module FtpParadise
8
-
9
- require 'ftp_paradise/toplevel_methods/login_name.rb'
10
- require 'ftp_paradise/toplevel_methods/password.rb'
11
- require 'ftp_paradise/toplevel_methods/remote_url.rb'
12
-
13
- # ========================================================================= #
14
- # === FtpParadise.clear_user_dataset
15
- #
16
- # This method will reset the user-dataset to nil again, that is,
17
- # user name, password and remote url.
18
- #
19
- # This method had to be added so that we can easily clean-up on
20
- # a disconnect-action.
21
- # ========================================================================= #
22
- def self.clear_user_dataset
23
- FtpParadise.set_remote_url(nil)
24
- FtpParadise.set_user_name(nil)
25
- FtpParadise.set_password(nil)
26
- end
27
-
28
- end
@@ -1,31 +0,0 @@
1
- #!/usr/bin/ruby -w
2
- # Encoding: UTF-8
3
- # frozen_string_literal: true
4
- # =========================================================================== #
5
- # require 'ftp_paradise/toplevel_methods/data.rb'
6
- # =========================================================================== #
7
- module FtpParadise
8
-
9
- require 'ftp_paradise/toplevel_methods/login_name.rb'
10
- require 'ftp_paradise/toplevel_methods/password.rb'
11
- require 'ftp_paradise/toplevel_methods/remote_url.rb'
12
-
13
- # ========================================================================= #
14
- # === FtpParadise.data?
15
- #
16
- # This method will return the name of the user; the password; and the
17
- # remote URL. It is mostly just a convenience method.
18
- # ========================================================================= #
19
- def self.data?
20
- {
21
- user_name: FtpParadise.username?,
22
- password: FtpParadise.password?,
23
- remote_url: FtpParadise.remote_url?
24
- }
25
- end; self.instance_eval { alias dataset? data? } # === FtpParadise.dataset?
26
-
27
- end
28
-
29
- if __FILE__ == $PROGRAM_NAME
30
- pp FtpParadise.data?
31
- end
@@ -1,37 +0,0 @@
1
- #!/usr/bin/ruby -w
2
- # Encoding: UTF-8
3
- # frozen_string_literal: true
4
- # =========================================================================== #
5
- # require 'ftp_paradise/toplevel_methods/determine_user_dataset_from_this_hash.rb'
6
- # =========================================================================== #
7
- module FtpParadise
8
-
9
- require 'ftp_paradise/toplevel_methods/login_name.rb'
10
- require 'ftp_paradise/toplevel_methods/remote_url.rb'
11
- require 'ftp_paradise/toplevel_methods/password.rb'
12
-
13
- # ========================================================================= #
14
- # === FtpParadise.determine_user_dataset_from_this_hash
15
- #
16
- # This method can set relevant entries from an input Hash.
17
- #
18
- # The IDs should be 'url', 'user_name' and 'password'.
19
- # ========================================================================= #
20
- def self.determine_user_dataset_from_this_hash(i)
21
- if i.is_a? Hash
22
- if i.has_key? 'url'
23
- _ = i.fetch('url')
24
- FtpParadise.set_remote_url(_)
25
- end
26
- if i.has_key? 'user_name'
27
- _ = i.fetch('user_name')
28
- FtpParadise.set_user_name(_)
29
- end
30
- if i.has_key? 'password'
31
- _ = i.fetch('password')
32
- FtpParadise.set_password(_)
33
- end
34
- end
35
- end
36
-
37
- end