bas 0.1.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 (61) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -0
  3. data/Gemfile +6 -0
  4. data/README.md +27 -24
  5. data/lib/bas/domain/issue.rb +22 -0
  6. data/lib/bas/domain/pto.rb +45 -4
  7. data/lib/bas/formatter/base.rb +2 -2
  8. data/lib/bas/formatter/birthday.rb +8 -4
  9. data/lib/bas/formatter/pto.rb +27 -26
  10. data/lib/bas/formatter/support_emails.rb +7 -3
  11. data/lib/bas/formatter/types/response.rb +16 -0
  12. data/lib/bas/formatter/work_items_limit.rb +8 -4
  13. data/lib/bas/process/base.rb +39 -0
  14. data/lib/bas/{dispatcher → process}/discord/exceptions/invalid_webhook_token.rb +1 -1
  15. data/lib/bas/process/discord/implementation.rb +71 -0
  16. data/lib/bas/{dispatcher → process}/discord/types/response.rb +1 -1
  17. data/lib/bas/{dispatcher → process}/slack/exceptions/invalid_webhook_token.rb +1 -1
  18. data/lib/bas/process/slack/implementation.rb +70 -0
  19. data/lib/bas/{dispatcher → process}/slack/types/response.rb +1 -1
  20. data/lib/bas/process/types/response.rb +16 -0
  21. data/lib/bas/{fetcher → read}/base.rb +8 -8
  22. data/lib/bas/read/github/base.rb +57 -0
  23. data/lib/bas/read/github/types/response.rb +27 -0
  24. data/lib/bas/read/github/use_case/repo_issues.rb +17 -0
  25. data/lib/bas/{fetcher → read}/imap/base.rb +7 -7
  26. data/lib/bas/{fetcher → read}/imap/types/response.rb +1 -1
  27. data/lib/bas/read/imap/use_case/support_emails.rb +26 -0
  28. data/lib/bas/{fetcher → read}/notion/base.rb +8 -8
  29. data/lib/bas/{fetcher → read}/notion/helper.rb +1 -1
  30. data/lib/bas/{fetcher → read}/notion/types/response.rb +1 -1
  31. data/lib/bas/{fetcher → read}/notion/use_case/birthday_next_week.rb +6 -6
  32. data/lib/bas/{fetcher → read}/notion/use_case/birthday_today.rb +6 -6
  33. data/lib/bas/{fetcher → read}/notion/use_case/pto_next_week.rb +6 -6
  34. data/lib/bas/{fetcher → read}/notion/use_case/pto_today.rb +6 -6
  35. data/lib/bas/{fetcher → read}/notion/use_case/work_items_limit.rb +5 -5
  36. data/lib/bas/{fetcher → read}/postgres/base.rb +8 -8
  37. data/lib/bas/{fetcher → read}/postgres/helper.rb +1 -1
  38. data/lib/bas/{fetcher → read}/postgres/types/response.rb +1 -1
  39. data/lib/bas/{fetcher → read}/postgres/use_case/pto_today.rb +6 -6
  40. data/lib/bas/{mapper → serialize}/base.rb +7 -7
  41. data/lib/bas/serialize/github/issues.rb +57 -0
  42. data/lib/bas/{mapper → serialize}/imap/support_emails.rb +7 -7
  43. data/lib/bas/{mapper → serialize}/notion/birthday_today.rb +7 -7
  44. data/lib/bas/serialize/notion/pto_today.rb +75 -0
  45. data/lib/bas/{mapper → serialize}/notion/work_items_limit.rb +7 -7
  46. data/lib/bas/{mapper → serialize}/postgres/pto_today.rb +9 -9
  47. data/lib/bas/use_cases/types/config.rb +6 -5
  48. data/lib/bas/use_cases/use_case.rb +13 -10
  49. data/lib/bas/use_cases/use_cases.rb +71 -59
  50. data/lib/bas/version.rb +1 -1
  51. data/lib/bas/write/base.rb +36 -0
  52. data/lib/bas/write/logs/base.rb +33 -0
  53. data/lib/bas/write/logs/use_case/console_log.rb +22 -0
  54. metadata +43 -33
  55. data/lib/bas/dispatcher/base.rb +0 -31
  56. data/lib/bas/dispatcher/discord/implementation.rb +0 -51
  57. data/lib/bas/dispatcher/slack/implementation.rb +0 -51
  58. data/lib/bas/fetcher/imap/use_case/support_emails.rb +0 -26
  59. data/lib/bas/mapper/notion/pto_today.rb +0 -70
  60. /data/lib/bas/{fetcher → read}/notion/exceptions/invalid_api_key.rb +0 -0
  61. /data/lib/bas/{fetcher → read}/notion/exceptions/invalid_database_id.rb +0 -0
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Dispatcher
3
+ module Process
4
4
  module Slack
