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