class Birdwatcher::Commands::Workspace

Public Class Methods

detailed_usage() click to toggle source
# File lib/birdwatcher/commands/workspace.rb, line 10
      def self.detailed_usage
<<-USAGE
Workspaces enable you to segment and manage users and data stored in the database.
You can use workspaces to create logical separation between different users.
For example, you may want to create a workspace for a company, a department or
for a specific topic.

There will always be a default workspace with the name #{Birdwatcher::Models::Workspace::DEFAULT_WORKSPACE_NAME.bold} which might be enough
if you plan to use Birdwatcher for a small group of Twitter users.

#{'USAGE:'.bold}

#{'List available workspaces:'.bold}
  workspace list

#{'Create a new workspace:'.bold}
  workspace create NAME [DESCRIPTION]

#{'Switch to a workspace:'.bold}
  workspace use NAME

#{'Delete a workspace:'.bold}
  workspace delete NAME

#{'Rename a workspace'.bold}
  workspace rename NAME NEW_NAME
USAGE
      end

Public Instance Methods

create_workspace() click to toggle source
# File lib/birdwatcher/commands/workspace.rb, line 92
def create_workspace
  name        = arguments[1]
  description = arguments[2..-1].to_a.join(" ")
  description = nil unless description

  if !name
    error("You must provide a workspace name")
    return false
  end

  if Birdwatcher::Models::Workspace.first(:name => name)
    error("There is already a workspace with that name")
    return false
  end

  workspace = Birdwatcher::Models::Workspace.create(
    :name        => name,
    :description => description
  )

  info("Created workspace: #{workspace.name.bold}")
  self.current_workspace = workspace
end
delete_workspace() click to toggle source
# File lib/birdwatcher/commands/workspace.rb, line 148
def delete_workspace
  name = arguments[1]

  if !name
    error("You must provide a workspace name")
    return false
  end

  if workspace = Birdwatcher::Models::Workspace.first(:name => name)
    return unless confirm("Are you sure you want to delete #{name.bold} and all associated data?")
    workspace.destroy
    info("Deleted workspace: #{workspace.name.bold}")
    if workspace.default_workspace?
      self.current_workspace = Birdwatcher::Models::Workspace.create_default_workspace!
      return
    end
    if current_workspace.id == workspace.id
      self.current_workspace = Birdwatcher::Models::Workspace.first(
        :name => Birdwatcher::Models::Workspace::DEFAULT_WORKSPACE_NAME
      )
    end
  else
    error("There is no workspace with that name")
    return false
  end
end
list_workspaces() click to toggle source
# File lib/birdwatcher/commands/workspace.rb, line 61
def list_workspaces
  longest_workspace_name = Birdwatcher::Models::Workspace.all.map(&:name).max_by(&:length)
  info("Available workspaces:\n")
  Birdwatcher::Models::Workspace.order(:name).each do |workspace|
    if current_workspace.id == workspace.id
      workspace_name = "*".bold.light_green + "  #{workspace.name}"
    else
      workspace_name = "   #{workspace.name}"
    end

    output_formatted(" %-#{longest_workspace_name.bold.length}s  \t\t%s\n", workspace_name.bold, workspace.description)
  end
  newline
end
rename_workspace() click to toggle source
# File lib/birdwatcher/commands/workspace.rb, line 116
def rename_workspace
  old_name = arguments[1]
  new_name = arguments[2]

  if !old_name || !new_name
    error("You must provide workspace name and new name")
    return false
  end

  if old_name == Birdwatcher::Models::Workspace::DEFAULT_WORKSPACE_NAME
    error("Default workspace cannot be renamed")
    return false
  end

  if !old_workspace = Birdwatcher::Models::Workspace.first(:name => old_name)
    error("There is no workspace named #{old_name.bold}")
    return false
  end

  if Birdwatcher::Models::Workspace.first(:name => new_name)
    error("There is already a workspace named #{new_name.bold}")
    return false
  end

  old_workspace.update(:name => new_name)
  if old_workspace.id == current_workspace.id
    self.current_workspace = old_workspace
  end

  info("Workspace #{old_name.bold} renamed to #{new_name.bold}")
end
run() click to toggle source
# File lib/birdwatcher/commands/workspace.rb, line 39
def run
  if !arguments?
    info("Current workspace: #{current_workspace.name.bold} (database ID: #{current_workspace.id.to_s.bold})")
    return true
  end
  action = arguments.first.downcase
  case action
  when "list"
    list_workspaces
  when "create", "add", "-a"
    create_workspace
  when "rename", "-r"
    rename_workspace
  when "select", "use"
    select_workspace
  when "delete", "destroy", "rm", "-d"
    delete_workspace
  else
    select_workspace(arguments.first)
  end
end
select_workspace(name = nil) click to toggle source
# File lib/birdwatcher/commands/workspace.rb, line 76
def select_workspace(name = nil)
  name ||= arguments[1]

  if !name
    error("You must provide a workspace name")
    return false
  end

  if workspace = Birdwatcher::Models::Workspace.first(:name => name)
    self.current_workspace = workspace
    info("Now using workspace: #{workspace.name.bold}")
  else
    error("There is no workspace with that name")
  end
end