5
5
  module Exceptions
6
6
  ##
@@ -0,0 +1,70 @@
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 Process
8
+ module Slack
9
+ ##
10
+ # This class is an implementation of the Process::Base interface, specifically designed
11
+ # for sending messages to Slack.
12
+ #
13
+ class Implementation < Base
14
+ attr_reader :webhook, :name
15
+
16
+ # Initializes the process with essential configuration parameters.
17
+ #
18
+ def initialize(config = {})
19
+ super(config)
20
+
21
+ @webhook = config[:webhook]
22
+ @name = config[:name]
23
+ end
24
+
25
+ # Implements the sending process logic for the Slack use case. It sends a POST request to
26
+ # the Slack webhook with the specified payload.
27
+ #
28
+ # <br>
29
+ # <b>Params:</b>
30
+ # * <tt>Formatter::Types::Response</tt> formatter response: standard formatter response
31
+ # with the Payload to be send to slack.
32
+ # <br>
33
+ # <b>raises</b> <tt>Exceptions::Slack::InvalidWebookToken</tt> if the provided webhook
34
+ # token is invalid.
35
+ #
36
+ # <br>
37
+ # <b>returns</b> <tt>Process::Types::Response</tt>
38
+ #
39
+ def execute(format_response)
40
+ response = valid_format_response(format_response)
41
+
42
+ body = post_body(response.data)
43
+
44
+ response = HTTParty.post(webhook, { body: body, headers: { "Content-Type" => "application/json" } })
45
+
46
+ slack_response = Process::Discord::Types::Response.new(response)
47
+
48
+ validate_response(slack_response)
49
+ end
50
+
51
+ private
52
+
53
+ def post_body(payload)
54
+ {
55
+ username: name,
56
+ text: payload
57
+ }.to_json
58
+ end
59
+
60
+ def validate_response(response)
61
+ case response.http_code
62
+ when 403
63
+ raise Process::Slack::Exceptions::InvalidWebookToken, response.message
64
+ else
65
+ Process::Types::Response.new(response)
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Dispatcher
3
+ module Process
4
4
  module Slack
5
5
  module Types
6
6
  ##
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Process
4
+ module Types
5
+ ##
6
+ # Represents a response received from a Process. It encapsulates the formatted data to be used by
7
+ # a Write component.
8
+ class Response
9
+ attr_reader :data
10
+
11
+ def initialize(response)
12
+ @data = response
13
+ end
14
+ end
15
+ end
16
+ end
@@ -2,41 +2,41 @@
2
2
 
3
3
  require_relative "../domain/exceptions/function_not_implemented"
4
4
 
5
- module Fetcher
5
+ module Read
6
6
  ##
7
- # The Fetcher::Base class serves as the foundation for implementing specific data fetchers within the Fetcher module.
7
+ # The Read::Base class serves as the foundation for implementing specific data readers within the Read module.
8
8
  # Operating as an interface, this class defines essential attributes and methods, providing a blueprint for creating
9
- # custom fetchers tailored to different data sources.
9
+ # custom readers tailored to different data sources.
10
10
  #
11
11
  class Base
12
12
  attr_reader :config
13
13
 
14
- # Initializes the fetcher with essential configuration parameters.
14
+ # Initializes the reader with essential configuration parameters.
15
15
  #
16
16
  def initialize(config)
17
17
  @config = config
18
18
  end
19
19
 
20
- # A method meant to fetch data from an specific source depending on the implementation.
20
+ # A method meant to execute the read request from an specific source depending on the implementation.
21
21
  # Must be overridden by subclasses, with specific logic based on the use case.
22
22
  #
23
23
  # <br>
24
24
  # <b>raises</b> <tt>Domain::Exceptions::FunctionNotImplemented</tt> when missing implementation.
