boppers 0.0.0 → 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +14 -2
- data/README.md +282 -10
- data/Rakefile +1 -0
- data/boppers.gemspec +9 -1
- data/exe/boppers +1 -0
- data/gems.locked +98 -1
- data/images/boppers.png +0 -0
- data/images/boppers@2x.png +0 -0
- data/images/logo.png +0 -0
- data/images/logo.svg +10 -0
- data/lib/boppers.rb +35 -0
- data/lib/boppers/cli.rb +55 -0
- data/lib/boppers/configuration.rb +15 -0
- data/lib/boppers/generator/app.rb +28 -0
- data/lib/boppers/generator/app/Procfile +1 -0
- data/lib/boppers/generator/app/app.json +8 -0
- data/lib/boppers/generator/app/config/boppers.rb +83 -0
- data/lib/boppers/generator/app/gems.rb +7 -0
- data/lib/boppers/generator/plugin.rb +64 -0
- data/lib/boppers/generator/plugin/.gitignore +8 -0
- data/lib/boppers/generator/plugin/.rubocop.yml +116 -0
- data/lib/boppers/generator/plugin/.travis.yml +16 -0
- data/lib/boppers/generator/plugin/CODE_OF_CONDUCT.md +74 -0
- data/lib/boppers/generator/plugin/LICENSE.txt +21 -0
- data/lib/boppers/generator/plugin/README.erb +45 -0
- data/lib/boppers/generator/plugin/Rakefile +12 -0
- data/lib/boppers/generator/plugin/gems.rb +2 -0
- data/lib/boppers/generator/plugin/gemspec.erb +29 -0
- data/lib/boppers/generator/plugin/lib/entry.erb +4 -0
- data/lib/boppers/generator/plugin/lib/main.erb +10 -0
- data/lib/boppers/generator/plugin/lib/version.erb +7 -0
- data/lib/boppers/generator/plugin/test/test_file.erb +9 -0
- data/lib/boppers/generator/plugin/test/test_helper.erb +11 -0
- data/lib/boppers/http_client.rb +9 -0
- data/lib/boppers/notifier/hipchat.rb +26 -0
- data/lib/boppers/notifier/pushover.rb +27 -0
- data/lib/boppers/notifier/sendgrid.rb +40 -0
- data/lib/boppers/notifier/slack.rb +35 -0
- data/lib/boppers/notifier/stdout.rb +21 -0
- data/lib/boppers/notifier/telegram.rb +26 -0
- data/lib/boppers/notifier/twitter.rb +34 -0
- data/lib/boppers/runner.rb +37 -0
- data/lib/boppers/testing.rb +6 -0
- data/lib/boppers/testing/bopper_linter.rb +19 -0
- data/lib/boppers/testing/notifier_linter.rb +33 -0
- data/lib/boppers/utils.rb +11 -0
- data/lib/boppers/version.rb +1 -1
- data/setup/telegram.rb +20 -0
- metadata +142 -5
- data/Gemfile.lock +0 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9a7813720dba24c3e0b54524fde1d85e512fded3
|
4
|
+
data.tar.gz: 3a7437f2046dc350bc2e7b5d230adbc792387247
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5627c872fd83adf4815e8a3e58f80c279cb505ec59b40eaf8cfe2b5864f26d3da2d7653aa5f70286f6c6395b2860635550a0cd88fa435f90313e24dfbe3d0bb0
|
7
|
+
data.tar.gz: 8909d9fe48d32f0b2daf90b5f5ee18b7d691dc4f733248513e098858e2f252e9a828b2aaa35f54b419ea9c526ab23db0d4e4607bcec6e9238fdb597f05f392e1
|
data/.travis.yml
CHANGED
@@ -1,7 +1,19 @@
|
|
1
1
|
sudo: false
|
2
2
|
language: ruby
|
3
|
+
cache: bundler
|
3
4
|
rvm:
|
4
|
-
|
5
|
-
before_install:
|
5
|
+
- 2.4.2
|
6
|
+
before_install:
|
7
|
+
- gem install bundler
|
8
|
+
- bundle install
|
9
|
+
before_script:
|
10
|
+
- "curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter"
|
11
|
+
- chmod +x ./cc-test-reporter
|
12
|
+
- "./cc-test-reporter before-build"
|
13
|
+
after_script:
|
14
|
+
- "./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT"
|
6
15
|
notifications:
|
7
16
|
email: false
|
17
|
+
env:
|
18
|
+
global:
|
19
|
+
secure: eoCW4QzjfgDFpD8ygDYJVpm2gmq4eLvZxsgKarOeGOeh6TYGOuAZrz23TGiXy7XwRPlEd8IJf9DufqegitY8QHmrP09C9mUwlk3LbjwNFvsS0aaMKgxIkaBKzgqtaJSySXaKWzoV8wjCUk3/Ip9CNBLq/vLulOcKF4B1HuxtHUKHGHT/Uj/IJWORukFfhaaTi48d9VcizPWH15yj0w3D507sz/HEm0MaeihYHwLYpScgLlNgzFp8+TlTB1TRjf70rUW2Y480zqdxeDvHaKiQt21wyEHcSOwwNVRLXM8jUHAyAN5bEMGJ4PhVE1ehbYarK28Sm3qdUABZngXP5XVsJPJOmf0QXg/oP0RC/zh7xwYFe3rBGdKBp9Vwc3PopjcVzmxSo0mg0IzObq6Kz0lEuHqbqo3kQBdCmSscLpGjCQA9FGf7ylViaeleLd59YN98jw3Z3/dMwN97VD3IFnqDb/ZSPW8KpQmjOzEXm84NglQfodxCqEejaghKi9dHJToWJrxauyJmO6T1s3ykGowfy/PtfVwbXJaGD9OPjxlnqH8GAHGXFg+6vOsxFBRdtuJ3iX7w9ED80mOxaDFgG9o1dtnL43fudSxywrzGQXpMS97sUBUwHiAsCDcE6D8kxRCp5ki9tzKGnc18xQRlnWpUyuP13b6QzhOVZbuX23IArQc=
|
data/README.md
CHANGED
@@ -1,15 +1,17 @@
|
|
1
|
-
|
1
|
+

