bas 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +7 -0
  2. data/._.rspec_status +0 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +14 -0
  5. data/CHANGELOG.md +4 -0
  6. data/CODE_OF_CONDUCT.md +132 -0
  7. data/CONTRIBUTING.md +66 -0
  8. data/Gemfile +24 -0
  9. data/LICENSE +21 -0
  10. data/README.md +362 -0
  11. data/Rakefile +12 -0
  12. data/SECURITY.md +13 -0
  13. data/lib/bas/dispatcher/base.rb +31 -0
  14. data/lib/bas/dispatcher/discord/exceptions/invalid_webhook_token.rb +16 -0
  15. data/lib/bas/dispatcher/discord/implementation.rb +51 -0
  16. data/lib/bas/dispatcher/discord/types/response.rb +22 -0
  17. data/lib/bas/dispatcher/slack/exceptions/invalid_webhook_token.rb +16 -0
  18. data/lib/bas/dispatcher/slack/implementation.rb +51 -0
  19. data/lib/bas/dispatcher/slack/types/response.rb +21 -0
  20. data/lib/bas/domain/birthday.rb +25 -0
  21. data/lib/bas/domain/email.rb +34 -0
  22. data/lib/bas/domain/exceptions/function_not_implemented.rb +18 -0
  23. data/lib/bas/domain/pto.rb +28 -0
  24. data/lib/bas/domain/work_items_limit.rb +25 -0
  25. data/lib/bas/fetcher/base.rb +43 -0
  26. data/lib/bas/fetcher/imap/base.rb +70 -0
  27. data/lib/bas/fetcher/imap/types/response.rb +27 -0
  28. data/lib/bas/fetcher/imap/use_case/support_emails.rb +26 -0
  29. data/lib/bas/fetcher/notion/base.rb +52 -0
  30. data/lib/bas/fetcher/notion/exceptions/invalid_api_key.rb +15 -0
  31. data/lib/bas/fetcher/notion/exceptions/invalid_database_id.rb +15 -0
  32. data/lib/bas/fetcher/notion/helper.rb +21 -0
  33. data/lib/bas/fetcher/notion/types/response.rb +26 -0
  34. data/lib/bas/fetcher/notion/use_case/birthday_next_week.rb +41 -0
  35. data/lib/bas/fetcher/notion/use_case/birthday_today.rb +29 -0
  36. data/lib/bas/fetcher/notion/use_case/pto_next_week.rb +71 -0
  37. data/lib/bas/fetcher/notion/use_case/pto_today.rb +30 -0
  38. data/lib/bas/fetcher/notion/use_case/work_items_limit.rb +37 -0
  39. data/lib/bas/fetcher/postgres/base.rb +46 -0
  40. data/lib/bas/fetcher/postgres/helper.rb +16 -0
  41. data/lib/bas/fetcher/postgres/types/response.rb +42 -0
  42. data/lib/bas/fetcher/postgres/use_case/pto_today.rb +32 -0
  43. data/lib/bas/formatter/base.rb +53 -0
  44. data/lib/bas/formatter/birthday.rb +34 -0
  45. data/lib/bas/formatter/exceptions/invalid_data.rb +15 -0
  46. data/lib/bas/formatter/pto.rb +88 -0
  47. data/lib/bas/formatter/support_emails.rb +69 -0
  48. data/lib/bas/formatter/work_items_limit.rb +64 -0
  49. data/lib/bas/mapper/base.rb +30 -0
  50. data/lib/bas/mapper/imap/support_emails.rb +56 -0
  51. data/lib/bas/mapper/notion/birthday_today.rb +68 -0
  52. data/lib/bas/mapper/notion/pto_today.rb +70 -0
  53. data/lib/bas/mapper/notion/work_items_limit.rb +65 -0
  54. data/lib/bas/mapper/postgres/pto_today.rb +47 -0
  55. data/lib/bas/use_cases/types/config.rb +19 -0
  56. data/lib/bas/use_cases/use_case.rb +39 -0
  57. data/lib/bas/use_cases/use_cases.rb +377 -0
  58. data/lib/bas/version.rb +6 -0
  59. data/lib/bas.rb +9 -0
  60. data/renovate.json +6 -0
  61. data/sig/business_automation_system.rbs +4 -0
  62. metadata +107 -0