25
25
  #
26
- def fetch
26
+ def execute
27
27
  raise Domain::Exceptions::FunctionNotImplemented
28
28
  end
29
29
 
30
30
  protected
31
31
 
32
- # A method meant to execute the fetch request, retrieven the required data
32
+ # A method meant to read from the source, retrieven the required data
33
33
  # from an specific filter configuration depending on the use case implementation.
34
34
  # Must be overridden by subclasses, with specific logic based on the use case.
35
35
  #
36
36
  # <br>
37
37
  # <b>raises</b> <tt>Domain::Exceptions::FunctionNotImplemented</tt> when missing implementation.
38
38
  #
39
- def execute
39
+ def read(*_filters)
40
40
  raise Domain::Exceptions::FunctionNotImplemented
41
41
  end
42
42
  end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "octokit"
4
+ require "openssl"
5
+ require "jwt"
6
+
7
+ require_relative "../base"
8
+ require_relative "./types/response"
9
+
10
+ module Read
11
+ module Github
12
+ ##
13
+ # This class is an implementation of the Read::Base interface, specifically designed
14
+ # for reading data from a GitHub repository.
15
+ #
16
+ class Base < Read::Base
17
+ protected
18
+
19
+ # Implements the data reading logic to get data from a Github repository.
20
+ # It connects to Github using the octokit gem, authenticates with a github app,
21
+ # request the data and returns a validated response.
22
+ #
23
+ def read(method, *filter)
24
+ octokit_response = octokit.public_send(method, *filter)
25
+
26
+ Read::Github::Types::Response.new(octokit_response)
27
+ end
28
+
29
+ private
30
+
31
+ def octokit
32
+ Octokit::Client.new(bearer_token: access_token)
33
+ end
34
+
35
+ def access_token
36
+ app = Octokit::Client.new(client_id: config[:app_id], bearer_token: jwt)
37
+
38
+ app.create_app_installation_access_token(config[:installation_id])[:token]
39
+ end
40
+
41
+ def jwt
42
+ private_pem = File.read(config[:secret_path])
43
+ private_key = OpenSSL::PKey::RSA.new(private_pem)
44
+
45
+ JWT.encode(jwt_payload, private_key, "RS256")
46
+ end
47
+
48
+ def jwt_payload
49
+ {
50
+ iat: Time.now.to_i - 60,
51
+ exp: Time.now.to_i + (10 * 60),
52
+ iss: config[:app_id]
53
+ }
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Read
4
+ module Github
5
+ module Types
6
+ ##
7
+ # Represents a response received from the Octokit Github client. It encapsulates essential
8
+ # information about the response, providing a structured way to handle and analyze
9
+ # it's responses.
10
+ class Response
11
+ attr_reader :status_code, :message, :results
12
+
13
+ def initialize(response)
14
+ if response.empty?
15
+ @status_code = 404
16
+ @message = "no result were found"
17
+ @results = []
18
+ else
19
+ @status_code = 200
20
+ @message = "success"
21
+ @results = response
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../base"
4
+
5
+ module Read
6
+ module Github
7
+ ##
8
+ # This class is an implementation of the Read::Github::Base interface, specifically designed
9
+ # for reading issues from a Github repository.
10
+ #
11
+ class RepoIssues < Github::Base
12
+ def execute
13
+ read("list_issues", config[:repo])
14
+ end
15
+ end
16
+ end
17
+ end
@@ -6,25 +6,25 @@ require "gmail_xoauth"
6
6
  require_relative "../base"
7
7
  require_relative "./types/response"
8
8
 
9
- module Fetcher
9
+ module Read
10
10
  module Imap
11
11
  ##
12
- # This class is an implementation of the Fetcher::Base interface, specifically designed
13
- # for fetching data from an IMAP server.
12
+ # This class is an implementation of the Read::Base interface, specifically designed
13
+ # for reading data from an IMAP server.
14
14
  #
15
- class Base < Fetcher::Base
15
+ class Base < Read::Base
16
16
  protected
17
17
 
18
- # Implements the data fetching logic for emails data from an IMAP server.
18
+ # Implements the reading logic for emails data from an IMAP server.
19
19
  # It connects to an IMAP server inbox, request emails base on a filter,
20
20
  # and returns a validated response.
21
21
  #
