hipchat 0.14.0 → 1.0.0
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 +4 -4
- data/README.textile +62 -6
- data/hipchat.gemspec +1 -0
- data/lib/hipchat.rb +39 -16
- data/lib/hipchat/api_version.rb +102 -0
- data/lib/hipchat/capistrano.rb +5 -131
- data/lib/hipchat/capistrano/tasks/hipchat.rake +111 -0
- data/lib/hipchat/capistrano2.rb +131 -0
- data/lib/hipchat/rails3_tasks.rb +3 -2
- data/lib/hipchat/version.rb +1 -1
- data/spec/hipchat_spec.rb +142 -42
- data/spec/shared_hipchat.rb +82 -0
- data/spec/spec_helper.rb +3 -0
- metadata +21 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: bb8eb196374b9fb0af86c10fd90d72cf2f394918
         | 
| 4 | 
            +
              data.tar.gz: da191a66ed2c5773b72c4be049f466615f141e26
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: ea2874650ffa2ebde7d816fe43fe83cecc1c8c91cef18046009aefc300eac473e375fbef4c888d085a1d9d0bc7f61d88e176db50ed711453efd4b7923756ce4f
         | 
| 7 | 
            +
              data.tar.gz: ca023bf579d6c705e25d429672fc27230ac6c3c23c2a4e197bd649c5a81951e0835b34a6801bd5b25e06839a82aba3ad344dcd4c4e21bffb1578152daf783717
         | 
    
        data/README.textile
    CHANGED
    
    | @@ -2,22 +2,25 @@ h1. HipChat Wrapper | |
| 2 2 |  | 
| 3 3 | 
             
            A very basic wrapper for the HipChat HTTP API.
         | 
| 4 4 |  | 
| 5 | 
            -
            h2.  | 
| 5 | 
            +
            h2. CI Status
         | 
| 6 6 |  | 
| 7 7 | 
             
            "!https://travis-ci.org/hipchat/hipchat-rb.png!":https://travis-ci.org/hipchat/hipchat-rb
         | 
| 8 | 
            +
            !https://coveralls.io/repos/hipchat/hipchat-rb/badge.png(Coverage Status)!:https://coveralls.io/r/hipchat/hipchat-rb
         | 
| 8 9 |  | 
| 9 10 | 
             
            h2. Requirements
         | 
| 10 11 | 
             
            * Ruby 1.9.3 or higher
         | 
| 11 | 
            -
            * HipChat Account,  | 
| 12 | 
            +
            * HipChat Account, sign up "here!":https://hipchat.com/
         | 
| 12 13 |  | 
| 13 | 
            -
             | 
| 14 | 
            +
            h1. Usage
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            h2. "API v1":https://www.hipchat.com/docs/api
         | 
| 14 17 |  | 
| 15 18 | 
             
            bc.. client = HipChat::Client.new(api_token)
         | 
| 16 19 | 
             
            # 'username' is the name for which the message will be presented as from
         | 
| 17 20 | 
             
            client['my room'].send('username', 'I talk')
         | 
| 18 21 |  | 
| 19 22 | 
             
            # Send notifications to users (default false)
         | 
