ehbrs_ruby_utils 0.43.0 → 0.44.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d49474096e476f03b1771e1da9b08054fa00d5a5daa095735d03bbab244c36b3
4
- data.tar.gz: 59f7d23319c7666b9751f2008b2c72fac3a4967a3c35f3988452f9c150450256
3
+ metadata.gz: 84117287c2474b8e4afd1bb62995ca8ae8d474e3d71c68a274c77a6426f3a969
4
+ data.tar.gz: e66e87a6ca223f273a30944428bf5807656a32ca02fe93fd6ac9aee966e042d8
5
5
  SHA512:
6
- metadata.gz: 98094f7b4340f323ad143a14f21c7ac6f7bb453d9647b3d55efbb0b4c567e4351d52fcbbb3ebd71a9e92a72a78debae83badf0eeffae02e2739c9993191ff07f
7
- data.tar.gz: c2e6242a13bf62cf5681107be0741caef823569196cf71809f79be4e1e865c2525bf0bf6f99d8ec959c43c350a7bcb0ad6676ab9b23233e31f2a8f97bd7fe126
6
+ metadata.gz: a151fde138411b7474943f6f107a929d469d46f51d0587313ee50e0ebb01b40112ab8635c7fcca95aab9432478864a57488ad31004b068a4cecf1e4f1cb0fe46
7
+ data.tar.gz: 80725bd8cf232be1aca943c3e0fb834528296a6d86fb57bcf82a92bf30737ee61b3bd7bcf4565d0e5425d7368a90396d20e3c8688d9d71005e2fbd2375c138b5
@@ -47,7 +47,7 @@ module EhbrsRubyUtils
47
47
  end
48
48
 
49
49
  def scroll_down
50
- session.execute_script('window.scrollBy(0, 90)')
50
+ session.scroll_down_by(90)
51
51
  end
52
52
  end
53
53
  end
@@ -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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EhbrsRubyUtils
4
- VERSION = '0.43.0'
4
+ VERSION = '0.44.1'
5
5
  end
@@ -16,7 +16,7 @@ module EhbrsRubyUtils
16
16
  end
17
17
 
18
18
  def show(level)
19
- super(level)
19
+ super
20
20
  children.each do |child|
21
21
  child.show(level + 1)
22
22
  end
@@ -25,7 +25,7 @@ module EhbrsRubyUtils
25
25
 
26
26
  class CheckWithProfiles < ::SimpleDelegator
27
27
  def initialize(check)
28
- super(check)
28
+ super
29
29
  @profiles = []
30
30
  end
31
31
 
@@ -23,7 +23,7 @@ module EhbrsRubyUtils
23
23
  MPEG4_EXTRA_UNSUPPORTED = %w[dx50 xvid].freeze
24
24
 
25
25
  def initialize
26
- super()
26
+ super
27
27
  add_check('invalid_extension', '.m4v')
28
28
  end
29
29
  end
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'avm/instances/base'
3
+ require 'avm/eac_rails_base0/instances/base'
4
4
  require 'avm/result'
5
5
  require 'eac_ruby_utils/core_ext'
6
6
 
7
7
  module EhbrsRubyUtils
8
8
  module WebUtils
9
- class Instance < ::Avm::Instances::Base
9
+ class Instance < ::Avm::EacRailsBase0::Instances::Base
10
10
  class Finances
11
11
  class Bills
12
12
  class Consume
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'avm/instances/base'
3
+ require 'avm/eac_rails_base0/instances/base'
4
4
  require 'eac_ruby_utils/core_ext'
5
5
 
6
6
  module EhbrsRubyUtils
7
7
  module WebUtils
8
- class Instance < ::Avm::Instances::Base
8
+ class Instance < ::Avm::EacRailsBase0::Instances::Base
9
9
  class Finances
10
10
  class Bills