22
- def execute(email_domain, email_port, token_uri, query)
22
+ def read(email_domain, email_port, token_uri, query)
23
23
  access_token = refresh_token(token_uri)
24
24
 
25
25
  imap_fetch(email_domain, email_port, query, access_token)
26
26
 
27
- Fetcher::Imap::Types::Response.new(@emails)
27
+ Read::Imap::Types::Response.new(@emails)
28
28
  end
29
29
 
30
30
  private
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Fetcher
3
+ module Read
4
4
  module Imap
5
5
  module Types
6
6
  ##
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../base"
4
+
5
+ module Read
6
+ module Imap
7
+ ##
8
+ # This class is an implementation of the Read::Imap::Base interface, specifically designed
9
+ # for reading 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 reading filter for support emails from Google Gmail.
17
+ #
18
+ def execute
19
+ yesterday = (Time.now - (60 * 60 * 24)).strftime("%d-%b-%Y")
20
+ query = ["TO", config[:search_email], "SINCE", yesterday]
21
+
22
+ read(EMAIL_DOMAIN, EMAIL_PORT, TOKEN_URI, query)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -8,18 +8,18 @@ require_relative "./exceptions/invalid_database_id"
8
8
  require_relative "./types/response"
9
9
  require_relative "./helper"
10
10
 
11
- module Fetcher
11
+ module Read
12
12
  module Notion
13
13
  ##
14
- # This class is an implementation of the Fetcher::Base interface, specifically designed
15
- # for fetching data from Notion.
14
+ # This class is an implementation of the Read::Base interface, specifically designed
15
+ # for reading data from Notion.
16
16
  #
17
- class Base < Fetcher::Base
17
+ class Base < Read::Base
18
18
  NOTION_BASE_URL = "https://api.notion.com"
19
19
 
20
20
  protected
21
21
 
22
- # Implements the data fetching logic for data from Notion. It sends a POST
22
+ # Implements the read logic for data from Notion. It sends a POST
23
23
  # request to the Notion API to query the specified database and returns a validated response.
24
24
  #
25
25
  # <br>
@@ -28,14 +28,14 @@ module Fetcher
28
28
  # <b>raises</b> <tt>Exceptions::Notion::InvalidDatabaseId</tt> if the Database id provided is incorrect
29
29
  # or invalid.
30
30
  #
31
- def execute(filter)
31
+ def read(filter)
32
32
  url = "#{NOTION_BASE_URL}/v1/databases/#{config[:database_id]}/query"
33
33
 
34
34
  httparty_response = HTTParty.post(url, { body: filter.to_json, headers: headers })
35
35
 
36
- notion_response = Fetcher::Notion::Types::Response.new(httparty_response)
36
+ notion_response = Read::Notion::Types::Response.new(httparty_response)
37
37
 
38
- Fetcher::Notion::Helper.validate_response(notion_response)
38
+ Read::Notion::Helper.validate_response(notion_response)
39
39
  end
40
40
 
41
41
  private
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Fetcher
3
+ module Read
4
4
  module Notion
5
5
  ##
6
6
  # Provides common fuctionalities along the Notion domain.
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Fetcher
3
+ module Read
4
4
  module Notion
5
5
  module Types
6
6
  ##
@@ -2,18 +2,18 @@
2
2
 
3
3
  require_relative "../base"
4
4
 
5
- module Fetcher
5
+ module Read
6
6
  module Notion
7
7
  ##
8
- # This class is an implementation of the Fetcher::Notion::Base interface, specifically designed
9
- # for fetching next week birthdays data from Notion.
8
+ # This class is an implementation of the Read::Notion::Base interface, specifically designed
9
+ # for reading next week birthdays data from Notion.
10
10
  #
11
11
  class BirthdayNextWeek < Notion::Base
12
12
  DAYS_BEFORE_NOTIFY = 8
13
13
 
14
- # Implements the data fetching filter for next week Birthdays data from Notion.
14
+ # Implements the data reading filter for next week Birthdays data from Notion.
15
15
  #