| 20 | 
            -
            client['my room'].send('username', 'I quit!', :notify =>  | 
| 23 | 
            +
            client['my room'].send('username', 'I quit!', :notify => 1)
         | 
| 21 24 |  | 
| 22 25 | 
             
            # Color it red. or "yellow", "green", "purple", "random" (default "yellow")
         | 
| 23 26 | 
             
            client['my room'].send('username', 'Build failed!', :color => 'red')
         | 
| @@ -37,18 +40,52 @@ client['my room'].history() | |
| 37 40 | 
             
            # Get history for a date in time with a particular timezone (default is latest 75 messages, timezone default is 'UTC')
         | 
| 38 41 | 
             
            client['my room'].history(:date => '2010-11-19', :timezone => 'PST')
         | 
| 39 42 |  | 
| 43 | 
            +
            h2. "API v2":https://www.hipchat.com/docs/apiv2
         | 
| 44 | 
            +
             | 
| 45 | 
            +
            bc.. client = HipChat::Client.new(api_token, :api_version => 'v2')
         | 
| 46 | 
            +
            # 'username' is the name for which the message will be presented as from
         | 
| 47 | 
            +
            client['my room'].send('username', 'I talk')
         | 
| 48 | 
            +
             | 
| 49 | 
            +
            # Send notifications to users (default false)
         | 
| 50 | 
            +
            client['my room'].send('username', 'I quit!', :notify => true)
         | 
| 51 | 
            +
             | 
| 52 | 
            +
            # Color it red. or "yellow", "green", "purple", "random" (default "yellow")
         | 
| 53 | 
            +
            client['my room'].send('username', 'Build failed!', :color => 'red')
         | 
| 54 | 
            +
             | 
| 55 | 
            +
            # Have your message rendered as text in HipChat (see https://www.hipchat.com/docs/apiv2/method/send_room_notification)
         | 
| 56 | 
            +
            client['my room'].send('username', '@coworker Build faild!', :message_format => 'text')
         | 
| 57 | 
            +
             | 
| 58 | 
            +
            # Update the topic of a room in HipChat (see https://www.hipchat.com/docs/apiv2/method/set_topic)
         | 
| 59 | 
            +
            client['my room'].topic('Free Ice Cream in the kitchen')
         | 
| 60 | 
            +
             | 
| 61 | 
            +
            # Change the from field for a topic update (default "API")
         | 
| 62 | 
            +
            client['my room'].topic('Weekely sales: $10,000', :from => 'Sales Team')
         | 
| 63 | 
            +
             | 
| 64 | 
            +
            # Get history from a room
         | 
| 65 | 
            +
            client['my room'].history()
         | 
| 66 | 
            +
             | 
| 67 | 
            +
            # Get history for a date in time with a particular timezone (default is latest 75 messages, timezone default is 'UTC')
         | 
| 68 | 
            +
            client['my room'].history(:date => '2010-11-19', :timezone => 'PST')
         | 
| 40 69 |  | 
| 41 70 | 
             
            h2. Capistrano
         | 
| 42 71 |  | 
| 43 | 
            -
             | 
| 72 | 
            +
            *APIv1 ONLY, use APIv1 Key*
         | 
| 73 | 
            +
             | 
| 74 | 
            +
            Capfile
         | 
| 75 | 
            +
             | 
| 76 | 
            +
            bc. require 'hipchat/capistrano'
         | 
| 44 77 |  | 
| 78 | 
            +
            deploy.rb
         | 
| 79 | 
            +
             | 
| 80 | 
            +
            bc.. # Required
         | 
| 45 81 | 
             
            set :hipchat_token, "<your token>"
         | 
| 46 82 | 
             
            set :hipchat_room_name, "Your room" # If you pass an array such as ["room_a", "room_b"] you can send announcements to multiple rooms.
         | 
| 83 | 
            +
            # Optional
         | 
| 47 84 | 
             
            set :hipchat_announce, false # notify users
         | 
| 48 85 | 
             
            set :hipchat_color, 'yellow' #normal message color
         | 
| 49 86 | 
             
            set :hipchat_success_color, 'green' #finished deployment message color
         | 
| 50 87 | 
             
            set :hipchat_failed_color, 'red' #cancelled deployment message color
         | 
| 51 | 
            -
            set :hipchat_message_format, ' | 
| 88 | 
            +
            set :hipchat_message_format, 'html' # Sets the deployment message format, see https://www.hipchat.com/docs/api/method/rooms/message
         | 
| 52 89 |  | 
| 53 90 | 
             
            h3. Who did it?
         | 
| 54 91 |  | 
| @@ -61,6 +98,8 @@ To determine the user that is currently running the deploy, the capistrano tasks | |
| 61 98 |  | 
| 62 99 | 
             
            h2. Rails 3 Rake Task
         | 
| 63 100 |  | 
| 101 | 
            +
            *APIv1 ONLY, use APIv1 Key*
         | 
| 102 | 
            +
             | 
| 64 103 | 
             
            Send a message using a rake task:
         | 
| 65 104 |  | 
| 66 105 | 
             
            bc. rake hipchat:send["hello world"]
         | 
| @@ -93,6 +132,23 @@ bc.. on_app_master do | |
| 93 132 | 
             
              run "cd #{release_path} && bundle exec rake hipchat:send MESSAGE='#{message}'"
         | 
| 94 133 | 
             
            end
         | 
| 95 134 |  | 
| 135 | 
            +
            h2. Chef Handler
         | 
| 136 | 
            +
             | 
| 137 | 
            +
            *APIv1 ONLY, use APIv1 Key*
         | 
| 138 | 
            +
             | 
| 139 | 
            +
            Report on Chef runs. Within a Recipe:
         | 
| 140 | 
            +
             | 
| 141 | 
            +
            bc.. include_recipe 'chef_handler'
         | 
| 142 | 
            +
              
         | 
| 143 | 
            +
            gem_package 'hipchat'
         | 
| 144 | 
            +
             | 
| 145 | 
            +
            chef_handler 'HipChat::NotifyRoom' do
         | 
| 146 | 
            +
              action :enable
         | 
| 147 | 
            +
              arguments ['API_KEY', 'HIPCHAT_ROOM']
         | 
| 148 | 
            +
              source File.join(Gem.all_load_paths.grep(/hipchat/).first,
         | 
| 149 | 
            +
                               'hipchat', 'chef.rb')
         | 
| 150 | 
            +
            end
         | 
| 151 | 
            +
             | 
| 96 152 | 
             
            h2. Copyright
         | 
| 97 153 |  | 
| 98 154 | 
             
            Copyright (c) 2012 Atlassian. See LICENSE for details.
         | 
    
        data/hipchat.gemspec
    CHANGED
    
    
    
        data/lib/hipchat.rb
    CHANGED
    
    | @@ -3,6 +3,7 @@ require 'ostruct' | |
| 3 3 |  | 
| 4 4 | 
             
            require 'hipchat/railtie' if defined?(Rails::Railtie)
         | 
| 5 5 | 
             
            require "hipchat/version"
         | 
| 6 | 
            +
            require 'hipchat/api_version'
         | 
| 6 7 |  | 
| 7 8 | 
             
            module HipChat
         | 
| 8 9 | 
             
              class UnknownRoom         < StandardError; end
         | 
| @@ -13,23 +14,23 @@ module HipChat | |
| 13 14 | 
             
              class Client
         | 
| 14 15 | 
             
                include HTTParty
         | 
| 15 16 |  | 
| 16 | 
            -
                base_uri 'https://api.hipchat.com/v1/rooms'
         | 
| 17 17 | 
             
                format :json
         | 
| 18 18 |  | 
| 19 19 | 
             
                def initialize(token, options={})
         | 
| 20 20 | 
             
                  @token = token
         | 
| 21 | 
            -
             | 
| 21 | 
            +
                  @api_version = options[:api_version]
         | 
| 22 | 
            +
                  @api = HipChat::ApiVersion::Client.new(@api_version)
         | 
| 23 | 
            +
                  self.class.base_uri(@api.base_uri)
         | 
| 22 24 | 
             
                  http_proxy = options[:http_proxy] || ENV['http_proxy']
         | 
| 23 25 | 
             
                  setup_proxy(http_proxy) if http_proxy
         | 
| 24 26 | 
             
                end
         | 
| 25 27 |  | 
| 26 28 | 
             
                def rooms
         | 
| 27 | 
            -
                  @rooms ||=  | 
| 28 | 
            -
                    map { |r| Room.new(@token, r) }
         | 
| 29 | 
            +
                  @rooms ||= _rooms
         | 
| 29 30 | 
             
                end
         | 
| 30 31 |  | 
| 31 32 | 
             
                def [](name)
         | 
| 32 | 
            -
                  Room.new(@token, :room_id => name)
         | 
| 33 | 
            +
                  Room.new(@token, :room_id => name, :api_version => @api_version)
         | 
| 33 34 | 
             
                end
         | 
| 34 35 |  | 
| 35 36 | 
             
                private
         | 
| @@ -41,16 +42,35 @@ module HipChat | |
| 41 42 | 
             
                  HipChat::Room.http_proxy(proxy_url.host, proxy_url.port,
         | 
| 42 43 | 
             
                                           proxy_url.user, proxy_url.password)
         | 
| 43 44 | 
             
                end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                def _rooms
         | 
| 47 | 
            +
                  response = self.class.get(@api.rooms_config[:url],
         | 
| 48 | 
            +
                    :query => {
         | 
| 49 | 
            +
                      :auth_token => @token
         | 
| 50 | 
            +
                    }, 
         | 
| 51 | 
            +
                    :headers => @api.headers
         | 
| 52 | 
            +
                  )
         | 
| 53 | 
            +
                  case response.code
         | 
| 54 | 
            +
                  when 200
         | 
| 55 | 
            +
                    response[@api.rooms_config[:data_key]].map do |r|
         | 
| 56 | 
            +
                      Room.new(@token, r.merge(:api_version => @api_version))
         | 
| 57 | 
            +
                    end
         | 
| 58 | 
            +
                  else
         | 
| 59 | 
            +
                    raise UnknownResponseCode, "Unexpected #{response.code} for room `#{room_id}'"
         | 
| 60 | 
            +
                  end
         | 
| 61 | 
            +
                end
         | 
| 44 62 | 
             
              end
         | 
| 45 63 |  | 
| 46 64 | 
             
              class Room < OpenStruct
         | 
| 47 65 | 
             
                include HTTParty
         | 
| 48 66 |  | 
| 49 | 
            -
                 | 
| 67 | 
            +
                format   :json
         | 
| 50 68 |  | 
| 51 69 | 
             
                def initialize(token, params)
         | 
| 52 70 | 
             
                  @token = token
         | 
| 53 | 
            -
             | 
| 71 | 
            +
                  @api = HipChat::ApiVersion::Room.new(params[:room_id],
         | 
| 72 | 
            +
                                                       params.delete(:api_version))
         | 
| 73 | 
            +
                  self.class.base_uri(@api.base_uri)
         | 
| 54 74 | 
             
                  super(params)
         | 
| 55 75 | 
             
                end
         | 
| 56 76 |  | 
| @@ -86,7 +106,7 @@ module HipChat | |
| 86 106 |  | 
| 87 107 | 
             
                  options = { :color => 'yellow', :notify => false }.merge options
         | 
| 88 108 |  | 
| 89 | 
            -
                  response = self.class.post( | 
| 109 | 
            +
                  response = self.class.post(@api.send_config[:url],
         | 
| 90 110 | 
             
                    :query => { :auth_token => @token },
         | 
| 91 111 | 
             
                    :body  => {
         | 
| 92 112 | 
             
                      :room_id        => room_id,
         | 
| @@ -94,12 +114,13 @@ module HipChat | |
| 94 114 | 
             
                      :message        => message,
         | 
| 95 115 | 
             
                      :message_format => options[:message_format] || 'html',
         | 
| 96 116 | 
             
                      :color          => options[:color],
         | 
| 97 | 
            -
                      :notify         => options[:notify] | 
| 98 | 
            -
                    }
         | 
| 117 | 
            +
                      :notify         => @api.bool_val(options[:notify])
         | 
| 118 | 
            +
                    }.send(@api.send_config[:body_format]),
         | 
| 119 | 
            +
                    :headers => @api.headers
         | 
| 99 120 | 
             
                  )
         | 
| 100 121 |  | 
| 101 122 | 
             
                  case response.code
         | 
| 102 | 
            -
                  when 200; true
         | 
| 123 | 
            +
                  when 200, 204; true
         | 
| 103 124 | 
             
                  when 404
         | 
| 104 125 | 
             
                    raise UnknownRoom,  "Unknown room: `#{room_id}'"
         | 
| 105 126 | 
             
                  when 401
         | 
| @@ -124,17 +145,18 @@ module HipChat | |
| 124 145 |  | 
| 125 146 | 
             
                  options = { :from => 'API' }.merge options
         | 
| 126 147 |  | 
| 127 | 
            -
                  response = self.class. | 
| 148 | 
            +
                  response = self.class.send(@api.topic_config[:method], @api.topic_config[:url],
         | 
| 128 149 | 
             
                    :query => { :auth_token => @token },
         | 
| 129 150 | 
             
                    :body  => {
         | 
| 130 151 | 
             
                      :room_id        => room_id,
         | 
| 131 152 | 
             
                      :from           => options[:from],
         | 
| 132 153 | 
             
                      :topic          => new_topic
         | 
| 133 | 
            -
                    }
         | 
| 154 | 
            +
                    }.send(@api.topic_config[:body_format]),
         | 
| 155 | 
            +
                    :headers => @api.headers
         | 
| 134 156 | 
             
                  )
         | 
| 135 157 |  | 
| 136 158 | 
             
                  case response.code
         | 
| 137 | 
            -
                  when 200; true
         | 
| 159 | 
            +
                  when 204,200; true
         | 
| 138 160 | 
             
                  when 404
         | 
| 139 161 | 
             
                    raise UnknownRoom,  "Unknown room: `#{room_id}'"
         | 
| 140 162 | 
             
                  when 401
         | 
