On Github ryoe / upstate-ruby-lita-talk
A number of companies that are not world famous. (Yet?)
Currently, Clown Shoes Wrangler at RaiseMore.
Love 'em or hate 'em, you can't avoid 'em
$ lita new
create lita
create lita/Gemfile
create lita/lita_config.rb
:-D
Lita.configure do |config| # The name your robot will use. config.robot.name = "Johnny Five" end:-D
Lita.configure do |config| config.robot.adapter = :slack config.adapters.slack.token = "my-token" end
source "https://rubygems.org" gem "lita" gem "lita-slack"This example is Slack. There are several other config options, so always consult the docs for your chosen adapter. Add the gem, bundle install and lita start!
module Lita
module Handlers
class Ping < Handler
route(/ping/, :pong,
help: { "ping" => "replies back with PONG" })
def pong response
response.reply "PONG"
end
Lita.register_handler(self)
end
end
end
require './handlers/ping.rb' Lita.configure do |config| # my config end:-D
module Lita
module Handlers
class Ping < Handler
route(/ping/, :pong,
command: false, # defaults false
help: { "ping" => "replies back with PONG" })
def pong response
response.reply "PONG"
end
Lita.register_handler(self)
end
end
end
:-D
module Lita
module Handlers
class Gnip < Handler
route(/gnip/, :gnop,
command: true, # "respond"
help: { "gnip" => "replies back with GNOP" })
def gnop response
response.reply "GNOP"
end
Lita.register_handler(self)
end
end
end
require './handlers/gnip.rb' # the rest...command: true makes it "respond" only
Lita > I say ping PONG Lita > lita ping PONG
Lita > I say gnip Lita > lita gnip GNOP"Hear" is basically the honey badger! It don't care!
module Lita
module Handlers
class Helpers < Handler
route(/helper[s|z] (\d*){1}/i, :puts_helper, command: true)
def puts_helper response
puts "matches: #{response.matches}"
puts "match_data: #{response.match_data}"
puts "args #{response.args}"
puts "message: #{response.message}"
puts "user: #{response.user}"
puts "extensions: #{response.extensions}"
response.reply_privately "Shh! This is private!"
response.reply "Hola!"
end
Lita.register_handler(self)
end
end
end
Lita > lita helpers 42
matches: [["42"]]
match_data: helpers 42
args ["42"]
message: #<:message:0x007fbb91398da8>
user: #<:user:0x007fbb91a362a0>
extensions: {}
Shh! This is private!
Hola!
Lita > lita helpers 42 21
matches: [["42"]]
match_data: helpers 42
args ["42", "21"]
message: #<:message:0x007fd06c333dc8>
user: #<:user:0x007fd06c34a1e0>
extensions: {}
Shh! This is private!
Hola!
module Lita
module Handlers
class Stars < Handler
route(/star[s|z] (\d*){1}/i, :star_rating, command: true,
help: { "stars <num>" => "replies with your star rating" })
def star_rating response
starz = response.args.first.to_i
if starz > 3
response.reply "Wow! #{starz} stars!\nYou must be an internationally recognized expert!"
else
response.reply "You are not your star count! We <3 you!"
end
end
Lita.register_handler(self)
end
end
end
Lita > lita stars 2 You are not your star count! We <3 you! Lita > lita stars 4 Wow! 4 stars! You must be an internationally recognized expert!:-D
module Lita
module Handlers
class Destroyer < Handler
route(/destroy everything/, :destroy_it, command: true,
restrict_to: [:authorized_destroyers])
def destroy_it response
response.reply "Sweet! Let's break stuff!"
end
Lita.register_handler(self)
end
end
end
For this work, you'll have to configure "Admins" in lita_config.rb.
Then admins can add users to groups.
Lita.configure do |config| # add adapter-specific ids config.robot.admins = ["42", "21"] end
Lita > lita auth add Michelle to authorized_destroyers Michelle was added to authorized_destroyers Lita > lita auth remove Michelle to authorized_destroyers Michelle was removed to authorized_destroyers
module Lita
module Handlers
class Nerdbeers < Handler
route(/nerdbeers/i, :nerdbeers, command: true,
help: { "nerdbeers" => "replies with current nerdbeers agenda" })
def nerdbeers response
http_response = http.get "http://nerdbeers.com/api/"
agenda = MultiJson.load http_response.body
message = []
agenda['pairings'].each {|a|
message.push "Pairing ##{a['id']} => Topic: #{a['topic']} Beer: #{a['beer']}"
}
response.reply message.join "\n"
end
Lita.register_handler(self)
end
end
end
class var http is actually a Faraday::Connection. So anything you can do with Faraday, you can do here.
Lita > lita nerdbeers Pairing #1 => Topic: everything should be https Beer: coop f5 Pairing #2 => Topic: Google IO Beer: native amber Pairing #3 => Topic: home automation in 2016 Beer: goose island ipa
module Lita
module Handlers
class UpstateHttp
extend Lita::Handler::HTTPRouter
http.get "/upstate", :ruby
def ruby request, response
response.body << "Ruby"
end
Lita.register_handler(UpstateHttp)
end
end
end
What kind of ChatOps discussion can this be with a "pinger" route?
You don't have to inherit directly from Lita's Handler class.
Notice this time we're extending HTTPRouter "Mixin" style.
module Lita
module Handlers
class StarsHttp < Handler
http.get "/stars/:num", :star_rating
def star_rating request, response
starz = request.env["router.params"][:num].to_i
message = starz < 4 ? "You are not your star count! We <3 you!" :
"Wow! #{starz} stars!\nYou must be an internationally recognized expert!"
body = { starz: starz, message: message }
response.headers["Content-Type"] = "application/json"
response.write MultiJson.dump(body)
end
Lita.register_handler(self)
end
end
end
$ lita handler lita-openworks-status-handler
Do you want to test your plugin on Travis CI? ("yes" or "no", default is "no") no
Do you want to generate code coverage information with SimpleCov and Coveralls.io? ("yes" or "no", default is "no") no
create lita-openworks-status-handler/lib/lita/handlers/openworks_status_handler.rb
create lita-openworks-status-handler/lib/lita-openworks-status-handler.rb
create lita-openworks-status-handler/spec/lita/handlers/openworks_status_handler_spec.rb
create lita-openworks-status-handler/spec/spec_helper.rb
create lita-openworks-status-handler/locales/en.yml
create lita-openworks-status-handler/templates/.gitkeep
create lita-openworks-status-handler/Gemfile
create lita-openworks-status-handler/lita-openworks-status-handler.gemspec
create lita-openworks-status-handler/.gitignore
create lita-openworks-status-handler/Rakefile
create lita-openworks-status-handler/README.md
If you plan to release this plugin as open source software, consider adding a LICENSE file to the root of the repository.
Common open source software licenses can be found at http://choosealicense.com/.
Lita really encourages building handlers as RubyGems and testing with RSpec.
Here's what the lita handler generator produces.
Don't accidentally do this in your lita service project. :D
Sample Scriptshttps://github.com/ryoe/upstate-ruby-demo
Comments or Questions?@ryoe_ok on Twitterryoe on GitHub