16
- def fetch
16
+ def execute
17
17
  filter = {
18
18
  filter: {
19
19
  or: [
@@ -22,7 +22,7 @@ module Fetcher
22
22
  }
23
23
  }
24
24
 
25
- execute(filter)
25
+ read(filter)
26
26
  end
27
27
 
28
28
  private
@@ -2,16 +2,16 @@
2
2
 
3
3
  require_relative "../base"
4
4
 
5
- module Fetcher
5
+ module Read
6
6
  module Notion
7
7
  ##
8
- # This class is an implementation of the Fetcher::Notion::Base interface, specifically designed
9
- # for fetching birthday data from Notion.
8
+ # This class is an implementation of the Read::Notion::Base interface, specifically designed
9
+ # for reading birthday data from Notion.
10
10
  #
11
11
  class BirthdayToday < Notion::Base
12
- # Implements the data fetching filter for todays Birthdays data from Notion.
12
+ # Implements the reading filter for todays Birthdays data from Notion.
13
13
  #
14
- def fetch
14
+ def execute
15
15
  today = Time.now.utc.strftime("%F").to_s
16
16
 
17
17
  filter = {
@@ -22,7 +22,7 @@ module Fetcher
22
22
  }
23
23
  }
24
24
 
25
- execute(filter)
25
+ read(filter)
26
26
  end
27
27
  end
28
28
  end
@@ -2,19 +2,19 @@
2
2
 
3
3
  require_relative "../base"
4
4
 
5
- module Fetcher
5
+ module Read
6
6
  module Notion
7
7
  ##
8
- # This class is an implementation of the Fetcher::Notion::Base interface, specifically designed
9
- # for fetching next week Paid Time Off (PTO) data from Notion.
8
+ # This class is an implementation of the Read::Notion::Base interface, specifically designed
9
+ # for reading next week Paid Time Off (PTO) data from Notion.
10
10
  #
11
11
  class PtoNextWeek < Notion::Base
12
- # Implements the data fetching filter for next week PTO's data from Notion.
12
+ # Implements the reading filter for next week PTO's data from Notion.
13
13
  #
14
- def fetch
14
+ def execute
15
15
  filter = build_filter
16
16
 
17
- execute(filter)
17
+ read(filter)
18
18
  end
19
19
 
20
20
  private
@@ -2,16 +2,16 @@
2
2
 
3
3
  require_relative "../base"
4
4
 
5
- module Fetcher
5
+ module Read
6
6
  module Notion
7
7
  ##
8
- # This class is an implementation of the Fetcher::Notion::Base interface, specifically designed
9
- # for fetching Paid Time Off (PTO) data from Notion.
8
+ # This class is an implementation of the Read::Notion::Base interface, specifically designed
9
+ # for reading Paid Time Off (PTO) data from Notion.
10
10
  #
11
11
  class PtoToday < Notion::Base
12
- # Implements the data fetching filter for todays PTO's data from Notion.
12
+ # Implements the reading filter for todays PTO's data from Notion.
13
13
  #
14
- def fetch
14
+ def execute
15
15
  today = Time.now.utc.strftime("%F").to_s
16
16
 
17
17
  filter = {
@@ -23,7 +23,7 @@ module Fetcher
23
23
  }
24
24
  }
25
25
 
26
- execute(filter)
26
+ read(filter)
27
27
  end
28
28
  end
29
29
  end
@@ -2,16 +2,16 @@
2
2
 
3
3
  require_relative "../base"
4
4
 
5
- module Fetcher
5
+ module Read
6
6
  module Notion
7
7
  ##
8
- # This class is an implementation of the Fetcher::Notion::Base interface, specifically designed
8
+ # This class is an implementation of the Read::Notion::Base interface, specifically designed
9
9
  # for counting "in progress" work items from work item database in Notion.
10
10
  #
11
11
  class WorkItemsLimit < Notion::Base
12
- # Implements the data fetching count of "in progress" work items from Notion.
12
+ # Implements the data reading count of "in progress" work items from Notion.
13
13
  #
