Class: Rush::Config

Inherits:
Object
  • Object
show all
Defined in:
lib/rush/config.rb

Overview

The config class accesses files in ~/.rush to load and save user preferences.

Constant Summary collapse

DefaultPort =
7770

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(location = nil) ⇒ Config

By default, reads from the dir ~/.rush, but an optional parameter allows using another location.



9
10
11
12
# File 'lib/rush/config.rb', line 9

def initialize(location = nil)
  @dir = Rush::Dir.new(location || "#{ENV['HOME']}/.rush")
  @dir.create
end

Instance Attribute Details

#dirObject (readonly)

Returns the value of attribute dir.



5
6
7
# File 'lib/rush/config.rb', line 5

def dir
  @dir
end

Instance Method Details

#commands_fileObject

Commands are mixed in to Array and Rush::Entry, alongside the default commands from Rush::Commands. Any methods here should reference “entries” to get the list of entries to operate on.

Example ~/.rush/commands.rb:

def destroy_svn(*args)
  entries.select { |e| e.name == '.svn' }.destroy
end


53
54
55
# File 'lib/rush/config.rb', line 53

def commands_file
  dir['commands.rb']
end

#credentialsObject



82
83
84
# File 'lib/rush/config.rb', line 82

def credentials
  credentials_file.lines.first.split(':', 2)
end

#credentials_fileObject

Credentials is the client-side equivalent of passwords. It contains only one username:password combination that is transmitted to the server when connecting. This is also autogenerated if it does not exist.



78
79
80
# File 'lib/rush/config.rb', line 78

def credentials_file
  dir['credentials']
end

#credentials_passwordObject



94
95
96
# File 'lib/rush/config.rb', line 94

def credentials_password
  credentials[1]
end

#credentials_userObject



90
91
92
# File 'lib/rush/config.rb', line 90

def credentials_user
  credentials[0]
end

#ensure_credentials_existObject



98
99
100
# File 'lib/rush/config.rb', line 98

def ensure_credentials_exist
  generate_credentials if credentials_file.contents_or_blank == ''
end

#env_fileObject

The environment file is executed when the interactive shell starts up. Put aliases and your own functions here; it is the equivalent of .bashrc or .profile.

Example ~/.rush/env.rb:

server = Rush::Box.new('[email protected]')
myproj = home['projects/myproj/']


36
37
38
# File 'lib/rush/config.rb', line 36

def env_file
  dir['env.rb']
end

#generate_credentialsObject



102
103
104
# File 'lib/rush/config.rb', line 102

def generate_credentials
  save_credentials(generate_user, generate_password)
end

#generate_passwordObject



110
111
112
# File 'lib/rush/config.rb', line 110

def generate_password
  generate_secret(8, 15)
end

#generate_secret(min, max) ⇒ Object



114
115
116
117
118
# File 'lib/rush/config.rb', line 114

def generate_secret(min, max)
  chars = self.secret_characters
  len = rand(max - min + 1) + min
  len.times.inject('') { |r| r += chars[rand(chars.length)] }
end

#generate_userObject



106
107
108
# File 'lib/rush/config.rb', line 106

def generate_user
  generate_secret(4, 8)
end

#history_fileObject

History is a flat file of past commands in the interactive shell, equivalent to .bash_history.



16
17
18
# File 'lib/rush/config.rb', line 16

def history_file
  dir['history']
end

#load_commandsObject



57
58
59
# File 'lib/rush/config.rb', line 57

def load_commands
  commands_file.contents_or_blank
end

#load_envObject



40
41
42
# File 'lib/rush/config.rb', line 40

def load_env
  env_file.contents_or_blank
end

#load_historyObject



24
25
26
# File 'lib/rush/config.rb', line 24

def load_history
  history_file.contents_or_blank.split("\n")
end

#passwordsObject



68
69
70
71
72
73
# File 'lib/rush/config.rb', line 68

def passwords
  passwords_file.lines_or_empty.inject({}) do |result, line|
    user, password = line.split(':', 2)
    result.merge user => password
  end
end

#passwords_fileObject

Passwords contains a list of username:password combinations used for remote access via rushd. You can fill this in manually, or let the remote connection publish it automatically.



64
65
66
# File 'lib/rush/config.rb', line 64

def passwords_file
  dir['passwords']
end

#save_credentials(user, password) ⇒ Object



86
87
88
# File 'lib/rush/config.rb', line 86

def save_credentials(user, password)
  credentials_file.write("#{user}:#{password}\n")
end

#save_history(array) ⇒ Object



20
21
22
# File 'lib/rush/config.rb', line 20

def save_history(array)
  history_file.write(array.join("\n") + "\n")
end

#save_tunnels(hash) ⇒ Object



140
141
142
143
144
145
146
# File 'lib/rush/config.rb', line 140

def save_tunnels(hash)
  string = ''
  hash.each do |host, port|
    string += "#{host}:#{port}\n"
  end
  tunnels_file.write string
end

#secret_charactersObject



120
121
122
123
124
# File 'lib/rush/config.rb', line 120

def secret_characters
  [('a'..'z'), ('1'..'9')].inject([]) do |chars, range|
    chars += range.to_a
  end
end

#tunnelsObject



133
134
135
136
137
138
# File 'lib/rush/config.rb', line 133

def tunnels
  tunnels_file.lines_or_empty.inject({}) do |hash, line|
    host, port = line.split(':', 2)
    hash.merge host => port.to_i
  end
end

#tunnels_fileObject

~/.rush/tunnels contains a list of previously created ssh tunnels. The format is host:port, where port is the local port that the tunnel is listening on.



129
130
131
# File 'lib/rush/config.rb', line 129

def tunnels_file
  dir['tunnels']
end