bas 0.2.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +9 -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