14
- def fetch
14
+ def execute
15
15
  filter = {
16
16
  filter: {
17
17
  "and": [
@@ -21,7 +21,7 @@ module Fetcher
21
21
  }
22
22
  }
23
23
 
24
- execute(filter)
24
+ read(filter)
25
25
  end
26
26
 
27
27
  private
@@ -6,28 +6,28 @@ require_relative "../base"
6
6
  require_relative "./types/response"
7
7
  require_relative "./helper"
8
8
 
9
- module Fetcher
9
+ module Read
10
10
  module Postgres
11
11
  ##
12
- # This class is an implementation of the Fetcher::Base interface, specifically designed
13
- # for fetching data from Postgres.
12
+ # This class is an implementation of the Read::Base interface, specifically designed
13
+ # for reading data from Postgres.
14
14
  #
15
- class Base < Fetcher::Base
15
+ class Base < Read::Base
16
16
  protected
17
17
 
18
- # Implements the data fetching logic from a Postgres database. It use the PG gem
18
+ # Implements the read logic from a Postgres database. It use the PG gem
19
19
  # to request data from a local or external database and returns a validated response.
20
20
  #
21
21
  # Gem: pg (https://rubygems.org/gems/pg)
22
22
  #
23
- def execute(query)
23
+ def read(query)
24
24
  pg_connection = PG::Connection.new(config[:connection])
25
25
 
26
26
  pg_result = execute_query(pg_connection, query)
27
27
 
28
- postgres_response = Fetcher::Postgres::Types::Response.new(pg_result)
28
+ postgres_response = Read::Postgres::Types::Response.new(pg_result)
29
29
 
30
- Fetcher::Postgres::Helper.validate_response(postgres_response)
30
+ Read::Postgres::Helper.validate_response(postgres_response)
31
31
  end
32
32
 
33
33
  private
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Fetcher
3
+ module Read
4
4
  module Postgres
5
5
  ##
6
6
  # Provides common fuctionalities along the Postgres domain.
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Fetcher
3
+ module Read
4
4
  module Postgres
5
5
  module Types
6
6
  ##
@@ -2,17 +2,17 @@
2
2
 
3
3
  require_relative "../base"
4
4
 
5
- module Fetcher
5
+ module Read
6
6
  module Postgres
7
7
  ##
8
- # This class is an implementation of the Fetcher::Postgres::Base interface, specifically designed
9
- # for fetching Paid Time Off (PTO) data from a Postgres Database.
8
+ # This class is an implementation of the Read::Postgres::Base interface, specifically designed
9
+ # for reading Paid Time Off (PTO) data from a Postgres Database.
10
10
  #
11
11
  class PtoToday < Base
12
- # Implements the data fetching query for todays PTO data from a Postgres database.
12
+ # Implements the data reading query for todays PTO data from a Postgres database.
13
13
  #
14
- def fetch
15
- execute(build_query)
14
+ def execute
15
+ read(build_query)
16
16
  end
17
17
 
18
18
  private
@@ -2,28 +2,28 @@
2
2
 
3
3
  require_relative "../domain/exceptions/function_not_implemented"
4
4
 
5
- module Mapper
5
+ module Serialize
6
6
  ##
7
- # The Mapper::Base module serves as the foundation for implementing specific data shaping logic within the
8
- # Mapper module. Defines essential methods, that provide a blueprint for organizing or shaping data in a manner
7
+ # The Serialize::Base module serves as the foundation for implementing specific data shaping logic within the
8
+ # Serialize module. Defines essential methods, that provide a blueprint for organizing or shaping data in a manner
9
9
  # suitable for downstream formatting processes.
10
10
  #
11
11
  module Base
12
- # An method meant to prepare or organize the data coming from an implementation of the Fetcher::Base interface.
12
+ # An method meant to prepare or organize the data coming from an implementation of the Read::Base interface.
13
13
  # Must be overridden by subclasses, with specific logic based on the use case.
14
14
  #
15
15
  # <br>
16
16
  # <b>Params:</b>
17
- # * <tt>Fetcher::Notion::Types::Response</tt> response: Response produced by a fetcher.
17
+ # * <tt>Read::Notion::Types::Response</tt> response: Response produced by a reader.
18
18
  #
19
19
  # <br>
20
20
  #
21
21
  # <b>raises</b> <tt>Domain::Exceptions::FunctionNotImplemented</tt> when missing implementation.
22
22
  # <br>
23
23
  #
24
- # <b>returns</b> <tt>List<Domain::></tt> Mapped list of data, ready to be formatted.
24
+ # <b>returns</b> <tt>List<Domain::></tt> Serialize list of data, ready to be formatted.
25
25
  #
26
- def map(_response)
26
+ def execute(_response)
27
27
  raise Domain::Exceptions::FunctionNotImplemented
28
28
  end
29
29
  end