bas 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.
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: []