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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/Gemfile +6 -0
- data/README.md +27 -24
- data/lib/bas/domain/issue.rb +22 -0
- data/lib/bas/domain/pto.rb +45 -4
- data/lib/bas/formatter/base.rb +2 -2
- data/lib/bas/formatter/birthday.rb +8 -4
- data/lib/bas/formatter/pto.rb +27 -26
- data/lib/bas/formatter/support_emails.rb +7 -3
- data/lib/bas/formatter/types/response.rb +16 -0
- data/lib/bas/formatter/work_items_limit.rb +8 -4
- data/lib/bas/process/base.rb +39 -0
- data/lib/bas/{dispatcher → process}/discord/exceptions/invalid_webhook_token.rb +1 -1
- data/lib/bas/process/discord/implementation.rb +71 -0
- data/lib/bas/{dispatcher → process}/discord/types/response.rb +1 -1
- data/lib/bas/{dispatcher → process}/slack/exceptions/invalid_webhook_token.rb +1 -1
- data/lib/bas/process/slack/implementation.rb +70 -0
- data/lib/bas/{dispatcher → process}/slack/types/response.rb +1 -1
- data/lib/bas/process/types/response.rb +16 -0
- data/lib/bas/{fetcher → read}/base.rb +8 -8
- data/lib/bas/read/github/base.rb +57 -0
- data/lib/bas/read/github/types/response.rb +27 -0
- data/lib/bas/read/github/use_case/repo_issues.rb +17 -0
- data/lib/bas/{fetcher → read}/imap/base.rb +7 -7
- data/lib/bas/{fetcher → read}/imap/types/response.rb +1 -1
- data/lib/bas/read/imap/use_case/support_emails.rb +26 -0
- data/lib/bas/{fetcher → read}/notion/base.rb +8 -8
- data/lib/bas/{fetcher → read}/notion/helper.rb +1 -1
- data/lib/bas/{fetcher → read}/notion/types/response.rb +1 -1
- data/lib/bas/{fetcher → read}/notion/use_case/birthday_next_week.rb +6 -6
- data/lib/bas/{fetcher → read}/notion/use_case/birthday_today.rb +6 -6
- data/lib/bas/{fetcher → read}/notion/use_case/pto_next_week.rb +6 -6
- data/lib/bas/{fetcher → read}/notion/use_case/pto_today.rb +6 -6
- data/lib/bas/{fetcher → read}/notion/use_case/work_items_limit.rb +5 -5
- data/lib/bas/{fetcher → read}/postgres/base.rb +8 -8
- data/lib/bas/{fetcher → read}/postgres/helper.rb +1 -1
- data/lib/bas/{fetcher → read}/postgres/types/response.rb +1 -1
- data/lib/bas/{fetcher → read}/postgres/use_case/pto_today.rb +6 -6
- data/lib/bas/{mapper → serialize}/base.rb +7 -7
- data/lib/bas/serialize/github/issues.rb +57 -0
- data/lib/bas/{mapper → serialize}/imap/support_emails.rb +7 -7
- data/lib/bas/{mapper → serialize}/notion/birthday_today.rb +7 -7
- data/lib/bas/serialize/notion/pto_today.rb +75 -0
- data/lib/bas/{mapper → serialize}/notion/work_items_limit.rb +7 -7
- data/lib/bas/{mapper → serialize}/postgres/pto_today.rb +9 -9
- data/lib/bas/use_cases/types/config.rb +6 -5
- data/lib/bas/use_cases/use_case.rb +13 -10
- data/lib/bas/use_cases/use_cases.rb +71 -59
- data/lib/bas/version.rb +1 -1
- data/lib/bas/write/base.rb +36 -0
- data/lib/bas/write/logs/base.rb +33 -0
- data/lib/bas/write/logs/use_case/console_log.rb +22 -0
- metadata +43 -33
- data/lib/bas/dispatcher/base.rb +0 -31
- data/lib/bas/dispatcher/discord/implementation.rb +0 -51
- data/lib/bas/dispatcher/slack/implementation.rb +0 -51
- data/lib/bas/fetcher/imap/use_case/support_emails.rb +0 -26
- data/lib/bas/mapper/notion/pto_today.rb +0 -70
- /data/lib/bas/{fetcher → read}/notion/exceptions/invalid_api_key.rb +0 -0
- /data/lib/bas/{fetcher → read}/notion/exceptions/invalid_database_id.rb +0 -0
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "../domain/exceptions/function_not_implemented"
|
4
|
+
|
5
|
+
module Write
|
6
|
+
##
|
7
|
+
# The Write::Base class serves as the foundation for implementing specific data write within the Write module.
|
8
|
+
# Operating as an interface, this class defines essential attributes and methods, providing a blueprint for creating
|
9
|
+
# a custom write.
|
10
|
+
#
|
11
|
+
class Base
|
12
|
+
attr_reader :config
|
13
|
+
|
14
|
+
# Initializes the write with essential configuration parameters.
|
15
|
+
#
|
16
|
+
def initialize(config = {})
|
17
|
+
@config = config
|
18
|
+
end
|
19
|
+
|
20
|
+
# A method meant to execute the write request to an specific destination depending on the implementation.
|
21
|
+
# Must be overridden by subclasses, with specific logic based on the use case.
|
22
|
+
#
|
23
|
+
# <br>
|
24
|
+
# <b>raises</b> <tt>Domain::Exceptions::FunctionNotImplemented</tt> when missing implementation.
|
25
|
+
#
|
26
|
+
def execute(_process_response)
|
27
|
+
raise Domain::Exceptions::FunctionNotImplemented
|
28
|
+
end
|
29
|
+
|
30
|
+
protected
|
31
|
+
|
32
|
+
def write(_method, _data)
|
33
|
+
raise Domain::Exceptions::FunctionNotImplemented
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "../base"
|
4
|
+
|
5
|
+
module Write
|
6
|
+
module Logs
|
7
|
+
##
|
8
|
+
# This class is an implementation of the Write::Base interface, specifically designed
|
9
|
+
# for writting logs as a STDOUT.
|
10
|
+
#
|
11
|
+
class Base < Write::Base
|
12
|
+
attr_reader :logger
|
13
|
+
|
14
|
+
# Initializes the write with essential configuration parameters like the logger
|
15
|
+
# using the Logger gem.
|
16
|
+
#
|
17
|
+
def initialize(config = {})
|
18
|
+
super(config)
|
19
|
+
|
20
|
+
@logger = Logger.new($stdout)
|
21
|
+
end
|
22
|
+
|
23
|
+
protected
|
24
|
+
|
25
|
+
# Implements the writing logic to write logs data as STOUT. It uses the Logger
|
26
|
+
# gem and execute the given method (info, error, etc) to write the log
|
27
|
+
#
|
28
|
+
def write(method, log_message)
|
29
|
+
@logger.send(method, log_message)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "../base"
|
4
|
+
|
5
|
+
module Write
|
6
|
+
module Logs
|
7
|
+
##
|
8
|
+
# This class is an implementation of the Write::Logs::Base interface, specifically designed
|
9
|
+
# to write logs as STDOUT
|
10
|
+
class ConsoleLog < Logs::Base
|
11
|
+
# Implements the writting process logic for the ConsoleLog use case.
|
12
|
+
#
|
13
|
+
# <br>
|
14
|
+
# <b>Params:</b>
|
15
|
+
# * <tt>Process::Types::Response</tt> process response: standard process response with the data to be logged.
|
16
|
+
#
|
17
|
+
def execute(_process_response)
|
18
|
+
write("info", "Process Executed")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bas
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kommitters Open Source
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-04-16 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A versatile business automation system offering key components for building
|
14
14
|
various use cases. It provides an easy-to-use tool for implementing automation
|
@@ -31,52 +31,62 @@ files:
|
|
31
31
|
- Rakefile
|
32
32
|
- SECURITY.md
|
33
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
34
|
- lib/bas/domain/birthday.rb
|
42
35
|
- lib/bas/domain/email.rb
|
43
36
|
- lib/bas/domain/exceptions/function_not_implemented.rb
|
37
|
+
- lib/bas/domain/issue.rb
|
44
38
|
- lib/bas/domain/pto.rb
|
45
39
|
- 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
40
|
- lib/bas/formatter/base.rb
|
65
41
|
- lib/bas/formatter/birthday.rb
|
66
42
|
- lib/bas/formatter/exceptions/invalid_data.rb
|
67
43
|
- lib/bas/formatter/pto.rb
|
68
44
|
- lib/bas/formatter/support_emails.rb
|
45
|
+
- lib/bas/formatter/types/response.rb
|
69
46
|
- lib/bas/formatter/work_items_limit.rb
|
70
|
-
- lib/bas/
|
71
|
-
- lib/bas/
|
72
|
-
- lib/bas/
|
73
|
-
- lib/bas/
|
74
|
-
- lib/bas/
|
75
|
-
- lib/bas/
|
47
|
+
- lib/bas/process/base.rb
|
48
|
+
- lib/bas/process/discord/exceptions/invalid_webhook_token.rb
|
49
|
+
- lib/bas/process/discord/implementation.rb
|
50
|
+
- lib/bas/process/discord/types/response.rb
|
51
|
+
- lib/bas/process/slack/exceptions/invalid_webhook_token.rb
|
52
|
+
- lib/bas/process/slack/implementation.rb
|
53
|
+
- lib/bas/process/slack/types/response.rb
|
54
|
+
- lib/bas/process/types/response.rb
|
55
|
+
- lib/bas/read/base.rb
|
56
|
+
- lib/bas/read/github/base.rb
|
57
|
+
- lib/bas/read/github/types/response.rb
|
58
|
+
- lib/bas/read/github/use_case/repo_issues.rb
|
59
|
+
- lib/bas/read/imap/base.rb
|
60
|
+
- lib/bas/read/imap/types/response.rb
|
61
|
+
- lib/bas/read/imap/use_case/support_emails.rb
|
62
|
+
- lib/bas/read/notion/base.rb
|
63
|
+
- lib/bas/read/notion/exceptions/invalid_api_key.rb
|
64
|
+
- lib/bas/read/notion/exceptions/invalid_database_id.rb
|
65
|
+
- lib/bas/read/notion/helper.rb
|
66
|
+
- lib/bas/read/notion/types/response.rb
|
67
|
+
- lib/bas/read/notion/use_case/birthday_next_week.rb
|
68
|
+
- lib/bas/read/notion/use_case/birthday_today.rb
|
69
|
+
- lib/bas/read/notion/use_case/pto_next_week.rb
|
70
|
+
- lib/bas/read/notion/use_case/pto_today.rb
|
71
|
+
- lib/bas/read/notion/use_case/work_items_limit.rb
|
72
|
+
- lib/bas/read/postgres/base.rb
|
73
|
+
- lib/bas/read/postgres/helper.rb
|
74
|
+
- lib/bas/read/postgres/types/response.rb
|
75
|
+
- lib/bas/read/postgres/use_case/pto_today.rb
|
76
|
+
- lib/bas/serialize/base.rb
|
77
|
+
- lib/bas/serialize/github/issues.rb
|
78
|
+
- lib/bas/serialize/imap/support_emails.rb
|
79
|
+
- lib/bas/serialize/notion/birthday_today.rb
|
80
|
+
- lib/bas/serialize/notion/pto_today.rb
|
81
|
+
- lib/bas/serialize/notion/work_items_limit.rb
|
82
|
+
- lib/bas/serialize/postgres/pto_today.rb
|
76
83
|
- lib/bas/use_cases/types/config.rb
|
77
84
|
- lib/bas/use_cases/use_case.rb
|
78
85
|
- lib/bas/use_cases/use_cases.rb
|
79
86
|
- lib/bas/version.rb
|
87
|
+
- lib/bas/write/base.rb
|
88
|
+
- lib/bas/write/logs/base.rb
|
89
|
+
- lib/bas/write/logs/use_case/console_log.rb
|
80
90
|
- renovate.json
|
81
91
|
- sig/business_automation_system.rbs
|
82
92
|
homepage: https://github.com/kommitters/bas
|
data/lib/bas/dispatcher/base.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "../domain/exceptions/function_not_implemented"
|
4
|
-
|
5
|
-
module Dispatcher
|
6
|
-
##
|
7
|
-
# Serves as a foundational structure for implementing specific dispatchers. Acting as an interface,
|
8
|
-
# this class defines essential attributes and methods, providing a blueprint for creating custom
|
9
|
-
# dispatchers tailored to different platforms or services.
|
10
|
-
#
|
11
|
-
class Base
|
12
|
-
attr_reader :webhook, :name
|
13
|
-
|
14
|
-
# Initializes the dispatcher with essential configuration parameters.
|
15
|
-
#
|
16
|
-
def initialize(config)
|
17
|
-
@webhook = config[:webhook]
|
18
|
-
@name = config[:name]
|
19
|
-
end
|
20
|
-
|
21
|
-
# A method meant to send messages to an specific destination depending on the implementation.
|
22
|
-
# Must be overridden by subclasses, with specific logic based on the use case.
|
23
|
-
#
|
24
|
-
# <br>
|
25
|
-
# <b>returns</b> a <tt>Discord::Response</tt>
|
26
|
-
#
|
27
|
-
def dispatch(_payload)
|
28
|
-
raise Domain::Exceptions::FunctionNotImplemented
|
29
|
-
end
|
30
|
-
end
|
31
|
-
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 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,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
|
@@ -1,70 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "../../domain/pto"
|
4
|
-
require_relative "../base"
|
5
|
-
|
6
|
-
module Mapper
|
7
|
-
module Notion
|
8
|
-
##
|
9
|
-
# This class implementats the methods of the Mapper::Base module, specifically designed for preparing or
|
10
|
-
# shaping PTO's data coming from a Fetcher::Base implementation.
|
11
|
-
#
|
12
|
-
class PtoToday
|
13
|
-
include Base
|
14
|
-
|
15
|
-
PTO_PARAMS = ["Person", "Desde?", "Hasta?"].freeze
|
16
|
-
|
17
|
-
# Implements the logic for shaping the results from a fetcher response.
|
18
|
-
#
|
19
|
-
# <br>
|
20
|
-
# <b>Params:</b>
|
21
|
-
# * <tt>Fetcher::Notion::Types::Response</tt> notion_response: Notion response object.
|
22
|
-
#
|
23
|
-
# <br>
|
24
|
-
# <b>returns</b> <tt>List<Domain::Pto></tt> ptos_list, mapped PTO's to be used by a Formatter::Base
|
25
|
-
# implementation.
|
26
|
-
#
|
27
|
-
def map(notion_response)
|
28
|
-
return [] if notion_response.results.empty?
|
29
|
-
|
30
|
-
normalized_notion_data = normalize_response(notion_response.results)
|
31
|
-
|
32
|
-
normalized_notion_data.map do |pto|
|
33
|
-
Domain::Pto.new(pto["Person"], pto["Desde?"], pto["Hasta?"])
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
private
|
38
|
-
|
39
|
-
def normalize_response(response)
|
40
|
-
return [] if response.nil?
|
41
|
-
|
42
|
-
response.map do |value|
|
43
|
-
pto_fields = value["properties"].slice(*PTO_PARAMS)
|
44
|
-
|
45
|
-
pto_fields.each do |field, pto_value|
|
46
|
-
pto_fields[field] = extract_pto_value(field, pto_value)
|
47
|
-
end
|
48
|
-
|
49
|
-
pto_fields
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def extract_pto_value(field, value)
|
54
|
-
case field
|
55
|
-
when "Person" then extract_person_field_value(value)
|
56
|
-
when "Desde?" then extract_date_field_value(value)
|
57
|
-
when "Hasta?" then extract_date_field_value(value)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def extract_person_field_value(data)
|
62
|
-
data["people"][0]["name"]
|
63
|
-
end
|
64
|
-
|
65
|
-
def extract_date_field_value(data)
|
66
|
-
data["date"]["start"]
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
File without changes
|
File without changes
|