@@ -0,0 +1,377 @@
1
+ # frozen_string_literal: true
2
+
3
+ # fetcher
4
+ require_relative "../fetcher/notion/use_case/birthday_today"
5
+ require_relative "../fetcher/notion/use_case/birthday_next_week"
6
+ require_relative "../fetcher/notion/use_case/pto_today"
7
+ require_relative "../fetcher/notion/use_case/pto_next_week"
8
+ require_relative "../fetcher/notion/use_case/work_items_limit"
9
+ require_relative "../fetcher/postgres/use_case/pto_today"
10
+ require_relative "../fetcher/imap/use_case/support_emails"
11
+
12
+ # mapper
13
+ require_relative "../mapper/notion/birthday_today"
14
+ require_relative "../mapper/notion/pto_today"
15
+ require_relative "../mapper/notion/work_items_limit"
16
+ require_relative "../mapper/postgres/pto_today"
17
+ require_relative "../mapper/imap/support_emails"
18
+
19
+ # formatter
20
+ require_relative "../formatter/birthday"
21
+ require_relative "../formatter/pto"
22
+ require_relative "../formatter/work_items_limit"
23
+ require_relative "../formatter/support_emails"
24
+
25
+ # dispatcher
26
+ require_relative "../dispatcher/discord/implementation"
27
+ require_relative "../dispatcher/slack/implementation"
28
+
29
+ require_relative "use_case"
30
+ require_relative "./types/config"
31
+
32
+ ##
33
+ # This module provides factory methods for use cases within the system. Each method
34
+ # represents a use case implementation introduced in the system.
35
+ #
36
+ module UseCases
37
+ # Provides an instance of the Birthdays notifications from Notion to Discord use case implementation.
38
+ #
39
+ # <b>Example</b>
40
+ #
41
+ # options = {
42
+ # fetch_options: {
43
+ # database_id: NOTION_DATABASE_ID,
44
+ # secret: NOTION_API_INTEGRATION_SECRET,
45
+ # },
46
+ # dispatch_options: {
47
+ # webhook: "https://discord.com/api/webhooks/1199213527672565760/KmpoIzBet9xYG16oFh8W1RWHbpIqT7UtTBRrhfLcvWZdNiVZCTM-gpil2Qoy4eYEgpdf",
48
+ # name: "Birthday Bot"
49
+ # }
50
+ # }
51
+ #
52
+ # use_case = UseCases.notify_birthday_from_notion_to_discord(options)
53
+ # use_case.perform
54
+ #
55
+ # #################################################################################
56
+ #
57
+ # Requirements:
58
+ # * Notion database ID, from a database with the following structure:
59
+ #
60
+ # _________________________________________________________________________________
61
+ # | Complete Name (text) | BD_this_year (formula) | BD (date) |
62
+ # | -------------------- | --------------------------- | ------------------------ |
63
+ # | John Doe | January 24, 2024 | January 24, 2000 |
64
+ # | Jane Doe | June 20, 2024 | June 20, 2000 |
65
+ # ---------------------------------------------------------------------------------
66
+ # With the following formula for the BD_this_year column:
67
+ # dateAdd(prop("BD"), year(now()) - year(prop("BD")), "years")
68
+ #
69
+ # * A Notion secret, which can be obtained, by creating an integration here: `https://developers.notion.com/`,
70
+ # browsing on the <View my integations> option, and selecting the <New Integration> or <Create new>
71
+ # integration** buttons.
72
+ # * A webhook key, which can be generated directly on discrod on the desired channel, following this instructions:
73
+ # https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks
74
+ #
75
+ def self.notify_birthday_from_notion_to_discord(options)
76
+ fetcher = Fetcher::Notion::BirthdayToday.new(options[:fetch_options])
77
+ mapper = Mapper::Notion::BirthdayToday.new
78
+ formatter = Formatter::Birthday.new(options[:format_options])
79
+ dispatcher = Dispatcher::Discord::Implementation.new(options[:dispatch_options])
80
+ use_case_config = UseCases::Types::Config.new(fetcher, mapper, formatter, dispatcher)
81
+
82
+ UseCases::UseCase.new(use_case_config)
83
+ end
84
+
85
+ # Provides an instance of the next week Birthdays notifications from Notion to Discord use case implementation.
86
+ #
87
+ # <b>Example</b>
88
+ #
89
+ # options = {
90
+ # fetch_options: {
91
+ # database_id: NOTION_DATABASE_ID,
92
+ # secret: NOTION_API_INTEGRATION_SECRET,
93
+ # },
94
+ # dispatch_options: {
95
+ # webhook: "https://discord.com/api/webhooks/1199213527672565760/KmpoIzBet9xYG16oFh8W1RWHbpIqT7UtTBRrhfLcvWZdNiVZCTM-gpil2Qoy4eYEgpdf",
96
+ # name: "Birthday Bot"
97
+ # },
98
+ # format_options: {
99
+ # template: "individual_name, Wishing you a very happy birthday! Enjoy your special day! :birthday: :gift:",
100
+ # timezone: "-05:00"
101
+ # }
102
+ # }
103
+ #
104
+ # use_case = UseCases.notify_next_week_birthday_from_notion_to_discord(options)
105
+ # use_case.perform
106
+ #
107
+ # #################################################################################
108
+ #
109
+ # Requirements:
110
+ # * Notion database ID, from a database with the following structure:
111
+ #
112
+ # _________________________________________________________________________________
113
+ # | Complete Name (text) | BD_this_year (formula) | BD (date) |
114
+ # | -------------------- | --------------------------- | ------------------------ |
115
+ # | John Doe | January 24, 2024 | January 24, 2000 |
116
+ # | Jane Doe | June 20, 2024 | June 20, 2000 |
117
+ # ---------------------------------------------------------------------------------
118
+ # With the following formula for the BD_this_year column:
119
+ # dateAdd(prop("BD"), year(now()) - year(prop("BD")), "years")
120
+ #
121
+ # * A Notion secret, which can be obtained, by creating an integration here: `https://developers.notion.com/`,
122
+ # browsing on the <View my integations> option, and selecting the <New Integration> or <Create new>
123
+ # integration** buttons.
124
+ # * A webhook key, which can be generated directly on discrod on the desired channel, following this instructions:
125
+ # https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks
126
+ #
127
+ def self.notify_next_week_birthday_from_notion_to_discord(options)
128
+ fetcher = Fetcher::Notion::BirthdayNextWeek.new(options[:fetch_options])
129
+ mapper = Mapper::Notion::BirthdayToday.new
130
+ formatter = Formatter::Birthday.new(options[:format_options])
131
+ dispatcher = Dispatcher::Discord::Implementation.new(options[:dispatch_options])
132
+ use_case_cofig = UseCases::Types::Config.new(fetcher, mapper, formatter, dispatcher)
133
+
134
+ UseCases::UseCase.new(use_case_cofig)
135
+ end
136
+
137
+ # Provides an instance of the PTO notifications from Notion to Discord use case implementation.
138
+ #
139
+ # <br>
140
+ # <b>Example</b>
141
+ #
142
+ # options = {
143
+ # fetch_options: {
144
+ # database_id: NOTION_DATABASE_ID,
145
+ # secret: NOTION_API_INTEGRATION_SECRET,
146
+ # },
147
+ # dispatch_options: {
148
+ # webhook: "https://discord.com/api/webhooks/1199213527672565760/KmpoIzBet9xYG16oFh8W1RWHbpIqT7UtTBRrhfLcvWZdNiVZCTM-gpil2Qoy4eYEgpdf",
149
+ # name: "Pto Bot"
150
+ # }
151
+ # }
152
+ #
153
+ # use_case = UseCases.notify_pto_from_notion_to_discord(options)
154
+ # use_case.perform
155
+ #
156
+ # #################################################################################
157
+ #
158
+ # Requirements:
159
+ # * Notion database ID, from a database with the following structure:
160
+ #
161
+ # ________________________________________________________________________________________________________
162
+ # | Person (person) | Desde? (date) | Hasta? (date) |
163
+ # | -------------------- | --------------------------------------- | ------------------------------------ |
164
+ # | John Doe | January 24, 2024 | January 27, 2024 |
165
+ # | Jane Doe | November 11, 2024 2:00 PM | November 11, 2024 6:00 PM |
166
+ # ---------------------------------------------------------------------------------------------------------
167
+ #
168
+ # * A Notion secret, which can be obtained, by creating an integration here: `https://developers.notion.com/`,
169
+ # browsing on the <View my integations> option, and selecting the <New Integration> or <Create new>
170
+ # integration** buttons.
171
+ # * A webhook key, which can be generated directly on discrod on the desired channel, following this instructions:
172
+ # https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks
173
+ #
174
+ def self.notify_pto_from_notion_to_discord(options)
175
+ fetcher = Fetcher::Notion::PtoToday.new(options[:fetch_options])
176
+ mapper = Mapper::Notion::PtoToday.new
177
+ formatter = Formatter::Pto.new(options[:format_options])
178
+ dispatcher = Dispatcher::Discord::Implementation.new(options[:dispatch_options])
179
+ use_case_config = UseCases::Types::Config.new(fetcher, mapper, formatter, dispatcher)
180
+
181
+ UseCases::UseCase.new(use_case_config)
182
+ end
183
+
184
+ # Provides an instance of the next week PTO notifications from Notion to Discord use case implementation.
185
+ #
186
+ # <br>
187
+ # <b>Example</b>
188
+ #
189
+ # options = {
190
+ # fetch_options: {
191
+ # database_id: NOTION_DATABASE_ID,
192
+ # secret: NOTION_API_INTEGRATION_SECRET,
193
+ # },
194
+ # dispatch_options: {
195
+ # webhook: "https://discord.com/api/webhooks/1199213527672565760/KmpoIzBet9xYG16oFh8W1RWHbpIqT7UtTBRrhfLcvWZdNiVZCTM-gpil2Qoy4eYEgpdf",
196
+ # name: "Pto Bot"
197
+ # },
198
+ # format_options: {
199
+ # template: ":beach: individual_name its going to be on PTO next week,",
200
+ # timezone: "-05:00"
201
+ # }
202
+ # }
203
+ #
204
+ # use_case = UseCases.notify_next_week_pto_from_notion_to_discord(options)
205
+ # use_case.perform
206
+ #
207
+ # #################################################################################
208
+ #
209
+ # Requirements:
210
+ # * Notion database ID, from a database with the following structure:
211
+ #
212
+ # ________________________________________________________________________________________________________
213
+ # | Person (person) | Desde? (date) | Hasta? (date) |
214
+ # | -------------------- | --------------------------------------- | ------------------------------------ |
215
+ # | John Doe | January 24, 2024 | January 27, 2024 |
216
+ # | Jane Doe | November 11, 2024 2:00 PM | November 11, 2024 6:00 PM |
217
+ # ---------------------------------------------------------------------------------------------------------
218
+ #
219
+ # * A Notion secret, which can be obtained, by creating an integration here: `https://developers.notion.com/`,
220
+ # browsing on the <View my integations> option, and selecting the <New Integration> or <Create new>
221
+ # integration** buttons.
222
+ # * A webhook key, which can be generated directly on discrod on the desired channel, following this instructions:
223
+ # https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks
224
+ #
225
+ def self.notify_next_week_pto_from_notion_to_discord(options)
226
+ fetcher = Fetcher::Notion::PtoNextWeek.new(options[:fetch_options])
227
+ mapper = Mapper::Notion::PtoToday.new
228
+ formatter = Formatter::Pto.new(options[:format_options])
229
+ dispatcher = Dispatcher::Discord::Implementation.new(options[:dispatch_options])
230
+ use_case_config = UseCases::Types::Config.new(fetcher, mapper, formatter, dispatcher)
231
+
232
+ UseCases::UseCase.new(use_case_config)
233
+ end
234
+
235
+ # Provides an instance of the PTO notifications from Postgres to Slack use case implementation.
236
+ #
237
+ # <br>
238
+ # <b>Example</b>
239
+ #
240
+ # options = {
241
+ # fetch_options: {
242
+ # connection: {
243
+ # host: "localhost",
244
+ # port: 5432,
245
+ # dbname: "db_pto",
246
+ # user: "postgres",
247
+ # password: "postgres"
248
+ # }
249
+ # },
250
+ # dispatch_options:{
251
+ # webhook: "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX",
252
+ # name: "Pto Bot"
253
+ # },
254
+ # format_options: {
255
+ # template: "Custom template",
256
+ # timezone: "-05:00"
257
+ # }
258
+ # }
259
+ #
260
+ # use_case = UseCases.notify_pto_from_postgres_to_slack(options)
261
+ # use_case.perform
262
+ #
263
+ # #################################################################################
264
+ #
265
+ # Requirements:
266
+ # * A connection to a Postgres database and a table with the following structure:
267
+ #
268
+ # Column | Type | Collation | Nullable | Default
269
+ # -----------------+------------------------+-----------+----------+------------------------------
270
+ # id | integer | | not null | generated always as identity
271
+ # create_time | date | | |
272
+ # individual_name | character varying(255) | | |
273
+ # start_date | date | | |
274
+ # end_date | date | | |
275
+ #
276
+ # * A webhook key, which can be generated directly on slack on the desired channel, following this instructions:
277
+ # https://api.slack.com/messaging/webhooks#create_a_webhook
278
+ #
279
+ def self.notify_pto_from_postgres_to_slack(options)
280
+ fetcher = Fetcher::Postgres::PtoToday.new(options[:fetch_options])
281
+ mapper = Mapper::Postgres::PtoToday.new
282
+ formatter = Formatter::Pto.new(options[:format_options])
283
+ dispatcher = Dispatcher::Slack::Implementation.new(options[:dispatch_options])
284
+ use_case_config = UseCases::Types::Config.new(fetcher, mapper, formatter, dispatcher)
285
+
286
+ UseCases::UseCase.new(use_case_config)
287
+ end
288
+
289
+ # Provides an instance of the Work Items wip limit notifications from Notion to Discord use case implementation.
290
+ #
291
+ # <br>
292
+ # <b>Example</b>
293
+ #
294
+ # options = {
295
+ # fetch_options: {
296
+ # database_id: NOTION_DATABASE_ID,
297
+ # secret: NOTION_API_INTEGRATION_SECRET
298
+ # },
299
+ # dispatch_options: {
300
+ # webhook: "https://discord.com/api/webhooks/1199213527672565760/KmpoIzBet9xYG16oFh8W1RWHbpIqT7UtTBRrhfLcvWZdNiVZCTM-gpil2Qoy4eYEgpdf",
301
+ # name: "wipLimit"
302
+ # }
303
+ # }
304
+ #
305
+ # use_case = UseCases.notify_wip_limit_from_notion_to_discord(options)
306
+ # use_case.perform
307
+ #
308
+ # #################################################################################
309
+ #
310
+ # Requirements:
311
+ # * Notion database ID, from a database with the following structure:
312
+ #
313
+ # _________________________________________________________________________________
314
+ # | OK | Status | Responsible Domain |
315
+ # | -------------------- | --------------------------- | ------------------------ |
316
+ # | ✅ | In Progress | "kommit.admin" |
317
+ # | 🚩 | Fail | "kommit.ops" |
318
+ # ---------------------------------------------------------------------------------
319
+ #
320
+ # * A Notion secret, which can be obtained, by creating an integration here: `https://developers.notion.com/`,
321
+ # browsing on the <View my integations> option, and selecting the <New Integration> or <Create new>
322
+ # integration** buttons.
323
+ # * A webhook key, which can be generated directly on discrod on the desired channel, following this instructions:
324
+ # https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks
325
+ #
326
+ def self.notify_wip_limit_from_notion_to_discord(options)
327
+ fetcher = Fetcher::Notion::WorkItemsLimit.new(options[:fetch_options])
328
+ mapper = Mapper::Notion::WorkItemsLimit.new
329
+ formatter = Formatter::WorkItemsLimit.new(options[:format_options])
330
+ dispatcher = Dispatcher::Discord::Implementation.new(options[:dispatch_options])
331
+ use_case_config = UseCases::Types::Config.new(fetcher, mapper, formatter, dispatcher)
332
+
333
+ UseCases::UseCase.new(use_case_config)
334
+ end
335
+
336
+ # Provides an instance of the support emails from an google IMAP server to Discord use case implementation.
337
+ #
338
+ # <br>
339
+ # <b>Example</b>
340
+ #
341
+ # options = {
342
+ # fetch_options: {
343
+ # user: 'info@email.co',
344
+ # refresh_token: REFRESH_TOKEN,
345
+ # client_id: CLIENT_ID,
346
+ # client_secret: CLIENT_SECRET,
347
+ # inbox: 'INBOX',
348
+ # search_email: 'support@email.co'
349
+ # },
350
+ # dispatch_options: {
351
+ # webhook: "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX",
352
+ # name: "emailSupport"
353
+ # }
354
+ # }
355
+ #
356
+ # use_case = UseCases.notify_support_email_from_imap_to_discord(options)
357
+ # use_case.perform
358
+ #
359
+ # #################################################################################
360
+ #
361
+ # Requirements:
362
+ # * A google gmail account with IMAP support activated.
363
+ # * A set of authorization parameters like a client_id, client_secret, and a resfresh_token. To
364
+ # generate them, follow this instructions: https://developers.google.com/identity/protocols/oauth2
365
+ # * A webhook key, which can be generated directly on discrod on the desired channel, following this instructions:
366
+ # https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks
367
+ #
368
+ def self.notify_support_email_from_imap_to_discord(options)
369
+ fetcher = Fetcher::Imap::SupportEmails.new(options[:fetch_options])
370
+ mapper = Mapper::Imap::SupportEmails.new
371
+ formatter = Formatter::SupportEmails.new(options[:format_options])
372
+ dispatcher = Dispatcher::Discord::Implementation.new(options[:dispatch_options])
373
+ use_case_config = UseCases::Types::Config.new(fetcher, mapper, formatter, dispatcher)
374
+
375
+ UseCases::UseCase.new(use_case_config)
376
+ end
377
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bas
4
+ # Gem version
5
+ VERSION = "0.1.0"
6
+ end
data/lib/bas.rb ADDED
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "bas/version"
4
+ require_relative "bas/use_cases/use_cases"
5
+
6
+ module Bas # rubocop:disable Style/Documentation
7
+ include UseCases
8
+ class Error < StandardError; end
9
+ end
data/renovate.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3
+ "extends": [
4
+ "config:semverAllMonthly"
5
+ ]
6
+ }
@@ -0,0 +1,4 @@
1
+ module BusinessNotificationSystem
2
+ VERSION: String
3
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
+ end
metadata ADDED
@@ -0,0 +1,107 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bas
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - kommitters Open Source
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2024-03-26 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A versatile business automation system offering key components for building
14
+ various use cases. It provides an easy-to-use tool for implementing automation
15
+ workflows without excessive complexity. Formerly known as 'bns'.
16
+ email:
17
+ - oss@kommit.co
18
+ executables: []
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - "._.rspec_status"
23
+ - ".rspec"
24
+ - ".rubocop.yml"
25
+ - CHANGELOG.md
26
+ - CODE_OF_CONDUCT.md
27
+ - CONTRIBUTING.md
28
+ - Gemfile
29
+ - LICENSE
30
+ - README.md
31
+ - Rakefile
32
+ - SECURITY.md
33
+ - lib/bas.rb
34
+ - lib/bas/dispatcher/base.rb
35
+ - lib/bas/dispatcher/discord/exceptions/invalid_webhook_token.rb
36
+ - lib/bas/dispatcher/discord/implementation.rb
37
+ - lib/bas/dispatcher/discord/types/response.rb
38
+ - lib/bas/dispatcher/slack/exceptions/invalid_webhook_token.rb
39
+ - lib/bas/dispatcher/slack/implementation.rb
40
+ - lib/bas/dispatcher/slack/types/response.rb
41
+ - lib/bas/domain/birthday.rb
42
+ - lib/bas/domain/email.rb
43
+ - lib/bas/domain/exceptions/function_not_implemented.rb
44
+ - lib/bas/domain/pto.rb
45
+ - lib/bas/domain/work_items_limit.rb
46
+ - lib/bas/fetcher/base.rb
47
+ - lib/bas/fetcher/imap/base.rb
48
+ - lib/bas/fetcher/imap/types/response.rb
49
+ - lib/bas/fetcher/imap/use_case/support_emails.rb
50
+ - lib/bas/fetcher/notion/base.rb
51
+ - lib/bas/fetcher/notion/exceptions/invalid_api_key.rb
52
+ - lib/bas/fetcher/notion/exceptions/invalid_database_id.rb
53
+ - lib/bas/fetcher/notion/helper.rb
54
+ - lib/bas/fetcher/notion/types/response.rb
55
+ - lib/bas/fetcher/notion/use_case/birthday_next_week.rb
56
+ - lib/bas/fetcher/notion/use_case/birthday_today.rb
57
+ - lib/bas/fetcher/notion/use_case/pto_next_week.rb
58
+ - lib/bas/fetcher/notion/use_case/pto_today.rb
59
+ - lib/bas/fetcher/notion/use_case/work_items_limit.rb
60
+ - lib/bas/fetcher/postgres/base.rb
61
+ - lib/bas/fetcher/postgres/helper.rb
62
+ - lib/bas/fetcher/postgres/types/response.rb
63
+ - lib/bas/fetcher/postgres/use_case/pto_today.rb
64
+ - lib/bas/formatter/base.rb
65
+ - lib/bas/formatter/birthday.rb
66
+ - lib/bas/formatter/exceptions/invalid_data.rb
67
+ - lib/bas/formatter/pto.rb
68
+ - lib/bas/formatter/support_emails.rb
69
+ - lib/bas/formatter/work_items_limit.rb
70
+ - lib/bas/mapper/base.rb
71
+ - lib/bas/mapper/imap/support_emails.rb
72
+ - lib/bas/mapper/notion/birthday_today.rb
73
+ - lib/bas/mapper/notion/pto_today.rb
74
+ - lib/bas/mapper/notion/work_items_limit.rb
75
+ - lib/bas/mapper/postgres/pto_today.rb
76
+ - lib/bas/use_cases/types/config.rb
77
+ - lib/bas/use_cases/use_case.rb
78
+ - lib/bas/use_cases/use_cases.rb
79
+ - lib/bas/version.rb
80
+ - renovate.json
81
+ - sig/business_automation_system.rbs
82
+ homepage: https://github.com/kommitters/bas
83
+ licenses:
84
+ - MIT
85
+ metadata:
86
+ homepage_uri: https://github.com/kommitters/bas
87
+ source_code_uri: https://github.com/kommitters/bas
88
+ post_install_message:
89
+ rdoc_options: []
90
+ require_paths:
91
+ - lib
92
+ required_ruby_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: 2.6.0
97
+ required_rubygems_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ requirements: []
103
+ rubygems_version: 3.5.3
104
+ signing_key:
105
+ specification_version: 4
106
+ summary: BAS - Business automation system
107
+ test_files: []