bas 0.2.0 → 0.3.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 (58) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/README.md +25 -22
  4. data/lib/bas/formatter/base.rb +2 -2
  5. data/lib/bas/formatter/birthday.rb +8 -4
  6. data/lib/bas/formatter/pto.rb +8 -4
  7. data/lib/bas/formatter/support_emails.rb +7 -3
  8. data/lib/bas/formatter/types/response.rb +16 -0
  9. data/lib/bas/formatter/work_items_limit.rb +8 -4
  10. data/lib/bas/process/base.rb +39 -0
  11. data/lib/bas/{dispatcher → process}/discord/exceptions/invalid_webhook_token.rb +1 -1
  12. data/lib/bas/process/discord/implementation.rb +71 -0
  13. data/lib/bas/{dispatcher → process}/discord/types/response.rb +1 -1
  14. data/lib/bas/{dispatcher → process}/slack/exceptions/invalid_webhook_token.rb +1 -1
  15. data/lib/bas/process/slack/implementation.rb +70 -0
  16. data/lib/bas/{dispatcher → process}/slack/types/response.rb +1 -1
  17. data/lib/bas/process/types/response.rb +16 -0
  18. data/lib/bas/{fetcher → read}/base.rb +8 -8
  19. data/lib/bas/{fetcher → read}/github/base.rb +7 -7
  20. data/lib/bas/{fetcher → read}/github/types/response.rb +1 -1
  21. data/lib/bas/read/github/use_case/repo_issues.rb +17 -0
  22. data/lib/bas/{fetcher → read}/imap/base.rb +7 -7
  23. data/lib/bas/{fetcher → read}/imap/types/response.rb +1 -1
  24. data/lib/bas/read/imap/use_case/support_emails.rb +26 -0
  25. data/lib/bas/{fetcher → read}/notion/base.rb +8 -8
  26. data/lib/bas/{fetcher → read}/notion/helper.rb +1 -1
  27. data/lib/bas/{fetcher → read}/notion/types/response.rb +1 -1
  28. data/lib/bas/{fetcher → read}/notion/use_case/birthday_next_week.rb +6 -6
  29. data/lib/bas/{fetcher → read}/notion/use_case/birthday_today.rb +6 -6
  30. data/lib/bas/{fetcher → read}/notion/use_case/pto_next_week.rb +6 -6
  31. data/lib/bas/{fetcher → read}/notion/use_case/pto_today.rb +6 -6
  32. data/lib/bas/{fetcher → read}/notion/use_case/work_items_limit.rb +5 -5
  33. data/lib/bas/{fetcher → read}/postgres/base.rb +8 -8
  34. data/lib/bas/{fetcher → read}/postgres/helper.rb +1 -1
  35. data/lib/bas/{fetcher → read}/postgres/types/response.rb +1 -1
  36. data/lib/bas/{fetcher → read}/postgres/use_case/pto_today.rb +6 -6
  37. data/lib/bas/{mapper → serialize}/base.rb +7 -7
  38. data/lib/bas/{mapper → serialize}/github/issues.rb +7 -7
  39. data/lib/bas/{mapper → serialize}/imap/support_emails.rb +7 -7
  40. data/lib/bas/{mapper → serialize}/notion/birthday_today.rb +7 -7
  41. data/lib/bas/{mapper → serialize}/notion/pto_today.rb +14 -12
  42. data/lib/bas/{mapper → serialize}/notion/work_items_limit.rb +7 -7
  43. data/lib/bas/{mapper → serialize}/postgres/pto_today.rb +7 -7
  44. data/lib/bas/use_cases/types/config.rb +6 -5
  45. data/lib/bas/use_cases/use_case.rb +13 -10
  46. data/lib/bas/use_cases/use_cases.rb +71 -61
  47. data/lib/bas/version.rb +1 -1
  48. data/lib/bas/write/base.rb +36 -0
  49. data/lib/bas/write/logs/base.rb +33 -0
  50. data/lib/bas/write/logs/use_case/console_log.rb +22 -0
  51. metadata +42 -37
  52. data/lib/bas/dispatcher/base.rb +0 -31
  53. data/lib/bas/dispatcher/discord/implementation.rb +0 -51
  54. data/lib/bas/dispatcher/slack/implementation.rb +0 -51
  55. data/lib/bas/fetcher/github/use_case/repo_issues.rb +0 -17
  56. data/lib/bas/fetcher/imap/use_case/support_emails.rb +0 -26
  57. /data/lib/bas/{fetcher → read}/notion/exceptions/invalid_api_key.rb +0 -0
  58. /data/lib/bas/{fetcher → read}/notion/exceptions/invalid_database_id.rb +0 -0
