lita-tipbot 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9f5a96e1f9175162545271fb31e38e31364fc77a
4
+ data.tar.gz: 14febc648cb86f7258ada9b18afd3e3ed66c11e1
5
+ SHA512:
6
+ metadata.gz: 19a018c8a40300267be9b0384d63b78808edc8cd8f2db29db75b06719dd3d627bb8d5df4e047154930cc463ba910b532d098680a239e33b3c2f41af1cb808cc8
7
+ data.tar.gz: 3d3c649ed7d09dedcd159b26fb9f161a2f832d0ca0b48c88a8e3f5fbed72d51014f9be38d57205bf414f8a0cbac52898bc276a52df7a8efbcd1e29bcaa93f563
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ lita-tipbot
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-2.2.1
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) [2015] [Chris Chalfant]
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,45 @@
1
+ # lita-tipbot
2
+
3
+ Tip people with dogecoins! Based on https://gist.github.com/ninetwentyfour/9063547
4
+
5
+ ## Installation
6
+
7
+ Add lita-tipbot to your Lita instance's Gemfile:
8
+
9
+ ``` ruby
10
+ gem "lita-tipbot"
11
+ ```
12
+
13
+ You or someone you know needs to setup and run https://github.com/ninetwentyfour/tipbot
14
+
15
+ ## Configuration
16
+
17
+ TIPBOT_AUTH_TOKEN
18
+ TIPBOT_URL
19
+ HIPCHAT_API_TOKEN
20
+
21
+ ## Usage
22
+
23
+ TODO: Describe the plugin's features and how to use them.
24
+
25
+ ## TO THE MOON!
26
+
27
+ ░░░░░░░░░▄░░░░░░░░░░░░░░▄░░░░
28
+ ░░░░░░░░▌▒█░░░░░░░░░░░▄▀▒▌░░░
29
+ ░░░░░░░░▌▒▒█░░░░░░░░▄▀▒▒▒▐░░░
30
+ ░░░░░░░▐▄▀▒▒▀▀▀▀▄▄▄▀▒▒▒▒▒▐░░░
31
+ ░░░░░▄▄▀▒░▒▒▒▒▒▒▒▒▒█▒▒▄█▒▐░░░
32
+ ░░░▄▀▒▒▒░░░▒▒▒░░░▒▒▒▀██▀▒▌░░░
33
+ ░░▐▒▒▒▄▄▒▒▒▒░░░▒▒▒▒▒▒▒▀▄▒▒▌░░
34
+ ░░▌░░▌█▀▒▒▒▒▒▄▀█▄▒▒▒▒▒▒▒█▒▐░░
35
+ ░▐░░░▒▒▒▒▒▒▒▒▌██▀▒▒░░░▒▒▒▀▄▌░
36
+ ░▌░▒▄██▄▒▒▒▒▒▒▒▒▒░░░░░░▒▒▒▒▌░
37
+ ▀▒▀▐▄█▄█▌▄░▀▒▒░░░░░░░░░░▒▒▒▐░
38
+ ▐▒▒▐▀▐▀▒░▄▄▒▄▒▒▒▒▒▒░▒░▒░▒▒▒▒▌
39
+ ▐▒▒▒▀▀▄▄▒▒▒▄▒▒▒▒▒▒▒▒░▒░▒░▒▒▐░
40
+ ░▌▒▒▒▒▒▒▀▀▀▒▒▒▒▒▒░▒░▒░▒░▒▒▒▌░
41
+ ░▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒░▒░▒░▒▒▄▒▒▐░░
42
+ ░░▀▄▒▒▒▒▒▒▒▒▒▒▒░▒░▒░▒▄▒▒▒▒▌░░
43
+ ░░░░▀▄▒▒▒▒▒▒▒▒▒▒▄▄▄▀▒▒▒▒▄▀░░░
44
+ ░░░░░░▀▄▄▄▄▄▄▀▀▀▒▒▒▒▒▄▄▀░░░░░
45
+ ░░░░░░░░░▒▒▒▒▒▒▒▒▒▒▀▀░░░░░░░░
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
@@ -0,0 +1,266 @@
1
+ require 'hipchat-api'
2
+ require 'digest'
3
+ require 'httparty'
4
+ require 'json'
5
+
6
+ module Lita
7
+ module Handlers
8
+ class TipbotApi
9
+ attr_accessor :base_url, :auth_token, :log
10
+
11
+ def initialize(params)
12
+ @base_url = params[:url]
13
+ @auth_token = params[:auth_token]
14
+ @log = params[:log]
15
+ end
16
+
17
+ def rest_get(url)
18
+ headers = {
19
+ 'Authorization' => auth_token,
20
+ 'Accept' => 'application/json'
21
+ }
22
+ HTTParty.get(url, headers: headers)
23
+ end
24
+
25
+ def rest_post(url, payload)
26
+ headers = {
27
+ 'Authorization' => auth_token,
28
+ 'Accept' => 'application/json',
29
+ 'Content-Type' => 'application/json'
30
+ }
31
+ HTTParty.post(url, headers: headers, body: payload)
32
+ end
33
+
34
+ def register(hash)
35
+ url = "#{base_url}/wallet/#{hash}/register"
36
+ resp = rest_get url
37
+ resp.body
38
+ end
39
+
40
+ def address(hash)
41
+ url = "#{base_url}/wallet/#{hash}"
42
+ resp = rest_get url
43
+ data = JSON.parse resp.body
44
+ data['address']
45
+ end
46
+
47
+ def balance(hash)
48
+ url = "#{base_url}/wallet/#{hash}/balance"
49
+ resp = rest_get url
50
+ data = JSON.parse resp.body
51
+ data['balance'] # TODO: check for NaN
52
+ end
53
+
54
+ def history(hash)
55
+ url = "#{base_url}/wallet/#{hash}/history"
56
+ resp = rest_get url
57
+ resp.body
58
+ end
59
+
60
+ def tip(giver_hash, receiver_hash, amount)
61
+ url = "#{base_url}/wallet/tip"
62
+
63
+ payload = {
64
+ from: giver_hash,
65
+ to: reciever_hash,
66
+ amount: amount
67
+ }.to_json
68
+
69
+ resp = rest_post url, payload
70
+ resp.body
71
+ end
72
+
73
+ def withdraw(src_hash, dest_address)
74
+ url = "#{base_url}/wallet/#{src_hash}/withdraw/#{dest_address}"
75
+ resp = rest_get url
76
+ data = JSON.parse(resp.body)
77
+ data['message']
78
+ end
79
+ end
80
+
81
+ class Tipbot < Handler
82
+ # TODO: store user's hash in redis for later lookup?
83
+
84
+ config :hipchat_api_token
85
+ config :tipbot_auth_token
86
+ config :tipbot_url
87
+ config :emails_to_exclude
88
+
89
+ route(/^tipbot register/i, :register, help: {
90
+ "tipbot register" => "register to use tipbot (only needed if you have never been tipped)"
91
+ })
92
+
93
+ route(/^tipbot address/i, :address, help: {
94
+ "tipbot address" => "show the address you can send coins to for tipping"
95
+ })
96
+
97
+ route(/^tipbot balance/i, :balance, help: {
98
+ "tipbot balance" => "show your current balance"
99
+ })
100
+
101
+ route(/^tipbot history/i, :history, help: {
102
+ "tipbot history" => "show transaction history"
103
+ })
104
+
105
+ route(/^tipbot tip (.\S*) (.\d*)/i, :tip, help: {
106
+ "tipbot tip @mentionName amount" => "tip someone coins e.g. tipbot tip @ExampleUser 10"
107
+ })
108
+
109
+ route(/^tipbot withdraw (.*)/i, :withdraw, help: {
110
+ "tipbot withdraw personalAddress" => "withdraw your tips into your personal wallet"
111
+ })
112
+
113
+ route(/^tipbot make it rain/i, :make_it_rain, help: {
114
+ "tipbot make it rain" => "tip every active participant in the room"
115
+ })
116
+
117
+ route(/^tipbot make it wayne/i, :make_it_wayne)
118
+ route(/^tipbot make it blaine/i, :make_it_blaine)
119
+ route(/^tipbot make it crane/i, :make_it_crane)
120
+ route(/^tipbot make it reign/i, :make_it_reign)
121
+
122
+ def register(response)
123
+ hash = user_hash(response.user.mention_name)
124
+
125
+ log.info "Registering #{hash}"
126
+ body = tipbot_api.register hash
127
+
128
+ log.debug "register response: #{body}"
129
+ # TODO: check for errors
130
+ response.reply "You have been registered."
131
+ end
132
+
133
+ def address(response)
134
+ hash = user_hash(response.user.mention_name)
135
+ response.reply tipbot_api.address(hash)
136
+ end
137
+
138
+ def balance(response)
139
+ hash = user_hash(response.user.mention_name)
140
+ response.reply tipbot_api.balance(hash).to_s
141
+ end
142
+
143
+ def history(response)
144
+ hash = user_hash(response.user.mention_name)
145
+ response.reply tipbot_api.history(hash)
146
+ end
147
+
148
+ def tip(response)
149
+ recipient, amount = response.match_data[1..2]
150
+ from_hash = user_hash(response.user.mention_name)
151
+ to_hash = user_hash(recipient.slice(1..-1))
152
+ tipbot_api.tip(from_hash, to_hash, amount)
153
+ response.reply "Tip sent! Such kind shibe."
154
+ end
155
+
156
+ def withdraw(response)
157
+ src_hash = user_hash(response.user.mention_name)
158
+ dest_address = response.match_data[1]
159
+
160
+ resp = tipbot_api.withdraw(src_hash, dest_address)
161
+ response.reply resp
162
+ end
163
+
164
+ def make_it_rain(response)
165
+ images = [
166
+ "http://disinfo.s3.amazonaws.com/wp-content/uploads/2013/12/make-it-rain-1jk6.jpg",
167
+ "http://voice.instructure.com/Portals/166399/images/scrooge-mcduck-make-it-rain.jpeg",
168
+ "http://cdn01.dailycaller.com/wp-content/uploads/2012/10/Big-Bird-Makin-It-Rain-e1349457102996.jpeg",
169
+ "http://i.imgur.com/jSaI0pv.jpg",
170
+ "http://i.imgur.com/0Rz84wK.gif"
171
+ ]
172
+
173
+ response.reply([
174
+ "#{response.user.name} is makin' it rain!",
175
+ images.sample
176
+ ])
177
+
178
+ src_hash = user_hash(response.user.mention_name)
179
+ room_jid = response.message.source.room
180
+ users = active_room_members room_jid
181
+
182
+ users.shuffle.each do |user|
183
+ log.info "tipping #{user['email']}"
184
+
185
+ dest_hash = hash_email user['email']
186
+ log.debug "SRC HASH: #{src_hash}"
187
+ log.debug "DEST HASH: #{dest_hash}"
188
+ log.debug "NAME: #{user['name']}"
189
+
190
+ response.reply "A coin for #{user['name']}!"
191
+ tipbot_api.tip src_hash, dest_hash, 1
192
+ end
193
+ end
194
+
195
+ attr_writer :hipchat_api, :tipbot_api
196
+
197
+ def hipchat_api
198
+ if @hipchat_api.nil?
199
+ @hipchat_api = HipChat::API.new(config.hipchat_api_token)
200
+ end
201
+ @hipchat_api
202
+ end
203
+
204
+ def tipbot_api
205
+ if @tipbot_api.nil?
206
+ params = {
207
+ url: config.tipbot_url,
208
+ auth_token: config.tipbot_auth_token,
209
+ log: log
210
+ }
211
+ @tipbot_api = TipbotApi.new(params)
212
+ end
213
+ @tipbot_api
214
+ end
215
+
216
+ def user_hash(mention_name)
217
+ user_data = hipchat_api.users_list
218
+ user = user_data['users'].select {|u| u['mention_name'] == mention_name}.first
219
+ hash_email user['email']
220
+ end
221
+
222
+ def hash_email(email)
223
+ Digest::MD5.hexdigest email
224
+ end
225
+
226
+ # TODO: many of these methods could be useful to other handlers
227
+
228
+ # return a list of hipchat api v1 user hashes
229
+ # exclude any user with email in config.emails_to_exclude
230
+ # exclude any non-active user
231
+ # TODO: dont make an api call for every participant
232
+ # instead: make one call for all users, then check
233
+ # to see if each is an active participant
234
+ def active_room_members(room_jid)
235
+ data = room_data(room_jid)
236
+ results = []
237
+ data['participants'].each do |p|
238
+ user = hipchat_api.users_show(p['id'])
239
+ next if user['user']['status'] != 'available'
240
+ next if exclude_user? user['user']
241
+ results << user['user']
242
+ end
243
+ results
244
+ end
245
+
246
+ def exclude_user?(user_hash)
247
+ config.emails_to_exclude.include?(user_hash['email'])
248
+ end
249
+
250
+ def room_data(room_jid)
251
+ room_id = room_id_from_jid room_jid
252
+ data = hipchat_api.rooms_show room_id
253
+ data['room']
254
+ end
255
+
256
+ def room_id_from_jid(room_jid)
257
+ data = hipchat_api.rooms_list
258
+ room = data['rooms'].select {|r| r['xmpp_jid'] == room_jid}.first
259
+ room.nil? ? nil : room['id']
260
+ end
261
+
262
+ end
263
+
264
+ Lita.register_handler(Tipbot)
265
+ end
266
+ end
@@ -0,0 +1,12 @@
1
+ require "lita"
2
+
3
+ Lita.load_locales Dir[File.expand_path(
4
+ File.join("..", "..", "locales", "*.yml"), __FILE__
5
+ )]
6
+
7
+ require "lita/handlers/tipbot"
8
+
9
+ Lita::Handlers::Tipbot.template_root File.expand_path(
10
+ File.join("..", "..", "templates"),
11
+ __FILE__
12
+ )
@@ -0,0 +1,25 @@
1
+ Gem::Specification.new do |spec|
2
+ spec.name = "lita-tipbot"
3
+ spec.version = "0.1.0"
4
+ spec.authors = ["Chris Chalfant"]
5
+ spec.email = ["chalfants@gmail.com"]
6
+ spec.description = "Tip people with dogecoins!"
7
+ spec.summary = "Tip people with dogecoins!"
8
+ spec.homepage = "https://github.com/chalfant/lita-tipbot"
9
+ spec.license = "MIT"
10
+ spec.metadata = { "lita_plugin_type" => "handler" }
11
+
12
+ spec.files = `git ls-files`.split($/)
13
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
14
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
15
+ spec.require_paths = ["lib"]
16
+
17
+ spec.add_runtime_dependency "lita", ">= 4.3"
18
+ spec.add_runtime_dependency "hipchat-api"
19
+
20
+ spec.add_development_dependency "bundler", "~> 1.3"
21
+ spec.add_development_dependency "pry-byebug"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "rack-test"
24
+ spec.add_development_dependency "rspec", ">= 3.0.0"
25
+ end
data/locales/en.yml ADDED
@@ -0,0 +1,4 @@
1
+ en:
2
+ lita:
3
+ handlers:
4
+ tipbot:
@@ -0,0 +1,120 @@
1
+ require "spec_helper"
2
+ require 'json'
3
+
4
+ describe Lita::Handlers::Tipbot, lita_handler: true do
5
+ let(:users_list) {
6
+ {
7
+ 'users' => [
8
+ {'mention_name' => user.mention_name, 'email' => 'foo@bar.com' },
9
+ {'mention_name' => 'foo', 'email' => 'bar@foo.com' }
10
+ ]
11
+ }
12
+ }
13
+
14
+ before(:each) { subject.hipchat_api = double(users_list: users_list) }
15
+
16
+ it { is_expected.to route("tipbot register").to(:register) }
17
+ it { is_expected.to route("tipbot address").to(:address) }
18
+ it { is_expected.to route("tipbot balance").to(:balance) }
19
+ it { is_expected.to route("tipbot history").to(:history) }
20
+ it { is_expected.to route("tipbot tip @foo 10").to(:tip) }
21
+ it { is_expected.to route("tipbot withdraw address").to(:withdraw) }
22
+ it { is_expected.to route("tipbot make it rain").to(:make_it_rain) }
23
+ it { is_expected.to route("tipbot make it wayne").to(:make_it_wayne) }
24
+ it { is_expected.to route("tipbot make it blaine").to(:make_it_blaine) }
25
+ it { is_expected.to route("tipbot make it crane").to(:make_it_crane) }
26
+ it { is_expected.to route("tipbot make it reign").to(:make_it_reign) }
27
+
28
+ it 'registers the user' do
29
+ subject.tipbot_api = double(register: 'foo')
30
+ send_message("tipbot register")
31
+ expect(replies.first).to eq("You have been registered.")
32
+ end
33
+
34
+ it 'responds with the address' do
35
+ subject.tipbot_api = double(address: 'foo')
36
+ send_message("tipbot address")
37
+ expect(replies.first).to eq('foo')
38
+ end
39
+
40
+ it "responds with the user's balance as a string" do
41
+ subject.tipbot_api = double(balance: 1337)
42
+ send_message("tipbot balance")
43
+ expect(replies.first).to eq(1337.to_s)
44
+ end
45
+
46
+ it "responds with the user's history" do
47
+ history = {'foo': 0}.to_json
48
+ subject.tipbot_api = double(history: history)
49
+ send_message("tipbot history")
50
+ expect(replies.first).to eq(history)
51
+ end
52
+
53
+ it 'submits a tip' do
54
+ subject.tipbot_api = double(tip: '')
55
+ send_message("tipbot tip @foo 25")
56
+ expect(replies.first).to eq("Tip sent! Such kind shibe.")
57
+ end
58
+
59
+ it 'responds with withdraw address' do
60
+ subject.tipbot_api = double(withdraw: 'foo')
61
+ send_message("tipbot withdraw address")
62
+ expect(replies.first).to eq('foo')
63
+ end
64
+
65
+ describe '#hash_email' do
66
+ it 'hashes properly' do
67
+ email = 'cchalfant@leafsoftwaresolutions.com'
68
+ hash = '554976db892eff514c1bc35fbd736983'
69
+ expect(subject.hash_email(email)).to eq(hash)
70
+ end
71
+ end
72
+
73
+ describe '#active_room_members' do
74
+ let(:room_data) {
75
+ {
76
+ 'participants' => [
77
+ {'id' => 1}
78
+ ]
79
+ }
80
+ }
81
+ before(:each) do
82
+ allow(subject).to receive(:room_data).and_return(room_data)
83
+ end
84
+
85
+ it 'excludes users with status != available' do
86
+ user = {
87
+ 'user' => {
88
+ 'email' => 'foo@bar.com',
89
+ 'status' => 'not_available'
90
+ }
91
+ }
92
+ subject.hipchat_api = double(users_show: user)
93
+ expect(subject.active_room_members('foo')).to be_empty
94
+ end
95
+
96
+ it 'excludes users in the email exclusion list' do
97
+ user = {
98
+ 'user' => {
99
+ 'email' => 'foo@bar.com',
100
+ 'status' => 'available'
101
+ }
102
+ }
103
+ subject.hipchat_api = double(users_show: user)
104
+ allow(subject).to receive(:exclude_user?).and_return(true)
105
+ expect(subject.active_room_members('foo')).to be_empty
106
+ end
107
+
108
+ it 'allows available non-excluded users' do
109
+ user = {
110
+ 'user' => {
111
+ 'email' => 'foo@bar.com',
112
+ 'status' => 'available'
113
+ }
114
+ }
115
+ subject.hipchat_api = double(users_show: user)
116
+ allow(subject).to receive(:exclude_user?).and_return(false)
117
+ expect(subject.active_room_members('foo').size).to eq(1)
118
+ end
119
+ end
120
+ end
@@ -0,0 +1,6 @@
1
+ require "lita-tipbot"
2
+ require "lita/rspec"
3
+
4
+ # A compatibility mode is provided for older plugins upgrading from Lita 3. Since this plugin
5
+ # was generated with Lita 4, the compatibility mode should be left disabled.
6
+ Lita.version_3_compatibility_mode = false
File without changes
metadata ADDED
@@ -0,0 +1,159 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lita-tipbot
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Chris Chalfant
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-04-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: lita
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '4.3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '4.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: hipchat-api
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.3'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry-byebug
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rack-test
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: 3.0.0
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: 3.0.0
111
+ description: Tip people with dogecoins!
112
+ email:
113
+ - chalfants@gmail.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - ".gitignore"
119
+ - ".ruby-gemset"
120
+ - ".ruby-version"
121
+ - Gemfile
122
+ - LICENSE
123
+ - README.md
124
+ - Rakefile
125
+ - lib/lita-tipbot.rb
126
+ - lib/lita/handlers/tipbot.rb
127
+ - lita-tipbot.gemspec
128
+ - locales/en.yml
129
+ - spec/lita/handlers/tipbot_spec.rb
130
+ - spec/spec_helper.rb
131
+ - templates/.gitkeep
132
+ homepage: https://github.com/chalfant/lita-tipbot
133
+ licenses:
134
+ - MIT
135
+ metadata:
136
+ lita_plugin_type: handler
137
+ post_install_message:
138
+ rdoc_options: []
139
+ require_paths:
140
+ - lib
141
+ required_ruby_version: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ required_rubygems_version: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
151
+ requirements: []
152
+ rubyforge_project:
153
+ rubygems_version: 2.4.6
154
+ signing_key:
155
+ specification_version: 4
156
+ summary: Tip people with dogecoins!
157
+ test_files:
158
+ - spec/lita/handlers/tipbot_spec.rb
159
+ - spec/spec_helper.rb