ehbrs_ruby_utils 0.28.0 → 0.30.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/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress.rb +21 -0
- data/lib/ehbrs_ruby_utils/bga/parsers/table/active_players.rb +25 -0
- data/lib/ehbrs_ruby_utils/bga/parsers/table/{players.rb → ended_players.rb} +1 -1
- data/lib/ehbrs_ruby_utils/bga/parsers/table.rb +27 -6
- data/lib/ehbrs_ruby_utils/bga/session/player_tables_on_game_in_progress.rb +39 -0
- data/lib/ehbrs_ruby_utils/bga/session/table.rb +7 -6
- data/lib/ehbrs_ruby_utils/bga/table/player.rb +2 -2
- data/lib/ehbrs_ruby_utils/bga/urls.rb +6 -0
- data/lib/ehbrs_ruby_utils/gjt1/manager.rb +10 -5
- data/lib/ehbrs_ruby_utils/mudslide/message.rb +44 -0
- data/lib/ehbrs_ruby_utils/mudslide.rb +9 -0
- data/lib/ehbrs_ruby_utils/version.rb +1 -1
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress_spec.rb +7 -0
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress_spec_files/player_84920871_2023-06-12.source.html +8657 -0
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress_spec_files/player_84920871_2023-06-12.target.yaml +21 -0
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress_spec_files/player_93167144_2023-06-12.source.html +8657 -0
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress_spec_files/player_93167144_2023-06-12.target.yaml +3 -0
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress_spec_files/player_93205235_2023-06-12.source.html +8657 -0
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress_spec_files/player_93205235_2023-06-12.target.yaml +7 -0
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress_spec_files/player_93212034_2023-06-12.source.html +8657 -0
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress_spec_files/player_93212034_2023-06-12.target.yaml +15 -0
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress_spec_files/player_93223573_2023-06-12.source.html +8657 -0
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress_spec_files/player_93223573_2023-06-12.target.yaml +4 -0
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress_spec_files/player_93248308_2023-06-12.source.html +8657 -0
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress_spec_files/player_93248308_2023-06-12.target.yaml +1 -0
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/table_spec_files/table_383405743.source.html +1480 -0
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/table_spec_files/table_383405743.target.yaml +32 -0
- metadata +44 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3802f6228037cca931f88ce749cf512aa19c4c2e62a6ce91f35e81a8ea3e5928
|
4
|
+
data.tar.gz: 433ae6d2b1dc7133920a5a6c10dddf6ae2170aff8a1f5d5e03dd88dd978de1fd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6c084798e36730906270e5ce96e9086527a75be3e5474af382ae03a67d2784aca2eb8ef110048f02fc5501f9113474eacbe3fd19f49491fbaf44f90393361fea
|
7
|
+
data.tar.gz: 6fc1efe60241280dfe67da246075424285262d9ad1c24b3c467ac50aafd7b448388c5687e28b344e5061085ab55e0255ea885810bbfc0af4a7ca2d1aefc15abc
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'aranha/parsers/html/item_list'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
|
6
|
+
module EhbrsRubyUtils
|
7
|
+
module Bga
|
8
|
+
module Parsers
|
9
|
+
class GameInProgress < ::Aranha::Parsers::Html::ItemList
|
10
|
+
ITEMS_XPATH = '//*[@id = "gametables_inprogress_all"]' \
|
11
|
+
'//*[starts-with(@id, "gametableblock_")]'
|
12
|
+
|
13
|
+
field :id, :integer, './@id'
|
14
|
+
|
15
|
+
def items_xpath
|
16
|
+
ITEMS_XPATH
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'aranha/parsers/html/item'
|
4
|
+
require 'aranha/parsers/html/item_list'
|
5
|
+
require 'dentaku'
|
6
|
+
require 'eac_ruby_utils/core_ext'
|
7
|
+
|
8
|
+
module EhbrsRubyUtils
|
9
|
+
module Bga
|
10
|
+
module Parsers
|
11
|
+
class Table < ::Aranha::Parsers::Html::Item
|
12
|
+
class ActivePlayers < ::Aranha::Parsers::Html::ItemList
|
13
|
+
ITEMS_XPATH = '//div[starts-with(@id, "active_player_")]'
|
14
|
+
|
15
|
+
field :id, :integer, './@id'
|
16
|
+
field :name, :string, './/*[contains(@class, "active_player_fullname")]'
|
17
|
+
|
18
|
+
def items_xpath
|
19
|
+
ITEMS_XPATH
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -9,7 +9,7 @@ module EhbrsRubyUtils
|
|
9
9
|
module Bga
|
10
10
|
module Parsers
|
11
11
|
class Table < ::Aranha::Parsers::Html::Item
|
12
|
-
class
|
12
|
+
class EndedPlayers < ::Aranha::Parsers::Html::ItemList
|
13
13
|
ITEMS_XPATH = '//div[starts-with(@id, "score_entry_")]'
|
14
14
|
RANK_VALUES = { vencedor: 1, perdedor: 2 }.freeze
|
15
15
|
|
@@ -7,15 +7,23 @@ module EhbrsRubyUtils
|
|
7
7
|
module Bga
|
8
8
|
module Parsers
|
9
9
|
class Table < ::Aranha::Parsers::Html::Item
|
10
|
+
require_sub __FILE__
|
11
|
+
|
10
12
|
GAME_IMAGE_URL_PARSER = %r{/gamemedia/([^/]+)/box/}.to_parser { |m| m[1] }
|
11
13
|
ITEM_XPATH = '/'
|
14
|
+
PLAYERS_IDS = {
|
15
|
+
'game_result' => ::EhbrsRubyUtils::Bga::Parsers::Table::EndedPlayers,
|
16
|
+
'players_at_table' => ::EhbrsRubyUtils::Bga::Parsers::Table::ActivePlayers
|
17
|
+
}.freeze
|
18
|
+
PLAYERS_IDS_XPATH = PLAYERS_IDS.keys.map { |id| "@id = \"#{id}\"" }.join(' or ')
|
19
|
+
PLAYERS_XPATH = ".//*[(#{PLAYERS_IDS_XPATH}) and count(./*) > 0]"
|
12
20
|
|
13
21
|
field :game_code, :string, '//meta[@property="og:image"]/@content'
|
14
22
|
field :game_name, :string, './/*[@id = "table_name"]/text()'
|
15
23
|
field :creation_time, :string, './/*[@id = "creationtime"]/text()'
|
16
24
|
field :estimated_duration, :string, './/*[@id = "estimated_duration"]/text()'
|
17
25
|
field :options, :node, './/*[@id = "gameoptions"]'
|
18
|
-
field :players, :node,
|
26
|
+
field :players, :node, PLAYERS_XPATH
|
19
27
|
field :game_conceded, :node, './/*[@id = "game_conceded" and @style="display: block;"]'
|
20
28
|
|
21
29
|
def item_xpath
|
@@ -24,10 +32,7 @@ module EhbrsRubyUtils
|
|
24
32
|
|
25
33
|
def data
|
26
34
|
r = super
|
27
|
-
%i[options players].each do |key|
|
28
|
-
r[key] = self.class.const_get(key.to_s.camelize).from_node(r.fetch(key)).data
|
29
|
-
end
|
30
|
-
%i[creation_time game_code game_conceded].each do |key|
|
35
|
+
%i[creation_time game_code game_conceded options players].each do |key|
|
31
36
|
r[key] = send("process_#{key}", r.fetch(key))
|
32
37
|
end
|
33
38
|
r
|
@@ -51,7 +56,23 @@ module EhbrsRubyUtils
|
|
51
56
|
node.present?
|
52
57
|
end
|
53
58
|
|
54
|
-
|
59
|
+
# @param node [Nokogiri::XML::Element]
|
60
|
+
# @return [Hash]
|
61
|
+
def process_options(node)
|
62
|
+
::EhbrsRubyUtils::Bga::Parsers::Table::Options.from_node(node).data
|
63
|
+
end
|
64
|
+
|
65
|
+
# @param node [Nokogiri::XML::Element]
|
66
|
+
# @return [Hash]
|
67
|
+
def process_players(node)
|
68
|
+
process_players_parser(node).from_node(node).data
|
69
|
+
end
|
70
|
+
|
71
|
+
# @param node [Nokogiri::XML::Element]
|
72
|
+
# @return [Class]
|
73
|
+
def process_players_parser(node)
|
74
|
+
PLAYERS_IDS.fetch(node.attribute('id').value)
|
75
|
+
end
|
55
76
|
end
|
56
77
|
end
|
57
78
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'ehbrs_ruby_utils/bga/parsers/game_in_progress'
|
4
|
+
require 'ehbrs_ruby_utils/bga/urls'
|
5
|
+
require 'eac_ruby_utils/core_ext'
|
6
|
+
|
7
|
+
module EhbrsRubyUtils
|
8
|
+
module Bga
|
9
|
+
class Session < ::SimpleDelegator
|
10
|
+
class PlayerTablesOnGameInProgress
|
11
|
+
include ::EhbrsRubyUtils::Bga::Urls
|
12
|
+
enable_method_class
|
13
|
+
enable_simple_cache
|
14
|
+
common_constructor :session, :player_id
|
15
|
+
|
16
|
+
def result
|
17
|
+
navigate_to_page
|
18
|
+
result_data
|
19
|
+
end
|
20
|
+
|
21
|
+
# @return [Addressable::URI]
|
22
|
+
def url
|
23
|
+
player_game_in_progress_url(player_id)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
# @return [Array<Hash>]
|
29
|
+
def result_data
|
30
|
+
::EhbrsRubyUtils::Bga::Parsers::GameInProgress.from_content(session.current_source).data
|
31
|
+
end
|
32
|
+
|
33
|
+
def navigate_to_page
|
34
|
+
session.navigate.to url
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -14,8 +14,6 @@ module EhbrsRubyUtils
|
|
14
14
|
enable_simple_cache
|
15
15
|
common_constructor :session, :table_id
|
16
16
|
|
17
|
-
RESULTS_XPATH = '//*[@id = "game_result"]'
|
18
|
-
|
19
17
|
def result
|
20
18
|
::EhbrsRubyUtils::Bga::Table.new(
|
21
19
|
fetch_data
|
@@ -31,10 +29,13 @@ module EhbrsRubyUtils
|
|
31
29
|
|
32
30
|
def fetch_data
|
33
31
|
session.navigate.to url
|
34
|
-
session.wait_for_element(xpath:
|
35
|
-
{ id: table_id }.merge(
|
36
|
-
|
37
|
-
|
32
|
+
session.wait_for_element(xpath: parser_class.const_get('PLAYERS_XPATH'))
|
33
|
+
{ id: table_id }.merge(parser_class.from_content(session.current_source).data)
|
34
|
+
end
|
35
|
+
|
36
|
+
# @return [Class]
|
37
|
+
def parser_class
|
38
|
+
::EhbrsRubyUtils::Bga::Parsers::Table
|
38
39
|
end
|
39
40
|
end
|
40
41
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'ehbrs_ruby_utils/bga/parsers/table/
|
3
|
+
require 'ehbrs_ruby_utils/bga/parsers/table/ended_players'
|
4
4
|
require 'eac_ruby_utils/core_ext'
|
5
5
|
|
6
6
|
module EhbrsRubyUtils
|
@@ -9,7 +9,7 @@ module EhbrsRubyUtils
|
|
9
9
|
class Player
|
10
10
|
common_constructor :table, :data
|
11
11
|
|
12
|
-
::EhbrsRubyUtils::Bga::Parsers::Table::
|
12
|
+
::EhbrsRubyUtils::Bga::Parsers::Table::EndedPlayers.fields.each do |field|
|
13
13
|
define_method field.name do
|
14
14
|
data.fetch(field.name)
|
15
15
|
end
|
@@ -17,6 +17,12 @@ module EhbrsRubyUtils
|
|
17
17
|
root_url + suffix
|
18
18
|
end
|
19
19
|
|
20
|
+
# @para player_id [Integer]
|
21
|
+
# @return [Addressable::URI]
|
22
|
+
def player_game_in_progress_url(player_id)
|
23
|
+
build_url("/gameinprogress?player=#{player_id}&all")
|
24
|
+
end
|
25
|
+
|
20
26
|
# @para player_id [Integer]
|
21
27
|
# @return [Addressable::URI]
|
22
28
|
def player_game_stats_url(player_id)
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'ehbrs_ruby_utils/bga/session'
|
4
4
|
require 'ehbrs_ruby_utils/executables'
|
5
|
+
require 'ehbrs_ruby_utils/mudslide/message'
|
5
6
|
require 'eac_ruby_utils/core_ext'
|
6
7
|
|
7
8
|
module EhbrsRubyUtils
|
@@ -10,6 +11,13 @@ module EhbrsRubyUtils
|
|
10
11
|
include ::Singleton
|
11
12
|
acts_as_abstract :bga_usernam, :bga_password, :whatsapp_recipient
|
12
13
|
|
14
|
+
# @param table [EhbrsRubyUtils::Bga::Table]
|
15
|
+
# @return [void]
|
16
|
+
def bga_table_notify(table)
|
17
|
+
formatter = ::EhbrsRubyUtils::Bga::TableWhatsappFormatter.new(table)
|
18
|
+
whatsapp_send(formatter.to_s, formatter.image_local_path)
|
19
|
+
end
|
20
|
+
|
13
21
|
def on_bga_logged_session(&block)
|
14
22
|
bga_session = new_bga_session
|
15
23
|
begin
|
@@ -29,11 +37,8 @@ module EhbrsRubyUtils
|
|
29
37
|
# @param image_path [Pathname]
|
30
38
|
# @return [void]
|
31
39
|
def whatsapp_send(message, image_path = nil)
|
32
|
-
|
33
|
-
|
34
|
-
else
|
35
|
-
mudslide_run('send', whatsapp_recipient, message)
|
36
|
-
end
|
40
|
+
::EhbrsRubyUtils::Mudslide::Message.new.text(message).image_path(image_path)
|
41
|
+
.recipient(whatsapp_recipient).deliver
|
37
42
|
end
|
38
43
|
|
39
44
|
private
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
require 'ehbrs_ruby_utils/executables'
|
5
|
+
|
6
|
+
module EhbrsRubyUtils
|
7
|
+
module Mudslide
|
8
|
+
class Message
|
9
|
+
acts_as_immutable
|
10
|
+
immutable_accessor :image_path, :recipient, :text
|
11
|
+
|
12
|
+
def deliver
|
13
|
+
raise 'No recipient set' if recipient.blank?
|
14
|
+
|
15
|
+
if image_path.present?
|
16
|
+
deliver_image
|
17
|
+
elsif text.present?
|
18
|
+
deliver_text
|
19
|
+
else
|
20
|
+
deliver
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
# @return [void]
|
27
|
+
def deliver_image
|
28
|
+
args = ['send-image']
|
29
|
+
text.if_present { |_v| args += ['--caption', text] }
|
30
|
+
mudslide_run(*args, recipient, image_path)
|
31
|
+
end
|
32
|
+
|
33
|
+
# @return [void]
|
34
|
+
def deliver_text
|
35
|
+
mudslide_run('send', recipient, text)
|
36
|
+
end
|
37
|
+
|
38
|
+
# @return [void]
|
39
|
+
def mudslide_run(*args)
|
40
|
+
::EhbrsRubyUtils::Executables.mudslide.command(*args).system!
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|