ehbrs_ruby_utils 0.43.0 → 0.44.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/session/player_tables_on_game_in_progress.rb +1 -1
- data/lib/ehbrs_ruby_utils/booking/parsers/list.rb +63 -0
- data/lib/ehbrs_ruby_utils/booking/processors/list/build_accommodation.rb +34 -0
- data/lib/ehbrs_ruby_utils/booking/processors/list.rb +82 -0
- data/lib/ehbrs_ruby_utils/version.rb +1 -1
- data/lib/ehbrs_ruby_utils/videos/series/rename/line_result_group.rb +1 -1
- data/lib/ehbrs_ruby_utils/videos2/unsupported/check_set.rb +1 -1
- data/lib/ehbrs_ruby_utils/videos2/unsupported/profiles/samsung.rb +1 -1
- metadata +13 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 478c8b2a993c8da6facb45e2809c7210b0eaad73ad1379aa9653aba242ab7bb6
|
4
|
+
data.tar.gz: d9edd9c0400135a534d1f45077635fa6399d0b536925a4da02a5f9784730a937
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 31f4b15a837c816399ce97cf3cd89bcd0563c2c2b6f4e415221d95b8c50b260efc91489bc7b68e0341a9711238f8247b6e958b44c52f13959fb8eef5dcd5d1f7
|
7
|
+
data.tar.gz: e6cc85c4297ddf52ac3f6ba0b0ee5f1c6227b0a17eea3b44977dd91ed180b48b67c1e6956c02932dd17c9f631ca6fe759ff6c30f985be726eed0d2c8bb6ae55e
|
@@ -0,0 +1,63 @@
|
|
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 Booking
|
8
|
+
module Parsers
|
9
|
+
class List < ::Aranha::Parsers::Html::ItemList
|
10
|
+
class << self
|
11
|
+
def testid_xpath(value, *suffixes)
|
12
|
+
([".//*[@data-testid='#{value}']"] + suffixes).join('/')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
ITEMS_XPATH = '//*[@data-testid="property-card"]'
|
17
|
+
|
18
|
+
field :name, :string, testid_xpath('title', 'text()')
|
19
|
+
field :href, :string, testid_xpath('title-link', '@href')
|
20
|
+
field :price, :float, testid_xpath('price-and-discounted-price', '/text()')
|
21
|
+
field :tax, :float_optional, testid_xpath('taxes-and-charges', 'text()')
|
22
|
+
field :address, :string, testid_xpath('address', 'text()')
|
23
|
+
field :distance, :distance, testid_xpath('distance', 'text()')
|
24
|
+
field :review_score, :float_optional, testid_xpath('review-score', 'div[1]/text()')
|
25
|
+
field :review_count, :integer, testid_xpath('review-score', 'div[2]/div[2]/text()')
|
26
|
+
field :unit_title, :string_recursive, testid_xpath('recommended-units',
|
27
|
+
'/*[@role="link"]')
|
28
|
+
|
29
|
+
def data
|
30
|
+
{ accommodations: items_data, declared_count: declared_count }
|
31
|
+
end
|
32
|
+
|
33
|
+
# @return [Integer]
|
34
|
+
def declared_count
|
35
|
+
node_parser.integer_value(nokogiri, '//h1/text()')
|
36
|
+
end
|
37
|
+
|
38
|
+
def items_xpath
|
39
|
+
ITEMS_XPATH
|
40
|
+
end
|
41
|
+
|
42
|
+
def node_parser
|
43
|
+
r = super
|
44
|
+
r.extend(NodeParserExtra)
|
45
|
+
r
|
46
|
+
end
|
47
|
+
|
48
|
+
module NodeParserExtra
|
49
|
+
DISTANCE_PARSER = /\A(\d+)(?:,(\d+))? (m|km)/.to_parser do |m|
|
50
|
+
r = m[1].to_f + m[2].if_present(0) { |v| v.to_f / 10.pow(v.length) }
|
51
|
+
r /= 1000 if m[3] == 'm'
|
52
|
+
r
|
53
|
+
end
|
54
|
+
|
55
|
+
def distance_value(node, xpath)
|
56
|
+
s = string_value(node, xpath)
|
57
|
+
DISTANCE_PARSER.parse!(s)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
|
5
|
+
module EhbrsRubyUtils
|
6
|
+
module Booking
|
7
|
+
module Processors
|
8
|
+
class List
|
9
|
+
class BuildAccommodation
|
10
|
+
acts_as_instance_method
|
11
|
+
common_constructor :list, :data
|
12
|
+
|
13
|
+
TOTAL_VALUE = '=index($A:$ZZZ;row();column()-2)+index($A:$ZZZ;row();column()-1)'
|
14
|
+
|
15
|
+
def result
|
16
|
+
%i[link total].inject(data) do |a, e|
|
17
|
+
a.merge(e => send("#{e}_value"))
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# @return [String]
|
22
|
+
def link_value
|
23
|
+
"=HYPERLINK(\"#{data.fetch(:href)}\";\"#{data.fetch(:name)}\")"
|
24
|
+
end
|
25
|
+
|
26
|
+
# @return [String]
|
27
|
+
def total_value
|
28
|
+
TOTAL_VALUE
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'aranha/selenium/session'
|
4
|
+
require 'ehbrs_ruby_utils/booking/parsers/list'
|
5
|
+
require 'eac_ruby_utils/core_ext'
|
6
|
+
|
7
|
+
module EhbrsRubyUtils
|
8
|
+
module Booking
|
9
|
+
module Processors
|
10
|
+
class List
|
11
|
+
enable_simple_cache
|
12
|
+
common_constructor :url
|
13
|
+
|
14
|
+
CLOSE_BANNER_XPATH = '//button[@aria-label = "Ignorar informações de login."]'
|
15
|
+
MORE_RESULTS_XPATH = '//*[text() = "Ver mais resultados"]'
|
16
|
+
SCROLL_DOWN_STEP = 500
|
17
|
+
|
18
|
+
# @return [Array]
|
19
|
+
def accommodations
|
20
|
+
data.fetch(:accommodations).map { |a| build_accommodation(a) }
|
21
|
+
end
|
22
|
+
|
23
|
+
# @return [Integer]
|
24
|
+
def declared_count
|
25
|
+
data.fetch(:declared_count)
|
26
|
+
end
|
27
|
+
|
28
|
+
protected
|
29
|
+
|
30
|
+
# @return [Boolean]
|
31
|
+
def all_accommodations_reached?
|
32
|
+
p = parser
|
33
|
+
p.data.fetch(:accommodations).count >= p.data.fetch(:declared_count)
|
34
|
+
end
|
35
|
+
|
36
|
+
def click_more_results
|
37
|
+
more_results_button.click
|
38
|
+
end
|
39
|
+
|
40
|
+
def close_banner
|
41
|
+
close_banner_button.click
|
42
|
+
end
|
43
|
+
|
44
|
+
# @return [Aranha::Selenium::Session::Element]
|
45
|
+
def close_banner_button
|
46
|
+
session.element(xpath: CLOSE_BANNER_XPATH)
|
47
|
+
end
|
48
|
+
|
49
|
+
def data_uncached
|
50
|
+
session.navigate.to url
|
51
|
+
session.wait(5.minutes).until do
|
52
|
+
close_banner
|
53
|
+
click_more_results
|
54
|
+
scroll_down
|
55
|
+
all_accommodations_reached?
|
56
|
+
end
|
57
|
+
parser.data
|
58
|
+
end
|
59
|
+
|
60
|
+
# @return [Aranha::Selenium::Session::Element]
|
61
|
+
def more_results_button
|
62
|
+
session.element(xpath: MORE_RESULTS_XPATH)
|
63
|
+
end
|
64
|
+
|
65
|
+
def parser
|
66
|
+
::EhbrsRubyUtils::Booking::Parsers::List.from_string(session.current_source)
|
67
|
+
end
|
68
|
+
|
69
|
+
# @return [Aranha::Selenium::Session]
|
70
|
+
def session_uncached
|
71
|
+
::Aranha::Selenium::Session.new
|
72
|
+
end
|
73
|
+
|
74
|
+
def scroll_down
|
75
|
+
session.scroll_down_by(SCROLL_DOWN_STEP)
|
76
|
+
end
|
77
|
+
|
78
|
+
require_sub __FILE__, require_mode: :kernel
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ehbrs_ruby_utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.44.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eduardo H. Bogoni
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-06-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aranha
|
@@ -50,34 +50,28 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: '0.
|
54
|
-
- - ">="
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
version: 0.10.1
|
53
|
+
version: '0.11'
|
57
54
|
type: :runtime
|
58
55
|
prerelease: false
|
59
56
|
version_requirements: !ruby/object:Gem::Requirement
|
60
57
|
requirements:
|
61
58
|
- - "~>"
|
62
59
|
- !ruby/object:Gem::Version
|
63
|
-
version: '0.
|
64
|
-
- - ">="
|
65
|
-
- !ruby/object:Gem::Version
|
66
|
-
version: 0.10.1
|
60
|
+
version: '0.11'
|
67
61
|
- !ruby/object:Gem::Dependency
|
68
62
|
name: avm
|
69
63
|
requirement: !ruby/object:Gem::Requirement
|
70
64
|
requirements:
|
71
65
|
- - "~>"
|
72
66
|
- !ruby/object:Gem::Version
|
73
|
-
version: '0.
|
67
|
+
version: '0.92'
|
74
68
|
type: :runtime
|
75
69
|
prerelease: false
|
76
70
|
version_requirements: !ruby/object:Gem::Requirement
|
77
71
|
requirements:
|
78
72
|
- - "~>"
|
79
73
|
- !ruby/object:Gem::Version
|
80
|
-
version: '0.
|
74
|
+
version: '0.92'
|
81
75
|
- !ruby/object:Gem::Dependency
|
82
76
|
name: dentaku
|
83
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -132,34 +126,28 @@ dependencies:
|
|
132
126
|
requirements:
|
133
127
|
- - "~>"
|
134
128
|
- !ruby/object:Gem::Version
|
135
|
-
version: '0.
|
129
|
+
version: '0.122'
|
136
130
|
type: :runtime
|
137
131
|
prerelease: false
|
138
132
|
version_requirements: !ruby/object:Gem::Requirement
|
139
133
|
requirements:
|
140
134
|
- - "~>"
|
141
135
|
- !ruby/object:Gem::Version
|
142
|
-
version: '0.
|
136
|
+
version: '0.122'
|
143
137
|
- !ruby/object:Gem::Dependency
|
144
138
|
name: eac_templates
|
145
139
|
requirement: !ruby/object:Gem::Requirement
|
146
140
|
requirements:
|
147
141
|
- - "~>"
|
148
142
|
- !ruby/object:Gem::Version
|
149
|
-
version: '0.
|
150
|
-
- - ">="
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: 0.5.1
|
143
|
+
version: '0.7'
|
153
144
|
type: :runtime
|
154
145
|
prerelease: false
|
155
146
|
version_requirements: !ruby/object:Gem::Requirement
|
156
147
|
requirements:
|
157
148
|
- - "~>"
|
158
149
|
- !ruby/object:Gem::Version
|
159
|
-
version: '0.
|
160
|
-
- - ">="
|
161
|
-
- !ruby/object:Gem::Version
|
162
|
-
version: 0.5.1
|
150
|
+
version: '0.7'
|
163
151
|
- !ruby/object:Gem::Dependency
|
164
152
|
name: inifile
|
165
153
|
requirement: !ruby/object:Gem::Requirement
|
@@ -292,6 +280,9 @@ files:
|
|
292
280
|
- lib/ehbrs_ruby_utils/bga/urls.rb
|
293
281
|
- lib/ehbrs_ruby_utils/bga/whatsapp_formatter.rb
|
294
282
|
- lib/ehbrs_ruby_utils/bga/whatsapp_formatter/option.rb
|
283
|
+
- lib/ehbrs_ruby_utils/booking/parsers/list.rb
|
284
|
+
- lib/ehbrs_ruby_utils/booking/processors/list.rb
|
285
|
+
- lib/ehbrs_ruby_utils/booking/processors/list/build_accommodation.rb
|
295
286
|
- lib/ehbrs_ruby_utils/circular_list_spreader.rb
|
296
287
|
- lib/ehbrs_ruby_utils/circular_list_spreader/base_level.rb
|
297
288
|
- lib/ehbrs_ruby_utils/circular_list_spreader/group_level.rb
|