class Exos::Commands::Keys::Key

Attributes

created_at[RW]
email[RW]
key[RW]
status[RW]
updated_at[RW]

Public Class Methods

new(attrs = {}) click to toggle source
# File lib/exos/commands/keys.rb, line 181
def initialize(attrs = {})
  self.email      = attrs.fetch(:email)
  self.key        = attrs.fetch(:key, nil)
  self.status     = attrs.fetch(:status, "active")
  self.created_at = attrs.fetch(:created_at, Time.now)
  self.updated_at = attrs.fetch(:updated_at, Time.now)
end
parse(attrs_line, key_line) click to toggle source
# File lib/exos/commands/keys.rb, line 162
def self.parse(attrs_line, key_line)
  if attrs_line.match(PATTERN_ATTRS_LINE)
    attrs = JSON.parse($1)

    new_key = new(
      email:      attrs["email"],
      status:     attrs["status"],
      created_at: attrs["created_at"],
      updated_at: attrs["updated_at"]
    )

    if key_line.match(PATTERN_KEY_LINE)
      new_key.key = key_line.chomp
    end

    new_key
  end
end

Public Instance Methods

activate() click to toggle source
# File lib/exos/commands/keys.rb, line 222
def activate
  self.status = "active"
  self.key = uncomment(self.key)
end
active?() click to toggle source
# File lib/exos/commands/keys.rb, line 218
def active?
  self.status == "active"
end
attributes() click to toggle source
# File lib/exos/commands/keys.rb, line 201
def attributes
  {
    email:      self.email,
    status:     self.status,
    created_at: self.created_at,
    updated_at: self.updated_at
  }
end
comment(key) click to toggle source
# File lib/exos/commands/keys.rb, line 232
def comment(key); "# #{key}"; end
deactivate() click to toggle source
# File lib/exos/commands/keys.rb, line 227
def deactivate
  self.status = "inactive"
  self.key = comment(self.key)
end
escape(text) click to toggle source
# File lib/exos/commands/keys.rb, line 239
def escape(text)
  text.gsub("'", "\'")
end
key=(text) click to toggle source
# File lib/exos/commands/keys.rb, line 189
def key=(text)
  if text && !text.match(/\A(# )?ssh-rsa .+/)
    abort "Invalid key."
  end

  @key = text
end
key_fragment() click to toggle source
# File lib/exos/commands/keys.rb, line 197
def key_fragment
  "..." + uncomment(self.key).split[1][-20..-1] if self.key
end
to_s() click to toggle source
# File lib/exos/commands/keys.rb, line 235
def to_s
  escape( ["", "### exos-key #{ JSON.dump(attributes) }", self.key, ""].join("\n") )
end
touch() click to toggle source
# File lib/exos/commands/keys.rb, line 210
def touch
  self.updated_at = Time.now
end
uncomment(key) click to toggle source
# File lib/exos/commands/keys.rb, line 233
def uncomment(key); self.key.sub(/\A# /, ""); end
valid?() click to toggle source
# File lib/exos/commands/keys.rb, line 214
def valid?
  !!self.email && !!self.key
end