diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/host.rb | 19 | ||||
-rw-r--r-- | lib/hosts.rb | 22 | ||||
-rw-r--r-- | lib/sshconfig.rb | 13 |
3 files changed, 54 insertions, 0 deletions
diff --git a/lib/host.rb b/lib/host.rb new file mode 100644 index 0000000..90c3e2e --- /dev/null +++ b/lib/host.rb @@ -0,0 +1,19 @@ +module SSHConfig + class Host + def initialize(name, &block) + @name = name + @directives = {} + self.instance_eval(&block) + end + + def method_missing(meth, arg) + @directives[meth.capitalize] = arg + end + + def to_s + "Host #{@name}\n" + + @directives.map { |k, v| "\t#{k} #{v}" }.join("\n") + + "\n" + end + end +end diff --git a/lib/hosts.rb b/lib/hosts.rb new file mode 100644 index 0000000..1a0fc27 --- /dev/null +++ b/lib/hosts.rb @@ -0,0 +1,22 @@ +module SSHConfig + class Hosts + attr_reader :hosts + + def initialize(&block) + @hosts = [] + self.instance_eval(&block) + end + + def merge(morehosts) + @hosts += morehosts.hosts + end + + def host(name) + @hosts << Host.new(name, &Proc.new) + end + + def to_s + @hosts.map(&:to_s).join("\n") + end + end +end diff --git a/lib/sshconfig.rb b/lib/sshconfig.rb new file mode 100644 index 0000000..204a127 --- /dev/null +++ b/lib/sshconfig.rb @@ -0,0 +1,13 @@ +require 'host' +require 'hosts' + +module SSHConfig + YES = "yes" + NO = "no" + + $hostlist = Hosts.new{} + + def hosts + $hostlist.merge(Hosts.new(&Proc.new)) + end +end |