huginn_slackbot_agent 0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/huginn_slackbot_agent.rb +4 -0
- data/lib/huginn_slackbot_agent/slackbot_agent.rb +65 -0
- data/spec/slackbot_agent_spec.rb +66 -0
- metadata +103 -0
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            SHA1:
         | 
| 3 | 
            +
              metadata.gz: 97e9d37fd5e6946b661d620cab4ec5c1c344974a
         | 
| 4 | 
            +
              data.tar.gz: 03ddc4cfcf4bf29ef0997ee1d093de6f4982f9d3
         | 
| 5 | 
            +
            SHA512:
         | 
| 6 | 
            +
              metadata.gz: b2a7a8cc8e18de2925a8ea26626b1744d5e39a383607f1142176e0f7a3517831c5949dd8b90619e1f7b631e0a5b3e7b03a24e5cbcbb41eabf13987a662112f29
         | 
| 7 | 
            +
              data.tar.gz: 7a2f99ad23f064905d9a8c4b76dd040942ef63ba37f2ebfb99655215f036b6b8c13b1a45379df8e028f345a59b6f9d95365677a480bd00cddd83a158fe22cda5
         | 
| @@ -0,0 +1,65 @@ | |
| 1 | 
            +
            require 'slack'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Agents
         | 
| 4 | 
            +
              class SlackbotAgent < Agent
         | 
| 5 | 
            +
                gem_dependency_check { defined?(Slack) }
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                cannot_be_scheduled!
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                description <<-MD
         | 