| @@ -163,14 +185,15 @@ module HipChat | |
| 163 185 |  | 
| 164 186 | 
             
                  options = { :date => 'recent', :timezone => 'UTC', :format => 'JSON' }.merge options
         | 
| 165 187 |  | 
| 166 | 
            -
                  response = self.class.get( | 
| 188 | 
            +
                  response = self.class.get(@api.history_config[:url],
         | 
| 167 189 | 
             
                    :query => {
         | 
| 168 190 | 
             
                      :room_id    => room_id,
         | 
| 169 191 | 
             
                      :date       => options[:date],
         | 
| 170 192 | 
             
                      :timezone   => options[:timezone],
         | 
| 171 193 | 
             
                      :format     => options[:format],
         | 
| 172 194 | 
             
                      :auth_token => @token,
         | 
| 173 | 
            -
                    }
         | 
| 195 | 
            +
                    },
         | 
| 196 | 
            +
                    :headers => @api.headers
         | 
| 174 197 | 
             
                  )
         | 
| 175 198 |  | 
| 176 199 | 
             
                  case response.code
         | 
| @@ -0,0 +1,102 @@ | |
| 1 | 
            +
            module HipChat
         | 
| 2 | 
            +
              class ApiVersion
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                class Client
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                  def initialize(version = 'v1')
         | 
| 7 | 
            +
                    @version = !version.nil? ? version : 'v1'
         | 
| 8 | 
            +
                    if @version.eql?('v1')
         | 
| 9 | 
            +
                      @base_uri = "https://api.hipchat.com/v1/rooms"
         | 
| 10 | 
            +
                      @headers = {'Accept' => 'application/json',
         | 
| 11 | 
            +
                         'Content-Type' => 'application/x-www-form-urlencoded'}
         | 
| 12 | 
            +
                    else
         | 
| 13 | 
            +
                      @base_uri = "https://api.hipchat.com/v2/room"
         | 
| 14 | 
            +
                      @headers = {'Accept' => 'application/json',
         | 
| 15 | 
            +
                         'Content-Type' => 'application/json'}
         | 
| 16 | 
            +
                    end
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  attr_reader :version, :base_uri, :headers
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  def rooms_config
         | 
| 22 | 
            +
                    {
         | 
| 23 | 
            +
                      'v1' => {
         | 
| 24 | 
            +
                        :url => '/list',
         | 
| 25 | 
            +
                        :data_key => 'rooms'
         | 
| 26 | 
            +
                      },
         | 
| 27 | 
            +
                      'v2' => {
         | 
| 28 | 
            +
                        :url => '/room',
         | 
| 29 | 
            +
                        :data_key => 'items'
         | 
| 30 | 
            +
                      }
         | 
| 31 | 
            +
                    }[version]
         | 
| 32 | 
            +
                  end
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                class Room
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                  def initialize(room_id, version = 'v1')
         | 
| 38 | 
            +
                    @room_id = room_id
         | 
| 39 | 
            +
                    @version = !version.nil? ? version : 'v1'
         | 
| 40 | 
            +
                    if @version.eql?('v1')
         | 
| 41 | 
            +
                      @base_uri = "https://api.hipchat.com/v1/rooms"
         | 
| 42 | 
            +
                      @headers = {'Accept' => 'application/json',
         | 
| 43 | 
            +
                         'Content-Type' => 'application/x-www-form-urlencoded'}
         | 
| 44 | 
            +
                    else
         | 
| 45 | 
            +
                      @base_uri = "https://api.hipchat.com/v2/room"
         | 
| 46 | 
            +
                      @headers = {'Accept' => 'application/json',
         | 
| 47 | 
            +
                         'Content-Type' => 'application/json'}
         | 
| 48 | 
            +
                    end
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                  attr_reader :version, :base_uri, :room_id, :headers
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                  def send_config
         | 
| 54 | 
            +
                    {
         | 
| 55 | 
            +
                      'v1' => {
         | 
| 56 | 
            +
                        :url => "/message",
         | 
| 57 | 
            +
                        :body_format => :to_hash
         | 
| 58 | 
            +
                      },
         | 
| 59 | 
            +
                      'v2' => {
         | 
| 60 | 
            +
                        :url => "/#{room_id}/notification",
         | 
| 61 | 
            +
                        :body_format => :to_json
         | 
| 62 | 
            +
                      }
         | 
| 63 | 
            +
                    }[version]
         | 
| 64 | 
            +
                  end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                  def topic_config
         | 
| 67 | 
            +
                    {
         | 
| 68 | 
            +
                      'v1' => {
         | 
| 69 | 
            +
                        :url => '/topic',
         | 
| 70 | 
            +
                        :method => :post,
         | 
| 71 | 
            +
                        :body_format => :to_hash
         | 
| 72 | 
            +
                      },
         | 
| 73 | 
            +
                      'v2' => {
         | 
| 74 | 
            +
                        :url => "/#{room_id}/topic",
         | 
| 75 | 
            +
                        :method => :put,
         | 
| 76 | 
            +
                        :body_format => :to_json
         | 
| 77 | 
            +
                      }
         | 
| 78 | 
            +
                    }[version]
         | 
| 79 | 
            +
                  end
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                  def history_config
         | 
| 82 | 
            +
                    {
         | 
| 83 | 
            +
                      'v1' => {
         | 
| 84 | 
            +
                        :url => '/history'
         | 
| 85 | 
            +
                      },
         | 
| 86 | 
            +
                      'v2' => {
         | 
| 87 | 
            +
                        :url => "/#{room_id}/history"
         | 
| 88 | 
            +
                      }
         | 
| 89 | 
            +
                    }[version]
         | 
| 90 | 
            +
                  end
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                  def bool_val(opt)
         | 
| 93 | 
            +
                    if version.eql?('v1')
         | 
| 94 | 
            +
                      opt ? 1 : 0
         | 
| 95 | 
            +
                    else
         | 
| 96 | 
            +
                      opt
         | 
| 97 | 
            +
                    end
         | 
| 98 | 
            +
                  end
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                end
         | 
| 101 | 
            +
              end
         | 
| 102 | 
            +
            end
         | 
    
        data/lib/hipchat/capistrano.rb
    CHANGED
    
    | @@ -1,131 +1,5 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
             | 
| 3 | 
            -
             | 
| 4 | 
            -
               | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
              namespace :hipchat do
         | 
| 8 | 
            -
                task :trigger_notification do
         | 
| 9 | 
            -
                  set :hipchat_send_notification, true if !dry_run
         | 
| 10 | 
            -
                end
         | 
| 11 | 
            -
             | 
| 12 | 
            -
                task :configure_for_migrations do
         | 
| 13 | 
            -
                  set :hipchat_with_migrations, ' (with migrations)'
         | 
| 14 | 
            -
                end
         | 
| 15 | 
            -
             | 
| 16 | 
            -
                task :notify_deploy_started do
         | 
| 17 | 
            -
                  if hipchat_send_notification
         | 
| 18 | 
            -
             | 
| 19 | 
            -
                    environment_string = env
         | 
| 20 | 
            -
                    if self.respond_to?(:stage)
         | 
| 21 | 
            -
                      environment_string = "#{stage} (#{env})"
         | 
| 22 | 
            -
                    end
         | 
| 23 | 
            -
             | 
| 24 | 
            -
                    on_rollback do
         | 
| 25 | 
            -
                      send_options.merge!(:color => failed_message_color)
         | 
| 26 | 
            -
                      send("#{human} cancelled deployment of #{deployment_name} to #{environment_string}.", send_options)
         | 
| 27 | 
            -
                    end
         | 
| 28 | 
            -
             | 
| 29 | 
            -
                    send("#{human} is deploying #{deployment_name} to #{environment_string}#{fetch(:hipchat_with_migrations, '')}.", send_options)
         | 
| 30 | 
            -
                  end
         | 
| 31 | 
            -
                end
         | 
| 32 | 
            -
             | 
| 33 | 
            -
                task :notify_deploy_finished do
         | 
| 34 | 
            -
                  if hipchat_send_notification
         | 
| 35 | 
            -
                    send_options.merge!(:color => success_message_color)
         | 
| 36 | 
            -
             | 
| 37 | 
            -
                    environment_string = env
         | 
| 38 | 
            -
                    if self.respond_to?(:stage)
         | 
| 39 | 
            -
                      environment_string = "#{stage} (#{env})"
         | 
| 40 | 
            -
                    end
         | 
| 41 | 
            -
             | 
| 42 | 
            -
                    send("#{human} finished deploying #{deployment_name} to #{environment_string}#{fetch(:hipchat_with_migrations, '')}.", send_options)
         | 
