module HipTail::Util

Constants

DEFAULT_VENDOR_NAME
DEFAULT_VENDOR_URL

Public Class Methods

create_capability(params) click to toggle source

Build capability object. @param [Hash] params @option params [String] :key Identical key for integration @option params [String] :name integration name @option params [String] :base_url Base URL for integration @option params [String] :capability_url URL for capability @option params [String] :webhook_url URL for event webhook @option params [String] :installed_url URL for installed / uninstalled event webhook @option params [String] :description (same as :name) integration description (optional) @option params [String] :vendor_name (same as :name) Vendor name (optional) @option params [String] :vendor_url (same as :base_url) Vendor URL (optional) @option params [String] :homepage_url (same as :base_url) Homepage (optional) @option params [String] :sender_name (same as :name) Name of notification sender (optional) @option params [String] :avatar Url of avatar image (optional) @option params [String] :allow_global (true) Allow global installation (optional) @option params [String] :allow_room (true) Allow room installation (optional) @option params [String] :message_filter Room message filter regexp (optional)

# File lib/hiptail/util.rb, line 23
def create_capability(params)
  requireds = %w( key name
                  base_url capability_url webhook_url installed_url )
  missings = requireds.select { |k| ! params.include?(k.to_sym) }
  if missings.length > 0
    raise "missing parameters: " + missings.join(%q{, })
  end

  capability = {
    key: params[:key],
    name: params[:name],
    description: params[:description] || params[:name],
    vendor: {
      name: params[:vendor_name] || DEFAULT_VENDOR_NAME,
      url: (params[:vendor_url] || DEFAULT_VENDOR_URL).to_s,
    },
    links: {
      self: params[:capability_url].to_s,
      homepage: (params[:homepage_url] || params[:base_url]).to_s,
    },
    capabilities: {
      webhook: [],
      hipchatApiConsumer: {
        scopes: %w( send_notification send_message admin_room view_group ),
        fromName: params[:sender_name] || params[:name],
      },
      installable: {
        allowGlobal: params.include?(:allow_global) ? params[:allow_global] : true,
        allowRoom: params.include?(:allow_room) ? params[:allow_room] : true,
        callbackUrl: params[:installed_url].to_s,
      }
    },
  }

  event_names = %w( room_notification room_topic_change
                    room_enter room_exit )
  webhook_url = params[:webhook_url].to_s

  capability[:capabilities][:webhook] = event_names.map { |key|
      {
        name: key,
        event: key,
        url: webhook_url,
      }
  }
  message_webhook = {
    name: 'room_message',
    event: 'room_message',
    url: webhook_url,
  }
  if params[:message_filter]
    message_webhook[:pattern] = params[:message_filter].to_s
  end
  capability[:capabilities][:webhook] << message_webhook

  if params[:avatar]
    capability[:capabilities][:hipchatApiConsumer][:avatar] = params[:avatar]
  end

  capability
end

Private Instance Methods

create_capability(params) click to toggle source

Build capability object. @param [Hash] params @option params [String] :key Identical key for integration @option params [String] :name integration name @option params [String] :base_url Base URL for integration @option params [String] :capability_url URL for capability @option params [String] :webhook_url URL for event webhook @option params [String] :installed_url URL for installed / uninstalled event webhook @option params [String] :description (same as :name) integration description (optional) @option params [String] :vendor_name (same as :name) Vendor name (optional) @option params [String] :vendor_url (same as :base_url) Vendor URL (optional) @option params [String] :homepage_url (same as :base_url) Homepage (optional) @option params [String] :sender_name (same as :name) Name of notification sender (optional) @option params [String] :avatar Url of avatar image (optional) @option params [String] :allow_global (true) Allow global installation (optional) @option params [String] :allow_room (true) Allow room installation (optional) @option params [String] :message_filter Room message filter regexp (optional)

# File lib/hiptail/util.rb, line 23
def create_capability(params)
  requireds = %w( key name
                  base_url capability_url webhook_url installed_url )
  missings = requireds.select { |k| ! params.include?(k.to_sym) }
  if missings.length > 0
    raise "missing parameters: " + missings.join(%q{, })
  end

  capability = {
    key: params[:key],
    name: params[:name],
    description: params[:description] || params[:name],
    vendor: {
      name: params[:vendor_name] || DEFAULT_VENDOR_NAME,
      url: (params[:vendor_url] || DEFAULT_VENDOR_URL).to_s,
    },
    links: {
      self: params[:capability_url].to_s,
      homepage: (params[:homepage_url] || params[:base_url]).to_s,
    },
    capabilities: {
      webhook: [],
      hipchatApiConsumer: {
        scopes: %w( send_notification send_message admin_room view_group ),
        fromName: params[:sender_name] || params[:name],
      },
      installable: {
        allowGlobal: params.include?(:allow_global) ? params[:allow_global] : true,
        allowRoom: params.include?(:allow_room) ? params[:allow_room] : true,
        callbackUrl: params[:installed_url].to_s,
      }
    },
  }

  event_names = %w( room_notification room_topic_change
                    room_enter room_exit )
  webhook_url = params[:webhook_url].to_s

  capability[:capabilities][:webhook] = event_names.map { |key|
      {
        name: key,
        event: key,
        url: webhook_url,
      }
  }
  message_webhook = {
    name: 'room_message',
    event: 'room_message',
    url: webhook_url,
  }
  if params[:message_filter]
    message_webhook[:pattern] = params[:message_filter].to_s
  end
  capability[:capabilities][:webhook] << message_webhook

  if params[:avatar]
    capability[:capabilities][:hipchatApiConsumer][:avatar] = params[:avatar]
  end

  capability
end