|
2
2
|
|
3
|
-
|
3
|
+
[](https://travis-ci.org/fnando/boppers)
|
4
|
+
[](https://codeclimate.com/github/fnando/boppers)
|
5
|
+
[](https://codeclimate.com/github/fnando/boppers)
|
6
|
+
[](https://rubygems.org/gems/boppers)
|
7
|
+
[](https://rubygems.org/gems/boppers)
|
4
8
|
|
5
|
-
|
6
|
-
|
7
|
-
## Installation
|
9
|
+
# Installation
|
8
10
|
|
9
11
|
Add this line to your application's Gemfile:
|
10
12
|
|
11
13
|
```ruby
|
12
|
-
gem
|
14
|
+
gem "boppers"
|
13
15
|
```
|
14
16
|
|
15
17
|
And then execute:
|
@@ -20,9 +22,279 @@ Or install it yourself as:
|
|
20
22
|
|
21
23
|
$ gem install boppers
|
22
24
|
|
23
|
-
|
25
|
+
# Usage
|
26
|
+
|
27
|
+
## Using the CLI
|
28
|
+
|
29
|
+
To create a new app, use `boppers app [YOUR APP NAME]`. This will generate a structure so you can just configure your boppers and notifiers.
|
30
|
+
|
31
|
+
## Boppers
|
32
|
+
|
33
|
+
A bopper is a bot. Basically is a class that responds to `#call`. For instance, a lambda.
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
Boppers.configure do |config|
|
37
|
+
config.boppers << lambda do
|
38
|
+
Boppers.notify(:clock, title: "Clock", message: "Now is #{Time.now}")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
```
|
42
|
+
|
43
|
+
By default, boppers are executed every 60 seconds. If you create a class, you can define your custom interval by creating a method `#interval`. The following example changes the interval to `15 seconds`.
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
class Clock
|
47
|
+
def call
|
48
|
+
Boppers.notify(:clock, title: "Clock", message: "Now is #{Time.now}")
|
49
|
+
end
|
50
|
+
|
51
|
+
def interval
|
52
|
+
15
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
Boppers.configure do |config|
|
57
|
+
config.boppers << Clock.new
|
58
|
+
end
|
59
|
+
```
|
60
|
+
|
61
|
+
The `Boppers.notify` method expects a event name (the recommended value is the bot's name), a title, message and a hash of options (it's up to the notifier to use the options).
|
62
|
+
|
63
|
+
### Distributing boppers
|
64
|
+
|
65
|
+
I encourage you to share your boppers. I even added a command to generate a common structure, so you don't have to think about how to organize it. Let's say you want to distribute the clock bopper above.
|
66
|
+
|
67
|
+
```
|
68
|
+
$ boppers plugin clock
|
69
|
+
create boppers-clock.gemspec
|
70
|
+
create gems.rb
|
71
|
+
create .gitignore
|
72
|
+
create .rubocop.yml
|
73
|
+
create .travis.yml
|
74
|
+
create CODE_OF_CONDUCT.md
|
75
|
+
...
|
76
|
+
```
|
77
|
+
|
78
|
+
Now add your bopper code to `lib/boppers/clock.rb`.
|
79
|
+
|
80
|
+
```ruby
|
81
|
+
# frozen_string_literal: true
|
82
|
+
|
83
|
+
require "boppers/clock/version"
|
84
|
+
|
85
|
+
module Boppers
|
86
|
+
class Clock
|
87
|
+
def call
|
88
|
+
Boppers.notify(:clock, title: "Clock", message: "Now is #{Time.now}")
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
```
|
93
|
+
|
94
|
+
Change the `boppers-clock.gemspec` file accordingly (add a description, author name and email).
|
95
|
+
|
96
|
+
If you're writing tests, use `Boppers::Testing::BopperLinter` to lint your bopper (some basic validations will be made).
|
97
|
+
|
98
|
+
```ruby
|
99
|
+
# frozen_string_literal: true
|
100
|
+
|
101
|
+
require "test_helper"
|
102
|
+
|
103
|
+
class BoppersClockTest < Minitest::Test
|
104
|
+
test "lint bopper" do
|
105
|
+
bopper = Boppers::Clock.new
|
106
|
+
Boppers::Testing::BopperLinter.call(bopper)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
```
|
110
|
+
|
111
|
+
Then make a commit and run `rake release` to distribute it (I'm assuming your Rubygems account is already configured).
|
112
|
+
|
113
|
+
## Notifiers
|
114
|
+
|
115
|
+
A notifier is basically a class that responds to `#call(title, message, options)`. The following example implements a `stderr` notifier.
|
116
|
+
|
117
|
+
```ruby
|
118
|
+
class Stderr
|
119
|
+
attr_reader :subscribe
|
120
|
+
|
121
|
+
def initialize(subscribe: nil)
|
122
|
+
@subscribe = subscribe
|
123
|
+
end
|
124
|
+
|
125
|
+
def call(title, message, _options)
|
126
|
+
$stderr << "== #{title}\n"
|
127
|
+
$stderr << message.gsub(/^/m, " ")
|
128
|
+
$stderr << "\n\n"
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
Boppers.configure do |config|
|
133
|
+
config.notifiers << Stderr.new
|
134
|
+
end
|
135
|
+
```
|
136
|
+
|
137
|
+
You can specify which messages a notifier will receive by setting `subscribe:`, like the following:
|
138
|
+
|
139
|
+
```ruby
|
140
|
+
Boppers.configure do |config|
|
141
|
+
config.notifiers << Stderr.new(subscribe: %i[clock])
|
142
|
+
end
|
143
|
+
```
|
144
|
+
|
145
|
+
Now this notifier will only be triggered when `Boppers.notify(:clock, *args)` is called, ignoring other boppers.
|
146
|
+
|
147
|
+
### Available notifiers
|
148
|
+
|
149
|
+
By default, Boppers comes with the following notifiers.
|
150
|
+
|
151
|
+
- [Hipchat](https://www.hipchat.com/sign_in)
|
152
|
+
- [Pushover](https://pushover.net)
|
153
|
+
- [Sendgrid](https://sendgrid.com)
|
154
|
+
- [Slack](https://slack.com)
|
155
|
+
- stdout
|
156
|
+
- [Telegram](https://telegram.org)
|
157
|
+
- [Twitter](https://twitter.com)
|
158
|
+
|
159
|
+
#### Hipchat
|
160
|
+
|
161
|
+
1. Create a "Send Notification" room API token at `https://[SUBDOMAIN].hipchat.com/rooms`.
|
162
|
+
2. The room id is available at the "Summary" section as "API ID".
|
163
|
+
|
164
|
+
```ruby
|
165
|
+
Boppers.configure do |config|
|
166
|
+
config.notifiers << Boppers::Notifier::Hipchat.new(
|
167
|
+
api_token: "API_TOKEN,
|
168
|
+
room: "ROOM"
|
169
|
+
)
|
170
|
+
end
|
171
|
+
```
|
172
|
+
|
173
|
+
#### Pushover
|
174
|
+
|
175
|
+
```ruby
|
176
|
+
Boppers.configure do |config|
|
177
|
+
config.notifiers << Boppers::Notifier::Pushover.new(
|
178
|
+
app_token: "APP_TOKEN",
|
179
|
+
user_token: "USER_TOKEN"
|
180
|
+
)
|
181
|
+
end
|
182
|
+
```
|
183
|
+
|
184
|
+
#### Slack
|
24
185
|
|
25
|
-
|
186
|
+
1. Create a new bot user at https://my.slack.com/services/new/bot
|
187
|
+
2. Set the API token as the `api_token:`.
|
188
|
+
3. Set the channel as the `channel:`.
|
189
|
+
|
190
|
+
```ruby
|
191
|
+
Boppers.configure do |config|
|
192
|
+
config.notifiers << Boppers::Notifier::Slack.new(
|
193
|
+
api_token: "API_TOKEN",
|
194
|
+
channel: "#core"
|
195
|
+
)
|
196
|
+
end
|
197
|
+
```
|
198
|
+
|
199
|
+
#### Sendgrid
|
200
|
+
|
201
|
+
```ruby
|
202
|
+
Boppers.configure do |config|
|
203
|
+
config.notifiers << Boppers::Notifier::Sendgrid.new(
|
204
|
+
username: "USERNAME",
|
205
|
+
password: "PASSWORD",
|
206
|
+
domain: "DOMAIN",
|
207
|
+
email: "your@email.com"
|
208
|
+
)
|
209
|
+
end
|
210
|
+
```
|
211
|
+
|
212
|
+
#### Stdout
|
213
|
+
|
214
|
+
```ruby
|
215
|
+
Boppers.configure do |config|
|
216
|
+
config.notifiers << Boppers::Notifier::Stdout.new
|
217
|
+
end
|
218
|
+
```
|
219
|
+
|
220
|
+
#### Telegram
|
221
|
+
|
222
|
+
1. [Create a bot](https://core.telegram.org/bots#6-botfather). The returned API token must be defined as `api_token:`.
|
223
|
+
2. Send a message to the bot.
|
224
|
+
3. Run `ruby setup/telegram.rb` locally to get the channel id. You may need to install the dependencies with `bundle install` before doing it so.
|
225
|
+
4. Set the channel as `channel_id: <channel id>`. Sometimes id can be a negative number and this is important.
|
226
|
+
|
227
|
+
```ruby
|
228
|
+
Boppers.configure do |config|
|
229
|
+
config.notifiers << Boppers::Notifer::Telegram.new(
|
230
|
+
api_token: "API_TOKEN",
|
231
|
+
channel_id: "CHANNEL_ID"
|
232
|
+
)
|
233
|
+
end
|
234
|
+
```
|
235
|
+
|
236
|
+
#### Twitter
|
237
|
+
|
238
|
+
1. Create an user for your bot.
|
239
|
+
2. Follow your bot, and make your bot follow you.
|
240
|
+
3. Create a new Twitter application under your bot's account at https://apps.twitter.com/app/new
|
241
|
+
4. Go to "Keys and Access Tokens" and create a new access token.
|
242
|
+
5. Set `consumer_key:`, `consumer_secret:`, `access_token:` and `access_secret:` named arguments, all available under "Keys and Access Token".
|
243
|
+
6. Set the user that'll receive the notification as `user: <username>`.
|
244
|
+
|
245
|
+
```ruby
|
246
|
+
Boppers.configure do |config|
|
247
|
+
config.notifiers << Boppers::Notifer::Twitter.new(
|
248
|
+
consumer_key: "CONSUMER_KEY",
|
249
|
+
consumer_secret: "CONSUMER_SECRET",
|
250
|
+
access_token: "ACCESS_TOKEN",
|
251
|
+
access_secret: "ACCESS_SECRET",
|
252
|
+
user: "someuser"
|
253
|
+
)
|
254
|
+
end
|
255
|
+
```
|
256
|
+
|
257
|
+
### Distributing notifiers
|
258
|
+
|
259
|
+
The idea is pretty much the same. Create a new plugin with `boppers plugin [NAME]` and configure it accordingly. There's also a linter for notifiers: `Boppers::Testing::NotifierLinter`.
|
260
|
+
|
261
|
+
## Deploying to Heroku
|
262
|
+
|
263
|
+
I'm assuming you installed the gem with `gem install boppers` and generated your app.
|
264
|
+
|
265
|
+
Add your configuration to `config/boppers.rb`. Also make sure you don't hardcode any sensitive value, like API tokens or passwords. Use [env_vars](https://rubygems.org/gems/env_vars) to manage access to your environment variables.
|
266
|
+
|
267
|
+
Now, configure Heroku. Create a new app for this.
|
268
|
+
|
269
|
+
```
|
270
|
+
heroku create
|
271
|
+
```
|
272
|
+
|
273
|
+
If you're going to send e-mail notification, you'll need Sendgrid.
|
274
|
+
|
275
|
+
```
|
276
|
+
heroku addons:create sendgrid:starter
|
277
|
+
```
|
278
|
+
|
279
|
+
Make a commit and deploy to your Heroku account.
|
280
|
+
|
281
|
+
```
|
282
|
+
git add .
|
283
|
+
git commit -m "Initial commit"
|
284
|
+
git push heroku master
|
285
|
+
```
|
286
|
+
|
287
|
+
Scale up the boppers worker:
|
288
|
+
|
289
|
+
```
|
290
|
+
heroku ps:scale worker=1
|
291
|
+
```
|
292
|
+
|
293
|
+
To make your worker run 24/7 (will cost you $7/month):
|
294
|
+
|
295
|
+
```
|
296
|
+
heroku dyno:type worker=hobby
|
297
|
+
```
|
26
298
|
|
27
299
|
## Development
|
28
300
|
|
@@ -32,7 +304,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
32
304
|
|
33
305
|
## Contributing
|
34
306
|
|
35
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
307
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/fnando/boppers. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
36
308
|
|
37
309
|
## License
|
38
310
|
|
@@ -40,4 +312,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
40
312
|
|
41
313
|
## Code of Conduct
|
42
314
|
|
43
|
-
Everyone interacting in the Boppers project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/
|
315
|
+
Everyone interacting in the Boppers project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/fnando/boppers/blob/master/CODE_OF_CONDUCT.md).
|
data/Rakefile
CHANGED
data/boppers.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.authors = ["Nando Vieira"]
|
9
9
|
spec.email = ["fnando.vieira@gmail.com"]
|
10
10
|
|
11
|
-
spec.summary = "
|
11
|
+
spec.summary = "A simple bot framework for individuals."
|
12
12
|
spec.description = spec.summary
|
13
13
|
spec.homepage = "https://rubygems.org/gems/boppers"
|
14
14
|
spec.license = "MIT"
|
@@ -20,7 +20,15 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.executables = spec.files.grep(%r{^exe/}) {|f| File.basename(f) }
|
21
21
|
spec.require_paths = ["lib"]
|
22
22
|
|
23
|
+
spec.add_dependency "thor"
|
24
|
+
spec.add_dependency "aitch"
|
25
|
+
|
23
26
|
spec.add_development_dependency "bundler"
|
24
27
|
spec.add_development_dependency "rake"
|
25
28
|
spec.add_development_dependency "minitest-utils"
|
29
|
+
spec.add_development_dependency "simplecov"
|
30
|
+
spec.add_development_dependency "pry-meta"
|
31
|
+
spec.add_development_dependency "mail"
|
32
|
+
spec.add_development_dependency "telegram_bot"
|
33
|
+
spec.add_development_dependency "twitter"
|
26
34
|
end
|
data/exe/boppers
CHANGED
data/gems.locked
CHANGED
@@ -1,15 +1,107 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
boppers (0.0.
|
4
|
+
boppers (0.0.1)
|
5
|
+
aitch
|
6
|
+
thor
|
5
7
|
|
6
8
|
GEM
|
7
9
|
remote: https://rubygems.org/
|
8
10
|
specs:
|
11
|
+
addressable (2.5.2)
|
12
|
+
public_suffix (>= 2.0.2, < 4.0)
|
13
|
+
aitch (1.0.2)
|
14
|
+
nokogiri (>= 1.6.0)
|
15
|
+
awesome_print (1.8.0)
|
16
|
+
axiom-types (0.1.1)
|
17
|
+
descendants_tracker (~> 0.0.4)
|
18
|
+
ice_nine (~> 0.11.0)
|
19
|
+
thread_safe (~> 0.3, >= 0.3.1)
|
20
|
+
buftok (0.2.0)
|
21
|
+
byebug (9.1.0)
|
22
|
+
coderay (1.1.2)
|
23
|
+
coercible (1.0.0)
|
24
|
+
descendants_tracker (~> 0.0.1)
|
25
|
+
descendants_tracker (0.0.4)
|
26
|
+
thread_safe (~> 0.3, >= 0.3.1)
|
27
|
+
docile (1.1.5)
|
28
|
+
domain_name (0.5.20170404)
|
29
|
+
unf (>= 0.0.5, < 1.0.0)
|
30
|
+
equalizer (0.0.11)
|
31
|
+
excon (0.59.0)
|
32
|
+
faraday (0.11.0)
|
33
|
+
multipart-post (>= 1.2, < 3)
|
34
|
+
http (2.2.2)
|
35
|
+
addressable (~> 2.3)
|
36
|
+
http-cookie (~> 1.0)
|
37
|
+
http-form_data (~> 1.0.1)
|
38
|
+
http_parser.rb (~> 0.6.0)
|
39
|
+
http-cookie (1.0.3)
|
40
|
+
domain_name (~> 0.5)
|
41
|
+
http-form_data (1.0.3)
|
42
|
+
http_parser.rb (0.6.0)
|
43
|
+
ice_nine (0.11.2)
|
44
|
+
json (2.1.0)
|
45
|
+
mail (2.7.0)
|
46
|
+
mini_mime (>= 0.1.1)
|
47
|
+
memoizable (0.4.2)
|
48
|
+
thread_safe (~> 0.3, >= 0.3.1)
|
49
|
+
method_source (0.9.0)
|
50
|
+
mini_mime (0.1.4)
|
51
|
+
mini_portile2 (2.3.0)
|
9
52
|
minitest (5.10.3)
|
10
53
|
minitest-utils (0.4.0)
|
11
54
|
minitest
|
55
|
+
multipart-post (2.0.0)
|
56
|
+
naught (1.1.0)
|
57
|
+
nokogiri (1.8.1)
|
58
|
+
mini_portile2 (~> 2.3.0)
|
59
|
+
pry (0.11.2)
|
60
|
+
coderay (~> 1.1.0)
|
61
|
+
method_source (~> 0.9.0)
|
62
|
+
pry-byebug (3.5.0)
|
63
|
+
byebug (~> 9.1)
|
64
|
+
pry (~> 0.10)
|
65
|
+
pry-meta (0.0.10)
|
66
|
+
awesome_print
|
67
|
+
pry
|
68
|
+
pry-byebug
|
69
|
+
pry-remote
|
70
|
+
pry-remote (0.1.8)
|
71
|
+
pry (~> 0.9)
|
72
|
+
slop (~> 3.0)
|
73
|
+
public_suffix (3.0.0)
|
12
74
|
rake (12.2.1)
|
75
|
+
simple_oauth (0.3.1)
|
76
|
+
simplecov (0.15.1)
|
77
|
+
docile (~> 1.1.0)
|
78
|
+
json (>= 1.8, < 3)
|
79
|
+
simplecov-html (~> 0.10.0)
|
80
|
+
simplecov-html (0.10.2)
|
81
|
+
slop (3.6.0)
|
82
|
+
telegram_bot (0.0.7)
|
83
|
+
excon (>= 0.30.0)
|
84
|
+
virtus (>= 1.0.0)
|
85
|
+
thor (0.20.0)
|
86
|
+
thread_safe (0.3.6)
|
87
|
+
twitter (6.1.0)
|
88
|
+
addressable (~> 2.5)
|
89
|
+
buftok (~> 0.2.0)
|
90
|
+
equalizer (= 0.0.11)
|
91
|
+
faraday (~> 0.11.0)
|
92
|
+
http (~> 2.1)
|
93
|
+
http_parser.rb (~> 0.6.0)
|
94
|
+
memoizable (~> 0.4.2)
|
95
|
+
naught (~> 1.1)
|
96
|
+
simple_oauth (~> 0.3.1)
|
97
|
+
unf (0.1.4)
|
98
|
+
unf_ext
|
99
|
+
unf_ext (0.0.7.4)
|
100
|
+
virtus (1.0.5)
|
101
|
+
axiom-types (~> 0.1)
|
102
|
+
coercible (~> 1.0)
|
103
|
+
descendants_tracker (~> 0.0, >= 0.0.3)
|
104
|
+
equalizer (~> 0.0, >= 0.0.9)
|
13
105
|
|
14
106
|
PLATFORMS
|
15
107
|
ruby
|
@@ -17,8 +109,13 @@ PLATFORMS
|
|
17
109
|
DEPENDENCIES
|
18
110
|
boppers!
|
19
111
|
bundler
|
112
|
+
mail
|
20
113
|
minitest-utils
|
114
|
+
pry-meta
|
21
115
|
rake
|
116
|
+
simplecov
|
117
|
+
telegram_bot
|
118
|
+
twitter
|
22
119
|
|
23
120
|
BUNDLED WITH
|
24
121
|
1.16.0
|