| 43 | 
            -
                  end
         | 
| 44 | 
            -
                end
         | 
| 45 | 
            -
             | 
| 46 | 
            -
                def send_options
         | 
| 47 | 
            -
                  return @send_options if defined?(@send_options)
         | 
| 48 | 
            -
                  @send_options = message_format ? {:message_format => message_format } : {}
         | 
| 49 | 
            -
                  @send_options.merge!(:notify => message_notification)
         | 
| 50 | 
            -
                  @send_options.merge!(:color => message_color)
         | 
| 51 | 
            -
                  @send_options
         | 
| 52 | 
            -
                end
         | 
| 53 | 
            -
             | 
| 54 | 
            -
                def send(message, options)
         | 
| 55 | 
            -
                  set :hipchat_client, HipChat::Client.new(hipchat_token) if fetch(:hipchat_client, nil).nil?
         | 
| 56 | 
            -
             | 
| 57 | 
            -
                  if hipchat_room_name.is_a?(String)
         | 
| 58 | 
            -
                    rooms = [hipchat_room_name]
         | 
| 59 | 
            -
                  elsif hipchat_room_name.is_a?(Symbol)
         | 
| 60 | 
            -
                    rooms = [hipchat_room_name.to_s]
         | 
| 61 | 
            -
                  else
         | 
| 62 | 
            -
                    rooms = hipchat_room_name
         | 
| 63 | 
            -
                  end
         | 
| 64 | 
            -
             | 
| 65 | 
            -
                  rooms.each { |room|
         | 
| 66 | 
            -
                    begin
         | 
| 67 | 
            -
                      hipchat_client[room].send(deploy_user, message, options)
         | 
| 68 | 
            -
                    rescue => e
         | 
| 69 | 
            -
                      puts e.message
         | 
| 70 | 
            -
                      puts e.backtrace
         | 
| 71 | 
            -
                    end
         | 
| 72 | 
            -
                  }
         | 
| 73 | 
            -
                end
         | 
| 74 | 
            -
             | 
| 75 | 
            -
                def deployment_name
         | 
| 76 | 
            -
                  if fetch(:branch, nil)
         | 
| 77 | 
            -
                    name = "#{application}/#{branch}"
         | 
| 78 | 
            -
                    name += " (revision #{real_revision[0..7]})" if real_revision
         | 
| 79 | 
            -
                    name
         | 
| 80 | 
            -
                  else
         | 
| 81 | 
            -
                    application
         | 
| 82 | 
            -
                  end
         | 
| 83 | 
            -
                end
         | 
| 84 | 
            -
             | 
| 85 | 
            -
                def message_color
         | 
| 86 | 
            -
                  fetch(:hipchat_color, nil)
         | 
| 87 | 
            -
                end
         | 
| 88 | 
            -
             | 
| 89 | 
            -
                def success_message_color
         | 
| 90 | 
            -
                  fetch(:hipchat_success_color, "green")
         | 
| 91 | 
            -
                end
         | 
| 92 | 
            -
             | 
| 93 | 
            -
                def failed_message_color
         | 
| 94 | 
            -
                  fetch(:hipchat_failed_color, "red")
         | 
| 95 | 
            -
                end
         | 
| 96 | 
            -
             | 
| 97 | 
            -
                def message_notification
         | 
| 98 | 
            -
                  fetch(:hipchat_announce, false)
         | 
| 99 | 
            -
                end
         | 
| 100 | 
            -
             | 
| 101 | 
            -
                def message_format
         | 
| 102 | 
            -
                  fetch(:hipchat_message_format, "html")
         | 
| 103 | 
            -
                end
         | 
| 104 | 
            -
             | 
| 105 | 
            -
                def deploy_user
         | 
| 106 | 
            -
                  fetch(:hipchat_deploy_user, "Deploy")
         | 
| 107 | 
            -
                end
         | 
| 108 | 
            -
             | 
| 109 | 
            -
                def human
         | 
| 110 | 
            -
                  ENV['HIPCHAT_USER'] ||
         | 
| 111 | 
            -
                    fetch(:hipchat_human,
         | 
| 112 | 
            -
                          if (u = %x{git config user.name}.strip) != ""
         | 
| 113 | 
            -
                            u
         | 
| 114 | 
            -
                          elsif (u = ENV['USER']) != ""
         | 
| 115 | 
            -
                            u
         | 
| 116 | 
            -
                          else
         | 
| 117 | 
            -
                            "Someone"
         | 
| 118 | 
            -
                          end)
         | 
| 119 | 
            -
                end
         | 
| 120 | 
            -
             | 
| 121 | 
            -
                def env
         | 
| 122 | 
            -
                  fetch(:hipchat_env, fetch(:rack_env, fetch(:rails_env, "production")))
         | 
| 123 | 
            -
                end
         | 
| 124 | 
            -
              end
         | 
| 125 | 
            -
             | 
| 126 | 
            -
              before "deploy", "hipchat:trigger_notification"
         | 
| 127 | 
            -
              before "deploy:migrations", "hipchat:trigger_notification", "hipchat:configure_for_migrations"
         | 
| 128 | 
            -
              before "deploy:update_code", "hipchat:notify_deploy_started"
         | 
| 129 | 
            -
              after  "deploy", "hipchat:notify_deploy_finished"
         | 
| 130 | 
            -
              after  "deploy:migrations", "hipchat:notify_deploy_finished"
         | 
| 131 | 
            -
            end
         | 
| 1 | 
            +
            if defined?(Capistrano::VERSION) && Gem::Version.new(Capistrano::VERSION).release >= Gem::Version.new('3.0.0')
         | 
| 2 | 
            +
              load File.expand_path('capistrano/tasks/hipchat.rake', File.dirname(__FILE__))
         | 
| 3 | 
            +
            else
         | 
| 4 | 
            +
              require_relative 'capistrano2'
         | 
| 5 | 
            +
            end
         | 
| @@ -0,0 +1,111 @@ | |
| 1 | 
            +
            require 'hipchat'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            namespace :hipchat do
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              task :notify_deploy_started do
         | 
| 6 | 
            +
                send_message("#{human} is deploying #{deployment_name} to #{environment_name}.", send_options)
         | 
| 7 | 
            +
              end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              task :notify_deploy_finished do
         | 
| 10 | 
            +
                send_options.merge!(:color => success_message_color)
         | 
| 11 | 
            +
                send_message("#{human} finished deploying #{deployment_name} to #{environment_name}.", send_options)
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              task :notify_deploy_reverted do
         | 
| 15 | 
            +
                send_options.merge!(:color => failed_message_color)
         | 
| 16 | 
            +
                send_message("#{human} cancelled deployment of #{deployment_name} to #{environment_name}.", send_options)
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              def send_options
         | 
| 20 | 
            +
                return @send_options if defined?(@send_options)
         | 
| 21 | 
            +
                @send_options = message_format ? {:message_format => message_format } : {}
         | 
| 22 | 
            +
                @send_options.merge!(:notify => message_notification)
         | 
| 23 | 
            +
                @send_options.merge!(:color => message_color)
         | 
| 24 | 
            +
                @send_options
         | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
              def send_message(message, options)
         | 
| 28 | 
            +
                hipchat_token = fetch(:hipchat_token)
         | 
| 29 | 
            +
                hipchat_room_name = fetch(:hipchat_room_name)
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                hipchat_client = fetch(:hipchat_client, HipChat::Client.new(hipchat_token))
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                if hipchat_room_name.is_a?(String)
         | 
| 34 | 
            +
                  rooms = [hipchat_room_name]
         | 
| 35 | 
            +
                elsif hipchat_room_name.is_a?(Symbol)
         | 
| 36 | 
            +
                  rooms = [hipchat_room_name.to_s]
         | 
| 37 | 
            +
                else
         | 
| 38 | 
            +
                  rooms = hipchat_room_name
         | 
| 39 | 
            +
                end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                rooms.each { |room|
         | 
| 42 | 
            +
                  begin
         | 
| 43 | 
            +
                    hipchat_client[room].send(deploy_user, message, options)
         | 
| 44 | 
            +
                  rescue => e
         | 
| 45 | 
            +
                    puts e.message
         | 
| 46 | 
            +
                    puts e.backtrace
         | 
| 47 | 
            +
                  end
         | 
| 48 | 
            +
                }
         | 
| 49 | 
            +
              end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
              def deployment_name
         | 
| 52 | 
            +
                if fetch(:branch, nil)
         | 
| 53 | 
            +
                  application = fetch(:application)
         | 
| 54 | 
            +
                  branch = fetch(:branch)
         | 
| 55 | 
            +
                  real_revision = fetch(:real_revision)
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                  name = "#{application}/#{branch}"
         | 