11
11
  class Consume
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'avm/instances/base'
3
+ require 'avm/eac_rails_base0/instances/base'
4
4
  require 'eac_ruby_utils/core_ext'
5
5
 
6
6
  module EhbrsRubyUtils
7
7
  module WebUtils
8
- class Instance < ::Avm::Instances::Base
8
+ class Instance < ::Avm::EacRailsBase0::Instances::Base
9
9
  class Finances
10
10
  class Bills
11
11
  require_sub __FILE__
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'avm/instances/base'
3
+ require 'avm/eac_rails_base0/instances/base'
4
4
  require 'eac_ruby_utils/core_ext'
5
5
 
6
6
  module EhbrsRubyUtils
7
7
  module WebUtils
8
- class Instance < ::Avm::Instances::Base
8
+ class Instance < ::Avm::EacRailsBase0::Instances::Base
9
9
  class Finances
10
10
  require_sub __FILE__
11
11
  enable_simple_cache
@@ -3,11 +3,11 @@
3
3
  require 'eac_rest/api'
4
4
  require 'eac_ruby_utils/core_ext'
5
5
  require 'ehbrs_ruby_utils/web_utils/request_error'
6
- require 'avm/instances/base'
6
+ require 'avm/eac_rails_base0/instances/base'
7
7
 
8
8
  module EhbrsRubyUtils
9
9
  module WebUtils
10
- class Instance < ::Avm::Instances::Base
10
+ class Instance < ::Avm::EacRailsBase0::Instances::Base
11
11
  class HttpRequest
12
12
  enable_method_class
13
13
  enable_simple_cache
@@ -2,11 +2,11 @@
2
2
 
3
3
  require 'eac_rest/api'
4
4
  require 'eac_ruby_utils/core_ext'
5
- require 'avm/instances/base'
5
+ require 'avm/eac_rails_base0/instances/base'
6
6
 
7
7
  module EhbrsRubyUtils
8
8
  module WebUtils
9
- class Instance < ::Avm::Instances::Base
9
+ class Instance < ::Avm::EacRailsBase0::Instances::Base
10
10
  require_sub __FILE__, require_dependency: true
11
11
 
12
12
  # @return [EacRest::Api]
@@ -19,7 +19,7 @@ module EhbrsRubyUtils
19
19
  end
20
20
 
21
21
  def root_url
22
- read_entry(::Avm::Instances::EntryKeys::WEB_URL)
22
+ web_url
23
23
  end
24
24
  end
25
25
  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.43.0
4
+ version: 0.44.1
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-05-16 00:00:00.000000000 Z
11
+ date: 2024-07-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aranha
@@ -50,34 +50,54 @@ dependencies:
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '0.10'
53
+ version: '0.11'
54
54
  - - ">="
55
55
  - !ruby/object:Gem::Version
56
- version: 0.10.1
56
+ version: 0.11.1
57
57
  type: :runtime
58
58
  prerelease: false
59
59
  version_requirements: !ruby/object:Gem::Requirement
60
60
  requirements:
61
61
  - - "~>"
62
62
  - !ruby/object:Gem::Version
63
- version: '0.10'
63
+ version: '0.11'
64
64
  - - ">="
65
65
  - !ruby/object:Gem::Version
66
- version: 0.10.1
66
+ version: 0.11.1
67
67
  - !ruby/object:Gem::Dependency
68
68
  name: avm
69
69
  requirement: !ruby/object:Gem::Requirement
70
70
  requirements:
71
71
  - - "~>"
72
72
  - !ruby/object:Gem::Version
73
- version: '0.91'
73
+ version: '0.92'
74
74
  type: :runtime
75
75
  prerelease: false
76
76
  version_requirements: !ruby/object:Gem::Requirement
77
77
  requirements:
78
78
  - - "~>"
79
79
  - !ruby/object:Gem::Version
