ehbrs_ruby_utils 0.25.0 → 0.26.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/table/players.rb +28 -3
- data/lib/ehbrs_ruby_utils/bga/session/player.rb +1 -12
- data/lib/ehbrs_ruby_utils/bga/session/player_tables_on_game_stats.rb +2 -3
- data/lib/ehbrs_ruby_utils/bga/session/skip_trophies.rb +45 -0
- data/lib/ehbrs_ruby_utils/bga/table_whatsapp_formatter/format_option.rb +1 -1
- data/lib/ehbrs_ruby_utils/bga/table_whatsapp_formatter/format_player.rb +2 -2
- data/lib/ehbrs_ruby_utils/bga/table_whatsapp_formatter.rb +1 -1
- data/lib/ehbrs_ruby_utils/version.rb +1 -1
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/table_spec_files/table_302873643.target.yaml +10 -6
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/table_spec_files/table_308782287.source.html +1965 -0
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/table_spec_files/table_308782287.target.yaml +45 -0
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/table_spec_files/table_356513708.target.yaml +20 -12
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/table_spec_files/table_357408039.target.yaml +25 -15
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/table_spec_files/table_368448439.target.yaml +20 -12
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/table_spec_files/table_373602409.target.yaml +10 -6
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/table_spec_files/table_373747455.target.yaml +10 -6
- metadata +45 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '01492301e8c9f767213720ca3b78b900225fdb359f6f140ca7b29598af9ce125'
|
4
|
+
data.tar.gz: e6ac5d5ee6b8f2d5e667df6a0eb196283d21be8da3e42636d80fbedfa1be5aec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3a47e3110e4640dc017c1265b9bfd0f36661fe3e38379cdcdca9fd7bee8cb40acc6cb1385501f7f57f44a71a7ac0831725c51d4a977b0b7e5c2547298a9e8aeb
|
7
|
+
data.tar.gz: 2354c44fe899307ffba53b2be8843cb542f2095a0dd03efccc566a01fdc0641a699a30d190556febe6e0a7177134c3e94323a2a6a7f90d1c2072e34a68c6f354
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'aranha/parsers/html/item'
|
4
4
|
require 'aranha/parsers/html/item_list'
|
5
|
+
require 'dentaku'
|
5
6
|
require 'eac_ruby_utils/core_ext'
|
6
7
|
|
7
8
|
module EhbrsRubyUtils
|
@@ -10,17 +11,41 @@ module EhbrsRubyUtils
|
|
10
11
|
class Table < ::Aranha::Parsers::Html::Item
|
11
12
|
class Players < ::Aranha::Parsers::Html::ItemList
|
12
13
|
ITEMS_XPATH = '//div[starts-with(@id, "score_entry_")]'
|
14
|
+
RANK_VALUES = { vencedor: 1, perdedor: 2 }.freeze
|
13
15
|
|
14
|
-
field :
|
16
|
+
field :rank, :string, './div[@class = "rank"]'
|
15
17
|
field :id, :integer, './div[@class = "name"]/a/@href'
|
16
18
|
field :name, :string, './div[@class = "name"]/a/text()'
|
17
19
|
field :score, :integer_optional, './div[@class = "score"]'
|
18
|
-
field :
|
19
|
-
field :
|
20
|
+
field :elo_increment, :string, './/*[starts-with(@id, "winpoints_value_")]/text()'
|
21
|
+
field :elo_reached, :integer, './/*[@class = "gamerank_value"]/text()'
|
22
|
+
field :penalty_clock, :boolean,
|
23
|
+
'.//*[@class = "clockpenalty" and @style = "display: inline;"]'
|
24
|
+
field :penalty_leave, :boolean,
|
25
|
+
'.//*[@class = "leavepenalty" and @style = "display: inline;"]'
|
20
26
|
|
21
27
|
def items_xpath
|
22
28
|
ITEMS_XPATH
|
23
29
|
end
|
30
|
+
|
31
|
+
def item_data(data)
|
32
|
+
%i[elo_increment rank].inject(data) do |a, e|
|
33
|
+
a.merge(e => send("process_#{e}", data.fetch(e)))
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# @return [Integer, nil]
|
38
|
+
def process_elo_increment(expression)
|
39
|
+
return nil if expression.blank?
|
40
|
+
|
41
|
+
::Dentaku::Calculator.new.evaluate(expression.gsub(/\A\+/, '')).to_i
|
42
|
+
end
|
43
|
+
|
44
|
+
# @param value [String]
|
45
|
+
# @return [Integer]
|
46
|
+
def process_rank(source)
|
47
|
+
RANK_VALUES[source.downcase.to_sym] || source.to_i
|
48
|
+
end
|
24
49
|
end
|
25
50
|
end
|
26
51
|
end
|
@@ -1,26 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'ehbrs_ruby_utils/bga/parsers/game_stats'
|
4
|
-
require 'ehbrs_ruby_utils/bga/urls'
|
5
3
|
require 'eac_ruby_utils/core_ext'
|
6
4
|
|
7
5
|
module EhbrsRubyUtils
|
8
6
|
module Bga
|
9
7
|
class Session < ::SimpleDelegator
|
10
8
|
class Player
|
11
|
-
include ::EhbrsRubyUtils::Bga::Urls
|
12
|
-
GAME_HISTORY_XPATH = '//h3[text() = "Games history"]'
|
13
9
|
common_constructor :session, :player_id
|
14
10
|
|
15
11
|
def tables
|
16
|
-
session.
|
17
|
-
session.wait_for_element(xpath: GAME_HISTORY_XPATH)
|
18
|
-
::EhbrsRubyUtils::Bga::Parsers::GameStats.from_content(session.current_source).data
|
19
|
-
end
|
20
|
-
|
21
|
-
# @return [Addressable::URI]
|
22
|
-
def game_stats_url
|
23
|
-
session.url("/gamestats?player=#{player_id}")
|
12
|
+
session.player_tables_on_game_stats(player_id)
|
24
13
|
end
|
25
14
|
end
|
26
15
|
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'ehbrs_ruby_utils/bga/parsers/
|
4
|
-
require 'ehbrs_ruby_utils/bga/table'
|
3
|
+
require 'ehbrs_ruby_utils/bga/parsers/game_stats'
|
5
4
|
require 'ehbrs_ruby_utils/bga/urls'
|
6
5
|
require 'eac_ruby_utils/core_ext'
|
7
6
|
|
@@ -56,7 +55,7 @@ module EhbrsRubyUtils
|
|
56
55
|
def list_end_reached?
|
57
56
|
previous_count = current_data.count
|
58
57
|
result = nil
|
59
|
-
session.wait_for_click(id: SEE_MORE_BUTTON_ID)
|
58
|
+
session.on_skip_trophies { session.wait_for_click(id: SEE_MORE_BUTTON_ID) }
|
60
59
|
session.wait.until do
|
61
60
|
result = list_end_reached_non_waiting(previous_count)
|
62
61
|
!result.nil?
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
|
5
|
+
module EhbrsRubyUtils
|
6
|
+
module Bga
|
7
|
+
class Session < ::SimpleDelegator
|
8
|
+
module SkipTrophies
|
9
|
+
TROPHY_SKIP_BUTTON_XPATH = '//*[@id = "splashedNotifications_overlay"]' \
|
10
|
+
'//*[starts-with(@id, "continue_btn_")]'
|
11
|
+
TROPHY_SKIP_TIMEOUT = 5
|
12
|
+
|
13
|
+
# @param &block [Proc]
|
14
|
+
# @return [Selenium::WebDriver::Error::TimeoutError, nil]
|
15
|
+
def on_rescue_timeout(&block)
|
16
|
+
block.call
|
17
|
+
nil
|
18
|
+
rescue ::Selenium::WebDriver::Error::TimeoutError => e
|
19
|
+
e
|
20
|
+
end
|
21
|
+
|
22
|
+
def on_skip_trophies(&block)
|
23
|
+
error = on_rescue_timeout(&block)
|
24
|
+
return unless error
|
25
|
+
raise error unless skip_trophy_overlay?
|
26
|
+
|
27
|
+
skip_trophies
|
28
|
+
end
|
29
|
+
|
30
|
+
def skip_trophies
|
31
|
+
loop do
|
32
|
+
wait_for_click({ xpath: TROPHY_SKIP_BUTTON_XPATH }, TROPHY_SKIP_TIMEOUT)
|
33
|
+
rescue ::Selenium::WebDriver::Error::TimeoutError
|
34
|
+
break
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# @return [Boolean]
|
39
|
+
def skip_trophy_overlay?
|
40
|
+
find_element(xpath: TROPHY_SKIP_BUTTON_XPATH).present?
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -16,7 +16,7 @@ module EhbrsRubyUtils
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def table_rank
|
19
|
-
"*#{player.
|
19
|
+
"*#{player.rank}º*"
|
20
20
|
end
|
21
21
|
|
22
22
|
delegate :name, to: :player
|
@@ -25,6 +25,6 @@ module EhbrsRubyUtils
|
|
25
25
|
"⭐ #{player.score}"
|
26
26
|
end
|
27
27
|
end
|
28
|
-
|
28
|
+
end
|
29
29
|
end
|
30
30
|
end
|
@@ -20,16 +20,20 @@
|
|
20
20
|
:value: Desligado
|
21
21
|
:description: ''
|
22
22
|
:players:
|
23
|
-
- :
|
23
|
+
- :rank: 1
|
24
24
|
:id: 84920871
|
25
25
|
:name: eduardobogoni
|
26
26
|
:score: 53
|
27
|
-
:
|
28
|
-
:
|
29
|
-
|
27
|
+
:elo_increment:
|
28
|
+
:elo_reached:
|
29
|
+
:penalty_clock: false
|
30
|
+
:penalty_leave: false
|
31
|
+
- :rank: 2
|
30
32
|
:id: 93167144
|
31
33
|
:name: iuriadmvr1
|
32
34
|
:score: 43
|
33
|
-
:
|
34
|
-
:
|
35
|
+
:elo_increment:
|
36
|
+
:elo_reached:
|
37
|
+
:penalty_clock: false
|
38
|
+
:penalty_leave: false
|
35
39
|
:game_conceded: false
|