Module: Janky::ChatService

Defined in:
lib/janky/chat_service.rb,
lib/janky/chat_service/mock.rb,
lib/janky/chat_service/slack.rb,
lib/janky/chat_service/hipchat.rb,
lib/janky/chat_service/campfire.rb

Defined Under Namespace

Classes: Campfire, HipChat, Mock, Room, Slack

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.adapterObject

Returns the value of attribute adapter.



25
26
27
# File 'lib/janky/chat_service.rb', line 25

def adapter
  @adapter
end

.default_room_nameObject

Returns the value of attribute default_room_name.



25
26
27
# File 'lib/janky/chat_service.rb', line 25

def default_room_name
  @default_room_name
end

Class Method Details

.adaptersObject

Registry of available chat implementations.



29
30
31
# File 'lib/janky/chat_service.rb', line 29

def self.adapters
  @adapters ||= {}
end

.default_room_idObject



33
34
35
# File 'lib/janky/chat_service.rb', line 33

def self.default_room_id
  room_id(default_room_name)
end

.enable_mock!Object

Enable mocking. Once enabled, messages are discarded.

Returns nothing.



87
88
89
# File 'lib/janky/chat_service.rb', line 87

def self.enable_mock!
  @adapter = Mock.new
end

.room_id(name) ⇒ Object

Get the ID of a room.

slug - the String name of the room.

Returns the room ID or nil for unknown rooms.



53
54
55
56
57
# File 'lib/janky/chat_service.rb', line 53

def self.room_id(name)
  if room = rooms.detect { |room| room.name == name }
    room.id
  end
end

.room_name(id) ⇒ Object

Get the name of a room given its ID.

id - the String room ID.

Returns the name as a String or nil when not found.



64
65
66
67
68
# File 'lib/janky/chat_service.rb', line 64

def self.room_name(id)
  if room = rooms.detect { |room| room.id.to_s == id.to_s }
    room.name
  end
end

.room_namesObject

Get a list of all rooms names.

Returns an Array of room name as Strings.



73
74
75
# File 'lib/janky/chat_service.rb', line 73

def self.room_names
  rooms.map { |room| room.name }.sort
end

.roomsObject

Memoized list of available rooms.

Returns an Array of Room objects.



80
81
82
# File 'lib/janky/chat_service.rb', line 80

def self.rooms
  adapter.rooms
end

.rooms=(value) ⇒ Object

Configure available rooms. Only available in mock mode.

value - Hash of room map (String ID => String name)

Returns nothing.



96
97
98
# File 'lib/janky/chat_service.rb', line 96

def self.rooms=(value)
  adapter.rooms = value
end

.setup(name, settings, default) ⇒ Object

Setup the adapter used to notify chat rooms of build status.

name - Service name as a string. settings - Service-specific setting hash. default - Name of the default chat room as a String.

Returns nothing.



12
13
14
15
16
17
18
19
20
21
22
# File 'lib/janky/chat_service.rb', line 12

def self.setup(name, settings, default)
  klass = adapters[name]

  if !klass
    raise Error, "Unknown chat service: #{name.inspect}. Available " \
      "services are #{adapters.keys.join(", ")}"
  end

  @adapter = klass.new(settings)
  @default_room_name = default
end

.speak(message, room_id, options = {}) ⇒ Object

Send a message to a Chat room.

message - The String message. room_id - The String room ID. options - Optional hash passed to the chat adapter.

Returns nothing.



44
45
46
# File 'lib/janky/chat_service.rb', line 44

def self.speak(message, room_id, options = {})
  adapter.speak(message, room_id, options)
end