| 58 | 
            +
                  name += " (revision #{real_revision[0..7]})" if real_revision
         | 
| 59 | 
            +
                  name
         | 
| 60 | 
            +
                else
         | 
| 61 | 
            +
                  application
         | 
| 62 | 
            +
                end
         | 
| 63 | 
            +
              end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
              def message_color
         | 
| 66 | 
            +
                fetch(:hipchat_color)
         | 
| 67 | 
            +
              end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
              def success_message_color
         | 
| 70 | 
            +
                fetch(:hipchat_success_color, 'green')
         | 
| 71 | 
            +
              end
         | 
| 72 | 
            +
             | 
| 73 | 
            +
              def failed_message_color
         | 
| 74 | 
            +
                fetch(:hipchat_failed_color, 'red')
         | 
| 75 | 
            +
              end
         | 
| 76 | 
            +
             | 
| 77 | 
            +
              def message_notification
         | 
| 78 | 
            +
                fetch(:hipchat_announce, false)
         | 
| 79 | 
            +
              end
         | 
| 80 | 
            +
             | 
| 81 | 
            +
              def message_format
         | 
| 82 | 
            +
                fetch(:hipchat_message_format, 'html')
         | 
| 83 | 
            +
              end
         | 
| 84 | 
            +
             | 
| 85 | 
            +
              def deploy_user
         | 
| 86 | 
            +
                fetch(:hipchat_deploy_user, 'Deploy')
         | 
| 87 | 
            +
              end
         | 
| 88 | 
            +
             | 
| 89 | 
            +
              def human
         | 
| 90 | 
            +
                user = ENV['HIPCHAT_USER'] || fetch(:hipchat_human)
         | 
| 91 | 
            +
                user = user || if (u = %x{git config user.name}.strip) != ''
         | 
| 92 | 
            +
                                 u
         | 
| 93 | 
            +
                               elsif (u = ENV['USER']) != ''
         | 
| 94 | 
            +
                                 u
         | 
| 95 | 
            +
                               else
         | 
| 96 | 
            +
                                 'Someone'
         | 
| 97 | 
            +
                               end
         | 
| 98 | 
            +
                user
         | 
| 99 | 
            +
              end
         | 
| 100 | 
            +
             | 
| 101 | 
            +
              def environment_name
         | 
| 102 | 
            +
                fetch(:hipchat_env, fetch(:rack_env, fetch(:rails_env, fetch(:stage))))
         | 
| 103 | 
            +
              end
         | 
| 104 | 
            +
             | 
| 105 | 
            +
              before 'deploy:starting', :notify_deploy_started
         | 
| 106 | 
            +
              after 'deploy:finished', :notify_deploy_finished
         | 
| 107 | 
            +
              if Rake::Task.task_defined? 'deploy:failed'
         | 
| 108 | 
            +
                after 'deploy:failed', :notify_deploy_reverted
         | 
| 109 | 
            +
              end
         | 
| 110 | 
            +
             | 
| 111 | 
            +
            end
         | 
| @@ -0,0 +1,131 @@ | |
| 1 | 
            +
            require 'hipchat'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            Capistrano::Configuration.instance(:must_exist).load do
         | 
| 4 | 
            +
              set :hipchat_send_notification, false
         | 
| 5 | 
            +
              set :hipchat_with_migrations, ''
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              namespace :hipchat do
         | 
| 8 | 
            +
                task :trigger_notification do
         | 
| 9 | 
            +
                  set :hipchat_send_notification, true if !dry_run
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                task :configure_for_migrations do
         | 
| 13 | 
            +
                  set :hipchat_with_migrations, ' (with migrations)'
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                task :notify_deploy_started do
         | 
| 17 | 
            +
                  if hipchat_send_notification
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    environment_string = env
         | 
| 20 | 
            +
                    if self.respond_to?(:stage)
         | 
| 21 | 
            +
                      environment_string = "#{stage} (#{env})"
         | 
| 22 | 
            +
                    end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                    on_rollback do
         | 
| 25 | 
            +
                      send_options.merge!(:color => failed_message_color)
         | 
| 26 | 
            +
                      send("#{human} cancelled deployment of #{deployment_name} to #{environment_string}.", send_options)
         | 
| 27 | 
            +
                    end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                    send("#{human} is deploying #{deployment_name} to #{environment_string}#{fetch(:hipchat_with_migrations, '')}.", send_options)
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                task :notify_deploy_finished do
         | 
| 34 | 
            +
                  if hipchat_send_notification
         | 
| 35 | 
            +
                    send_options.merge!(:color => success_message_color)
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                    environment_string = env
         | 
| 38 | 
            +
                    if self.respond_to?(:stage)
         | 
| 39 | 
            +
                      environment_string = "#{stage} (#{env})"
         | 
| 40 | 
            +
                    end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                    send("#{human} finished deploying #{deployment_name} to #{environment_string}#{fetch(:hipchat_with_migrations, '')}.", send_options)
         | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                def send_options
         | 
| 47 | 
            +
                  return @send_options if defined?(@send_options)
         | 
| 48 | 
            +
                  @send_options = message_format ? {:message_format => message_format } : {}
         | 
| 49 | 
            +
                  @send_options.merge!(:notify => message_notification)
         | 
| 50 | 
            +
                  @send_options.merge!(:color => message_color)
         | 
| 51 | 
            +
                  @send_options
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                def send(message, options)
         | 
| 55 | 
            +
                  set :hipchat_client, HipChat::Client.new(hipchat_token) if fetch(:hipchat_client, nil).nil?
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                  if hipchat_room_name.is_a?(String)
         | 
| 58 | 
            +
                    rooms = [hipchat_room_name]
         | 
| 59 | 
            +
                  elsif hipchat_room_name.is_a?(Symbol)
         | 
| 60 | 
            +
                    rooms = [hipchat_room_name.to_s]
         | 
| 61 | 
            +
                  else
         | 
| 62 | 
            +
                    rooms = hipchat_room_name
         | 
| 63 | 
            +
                  end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                  rooms.each { |room|
         | 
| 66 | 
            +
                    begin
         | 
| 67 | 
            +
                      hipchat_client[room].send(deploy_user, message, options)
         | 
| 68 | 
            +
                    rescue => e
         | 
| 69 | 
            +
                      puts e.message
         | 
| 70 | 
            +
                      puts e.backtrace
         | 
| 71 | 
            +
                    end
         | 
| 72 | 
            +
                  }
         | 
| 73 | 
            +
                end
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                def deployment_name
         | 
| 76 | 
            +
                  if fetch(:branch, nil)
         | 
| 77 | 
            +
                    name = "#{application}/#{branch}"
         | 
| 78 | 
            +
                    name += " (revision #{real_revision[0..7]})" if real_revision
         | 
| 79 | 
            +
                    name
         | 
| 80 | 
            +
                  else
         | 
| 81 | 
            +
                    application
         | 
| 82 | 
            +
                  end
         | 
| 83 | 
            +
                end
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                def message_color
         | 
| 86 | 
            +
                  fetch(:hipchat_color, nil)
         | 
| 87 | 
            +
                end
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                def success_message_color
         | 
| 90 | 
            +
                  fetch(:hipchat_success_color, "green")
         | 
| 91 | 
            +
                end
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                def failed_message_color
         | 
| 94 | 
            +
                  fetch(:hipchat_failed_color, "red")
         | 
| 95 | 
            +
                end
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                def message_notification
         | 
| 98 | 
            +
                  fetch(:hipchat_announce, false)
         | 
| 99 | 
            +
                end
         | 
| 100 | 
            +
             | 
| 101 | 
            +
                def message_format
         | 
| 102 | 
            +
                  fetch(:hipchat_message_format, "html")
         | 
| 103 | 
            +
                end
         | 
| 104 | 
            +
             | 
| 105 | 
            +
                def deploy_user
         | 
| 106 | 
            +
                  fetch(:hipchat_deploy_user, "Deploy")
         | 
| 107 | 
            +
                end
         | 
| 108 | 
            +
             | 
| 109 | 
            +
                def human
         | 
| 110 | 
            +
                  ENV['HIPCHAT_USER'] ||
         | 
| 111 | 
            +
                    fetch(:hipchat_human,
         | 
| 112 | 
            +
                          if (u = %x{git config user.name}.strip) != ""
         | 
| 113 | 
            +
                            u
         | 
| 114 | 
            +
                          elsif (u = ENV['USER']) != ""
         | 
| 115 | 
            +
                            u
         | 
| 116 | 
            +
                          else
         | 
| 117 | 
            +
                            "Someone"
         | 
| 118 | 
            +
                          end)
         | 
