boppers 0.0.10 → 0.0.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +9 -115
- data/{gems.rb → Gemfile} +0 -0
- data/Gemfile.lock +139 -0
- data/README.md +74 -32
- data/bin/console +1 -0
- data/boppers.gemspec +8 -6
- data/lib/boppers/cli.rb +2 -2
- data/lib/boppers/generator/app/Gemfile +3 -1
- data/lib/boppers/generator/app/config/boppers.rb +12 -3
- data/lib/boppers/generator/app.rb +2 -2
- data/lib/boppers/generator/plugin/.rubocop.yml +9 -115
- data/lib/boppers/generator/plugin/{gems.rb → Gemfile} +2 -0
- data/lib/boppers/generator/plugin/bopper/README.erb +23 -10
- data/lib/boppers/generator/plugin/notifier/README.erb +23 -10
- data/lib/boppers/generator/plugin.rb +8 -11
- data/lib/boppers/notifier/twitter.rb +14 -3
- data/lib/boppers/runner.rb +32 -3
- data/lib/boppers/testing/notifier_linter.rb +6 -3
- data/lib/boppers/version.rb +1 -1
- data/lib/boppers.rb +8 -8
- data/setup/telegram.rb +1 -2
- metadata +19 -21
- data/.travis.yml +0 -19
- data/gems.locked +0 -121
- data/lib/boppers/generator/plugin/.travis.yml +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 737a54c67e4b1622b880bac2d5019faae412a54847fa7d60993ce9aa3dc46f61
|
4
|
+
data.tar.gz: 9a0a2c78ff8fbfcdc00ec10c934dc735ec0b085a813798acc0f46272afdc3711
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c145e2386add5865634f5c059694decdc5d87b711a1bbf8ad95c4796280bb1ec99e1828f4bbedb4a9fa6a5190ca58c226bc055ffa5b8bcbfedbc61eea6c97a65
|
7
|
+
data.tar.gz: 772ab179bdc8a9771a4b1e67ab59856fe6374e6ba580f115649602a20c4b5c6093bb352c78fd9c7dc23fbf4aeb2332e0a89d4f8b749f4904cd27bbc4fdd11896
|
data/.rubocop.yml
CHANGED
@@ -1,116 +1,10 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
Style/Alias:
|
5
|
-
EnforcedStyle: prefer_alias_method
|
6
|
-
|
7
|
-
Style/FrozenStringLiteralComment:
|
8
|
-
EnforcedStyle: always
|
9
|
-
|
10
|
-
Style/ClassCheck:
|
11
|
-
EnforcedStyle: kind_of?
|
12
|
-
|
13
|
-
Metrics/LineLength:
|
14
|
-
Max: 80
|
15
|
-
|
16
|
-
Style/BlockDelimiters:
|
17
|
-
Enabled: false
|
18
|
-
|
19
|
-
Style/RegexpLiteral:
|
20
|
-
Enabled: false
|
21
|
-
|
22
|
-
Metrics/AbcSize:
|
23
|
-
Enabled: false
|
24
|
-
|
25
|
-
Style/PerlBackrefs:
|
26
|
-
Enabled: false
|
27
|
-
|
28
|
-
ClassLength:
|
29
|
-
Enabled: false
|
30
|
-
|
31
|
-
CyclomaticComplexity:
|
32
|
-
Enabled: false
|
33
|
-
|
34
|
-
Documentation:
|
35
|
-
Enabled: false
|
36
|
-
|
37
|
-
Encoding:
|
38
|
-
Enabled: false
|
39
|
-
|
40
|
-
FileName:
|
41
|
-
Enabled: false
|
42
|
-
|
43
|
-
IfUnlessModifier:
|
44
|
-
Enabled: false
|
45
|
-
|
46
|
-
MethodLength:
|
47
|
-
Enabled: false
|
48
|
-
|
49
|
-
ModuleFunction:
|
50
|
-
Enabled: false
|
1
|
+
---
|
2
|
+
inherit_gem:
|
3
|
+
rubocop-fnando: .rubocop.yml
|
51
4
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
Proc:
|
59
|
-
Enabled: false
|
60
|
-
|
61
|
-
SingleLineBlockParams:
|
62
|
-
Enabled: false
|
63
|
-
|
64
|
-
VariableInterpolation:
|
65
|
-
Enabled: false
|
66
|
-
|
67
|
-
Style/TrailingCommaInLiteral:
|
68
|
-
Enabled: false
|
69
|
-
|
70
|
-
WhileUntilModifier:
|
71
|
-
Enabled: false
|
72
|
-
|
73
|
-
PredicateName:
|
74
|
-
NamePrefixBlacklist:
|
75
|
-
- is_
|
76
|
-
|
77
|
-
StringLiterals:
|
78
|
-
EnforcedStyle: double_quotes
|
79
|
-
|
80
|
-
DotPosition:
|
81
|
-
EnforcedStyle: leading
|
82
|
-
|
83
|
-
SpaceBeforeBlockBraces:
|
84
|
-
EnforcedStyle: space
|
85
|
-
|
86
|
-
SpaceInsideBlockBraces:
|
87
|
-
EnforcedStyle: no_space
|
88
|
-
|
89
|
-
DoubleNegation:
|
90
|
-
Enabled: false
|
91
|
-
|
92
|
-
SpaceInsideBlockBraces:
|
93
|
-
SpaceBeforeBlockParameters: false
|
94
|
-
|
95
|
-
SpaceInsideHashLiteralBraces:
|
96
|
-
Enabled: false
|
97
|
-
|
98
|
-
PercentLiteralDelimiters:
|
99
|
-
PreferredDelimiters:
|
100
|
-
'%': '{}'
|
101
|
-
'%i': '{}'
|
102
|
-
'%q': '{}'
|
103
|
-
'%Q': '{}'
|
104
|
-
'%r': '{}'
|
105
|
-
'%s': '{}'
|
106
|
-
'%w': '{}'
|
107
|
-
'%W': '{}'
|
108
|
-
'%x': '{}'
|
109
|
-
|
110
|
-
Style/CollectionMethods:
|
111
|
-
PreferredMethods:
|
112
|
-
collect: 'map'
|
113
|
-
collect!: 'map!'
|
114
|
-
inject: 'reduce'
|
115
|
-
detect: 'find'
|
116
|
-
find_all: 'select'
|
5
|
+
AllCops:
|
6
|
+
TargetRubyVersion: 3.0
|
7
|
+
NewCops: enable
|
8
|
+
Exclude:
|
9
|
+
- vendor/**/*
|
10
|
+
- gemfiles/**/*
|
data/{gems.rb → Gemfile}
RENAMED
File without changes
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,139 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
boppers (0.0.11)
|
5
|
+
aitch
|
6
|
+
thor
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
addressable (2.8.1)
|
12
|
+
public_suffix (>= 2.0.2, < 6.0)
|
13
|
+
aitch (1.2.1)
|
14
|
+
nokogiri
|
15
|
+
awesome_print (1.9.2)
|
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 (11.1.3)
|
22
|
+
coderay (1.1.3)
|
23
|
+
coercible (1.0.0)
|
24
|
+
descendants_tracker (~> 0.0.1)
|
25
|
+
date (3.3.3)
|
26
|
+
descendants_tracker (0.0.4)
|
27
|
+
thread_safe (~> 0.3, >= 0.3.1)
|
28
|
+
docile (1.4.0)
|
29
|
+
domain_name (0.5.20190701)
|
30
|
+
unf (>= 0.0.5, < 1.0.0)
|
31
|
+
equalizer (0.0.11)
|
32
|
+
excon (0.95.0)
|
33
|
+
ffi (1.15.5)
|
34
|
+
ffi-compiler (1.0.1)
|
35
|
+
ffi (>= 1.0.0)
|
36
|
+
rake
|
37
|
+
http (4.4.1)
|
38
|
+
addressable (~> 2.3)
|
39
|
+
http-cookie (~> 1.0)
|
40
|
+
http-form_data (~> 2.2)
|
41
|
+
http-parser (~> 1.2.0)
|
42
|
+
http-cookie (1.0.5)
|
43
|
+
domain_name (~> 0.5)
|
44
|
+
http-form_data (2.3.0)
|
45
|
+
http-parser (1.2.3)
|
46
|
+
ffi-compiler (>= 1.0, < 2.0)
|
47
|
+
http_parser.rb (0.6.0)
|
48
|
+
ice_nine (0.11.2)
|
49
|
+
mail (2.8.0)
|
50
|
+
mini_mime (>= 0.1.1)
|
51
|
+
net-imap
|
52
|
+
net-pop
|
53
|
+
net-smtp
|
54
|
+
memoizable (0.4.2)
|
55
|
+
thread_safe (~> 0.3, >= 0.3.1)
|
56
|
+
method_source (1.0.0)
|
57
|
+
mini_mime (1.1.2)
|
58
|
+
minitest (5.16.3)
|
59
|
+
minitest-utils (0.4.8)
|
60
|
+
minitest
|
61
|
+
multipart-post (2.2.3)
|
62
|
+
naught (1.1.0)
|
63
|
+
net-imap (0.3.4)
|
64
|
+
date
|
65
|
+
net-protocol
|
66
|
+
net-pop (0.1.2)
|
67
|
+
net-protocol
|
68
|
+
net-protocol (0.2.1)
|
69
|
+
timeout
|
70
|
+
net-smtp (0.3.3)
|
71
|
+
net-protocol
|
72
|
+
nokogiri (1.13.10-arm64-darwin)
|
73
|
+
racc (~> 1.4)
|
74
|
+
pry (0.14.1)
|
75
|
+
coderay (~> 1.1)
|
76
|
+
method_source (~> 1.0)
|
77
|
+
pry-byebug (3.10.1)
|
78
|
+
byebug (~> 11.0)
|
79
|
+
pry (>= 0.13, < 0.15)
|
80
|
+
pry-meta (0.0.10)
|
81
|
+
awesome_print
|
82
|
+
pry
|
83
|
+
pry-byebug
|
84
|
+
pry-remote
|
85
|
+
pry-remote (0.1.8)
|
86
|
+
pry (~> 0.9)
|
87
|
+
slop (~> 3.0)
|
88
|
+
public_suffix (5.0.1)
|
89
|
+
racc (1.6.2)
|
90
|
+
rake (13.0.6)
|
91
|
+
simple_oauth (0.3.1)
|
92
|
+
simplecov (0.22.0)
|
93
|
+
docile (~> 1.1)
|
94
|
+
simplecov-html (~> 0.11)
|
95
|
+
simplecov_json_formatter (~> 0.1)
|
96
|
+
simplecov-html (0.12.3)
|
97
|
+
simplecov_json_formatter (0.1.4)
|
98
|
+
slop (3.6.0)
|
99
|
+
telegram_bot (0.0.8)
|
100
|
+
excon (>= 0.30.0)
|
101
|
+
virtus (>= 1.0.0)
|
102
|
+
thor (1.2.1)
|
103
|
+
thread_safe (0.3.6)
|
104
|
+
timeout (0.3.1)
|
105
|
+
twitter (7.0.0)
|
106
|
+
addressable (~> 2.3)
|
107
|
+
buftok (~> 0.2.0)
|
108
|
+
equalizer (~> 0.0.11)
|
109
|
+
http (~> 4.0)
|
110
|
+
http-form_data (~> 2.0)
|
111
|
+
http_parser.rb (~> 0.6.0)
|
112
|
+
memoizable (~> 0.4.0)
|
113
|
+
multipart-post (~> 2.0)
|
114
|
+
naught (~> 1.0)
|
115
|
+
simple_oauth (~> 0.3.0)
|
116
|
+
unf (0.1.4)
|
117
|
+
unf_ext
|
118
|
+
unf_ext (0.0.8.2)
|
119
|
+
virtus (2.0.0)
|
120
|
+
axiom-types (~> 0.1)
|
121
|
+
coercible (~> 1.0)
|
122
|
+
descendants_tracker (~> 0.0, >= 0.0.3)
|
123
|
+
|
124
|
+
PLATFORMS
|
125
|
+
arm64-darwin-22
|
126
|
+
|
127
|
+
DEPENDENCIES
|
128
|
+
boppers!
|
129
|
+
bundler
|
130
|
+
mail
|
131
|
+
minitest-utils
|
132
|
+
pry-meta
|
133
|
+
rake
|
134
|
+
simplecov
|
135
|
+
telegram_bot
|
136
|
+
twitter
|
137
|
+
|
138
|
+
BUNDLED WITH
|
139
|
+
2.3.26
|
data/README.md
CHANGED
@@ -1,8 +1,5 @@
|
|
1
|
-
![Boppers](https://github.com/fnando/boppers/raw/
|
1
|
+
![Boppers](https://github.com/fnando/boppers/raw/main/images/logo.png)
|
2
2
|
|
3
|
-
[![Travis-CI](https://travis-ci.org/fnando/boppers.png)](https://travis-ci.org/fnando/boppers)
|
4
|
-
[![GPA](https://codeclimate.com/github/fnando/boppers/badges/gpa.svg)](https://codeclimate.com/github/fnando/boppers)
|
5
|
-
[![Test Coverage](https://codeclimate.com/github/fnando/boppers/badges/coverage.svg)](https://codeclimate.com/github/fnando/boppers)
|
6
3
|
[![Gem](https://img.shields.io/gem/v/boppers.svg)](https://rubygems.org/gems/boppers)
|
7
4
|
[![Gem](https://img.shields.io/gem/dt/boppers.svg)](https://rubygems.org/gems/boppers)
|
8
5
|
|
@@ -26,11 +23,13 @@ Or install it yourself as:
|
|
26
23
|
|
27
24
|
## Using the CLI
|
28
25
|
|
29
|
-
To create a new app, use `boppers app [YOUR APP NAME]`. This will generate a
|
26
|
+
To create a new app, use `boppers app [YOUR APP NAME]`. This will generate a
|
27
|
+
structure so you can just configure your boppers and notifiers.
|
30
28
|
|
31
29
|
## Boppers
|
32
30
|
|
33
|
-
A bopper is a bot. Basically is a class that responds to `#call`. For instance,
|
31
|
+
A bopper is a bot. Basically is a class that responds to `#call`. For instance,
|
32
|
+
a lambda.
|
34
33
|
|
35
34
|
```ruby
|
36
35
|
Boppers.configure do |config|
|
@@ -40,7 +39,9 @@ Boppers.configure do |config|
|
|
40
39
|
end
|
41
40
|
```
|
42
41
|
|
43
|
-
By default, boppers are executed every 60 seconds. If you create a class, you
|
42
|
+
By default, boppers are executed every 60 seconds. If you create a class, you
|
43
|
+
can define your custom interval by creating a method `#interval`. The following
|
44
|
+
example changes the interval to `15 seconds`.
|
44
45
|
|
45
46
|
```ruby
|
46
47
|
class Clock
|
@@ -58,11 +59,15 @@ Boppers.configure do |config|
|
|
58
59
|
end
|
59
60
|
```
|
60
61
|
|
61
|
-
The `Boppers.notify
|
62
|
+
The `Boppers.notify(event_name, title: message: options: {})` method expects a
|
63
|
+
event name (the recommended value is the bot's name), a title, message and a
|
64
|
+
hash of options (it's up to the notifier to use the options).
|
62
65
|
|
63
66
|
### Distributing boppers
|
64
67
|
|
65
|
-
I encourage you to share your boppers. I even added a command to generate a
|
68
|
+
I encourage you to share your boppers. I even added a command to generate a
|
69
|
+
common structure, so you don't have to think about how to organize it. Let's say
|
70
|
+
you want to distribute the clock bopper above.
|
66
71
|
|
67
72
|
```
|
68
73
|
$ boppers plugin clock --type bopper
|
@@ -85,15 +90,21 @@ require "boppers/clock/version"
|
|
85
90
|
module Boppers
|
86
91
|
class Clock
|
87
92
|
def call
|
88
|
-
Boppers.notify(
|
93
|
+
Boppers.notify(
|
94
|
+
:clock,
|
95
|
+
title: "Clock",
|
96
|
+
message: "Now is #{Time.now}"
|
97
|
+
)
|
89
98
|
end
|
90
99
|
end
|
91
100
|
end
|
92
101
|
```
|
93
102
|
|
94
|
-
Change the `boppers-clock.gemspec` file accordingly (add a description, author
|
103
|
+
Change the `boppers-clock.gemspec` file accordingly (add a description, author
|
104
|
+
name and email).
|
95
105
|
|
96
|
-
If you're writing tests, use `Boppers::Testing::BopperLinter` to lint your
|
106
|
+
If you're writing tests, use `Boppers::Testing::BopperLinter` to lint your
|
107
|
+
bopper (some basic validations will be made).
|
97
108
|
|
98
109
|
```ruby
|
99
110
|
# frozen_string_literal: true
|
@@ -108,11 +119,14 @@ class BoppersClockTest < Minitest::Test
|
|
108
119
|
end
|
109
120
|
```
|
110
121
|
|
111
|
-
Then make a commit and run `rake release` to distribute it (I'm assuming your
|
122
|
+
Then make a commit and run `rake release` to distribute it (I'm assuming your
|
123
|
+
Rubygems account is already configured).
|
112
124
|
|
113
125
|
## Notifiers
|
114
126
|
|
115
|
-
A notifier is basically a class that responds to
|
127
|
+
A notifier is basically a class that responds to
|
128
|
+
`#call(title, message, options)`. The following example implements a `stderr`
|
129
|
+
notifier.
|
116
130
|
|
117
131
|
```ruby
|
118
132
|
class Stderr
|
@@ -134,7 +148,8 @@ Boppers.configure do |config|
|
|
134
148
|
end
|
135
149
|
```
|
136
150
|
|
137
|
-
You can specify which messages a notifier will receive by setting `subscribe:`,
|
151
|
+
You can specify which messages a notifier will receive by setting `subscribe:`,
|
152
|
+
like the following:
|
138
153
|
|
139
154
|
```ruby
|
140
155
|
Boppers.configure do |config|
|
@@ -142,11 +157,15 @@ Boppers.configure do |config|
|
|
142
157
|
end
|
143
158
|
```
|
144
159
|
|
145
|
-
Now this notifier will only be triggered when `Boppers.notify(:clock,
|
160
|
+
Now this notifier will only be triggered when `Boppers.notify(:clock, **kargs)`
|
161
|
+
is called, ignoring other boppers.
|
146
162
|
|
147
163
|
### Distributing notifiers
|
148
164
|
|
149
|
-
The idea is pretty much the same as creating a bopper. Use the command
|
165
|
+
The idea is pretty much the same as creating a bopper. Use the command
|
166
|
+
`boppers plugin [NAME] --type notifier` to generate a file structure. Then
|
167
|
+
configure the plugin accordingly. There's a a linter for notifiers:
|
168
|
+
`Boppers::Testing::NotifierLinter`.
|
150
169
|
|
151
170
|
### Available notifiers
|
152
171
|
|
@@ -162,7 +181,8 @@ By default, Boppers comes with the following notifiers.
|
|
162
181
|
|
163
182
|
#### Hipchat
|
164
183
|
|
165
|
-
1. Create a "Send Notification" room API token at
|
184
|
+
1. Create a "Send Notification" room API token at
|
185
|
+
`https://[SUBDOMAIN].hipchat.com/rooms`.
|
166
186
|
2. The room id is available at the "Summary" section as "API ID".
|
167
187
|
|
168
188
|
```ruby
|
@@ -223,10 +243,13 @@ end
|
|
223
243
|
|
224
244
|
#### Telegram
|
225
245
|
|
226
|
-
1. [Create a bot](https://core.telegram.org/bots#6-botfather). The returned API
|
246
|
+
1. [Create a bot](https://core.telegram.org/bots#6-botfather). The returned API
|
247
|
+
token must be defined as `api_token:`.
|
227
248
|
2. Send a message to the bot.
|
228
|
-
3. Run `ruby setup/telegram.rb` locally to get the channel id. You may need to
|
229
|
-
|
249
|
+
3. Run `ruby setup/telegram.rb` locally to get the channel id. You may need to
|
250
|
+
install the dependencies with `bundle install` before doing it so.
|
251
|
+
4. Set the channel as `channel_id: <channel id>`. Sometimes id can be a negative
|
252
|
+
number and this is important.
|
230
253
|
|
231
254
|
```ruby
|
232
255
|
Boppers.configure do |config|
|
@@ -237,15 +260,18 @@ Boppers.configure do |config|
|
|
237
260
|
end
|
238
261
|
```
|
239
262
|
|
240
|
-
You can run `boppers setup telegram`, which will basically guide like those
|
263
|
+
You can run `boppers setup telegram`, which will basically guide like those
|
264
|
+
steps above. No tokens will be saved locally or remotely in any form.
|
241
265
|
|
242
266
|
#### Twitter
|
243
267
|
|
244
268
|
1. Create an user for your bot.
|
245
269
|
2. Follow your bot, and make your bot follow you.
|
246
|
-
3. Create a new Twitter application under your bot's account at
|
270
|
+
3. Create a new Twitter application under your bot's account at
|
271
|
+
https://apps.twitter.com/app/new
|
247
272
|
4. Go to "Keys and Access Tokens" and create a new access token.
|
248
|
-
5. Set `consumer_key:`, `consumer_secret:`, `access_token:` and `access_secret:`
|
273
|
+
5. Set `consumer_key:`, `consumer_secret:`, `access_token:` and `access_secret:`
|
274
|
+
named arguments, all available under "Keys and Access Token".
|
249
275
|
6. Set the user that'll receive the notification as `user: <username>`.
|
250
276
|
|
251
277
|
```ruby
|
@@ -262,9 +288,13 @@ end
|
|
262
288
|
|
263
289
|
## Deploying to Heroku
|
264
290
|
|
265
|
-
I'm assuming you installed the gem with `gem install boppers` and generated your
|
291
|
+
I'm assuming you installed the gem with `gem install boppers` and generated your
|
292
|
+
app.
|
266
293
|
|
267
|
-
Add your configuration to `config/boppers.rb`. Also make sure you don't hardcode
|
294
|
+
Add your configuration to `config/boppers.rb`. Also make sure you don't hardcode
|
295
|
+
any sensitive value, like API tokens or passwords. Use
|
296
|
+
[superconfig](https://rubygems.org/gems/superconfig) to manage access to your
|
297
|
+
environment variables.
|
268
298
|
|
269
299
|
Now, configure Heroku. Create a new app for this.
|
270
300
|
|
@@ -289,7 +319,7 @@ Make a commit and deploy to your Heroku account.
|
|
289
319
|
```
|
290
320
|
git add .
|
291
321
|
git commit -m "Initial commit"
|
292
|
-
git push heroku
|
322
|
+
git push heroku main
|
293
323
|
```
|
294
324
|
|
295
325
|
Scale up the boppers worker:
|
@@ -306,18 +336,30 @@ heroku dyno:type worker=hobby
|
|
306
336
|
|
307
337
|
## Development
|
308
338
|
|
309
|
-
After checking out the repo, run `bin/setup` to install dependencies. Then, run
|
339
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run
|
340
|
+
`rake test` to run the tests. You can also run `bin/console` for an interactive
|
341
|
+
prompt that will allow you to experiment.
|
310
342
|
|
311
|
-
To install this gem onto your local machine, run `bundle exec rake install`. To
|
343
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To
|
344
|
+
release a new version, update the version number in `version.rb`, and then run
|
345
|
+
`bundle exec rake release`, which will create a git tag for the version, push
|
346
|
+
git commits and tags, and push the `.gem` file to
|
347
|
+
[rubygems.org](https://rubygems.org).
|
312
348
|
|
313
349
|
## Contributing
|
314
350
|
|
315
|
-
Bug reports and pull requests are welcome on GitHub at
|
351
|
+
Bug reports and pull requests are welcome on GitHub at
|
352
|
+
https://github.com/fnando/boppers. This project is intended to be a safe,
|
353
|
+
welcoming space for collaboration, and contributors are expected to adhere to
|
354
|
+
the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
316
355
|
|
317
356
|
## License
|
318
357
|
|
319
|
-
The gem is available as open source under the terms of the
|
358
|
+
The gem is available as open source under the terms of the
|
359
|
+
[MIT License](https://opensource.org/licenses/MIT).
|
320
360
|
|
321
361
|
## Code of Conduct
|
322
362
|
|
323
|
-
Everyone interacting in the Boppers project’s codebases, issue trackers, chat
|
363
|
+
Everyone interacting in the Boppers project’s codebases, issue trackers, chat
|
364
|
+
rooms and mailing lists is expected to follow the
|
365
|
+
[code of conduct](https://github.com/fnando/boppers/blob/main/CODE_OF_CONDUCT.md).
|
data/bin/console
CHANGED
data/boppers.gemspec
CHANGED
@@ -6,29 +6,31 @@ Gem::Specification.new do |spec|
|
|
6
6
|
spec.name = "boppers"
|
7
7
|
spec.version = Boppers::VERSION
|
8
8
|
spec.authors = ["Nando Vieira"]
|
9
|
-
spec.email = ["fnando.
|
9
|
+
spec.email = ["me@fnando.com"]
|
10
10
|
|
11
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"
|
15
|
+
spec.required_ruby_version = ">= 3.0.0"
|
16
|
+
spec.metadata = {"rubygems_mfa_required" => "true"}
|
15
17
|
|
16
|
-
spec.files
|
18
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
17
19
|
f.match(%r{^(test|spec|features)/})
|
18
20
|
end
|
19
21
|
spec.bindir = "exe"
|
20
22
|
spec.executables = spec.files.grep(%r{^exe/}) {|f| File.basename(f) }
|
21
23
|
spec.require_paths = ["lib"]
|
22
24
|
|
23
|
-
spec.add_dependency "thor"
|
24
25
|
spec.add_dependency "aitch"
|
26
|
+
spec.add_dependency "thor"
|
25
27
|
|
26
28
|
spec.add_development_dependency "bundler"
|
27
|
-
spec.add_development_dependency "
|
29
|
+
spec.add_development_dependency "mail"
|
28
30
|
spec.add_development_dependency "minitest-utils"
|
29
|
-
spec.add_development_dependency "simplecov"
|
30
31
|
spec.add_development_dependency "pry-meta"
|
31
|
-
spec.add_development_dependency "
|
32
|
+
spec.add_development_dependency "rake"
|
33
|
+
spec.add_development_dependency "simplecov"
|
32
34
|
spec.add_development_dependency "telegram_bot"
|
33
35
|
spec.add_development_dependency "twitter"
|
34
36
|
end
|
data/lib/boppers/cli.rb
CHANGED
@@ -21,7 +21,7 @@ module Boppers
|
|
21
21
|
end
|
22
22
|
|
23
23
|
desc "version", "Prints the Boppers version information"
|
24
|
-
map %w
|
24
|
+
map %w[-v --version] => :version
|
25
25
|
|
26
26
|
def version
|
27
27
|
say "Boppers v#{VERSION}"
|
@@ -36,7 +36,7 @@ module Boppers
|
|
36
36
|
def plugin(name)
|
37
37
|
require "boppers/generator/plugin"
|
38
38
|
|
39
|
-
unless %w
|
39
|
+
unless %w[bopper notifier].include?(options[:type])
|
40
40
|
message = "ERROR: --type needs to be either 'bopper' or 'notifier'"
|
41
41
|
shell.error shell.set_color(message, :red)
|
42
42
|
exit 1
|
@@ -8,7 +8,7 @@ Bundler.require
|
|
8
8
|
# information about notifiers.
|
9
9
|
require "boppers/notifier/stdout"
|
10
10
|
|
11
|
-
Config =
|
11
|
+
Config = SuperConfig.new do
|
12
12
|
# mandatory :sendgrid_username, string
|
13
13
|
# mandatory :sendgrid_password, string
|
14
14
|
# mandatory :sendgrid_domain, string
|
@@ -50,7 +50,12 @@ Boppers.configure do |config|
|
|
50
50
|
# A bopper is anything that responds to #call, like a lambda.
|
51
51
|
# The following example returns the current time.
|
52
52
|
config.boppers << lambda do
|
53
|
-
|
53
|
+
$stdout.sync = true
|
54
|
+
Boppers.notify(
|
55
|
+
:time,
|
56
|
+
title: "Current time",
|
57
|
+
message: "Now is #{Time.now}"
|
58
|
+
)
|
54
59
|
end
|
55
60
|
|
56
61
|
# A bopper can also configure the polling interval by defining a
|
@@ -68,7 +73,11 @@ Boppers.configure do |config|
|
|
68
73
|
#
|
69
74
|
# def call
|
70
75
|
# @count += 1
|
71
|
-
# Boppers.notify(
|
76
|
+
# Boppers.notify(
|
77
|
+
# :counter,
|
78
|
+
# title: "Counter",
|
79
|
+
# message: "[#{Time.now}] Current count is #{@count}"
|
80
|
+
# )
|
72
81
|
# end
|
73
82
|
# end
|
74
83
|
#
|