class Heroku::Command::Labs

manage optional features

Public Instance Methods

disable() click to toggle source
labs:disable FEATURE

disables an experimental feature

Example:

$ heroku labs:disable ninja-power
Disabling ninja-power feature for me@example.org... done
# File lib/heroku/command/labs.rb, line 74
def disable
  feature_name = shift_argument
  error "Usage: heroku labs:disable FEATURE\nMust specify FEATURE to disable." unless feature_name
  validate_arguments!

  feature = api.get_features(app).body.detect { |f| f["name"] == feature_name }
  message = "Disabling #{feature_name} "

  error "No such feature: #{feature_name}" unless feature

  if feature["kind"] == "user"
    message += "for #{Heroku::Auth.user}"
  else
    error "Must specify an app" unless app
    message += "for #{app}"
  end

  action message do
    api.delete_feature feature_name, app
  end
end
enable() click to toggle source
labs:enable FEATURE

enables an experimental feature

Example:

$ heroku labs:enable ninja-power
Enabling ninja-power feature for me@example.org... done
# File lib/heroku/command/labs.rb, line 105
def enable
  feature_name = shift_argument
  error "Usage: heroku labs:enable FEATURE\nMust specify FEATURE to enable." unless feature_name
  validate_arguments!

  feature = api.get_features.body.detect { |f| f["name"] == feature_name }
  message = "Enabling #{feature_name} "

  error "No such feature: #{feature_name}" unless feature

  if feature["kind"] == "user"
    message += "for #{Heroku::Auth.user}"
  else
    error "Must specify an app" unless app
    message += "for #{app}"
  end

  feature_data = action(message) do
    api.post_feature(feature_name, app).body
  end

  display "WARNING: This feature is experimental and may change or be removed without notice."
  display "For more information see: #{feature_data["docs"]}" if feature_data["docs"]
end
index() click to toggle source
labs

list experimental features

Example:

=== User Features (david@heroku.com)
[+] dashboard  Use Heroku Dashboard by default

=== App Features (glacial-retreat-5913)
[ ] preboot            Provide seamless web dyno deploys
[ ] user-env-compile   Add user config vars to the environment during slug compilation  # $ heroku labs -a myapp
# File lib/heroku/command/labs.rb, line 20
def index
  validate_arguments!

  user_features, app_features = api.get_features(app).body.sort_by do |feature|
    feature["name"]
  end.partition do |feature|
    feature["kind"] == "user"
  end

  display_app = app || "no app specified"

  styled_header "User Features (#{Heroku::Auth.user})"
  display_features user_features
  display
  styled_header "App Features (#{display_app})"
  display_features app_features
end
info() click to toggle source
labs:info FEATURE

displays additional information about FEATURE

Example:

$ heroku labs:info user_env_compile
=== user_env_compile
Docs:    http://devcenter.heroku.com/articles/labs-user-env-compile
Summary: Add user config vars to the environment during slug compilation
# File lib/heroku/command/labs.rb, line 51
def info
  unless feature_name = shift_argument
    error("Usage: heroku labs:info FEATURE\nMust specify FEATURE for info.")
  end
  validate_arguments!

  feature_data = api.get_feature(feature_name, app).body
  styled_header(feature_data['name'])
  styled_hash({
    'Summary' => feature_data['summary'],
    'Docs'    => feature_data['docs']
  })
end

Private Instance Methods

app() click to toggle source

app is not required for these commands, so rescue if there is none

Calls superclass method Heroku::Command::Base#app
# File lib/heroku/command/labs.rb, line 133
def app
  super
rescue Heroku::Command::CommandFailed
  nil
end
display_features(features) click to toggle source
# File lib/heroku/command/labs.rb, line 139
def display_features(features)
  longest_name = features.map { |f| f["name"].to_s.length }.sort.last
  features.each do |feature|
    toggle = feature["enabled"] ? "[+]" : "[ ]"
    display "%s %-#{longest_name}s  %s" % [ toggle, feature["name"], feature["summary"] ]
  end
end