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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8bf7c3e4429f41191524b18b9d208696ff51c8758af361ed718e3234ebcdc74a
4
- data.tar.gz: 5f15d68339789d7a1d3a101763f3509d425e484b185b93aba23675962abcd99e
3
+ metadata.gz: '01492301e8c9f767213720ca3b78b900225fdb359f6f140ca7b29598af9ce125'
4
+ data.tar.gz: e6ac5d5ee6b8f2d5e667df6a0eb196283d21be8da3e42636d80fbedfa1be5aec
5
5
  SHA512:
6
- metadata.gz: 43a6c2d7ef864aad1c3a0876e6a1d2a8ea7a710c33d93a424f10a3f995b2a470c10750bc553a954cb3fc2168e6aca08b41b9abd6497d07a33db97c99f95a0676
7
- data.tar.gz: 6b0f6f13cdca5b13938068eb9d9c2d2def16e2e7f0f79c74eae5c6c9c5d8a827303258db7b2b1c183db1cdba0e947f25aaf9a8f2a705d3ab96ed70162e95b57a
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 :table_rank, :integer, './div[@class = "rank"]'
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 :win_points, :string, './/*[starts-with(@id, "winpoints_value_")]/text()'
19
- field :game_rank, :integer, './/*[@class = "gamerank_value"]/text()'
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.navigate.to game_stats_url
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/table'
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
@@ -13,6 +13,6 @@ module EhbrsRubyUtils
13
13
  "*#{option.label}:* #{option.value}"
14
14
  end
15
15
  end
16
- end
16
+ end
17
17
  end
18
18
  end
@@ -16,7 +16,7 @@ module EhbrsRubyUtils
16
16
  end
17
17
 
18
18
  def table_rank
19
- "*#{player.table_rank}º*"
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
- end
28
+ end
29
29
  end
30
30
  end
@@ -61,6 +61,6 @@ module EhbrsRubyUtils
61
61
  end
62
62
 
63
63
  require_sub __FILE__, require_mode: :kernel
64
- end
64
+ end
65
65
  end
66
66
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EhbrsRubyUtils
4
- VERSION = '0.25.0'
4
+ VERSION = '0.26.0'
5
5
  end
@@ -20,16 +20,20 @@
20
20
  :value: Desligado
21
21
  :description: ''
22
22
  :players:
23
- - :table_rank: 1
23
+ - :rank: 1
24
24
  :id: 84920871
25
25
  :name: eduardobogoni
26
26
  :score: 53
27
- :win_points: ''
28
- :game_rank:
29
- - :table_rank: 2
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
- :win_points: ''
34
- :game_rank:
35
+ :elo_increment:
36
+ :elo_reached:
37
+ :penalty_clock: false
38
+ :penalty_leave: false
35
39
  :game_conceded: false