@@ -1,51 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "../base"
4
- require_relative "./exceptions/invalid_webhook_token"
5
- require_relative "./types/response"
6
-
7
- module Dispatcher
8
- module Discord
9
- ##
10
- # This class is an implementation of the Dispatcher::Base interface, specifically designed
11
- # for dispatching messages to Discord.
12
- #
13
- class Implementation < Base
14
- # Implements the dispatching logic for the Discord use case. It sends a POST request to
15
- # the Discord webhook with the specified payload.
16
- #
17
- # <br>
18
- # <b>Params:</b>
19
- # * <tt>String</tt> payload: Payload to be dispatched to discord.
20
- # <br>
21
- # <b>raises</b> <tt>Exceptions::Discord::InvalidWebookToken</tt> if the provided webhook token is invalid.
22
- #
23
- # <br>
24
- # <b>returns</b> <tt>Dispatcher::Discord::Types::Response</tt>
25
- #
26
- def dispatch(payload)
27
- body = {
28
- username: name,
29
- avatar_url: "",
30
- content: payload
31
- }.to_json
32
- response = HTTParty.post(webhook, { body: body, headers: { "Content-Type" => "application/json" } })
33
-
34
- discord_response = Dispatcher::Discord::Types::Response.new(response)
35
-
36
- validate_response(discord_response)
37
- end
38
-
39
- private
40
-
41
- def validate_response(response)
42
- case response.code
43
- when 50_027
44
- raise Discord::Exceptions::InvalidWebookToken, response.message
45
- else
46
- response
47
- end
48
- end
49
- end
50
- end
51
- end
@@ -1,51 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "../base"
4
- require_relative "./exceptions/invalid_webhook_token"
5
- require_relative "./types/response"
6
-
7
- module Dispatcher
8
- module Slack
9
- ##
10
- # This class is an implementation of the Dispatcher::Base interface, specifically designed
11
- # for dispatching messages to Slack.
12
- #
13
- class Implementation < Base
14
- # Implements the dispatching logic for the Slack use case. It sends a POST request to
15
- # the Slack webhook with the specified payload.
16
- #
17
- # <br>
18
- # <b>Params:</b>
19
- # * <tt>String</tt> payload: Payload to be dispatched to slack.
20
- # <br>
21
- # <b>raises</b> <tt>Exceptions::Slack::InvalidWebookToken</tt> if the provided webhook token is invalid.
22
- #
23
- # <br>
24
- # <b>returns</b> <tt>Dispatcher::Slack::Types::Response</tt>
25
- #
26
- def dispatch(payload)
27
- body = {
28
- username: name,
29
- text: payload
30
- }.to_json
31
-
32
- response = HTTParty.post(webhook, { body: body, headers: { "Content-Type" => "application/json" } })
33
-
34
- slack_response = Dispatcher::Discord::Types::Response.new(response)
35
-
36
- validate_response(slack_response)
37
- end
38
-
39
- private
40
-
41
- def validate_response(response)
42
- case response.http_code
43
- when 403
44
- raise Dispatcher::Slack::Exceptions::InvalidWebookToken, response.message
45
- else
46
- response
47
- end
48
- end
49
- end
50
- end
51
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "../base"
4
-
5
- module Fetcher
6
- module Github
7
- ##
8
- # This class is an implementation of the Fetcher::Github::Base interface, specifically designed
9
- # for fetching issues from a Github repository.
10
- #
11
- class RepoIssues < Github::Base
12
- def fetch
13
- execute("list_issues", config[:repo])
14
- end
15
- end
16
- end
17
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "../base"
4
-
5
- module Fetcher
6
- module Imap
7
- ##
8
- # This class is an implementation of the Fetcher::Imap::Base interface, specifically designed
9
- # for fetching support email from a Google Gmail account.
10
- #
11
- class SupportEmails < Imap::Base
12
- TOKEN_URI = "https://oauth2.googleapis.com/token"
13
- EMAIL_DOMAIN = "imap.gmail.com"
14
- EMAIL_PORT = 993
15
-
16
- # Implements the data fetching filter for support emails from Google Gmail.
17
- #
18
- def fetch
19
- yesterday = (Time.now - (60 * 60 * 24)).strftime("%e-%b-%Y")
20
- query = ["TO", config[:search_email], "SINCE", yesterday]
21
-
22
- execute(EMAIL_DOMAIN, EMAIL_PORT, TOKEN_URI, query)
23
- end
24
- end
25
- end
26
- end