| 119 | 
            +
                end
         | 
| 120 | 
            +
             | 
| 121 | 
            +
                def env
         | 
| 122 | 
            +
                  fetch(:hipchat_env, fetch(:rack_env, fetch(:rails_env, "production")))
         | 
| 123 | 
            +
                end
         | 
| 124 | 
            +
              end
         | 
| 125 | 
            +
             | 
| 126 | 
            +
              before "deploy", "hipchat:trigger_notification"
         | 
| 127 | 
            +
              before "deploy:migrations", "hipchat:trigger_notification", "hipchat:configure_for_migrations"
         | 
| 128 | 
            +
              before "deploy:update_code", "hipchat:notify_deploy_started"
         | 
| 129 | 
            +
              after  "deploy", "hipchat:notify_deploy_finished"
         | 
| 130 | 
            +
              after  "deploy:migrations", "hipchat:notify_deploy_finished"
         | 
| 131 | 
            +
            end
         | 
    
        data/lib/hipchat/rails3_tasks.rb
    CHANGED
    
    | @@ -12,7 +12,8 @@ namespace :hipchat do | |
| 12 12 | 
             
                  :user           => ENV['HIPCHAT_USER'],
         | 
| 13 13 | 
             
                  :notify         => ENV['NOTIFY'],
         | 
| 14 14 | 
             
                  :room           => ENV['ROOM'],
         | 
| 15 | 
            -
                  :token          => ENV['TOKEN']
         | 
| 15 | 
            +
                  :token          => ENV['TOKEN'],
         | 
| 16 | 
            +
                  :api_version    => ENV['API_VERSION']
         | 
| 16 17 | 
             
                }.reject { |k, v| v.blank? }
         | 