80
- version: '0.91'
80
+ version: '0.92'
81
+ - !ruby/object:Gem::Dependency
82
+ name: avm-eac_rails_base0
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: '0.11'
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: 0.11.1
91
+ type: :runtime
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: '0.11'
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: 0.11.1
81
101
  - !ruby/object:Gem::Dependency
82
102
  name: dentaku
83
103
  requirement: !ruby/object:Gem::Requirement
@@ -104,14 +124,14 @@ dependencies:
104
124
  requirements:
105
125
  - - "~>"
106
126
  - !ruby/object:Gem::Version
107
- version: '0.17'
127
+ version: '0.18'
108
128
  type: :runtime
109
129
  prerelease: false
110
130
  version_requirements: !ruby/object:Gem::Requirement
111
131
  requirements:
112
132
  - - "~>"
113
133
  - !ruby/object:Gem::Version
114
- version: '0.17'
134
+ version: '0.18'
115
135
  - !ruby/object:Gem::Dependency
116
136
  name: eac_rest
117
137
  requirement: !ruby/object:Gem::Requirement
@@ -132,34 +152,28 @@ dependencies:
132
152
  requirements:
133
153
  - - "~>"
134
154
  - !ruby/object:Gem::Version
135
- version: '0.121'
155
+ version: '0.122'
136
156
  type: :runtime
137
157
  prerelease: false
138
158
  version_requirements: !ruby/object:Gem::Requirement
139
159
  requirements:
140
160
  - - "~>"
141
161
  - !ruby/object:Gem::Version
142
- version: '0.121'
162
+ version: '0.122'
143
163
  - !ruby/object:Gem::Dependency
144
164
  name: eac_templates
145
165
  requirement: !ruby/object:Gem::Requirement
146
166
  requirements:
147
167
  - - "~>"
148
168
  - !ruby/object:Gem::Version
149
- version: '0.5'
150
- - - ">="
151
- - !ruby/object:Gem::Version
152
- version: 0.5.1
169
+ version: '0.7'
153
170
  type: :runtime
154
171
  prerelease: false
155
172
  version_requirements: !ruby/object:Gem::Requirement
156
173
  requirements:
157
174
  - - "~>"
158
175
  - !ruby/object:Gem::Version
159
- version: '0.5'
160
- - - ">="
161
- - !ruby/object:Gem::Version
162
- version: 0.5.1
176
+ version: '0.7'
163
177
  - !ruby/object:Gem::Dependency
164
178
  name: inifile
165
179
  requirement: !ruby/object:Gem::Requirement
@@ -240,14 +254,14 @@ dependencies:
240
254
  requirements:
241
255
  - - "~>"
242
256
  - !ruby/object:Gem::Version
243
- version: '0.9'
257
+ version: '0.10'
244
258
  type: :development
245
259
  prerelease: false
246
260
  version_requirements: !ruby/object:Gem::Requirement
247
261
  requirements:
248
262
  - - "~>"
249
263
  - !ruby/object:Gem::Version
250
- version: '0.9'
264
+ version: '0.10'
251
265
  description:
252
266
  email:
253
267
  executables: []
@@ -292,6 +306,9 @@ files:
292
306
  - lib/ehbrs_ruby_utils/bga/urls.rb
293
307
  - lib/ehbrs_ruby_utils/bga/whatsapp_formatter.rb
294
308
  - lib/ehbrs_ruby_utils/bga/whatsapp_formatter/option.rb
309
+ - lib/ehbrs_ruby_utils/booking/parsers/list.rb
310
+ - lib/ehbrs_ruby_utils/booking/processors/list.rb
311
+ - lib/ehbrs_ruby_utils/booking/processors/list/build_accommodation.rb
295
312
  - lib/ehbrs_ruby_utils/circular_list_spreader.rb
296
313
  - lib/ehbrs_ruby_utils/circular_list_spreader/base_level.rb
297
314
  - lib/ehbrs_ruby_utils/circular_list_spreader/group_level.rb