| 10 | 
            +
                  This agent instanciate a slack bot and send messages.
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  Generate a slack bot token [here](https://my.slack.com/services/new/bot), and put into a credential called `slack_bot_token`
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  To send messages, just fill the options as a documented [here](https://api.slack.com/methods/chat.postMessage)
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                  The bot needs to be in channel to send messages in it.
         | 
| 17 | 
            +
                MD
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                def default_options
         | 
| 20 | 
            +
                  {
         | 
| 21 | 
            +
                    'channel' => '#general',
         | 
| 22 | 
            +
                    'text' => 'It works',
         | 
| 23 | 
            +
                    'as_user' => true,
         | 
| 24 | 
            +
                    'attachments' => []
         | 
| 25 | 
            +
                  }
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                def validate_options
         | 
| 29 | 
            +
                  errors.add(:base, 'you need to specify the channel or user name') unless options['channel'].present?
         | 
| 30 | 
            +
                  errors.add(:base, 'you need to specify the text or attachments list') unless options['text'].present? || options['attachments'].any?
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                def working?
         | 
| 34 | 
            +
                  received_event_without_error?
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                def receive(incoming_events)
         | 
| 38 | 
            +
                  incoming_events.each do |event|
         | 
| 39 | 
            +
                    interpolate_with(event) do
         | 
| 40 | 
            +
                      options = {
         | 
| 41 | 
            +
                        channel: interpolated['channel'],
         | 
| 42 | 
            +
                        as_user: interpolated['as_user']
         | 
| 43 | 
            +
                      }
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                      options[:text] = interpolated['text'] if interpolated['text'].present?
         | 
| 46 | 
            +
                      options[:attachments] = interpolated['attachments'] if interpolated['attachments'].present? && interpolated['attachments'].any?
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                      client.chat_postMessage(options)
         | 
| 49 | 
            +
                    end
         | 
| 50 | 
            +
                  end
         | 
| 51 | 
            +
                end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                private
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                def client
         | 
| 56 | 
            +
                  return @client if @client.present?
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                  Slack.configure do |config|
         | 
| 59 | 
            +
                    config.token = credential('slack_bot_token')
         | 
| 60 | 
            +
                  end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                  @client = Slack::Web::Client.new
         | 
| 63 | 
            +
                end
         | 
| 64 | 
            +
              end
         | 
| 65 | 
            +
            end
         | 
| @@ -0,0 +1,66 @@ | |
| 1 | 
            +
            require 'rails_helper'
         | 
| 2 | 
            +
            require 'huginn_agent/spec_helper'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            describe Agents::SlackbotAgent do
         | 
| 5 | 
            +
              before(:each) do
         | 
| 6 | 
            +
                @valid_options = Agents::SlackbotAgent.new.default_options
         | 
| 7 | 
            +
                @checker = Agents::SlackbotAgent.new(:name => "SlackbotAgent", :options => @valid_options)
         | 
| 8 | 
            +
                @checker.user = users(:bob)
         | 
| 9 | 
            +
                @checker.save!
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                @event = Event.new
         | 
| 12 | 
            +
                @event.agent = agents(:bob_weather_agent)
         | 
| 13 | 
            +
                @event.payload = {
         | 
| 14 | 
            +
                  'somekey' => 'Somevalue',
         | 
| 15 | 
            +
                  'some_date' => 'May 23'
         | 
| 16 | 
            +
                }
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                @expected_token = 'abc123'
         | 
| 19 | 
            +
                @credential = UserCredential.create(
         | 
| 20 | 
            +
                  credential_name: 'slack_bot_token',
         | 
| 21 | 
            +
                  user: users(:bob),
         | 
| 22 | 
            +
                  credential_value: @expected_token,
         | 
| 23 | 
            +
                  mode: 'text'
         | 
| 24 | 
            +
                )
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                @sent_requests = Array.new
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                stub_request(:post, 'https://slack.com/api/chat.postMessage').to_return do |request|
         | 
| 29 | 
            +
                  response_body = {
         | 
| 30 | 
            +
                    ok: true,
         | 
| 31 | 
            +
                    channel: 'G694SPM35',
         | 
| 32 | 
            +
                    ts: '1507236820.000421',
         | 
| 33 | 
            +
                    message: {
         | 
| 34 | 
            +
                      type: 'message',
         | 
| 35 | 
            +
                      user: 'U0CEL68F3',
         | 
| 36 | 
            +
                      text: 'teste',
         | 
| 37 | 
            +
                      bot_id: 'B349SNYN9',
         | 
| 38 | 
            +
                      ts: '1507236820.000421'
         | 
| 39 | 
            +
                    }
         | 
| 40 | 
            +
                  }
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  @sent_requests << request
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                  { status: 200, body: ActiveSupport::JSON.encode(response_body), headers: { "Content-type" => "application/json" } }
         | 
| 45 | 
            +
                end
         | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
              describe '#working?' do
         | 
| 49 | 
            +
                it 'checks if events have error' do
         | 
| 50 | 
            +
                  @checker.error 'something got wrong'
         | 
| 51 | 
            +
                  expect(@checker.reload).not_to be_working # There is a recent error
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
              end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
              describe '#receive' do
         | 
| 56 | 
            +
                it 'call slack api when receive an event' do
         | 
| 57 | 
            +
            	    @checker.receive([@event])
         | 
| 58 | 
            +
                  expect(@sent_requests.length).to eq(1)
         | 
| 59 | 
            +
            	  end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                it 'should include configured token into request' do
         | 
| 62 | 
            +
                  @checker.receive([@event])
         | 
| 63 | 
            +
                  expect(@sent_requests.first.body.include? "token=#{@expected_token}").to be_truthy
         | 
| 64 | 
            +
                end
         | 
| 65 | 
            +
              end
         | 
| 66 | 
            +
            end
         | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,103 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 | 
            +
            name: huginn_slackbot_agent
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: '0.1'
         | 
| 5 | 
            +
            platform: ruby
         | 
| 6 | 
            +
            authors:
         | 
| 7 | 
            +
            - Renato Menegasso
         | 
| 8 | 
            +
            autorequire: 
         | 
| 9 | 
            +
            bindir: bin
         | 
| 10 | 
            +
            cert_chain: []
         | 
| 11 | 
            +
            date: 2017-10-05 00:00:00.000000000 Z
         | 
| 12 | 
            +
            dependencies:
         | 
| 13 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            +
              name: bundler
         | 
| 15 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 | 
            +
                requirements:
         | 
| 17 | 
            +
                - - "~>"
         | 
| 18 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            +
                    version: '1.7'
         | 
| 20 | 
            +
              type: :development
         | 
| 21 | 
            +
              prerelease: false
         | 
| 22 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 | 
            +
                requirements:
         | 
| 24 | 
            +
                - - "~>"
         | 
| 25 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            +
                    version: '1.7'
         | 
| 27 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            +
              name: rake
         | 
| 29 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 | 
            +
                requirements:
         | 
| 31 | 
            +
                - - "~>"
         | 
| 32 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            +
                    version: '10.0'
         | 
| 34 | 
            +
              type: :development
         | 
| 35 | 
            +
              prerelease: false
         | 
| 36 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 | 
            +
                requirements:
         | 
| 38 | 
            +
                - - "~>"
         | 
| 39 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            +
                    version: '10.0'
         | 
| 41 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            +
              name: huginn_agent
         | 
| 43 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 | 
            +
                requirements:
         | 
| 45 | 
            +
                - - ">="
         | 
| 46 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            +
                    version: '0'
         | 
| 48 | 
            +
              type: :runtime
         | 
| 49 | 
            +
              prerelease: false
         | 
| 50 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 | 
            +
                requirements:
         | 
| 52 | 
            +
                - - ">="
         | 
| 53 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            +
                    version: '0'
         | 
| 55 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 56 | 
            +
              name: slack-ruby-client
         | 
| 57 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 | 
            +
                requirements:
         | 
| 59 | 
            +
                - - ">="
         | 
| 60 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            +
                    version: '0'
         | 
| 62 | 
            +
              type: :runtime
         | 
| 63 | 
            +
              prerelease: false
         | 
| 64 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 | 
            +
                requirements:
         | 
| 66 | 
            +
                - - ">="
         | 
| 67 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            +
                    version: '0'
         | 
| 69 | 
            +
            description: 
         | 
| 70 | 
            +
            email:
         | 
| 71 | 
            +
            - renato.menegasso@bidu.com.br
         | 
| 72 | 
            +
            executables: []
         | 
| 73 | 
            +
            extensions: []
         | 
| 74 | 
            +
            extra_rdoc_files: []
         | 
| 75 | 
            +
            files:
         | 
| 76 | 
            +
            - lib/huginn_slackbot_agent.rb
         | 
| 77 | 
            +
            - lib/huginn_slackbot_agent/slackbot_agent.rb
         | 
| 78 | 
            +
            - spec/slackbot_agent_spec.rb
         | 
| 79 | 
            +
            homepage: https://github.com/Bidu/huginn_slackbot_agent
         | 
| 80 | 
            +
            licenses: []
         | 
| 81 | 
            +
            metadata: {}
         | 
| 82 | 
            +
            post_install_message: 
         | 
| 83 | 
            +
            rdoc_options: []
         | 
| 84 | 
            +
            require_paths:
         | 
| 85 | 
            +
            - lib
         | 
| 86 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 87 | 
            +
              requirements:
         | 
| 88 | 
            +
              - - ">="
         | 
| 89 | 
            +
                - !ruby/object:Gem::Version
         | 
| 90 | 
            +
                  version: '0'
         | 
| 91 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 92 | 
            +
              requirements:
         | 
| 93 | 
            +
              - - ">="
         | 
| 94 | 
            +
                - !ruby/object:Gem::Version
         | 
| 95 | 
            +
                  version: '0'
         | 
| 96 | 
            +
            requirements: []
         | 
| 97 | 
            +
            rubyforge_project: 
         | 
| 98 | 
            +
            rubygems_version: 2.5.1
         | 
| 99 | 
            +
            signing_key: 
         | 
| 100 | 
            +
            specification_version: 4
         | 
| 101 | 
            +
            summary: Huginn agent to send messages into slack as a bot.
         | 
| 102 | 
            +
            test_files:
         | 
| 103 | 
            +
            - spec/slackbot_agent_spec.rb
         |