| 17 18 |  | 
| 18 19 | 
             
                system_options = {
         | 
| @@ -37,7 +38,7 @@ namespace :hipchat do | |
| 37 38 | 
             
                  exit
         | 
| 38 39 | 
             
                end
         | 
| 39 40 |  | 
| 40 | 
            -
                client = HipChat::Client.new(options[:token])
         | 
| 41 | 
            +
                client = HipChat::Client.new(options[:token], options)
         | 
| 41 42 |  | 
| 42 43 | 
             
                client[options[:room]].send(options[:user], options[:message], :notify => options[:notify])
         | 
| 43 44 | 
             
              end
         | 
    
        data/lib/hipchat/version.rb
    CHANGED
    
    
    
        data/spec/hipchat_spec.rb
    CHANGED
    
    | @@ -1,47 +1,10 @@ | |
| 1 1 | 
             
            require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
         | 
| 2 | 
            +
            require File.expand_path(File.dirname(__FILE__) + '/shared_hipchat')
         | 
| 2 3 |  | 
| 3 4 | 
             
            describe HipChat do
         | 
| 4 | 
            -
              subject { HipChat::Client.new("blah") }
         | 
| 5 | 
            -
             | 
| 6 | 
            -
              let(:room) { subject["Hipchat"] }
         | 
| 7 | 
            -
             | 
| 8 | 
            -
              # Helper for mocking room message post requests
         | 
| 9 | 
            -
              def mock_successful_send(from, message, options={})
         | 
| 10 | 
            -
                options = {:color => 'yellow', :notify => 0, :message_format => 'html'}.merge(options)
         | 
| 11 | 
            -
                mock(HipChat::Room).post("/message",
         | 
| 12 | 
            -
                                         :query => {:auth_token => "blah"},
         | 
| 13 | 
            -
                                         :body  => {:room_id => "Hipchat",
         | 
| 14 | 
            -
                                                    :from    => "Dude",
         | 
| 15 | 
            -
                                                    :message => "Hello world",
         | 
| 16 | 
            -
                                                    :message_format => options[:message_format],
         | 
| 17 | 
            -
                                                    :color   => options[:color],
         | 
| 18 | 
            -
                                                    :notify  => options[:notify]}) {
         | 
| 19 | 
            -
                  OpenStruct.new(:code => 200)
         | 
| 20 | 
            -
                }
         | 
| 21 | 
            -
              end
         | 
| 22 | 
            -
             | 
| 23 | 
            -
              def mock_successful_topic_change(topic, options={})
         | 
| 24 | 
            -
                options = {:from => 'API'}.merge(options)
         | 
| 25 | 
            -
                mock(HipChat::Room).post("/topic",
         | 
| 26 | 
            -
                                         :query => {:auth_token => "blah"},
         | 
| 27 | 
            -
                                         :body  => {:room_id => "Hipchat",
         | 
| 28 | 
            -
                                                    :from    => options[:from],
         | 
| 29 | 
            -
                                                    :topic   => "Nice topic" } ) {
         | 
| 30 | 
            -
                  OpenStruct.new(:code => 200)
         | 
| 31 | 
            -
                }
         | 
| 32 | 
            -
              end
         | 
| 33 | 
            -
             | 
| 34 | 
            -
              def mock_successful_history(options={})
         | 
| 35 | 
            -
                options = { :date => 'recent', :timezone => 'UTC', :format => 'JSON' }.merge(options)
         | 
| 36 | 
            -
                canned_response = File.new File.expand_path(File.dirname(__FILE__) + '/example/history.json')
         | 
| 37 | 
            -
                stub_request(:get, "https://api.hipchat.com/v1/rooms/history").with(:query => {:auth_token => "blah",
         | 
| 38 | 
            -
                                               :room_id    => "Hipchat",
         | 
| 39 | 
            -
                                               :date       => options[:date],
         | 
| 40 | 
            -
                                               :timezone   => options[:timezone],
         | 
| 41 | 
            -
                                               :format     => options[:format]}).to_return(canned_response)
         | 
| 42 | 
            -
              end
         | 
| 43 5 |  | 
| 44 | 
            -
              describe "#history" do
         | 
| 6 | 
            +
              describe "#history (API V1)" do
         | 
| 7 | 
            +
                include_context "HipChatV1"
         | 
| 45 8 | 
             
                it "is successful without custom options" do
         | 
| 46 9 | 
             
                  mock_successful_history()
         | 
| 47 10 |  | 
| @@ -79,7 +42,8 @@ describe HipChat do | |
| 79 42 | 
             
                end
         | 
| 80 43 | 
             
              end
         | 
| 81 44 |  | 
| 82 | 
            -
              describe "#topic" do
         | 
| 45 | 
            +
              describe "#topic (API V1)" do
         | 
| 46 | 
            +
                include_context "HipChatV1"
         | 
| 83 47 | 
             
                it "is successful without custom options" do
         | 
| 84 48 | 
             
                  mock_successful_topic_change("Nice topic")
         | 
| 85 49 |  | 
| @@ -118,7 +82,8 @@ describe HipChat do | |
| 118 82 | 
             
                end
         | 
| 119 83 | 
             
              end
         | 
| 120 84 |  | 
| 121 | 
            -
              describe "sends a message to a room" do
         | 
| 85 | 
            +
              describe "sends a message to a room (API V1)" do
         | 
| 86 | 
            +
                include_context "HipChatV1"
         | 
| 122 87 | 
             
                it "successfully without custom options" do
         | 
| 123 88 | 
             
                  mock_successful_send 'Dude', 'Hello world'
         | 
| 124 89 |  | 
| @@ -128,6 +93,141 @@ describe HipChat do | |
| 128 93 | 
             
                it "successfully with notifications on as option" do
         | 
| 129 94 | 
             
                  mock_successful_send 'Dude', 'Hello world', :notify => 1
         | 
| 130 95 |  | 
| 96 | 
            +
                  room.send("Dude", "Hello world", :notify => 1).should be_true
         | 
| 97 | 
            +
                end
         | 
| 98 | 
            +
             | 
| 99 | 
            +
                it "successfully with custom color" do
         | 
| 100 | 
            +
                  mock_successful_send 'Dude', 'Hello world', :color => 'red'
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                  room.send("Dude", "Hello world", :color => 'red').should be_true
         | 
| 103 | 
            +
                end
         | 
| 104 | 
            +
             | 
| 105 | 
            +
                it "successfully with text message_format" do
         | 
| 106 | 
            +
                  mock_successful_send 'Dude', 'Hello world', :message_format => 'text'
         | 
| 107 | 
            +
             | 
| 108 | 
            +
                  room.send("Dude", "Hello world", :message_format => 'text').should be_true
         | 
| 109 | 
            +
                end
         | 
| 110 | 
            +
             | 
| 111 | 
            +
                it "but fails when the room doesn't exist" do
         | 
| 112 | 
            +
                  mock(HipChat::Room).post(anything, anything) {
         | 
| 113 | 
            +
                    OpenStruct.new(:code => 404)
         | 
| 114 | 
            +
                  }
         | 
| 115 | 
            +
             | 
| 116 | 
            +
                  lambda { room.send "", "" }.should raise_error(HipChat::UnknownRoom)
         | 
| 117 | 
            +
                end
         | 
| 118 | 
            +
             | 
| 119 | 
            +
                it "but fails when we're not allowed to do so" do
         | 
| 120 | 
            +
                  mock(HipChat::Room).post(anything, anything) {
         | 
| 121 | 
            +
                    OpenStruct.new(:code => 401)
         | 
| 122 | 
            +
                  }
         | 
| 123 | 
            +
             | 
| 124 | 
            +
                  lambda { room.send "", "" }.should raise_error(HipChat::Unauthorized)
         | 
| 125 | 
            +
                end
         | 
| 126 | 
            +
             | 
| 127 | 
            +
                it "but fails if the username is more than 15 chars" do
         | 
| 128 | 
            +
                  lambda { room.send "a very long username here", "a message" }.should raise_error(HipChat::UsernameTooLong)
         | 
| 129 | 
            +
                end
         | 
| 130 | 
            +
             | 
| 131 | 
            +
                it "but fails if we get an unknown response code" do
         | 
| 132 | 
            +
                  mock(HipChat::Room).post(anything, anything) {
         | 
| 133 | 
            +
                    OpenStruct.new(:code => 403)
         | 
| 134 | 
            +
                  }
         | 
| 135 | 
            +
             | 
| 136 | 
            +
                  lambda { room.send "", "" }.
         | 
| 137 | 
            +
                    should raise_error(HipChat::UnknownResponseCode)
         | 
| 138 | 
            +
                end
         | 
| 139 | 
            +
              end
         | 
| 140 | 
            +
             | 
| 141 | 
            +
              describe "#history (API v2)" do
         | 
| 142 | 
            +
                include_context "HipChatV2"
         | 
| 143 | 
            +
                it "is successful without custom options" do
         | 
| 144 | 
            +
                  mock_successful_history()
         | 
| 145 | 
            +
             | 
| 146 | 
            +
                  room.history().should be_true
         | 
| 147 | 
            +
                end
         | 
| 148 | 
            +
             | 
| 149 | 
            +
                it "is successful with custom options" do
         | 
| 150 | 
            +
                  mock_successful_history(:timezone => 'America/Los_Angeles', :date => '2010-11-19')
         | 
| 151 | 
            +
                  room.history(:timezone => 'America/Los_Angeles', :date => '2010-11-19').should be_true
         | 
| 152 | 
            +
                end
         | 
| 153 | 
            +
             | 
| 154 | 
            +
                it "fails when the room doen't exist" do
         | 
| 155 | 
            +
                  mock(HipChat::Room).get(anything, anything) {
         | 
| 156 | 
            +
                    OpenStruct.new(:code => 404)
         | 
| 157 | 
            +
                  }
         | 
| 158 | 
            +
             | 
| 159 | 
            +
                  lambda { room.history }.should raise_error(HipChat::UnknownRoom)
         | 
| 160 | 
            +
                end
         | 
| 161 | 
            +
             | 
| 162 | 
            +
                it "fails when we're not allowed to do so" do
         | 
| 163 | 
            +
                  mock(HipChat::Room).get(anything, anything) {
         | 
| 164 | 
            +
                    OpenStruct.new(:code => 401)
         | 
| 165 | 
            +
                  }
         | 
| 166 | 
            +
             | 
| 167 | 
            +
                  lambda { room.history }.should raise_error(HipChat::Unauthorized)
         | 
| 168 | 
            +
                end
         | 
| 169 | 
            +
             | 
| 170 | 
            +
                it "fails if we get an unknown response code" do
         | 
| 171 | 
            +
                  mock(HipChat::Room).get(anything, anything) {
         | 
| 172 | 
            +
                    OpenStruct.new(:code => 403)
         | 
| 173 | 
            +
                  }
         | 
| 174 | 
            +
             | 
| 175 | 
            +
                  lambda { room.history }.
         | 
| 176 | 
            +
                    should raise_error(HipChat::UnknownResponseCode)
         | 
| 177 | 
            +
                end
         | 
| 178 | 
            +
              end
         | 
| 179 | 
            +
             | 
| 180 | 
            +
              describe "#topic (API v2)" do
         | 
| 181 | 
            +
                include_context "HipChatV2"
         | 
| 182 | 
            +
                it "is successful without custom options" do
         | 
| 183 | 
            +
                  mock_successful_topic_change("Nice topic")
         | 
| 184 | 
            +
             | 
| 185 | 
            +
                  room.topic("Nice topic").should be_true
         | 
| 186 | 
            +
                end
         | 
| 187 | 
            +
             | 
| 188 | 
            +
                it "is successful with a custom from" do
         | 
| 189 | 
            +
                  mock_successful_topic_change("Nice topic", :from => "Me")
         | 
| 190 | 
            +
             | 
| 191 | 
            +
                  room.topic("Nice topic", :from => "Me").should be_true
         | 
| 192 | 
            +
                end
         | 
| 193 | 
            +
             | 
| 194 | 
            +
                it "fails when the room doesn't exist" do
         | 
| 195 | 
            +
                  mock(HipChat::Room).put(anything, anything) {
         | 
| 196 | 
            +
                    OpenStruct.new(:code => 404)
         | 
| 197 | 
            +
                  }
         | 
| 198 | 
            +
             | 
| 199 | 
            +
                  lambda { room.topic "" }.should raise_error(HipChat::UnknownRoom)
         | 
| 200 | 
            +
                end
         | 
| 201 | 
            +
             | 
| 202 | 
            +
                it "fails when we're not allowed to do so" do
         | 
| 203 | 
            +
                    mock(HipChat::Room).put(anything, anything) {
         | 
| 204 | 
            +
                      OpenStruct.new(:code => 401)
         | 
| 205 | 
            +
                    }
         | 
| 206 | 
            +
             | 
| 207 | 
            +
                  lambda { room.topic "" }.should raise_error(HipChat::Unauthorized)
         | 
| 208 | 
            +
                end
         | 
| 209 | 
            +
             | 
| 210 | 
            +
                it "fails if we get an unknown response code" do
         | 
| 211 | 
            +
                    mock(HipChat::Room).put(anything, anything) {
         | 
| 212 | 
            +
                      OpenStruct.new(:code => 403)
         | 
| 213 | 
            +
                    }
         | 
| 214 | 
            +
             | 
| 215 | 
            +
                  lambda { room.topic "" }.
         | 
| 216 | 
            +
                    should raise_error(HipChat::UnknownResponseCode)
         | 
| 217 | 
            +
                end
         | 
| 218 | 
            +
              end
         | 
| 219 | 
            +
             | 
| 220 | 
            +
              describe "sends a message to a room (API V2)" do
         | 
| 221 | 
            +
                include_context "HipChatV2"
         | 
| 222 | 
            +
                it "successfully without custom options" do
         | 
| 223 | 
            +
                  mock_successful_send 'Dude', 'Hello world'
         | 
| 224 | 
            +
             | 
| 225 | 
            +
                  room.send("Dude", "Hello world").should be_true
         | 
| 226 | 
            +
                end
         | 
| 227 | 
            +
             | 
| 228 | 
            +
                it "successfully with notifications on as option" do
         | 
| 229 | 
            +
                  mock_successful_send 'Dude', 'Hello world', :notify => true
         | 
| 230 | 
            +
             | 
| 131 231 | 
             
                  room.send("Dude", "Hello world", :notify => true).should be_true
         | 
| 132 232 | 
             
                end
         | 
| 133 233 |  | 
| @@ -0,0 +1,82 @@ | |
| 1 | 
            +
            shared_context "HipChatV1" do
         | 
| 2 | 
            +
              before { @api_version = 'v1'}
         | 
| 3 | 
            +
              # Helper for mocking room message post requests
         | 
| 4 | 
            +
              def mock_successful_send(from, message, options={})
         | 
| 5 | 
            +
                options = {:color => 'yellow', :notify => 0, :message_format => 'html'}.merge(options)
         | 
| 6 | 
            +
                stub_request(:post, "https://api.hipchat.com/v1/rooms/message").with(
         | 
| 7 | 
            +
                                         :query => {:auth_token => "blah"},
         | 
| 8 | 
            +
                                         :body  => {:room_id => "Hipchat",
         | 
| 9 | 
            +
                                                    :from    => "Dude",
         | 
| 10 | 
            +
                                                    :message => "Hello world",
         | 
| 11 | 
            +
                                                    :message_format => options[:message_format],
         | 
| 12 | 
            +
                                                    :color   => options[:color],
         | 
| 13 | 
            +
                                                    :notify  => "#{options[:notify]}"},
         | 
| 14 | 
            +
                                          :headers => {'Accept' => 'application/json',
         | 
| 15 | 
            +
                                                      'Content-Type' => 'application/x-www-form-urlencoded'}).to_return(:status => 200, :body => "", :headers => {})
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              def mock_successful_topic_change(topic, options={})
         | 
| 20 | 
            +
                options = {:from => 'API'}.merge(options)
         | 
| 21 | 
            +
                stub_request(:post, "https://api.hipchat.com/v1/rooms/topic").with(
         | 
| 22 | 
            +
                                         :query => {:auth_token => "blah"},
         | 
| 23 | 
            +
                                         :body  => {:room_id => "Hipchat",
         | 
| 24 | 
            +
                                                    :from    => options[:from],
         | 
| 25 | 
            +
                                                    :topic   => "Nice topic" },
         | 
| 26 | 
            +
                                          :headers => {'Accept' => 'application/json',
         | 
| 27 | 
            +
                                                      'Content-Type' => 'application/x-www-form-urlencoded'}).to_return(:status => 200, :body => "", :headers => {})
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
              def mock_successful_history(options={})
         | 
| 31 | 
            +
                options = { :date => 'recent', :timezone => 'UTC', :format => 'JSON' }.merge(options)
         | 
| 32 | 
            +
                canned_response = File.new File.expand_path(File.dirname(__FILE__) + '/example/history.json')
         | 
| 33 | 
            +
                stub_request(:get, "https://api.hipchat.com/v1/rooms/history").with(:query => {:auth_token => "blah",
         | 
| 34 | 
            +
                                               :room_id    => "Hipchat",
         | 
| 35 | 
            +
                                               :date       => options[:date],
         | 
| 36 | 
            +
                                               :timezone   => options[:timezone],
         | 
| 37 | 
            +
                                               :format     => options[:format]}).to_return(canned_response)
         | 
| 38 | 
            +
              end
         | 
| 39 | 
            +
              subject { HipChat::Client.new("blah", :api_version => @api_version) }
         | 
| 40 | 
            +
              let(:room) { subject["Hipchat"] }
         | 
| 41 | 
            +
            end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            shared_context "HipChatV2" do
         | 
| 44 | 
            +
              before { @api_version = 'v2'}
         | 
| 45 | 
            +
              # Helper for mocking room message post requests
         | 
| 46 | 
            +
              def mock_successful_send(from, message, options={})
         | 
| 47 | 
            +
                options = {:color => 'yellow', :notify => false, :message_format => 'html'}.merge(options)
         | 
| 48 | 
            +
                stub_request(:post, "https://api.hipchat.com/v2/room/Hipchat/notification").with(
         | 
| 49 | 
            +
                                         :query => {:auth_token => "blah"},
         | 
| 50 | 
            +
                                         :body  => {:room_id => "Hipchat",
         | 
| 51 | 
            +
                                                    :from    => "Dude",
         | 
| 52 | 
            +
                                                    :message => "Hello world",
         | 
| 53 | 
            +
                                                    :message_format => options[:message_format],
         | 
| 54 | 
            +
                                                    :color   => options[:color],
         | 
| 55 | 
            +
                                                    :notify  => options[:notify]}.to_json,
         | 
| 56 | 
            +
                                                    :headers => {'Accept' => 'application/json',
         | 
| 57 | 
            +
                                                                'Content-Type' => 'application/json'}).to_return(:status => 200, :body => "", :headers => {}) 
         | 
| 58 | 
            +
              end
         | 
| 59 | 
            +
             | 
| 60 | 
            +
              def mock_successful_topic_change(topic, options={})
         | 
| 61 | 
            +
                options = {:from => 'API'}.merge(options)
         | 
| 62 | 
            +
                stub_request(:put, "https://api.hipchat.com/v2/room/Hipchat/topic").with(
         | 
| 63 | 
            +
                                         :query => {:auth_token => "blah"},
         | 
| 64 | 
            +
                                         :body  => {:room_id => "Hipchat",
         | 
| 65 | 
            +
                                                    :from    => options[:from],
         | 
| 66 | 
            +
                                                    :topic   => "Nice topic" }.to_json,
         | 
| 67 | 
            +
                                                    :headers => {'Accept' => 'application/json',
         | 
| 68 | 
            +
                                                                'Content-Type' => 'application/json'}).to_return(:status => 200, :body => "", :headers => {})
         | 
| 69 | 
            +
              end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
              def mock_successful_history(options={})
         | 
| 72 | 
            +
                options = { :date => 'recent', :timezone => 'UTC', :format => 'JSON' }.merge(options)
         | 
| 73 | 
            +
                canned_response = File.new File.expand_path(File.dirname(__FILE__) + '/example/history.json')
         | 
| 74 | 
            +
                stub_request(:get, "https://api.hipchat.com/v2/room/Hipchat/history").with(:query => {:auth_token => "blah",
         | 
| 75 | 
            +
                                               :room_id    => "Hipchat",
         | 
| 76 | 
            +
                                               :date       => options[:date],
         | 
| 77 | 
            +
                                               :timezone   => options[:timezone],
         | 
| 78 | 
            +
                                               :format     => options[:format]}).to_return(canned_response)
         | 
| 79 | 
            +
              end
         | 
| 80 | 
            +
              subject { HipChat::Client.new("blah", :api_version => @api_version) }
         | 
| 81 | 
            +
              let(:room) { subject["Hipchat"] }
         | 
| 82 | 
            +
            end
         | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: hipchat
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 1.0.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - HipChat/Atlassian
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2013- | 
| 11 | 
            +
            date: 2013-12-17 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: httparty
         | 
| @@ -108,6 +108,20 @@ dependencies: | |
| 108 108 | 
             
                - - ">"
         | 
| 109 109 | 
             
                  - !ruby/object:Gem::Version
         | 
| 110 110 | 
             
                    version: 2.4.2
         | 
| 111 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 112 | 
            +
              name: coveralls
         | 
| 113 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 114 | 
            +
                requirements:
         | 
| 115 | 
            +
                - - ">="
         | 
| 116 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 117 | 
            +
                    version: '0'
         | 
| 118 | 
            +
              type: :development
         | 
| 119 | 
            +
              prerelease: false
         | 
| 120 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 121 | 
            +
                requirements:
         | 
| 122 | 
            +
                - - ">="
         | 
| 123 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 124 | 
            +
                    version: '0'
         | 
| 111 125 | 
             
            description: Ruby library to interact with HipChat
         | 
| 112 126 | 
             
            email:
         | 
| 113 127 | 
             
            - support@hipchat.com
         | 
| @@ -124,13 +138,17 @@ files: | |
| 124 138 | 
             
            - Rakefile
         | 
| 125 139 | 
             
            - hipchat.gemspec
         | 
| 126 140 | 
             
            - lib/hipchat.rb
         | 
| 141 | 
            +
            - lib/hipchat/api_version.rb
         | 
| 127 142 | 
             
            - lib/hipchat/capistrano.rb
         | 
| 143 | 
            +
            - lib/hipchat/capistrano/tasks/hipchat.rake
         | 
| 144 | 
            +
            - lib/hipchat/capistrano2.rb
         | 
| 128 145 | 
             
            - lib/hipchat/chef.rb
         | 
| 129 146 | 
             
            - lib/hipchat/rails3_tasks.rb
         | 
| 130 147 | 
             
            - lib/hipchat/railtie.rb
         | 
| 131 148 | 
             
            - lib/hipchat/version.rb
         | 
| 132 149 | 
             
            - spec/example/history.json
         | 
| 133 150 | 
             
            - spec/hipchat_spec.rb
         | 
| 151 | 
            +
            - spec/shared_hipchat.rb
         | 
| 134 152 | 
             
            - spec/spec.opts
         | 
| 135 153 | 
             
            - spec/spec_helper.rb
         | 
| 136 154 | 
             
            homepage: https://github.com/hipchat/hipchat-rb
         | 
| @@ -160,6 +178,7 @@ summary: Ruby library to interact with HipChat | |
| 160 178 | 
             
            test_files:
         | 
| 161 179 | 
             
            - spec/example/history.json
         | 
| 162 180 | 
             
            - spec/hipchat_spec.rb
         | 
| 181 | 
            +
            - spec/shared_hipchat.rb
         | 
| 163 182 | 
             
            - spec/spec.opts
         | 
| 164 183 | 
             
            - spec/spec_helper.rb
         | 
| 165 184 | 
             
            has_rdoc: 
         |