bas 0.1.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|