ehbrs_ruby_utils 0.48.2 → 0.49.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/airbnb/parsers/page.rb +91 -0
- data/lib/ehbrs_ruby_utils/airbnb/processors/list.rb +45 -0
- data/lib/ehbrs_ruby_utils/airbnb/processors/page/build_accommodation.rb +30 -0
- data/lib/ehbrs_ruby_utils/airbnb/processors/page.rb +25 -0
- data/lib/ehbrs_ruby_utils/aranha/accommodations_processor.rb +70 -0
- data/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress.rb +1 -1
- data/lib/ehbrs_ruby_utils/bga/parsers/table.rb +1 -1
- data/lib/ehbrs_ruby_utils/bga/whatsapp_formatter.rb +1 -1
- data/lib/ehbrs_ruby_utils/booking/processors/list.rb +8 -34
- data/lib/ehbrs_ruby_utils/cooking_book/recipe/measure.rb +4 -4
- data/lib/ehbrs_ruby_utils/fs/selected.rb +2 -2
- data/lib/ehbrs_ruby_utils/mudslide/message.rb +2 -2
- data/lib/ehbrs_ruby_utils/version.rb +1 -1
- data/lib/ehbrs_ruby_utils/vg/ps2/iso_file.rb +1 -1
- data/lib/ehbrs_ruby_utils/vg/wii/game_file.rb +1 -1
- data/lib/ehbrs_ruby_utils/vg/wii/wit/image_format.rb +1 -1
- data/lib/ehbrs_ruby_utils/vg/wii/wit/parsers/dump.rb +1 -1
- data/lib/ehbrs_ruby_utils/vg/wii/wit/parsers/info.rb +1 -1
- data/lib/ehbrs_ruby_utils/vg/wii/wit/path.rb +1 -1
- data/lib/ehbrs_ruby_utils/videos2/unsupported/check_support.rb +2 -2
- data/lib/ehbrs_ruby_utils/videos2/unsupported/profiles/base.rb +2 -2
- data/template/ehbrs_ruby_utils/finances/bb_browser/docker_image/.gitrepo +12 -0
- metadata +19 -31
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6b3e1ad194bf9847d2c795bc0f3afc830d2210731ee8cb90b5c51dd65c7aa89c
|
|
4
|
+
data.tar.gz: c192269bc54cddb6fefd89dee7caca04b48e9c30a5678c5d230870237efb9923
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d1f6ca93fc896974866819f89ff79e80f54bf51e01c68f591ab58b579c2b8f3f22f4f5a64ad2b3d65393946897fd9409a3e64081b650a7a1d351e6b9ade74ca2
|
|
7
|
+
data.tar.gz: 90178a31bcfab50461cf7208844ce373ea9601a626642a4ed6466fedb21c5edebd46e4c9e4f199f3120b9e8d555e0de0b509f8a87f7ab4d1297010257c70e146
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module EhbrsRubyUtils
|
|
4
|
+
module Airbnb
|
|
5
|
+
module Parsers
|
|
6
|
+
class Page < ::Aranha::Parsers::Html::ItemList
|
|
7
|
+
class << self
|
|
8
|
+
# @param value [String]
|
|
9
|
+
# @param suffixes [Enumerable<String>]
|
|
10
|
+
# @return [String]
|
|
11
|
+
def testid_xpath(value, *suffixes)
|
|
12
|
+
([".//*[@data-testid='#{value}']"] + suffixes).join('/')
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
DECLARED_COUNT_XPATH = '//h1/span[1]/text()'
|
|
17
|
+
ITEMS_XPATH = '//*[@data-xray-jira-component="Guest: Listing Cards"]/div'
|
|
18
|
+
NEXT_PAGE_HREF_XPATH = '//a[@aria-label="Próximo"]/@href'
|
|
19
|
+
REVIEW_STRUCT = ::Struct.new(:review_score, :review_count)
|
|
20
|
+
TYPE_ADDRESS_STRUCT = ::Struct.new(:type, :address)
|
|
21
|
+
REVIEW_PARSER = /\A(\S+)\s*\((\d+)\)\z/.to_parser do |m|
|
|
22
|
+
{
|
|
23
|
+
review_score: m[1].gsub(',', '.').to_f, review_count: m[2].to_i
|
|
24
|
+
}
|
|
25
|
+
end
|
|
26
|
+
REVIEW_TEXTS_ZERO = ['Novo', ''].freeze
|
|
27
|
+
|
|
28
|
+
field :name, :string, './/meta[@itemprop="name"]/@content'
|
|
29
|
+
field :href, :string, './/meta[@itemprop="url"]/@content'
|
|
30
|
+
field :type_address, :string, testid_xpath('listing-card-title', 'text()')
|
|
31
|
+
field :review_text, :string,
|
|
32
|
+
'.//*[@inert="true"]/../span/span[@aria-hidden="true"]/text()'
|
|
33
|
+
field :price1, :decimal_comma_optional,
|
|
34
|
+
'.//*[@style="--pricing-guest-primary-line-unit-price-text-decoration: none;"]'
|
|
35
|
+
field :price2, :decimal_comma_optional,
|
|
36
|
+
'(.//div[contains(@style, "--pricing-guest-display-price-alignment")]//button)[2]' \
|
|
37
|
+
'/span[1]/text()'
|
|
38
|
+
|
|
39
|
+
def data
|
|
40
|
+
%i[accommodations declared_count next_page_href].inject({}) do |a, e|
|
|
41
|
+
a.merge({ e => send(e) })
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# @return [Enumerable<Hash>]
|
|
46
|
+
def accommodations
|
|
47
|
+
items_data.map do |e|
|
|
48
|
+
e.merge(parse_review(e.fetch(:review_text)))
|
|
49
|
+
.merge(parse_type_address(e.fetch(:type_address)))
|
|
50
|
+
.merge(price: build_price(e.fetch(:price1), e.fetch(:price2)))
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# @return [Integer]
|
|
55
|
+
def declared_count
|
|
56
|
+
node_parser.integer_optional_value(nokogiri, DECLARED_COUNT_XPATH)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# @return [String]
|
|
60
|
+
def items_xpath
|
|
61
|
+
ITEMS_XPATH
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# @return [String]
|
|
65
|
+
def next_page_href
|
|
66
|
+
nokogiri.at_xpath(NEXT_PAGE_HREF_XPATH).if_present(&:text)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# @param prices [Enumerable<Float, nil>]
|
|
70
|
+
# @return [Float]
|
|
71
|
+
def build_price(*prices)
|
|
72
|
+
prices.reject(&:blank?).min
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# @param text [String]
|
|
76
|
+
# @return [Hash]
|
|
77
|
+
def parse_review(text)
|
|
78
|
+
return REVIEW_STRUCT.new(0, 0).to_h if REVIEW_TEXTS_ZERO.include?(text)
|
|
79
|
+
|
|
80
|
+
REVIEW_PARSER.parse!(text).to_h
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# @param text [String]
|
|
84
|
+
# @return [Hash]
|
|
85
|
+
def parse_type_address(text)
|
|
86
|
+
TYPE_ADDRESS_STRUCT.new(*text.split('⋅').map(&:strip)).to_h
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module EhbrsRubyUtils
|
|
4
|
+
module Airbnb
|
|
5
|
+
module Processors
|
|
6
|
+
class List
|
|
7
|
+
enable_memoized
|
|
8
|
+
common_constructor :url
|
|
9
|
+
|
|
10
|
+
# @return [Enumerable<Hash>]
|
|
11
|
+
def accommodations
|
|
12
|
+
current_url = url
|
|
13
|
+
index = 0
|
|
14
|
+
r = []
|
|
15
|
+
while current_url.present?
|
|
16
|
+
accommodations, current_url, index = page_accommodations(current_url, index)
|
|
17
|
+
r += accommodations
|
|
18
|
+
end
|
|
19
|
+
r
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# @return [Integer]
|
|
23
|
+
def declared_count
|
|
24
|
+
@declared_count || raise('@declared_count is blank')
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
protected
|
|
28
|
+
|
|
29
|
+
# @param current_url [Addressable::URI]
|
|
30
|
+
# @param index [Integer]
|
|
31
|
+
# @return [Array]
|
|
32
|
+
def page_accommodations(current_url, index)
|
|
33
|
+
page = ::EhbrsRubyUtils::Airbnb::Processors::Page.new(current_url, session, index)
|
|
34
|
+
@declared_count ||= page.declared_count
|
|
35
|
+
[page.accommodations, page.next_page_url, index + 1]
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# @return [Aranha::Selenium::Session]
|
|
39
|
+
memoize def session
|
|
40
|
+
::Aranha::Selenium::Session.new(driver: :chrome)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module EhbrsRubyUtils
|
|
4
|
+
module Airbnb
|
|
5
|
+
module Processors
|
|
6
|
+
class Page
|
|
7
|
+
class BuildAccommodation
|
|
8
|
+
acts_as_instance_method
|
|
9
|
+
common_constructor :list, :data
|
|
10
|
+
|
|
11
|
+
def result
|
|
12
|
+
%i[link].inject(data) do |a, e|
|
|
13
|
+
a.merge(e => send("#{e}_value"))
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# @return [String]
|
|
18
|
+
def link_value
|
|
19
|
+
"=HYPERLINK(\"#{url_value}\";\"#{data.fetch(:name)}\")"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# @return [Addressable::URI]
|
|
23
|
+
def url_value
|
|
24
|
+
list.url + data.fetch(:href)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module EhbrsRubyUtils
|
|
4
|
+
module Airbnb
|
|
5
|
+
module Processors
|
|
6
|
+
class Page < ::EhbrsRubyUtils::Aranha::AccommodationsProcessor
|
|
7
|
+
common_constructor :url, :session, :index, super_args: -> { [url] }
|
|
8
|
+
|
|
9
|
+
# @return [Boolean]
|
|
10
|
+
def all_data_loaded?
|
|
11
|
+
parser.data.fetch(:accommodations).all? { |e| e.fetch(:name).present? }
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# @return [Addressable::URI]
|
|
15
|
+
def next_page_url
|
|
16
|
+
data.fetch(:next_page_href).if_present do |v|
|
|
17
|
+
url + v
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
require_sub __FILE__, require_mode: :kernel
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module EhbrsRubyUtils
|
|
4
|
+
module Aranha
|
|
5
|
+
class AccommodationsProcessor
|
|
6
|
+
acts_as_abstract
|
|
7
|
+
enable_memoized
|
|
8
|
+
common_constructor :url
|
|
9
|
+
|
|
10
|
+
SCROLL_DOWN_STEP = 500
|
|
11
|
+
|
|
12
|
+
# @return [Array]
|
|
13
|
+
def accommodations
|
|
14
|
+
data.fetch(:accommodations).map { |a| build_accommodation(a) }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# @return [Integer]
|
|
18
|
+
def declared_count
|
|
19
|
+
data.fetch(:declared_count)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
protected
|
|
23
|
+
|
|
24
|
+
# @return [Boolean]
|
|
25
|
+
def all_data_loaded?
|
|
26
|
+
raise_abstract_method __method__
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# @param accommodation_data [Hash]
|
|
30
|
+
# @return [Hash]
|
|
31
|
+
def build_accommodation(_accommodation_data)
|
|
32
|
+
raise_abstract_method __method__
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def data
|
|
36
|
+
@data ||= begin
|
|
37
|
+
session.navigate.to url
|
|
38
|
+
session.wait(5.minutes).until do
|
|
39
|
+
scroll_down
|
|
40
|
+
all_data_loaded?
|
|
41
|
+
end
|
|
42
|
+
parser.data
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# @return [Object]
|
|
47
|
+
def parser
|
|
48
|
+
parser_class.from_string(session.current_source)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# @return [Class]
|
|
52
|
+
def parser_class
|
|
53
|
+
[self.class.module_parent.module_parent.name, 'Parsers', self.class.name.demodulize]
|
|
54
|
+
.join('::').constantize
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# @return [Aranha::Selenium::Session]
|
|
58
|
+
def session
|
|
59
|
+
raise_abstract_method __method__
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# @return [void]
|
|
63
|
+
def scroll_down
|
|
64
|
+
session.scroll_down_by(SCROLL_DOWN_STEP)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
require_sub __FILE__, require_mode: :kernel
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -7,7 +7,7 @@ module EhbrsRubyUtils
|
|
|
7
7
|
DEFAULT_STATUS = 'asyncplay'
|
|
8
8
|
ID_PARSER = /table=(\d+)/.to_parser { |m| m[1].to_i }
|
|
9
9
|
ITEMS_XPATH = '//*[@id = "section-play"]//a[contains(@href, "table=")]'
|
|
10
|
-
STATUS_CLASS_PATTERN = /\Agametable_status_(.+)\z
|
|
10
|
+
STATUS_CLASS_PATTERN = /\Agametable_status_(.+)\z/
|
|
11
11
|
STATUS_CLASS_PARSER = STATUS_CLASS_PATTERN.to_parser { |m| m[1] }
|
|
12
12
|
TABLE_COUNT_XPATH =
|
|
13
13
|
'//*[@id = "section-play"]/h1/span[contains(@class, "font-normal")]/span/text()'
|
|
@@ -11,7 +11,7 @@ module EhbrsRubyUtils
|
|
|
11
11
|
'players_at_table' => ::EhbrsRubyUtils::Bga::Parsers::Table::ActivePlayers
|
|
12
12
|
}.freeze
|
|
13
13
|
PLAYERS_IDS_XPATH = PLAYERS_IDS.keys.map { |id| "@id = \"#{id}\"" }.join(' or ')
|
|
14
|
-
PLAYERS_XPATH = ".//*[(#{PLAYERS_IDS_XPATH}) and count(./*) > 0]"
|
|
14
|
+
PLAYERS_XPATH = ".//*[(#{PLAYERS_IDS_XPATH}) and count(./*) > 0]".freeze
|
|
15
15
|
|
|
16
16
|
field :game_code, :string, '//meta[@property="og:image"]/@content'
|
|
17
17
|
field :game_name, :string, './/*[@id = "table_name"]/text()'
|
|
@@ -9,7 +9,7 @@ module EhbrsRubyUtils
|
|
|
9
9
|
|
|
10
10
|
LINE_SEPARATOR = "\n"
|
|
11
11
|
OPTION_SEPARATOR = LINE_SEPARATOR
|
|
12
|
-
SECTION_SEPARATOR = "#{LINE_SEPARATOR}#{LINE_SEPARATOR}"
|
|
12
|
+
SECTION_SEPARATOR = "#{LINE_SEPARATOR}#{LINE_SEPARATOR}".freeze
|
|
13
13
|
|
|
14
14
|
# @param content [String, Enumerable]
|
|
15
15
|
# @return [String]
|
|
@@ -3,28 +3,14 @@
|
|
|
3
3
|
module EhbrsRubyUtils
|
|
4
4
|
module Booking
|
|
5
5
|
module Processors
|
|
6
|
-
class List
|
|
7
|
-
enable_simple_cache
|
|
8
|
-
common_constructor :url
|
|
9
|
-
|
|
6
|
+
class List < ::EhbrsRubyUtils::Aranha::AccommodationsProcessor
|
|
10
7
|
CLOSE_BANNER_XPATH = '//button[@aria-label = "Ignorar informações de login."]'
|
|
11
8
|
MORE_RESULTS_XPATH = '//*[text() = "Ver mais resultados"]'
|
|
12
|
-
SCROLL_DOWN_STEP = 500
|
|
13
|
-
|
|
14
|
-
# @return [Array]
|
|
15
|
-
def accommodations
|
|
16
|
-
data.fetch(:accommodations).map { |a| build_accommodation(a) }
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
# @return [Integer]
|
|
20
|
-
def declared_count
|
|
21
|
-
data.fetch(:declared_count)
|
|
22
|
-
end
|
|
23
9
|
|
|
24
10
|
protected
|
|
25
11
|
|
|
26
12
|
# @return [Boolean]
|
|
27
|
-
def
|
|
13
|
+
def all_data_loaded?
|
|
28
14
|
p = parser
|
|
29
15
|
p.data.fetch(:declared_count).if_present(false) do |v|
|
|
30
16
|
p.data.fetch(:accommodations).count >= v
|
|
@@ -44,35 +30,23 @@ module EhbrsRubyUtils
|
|
|
44
30
|
session.element(xpath: CLOSE_BANNER_XPATH)
|
|
45
31
|
end
|
|
46
32
|
|
|
47
|
-
def data_uncached
|
|
48
|
-
session.navigate.to url
|
|
49
|
-
session.wait(5.minutes).until do
|
|
50
|
-
close_banner
|
|
51
|
-
click_more_results
|
|
52
|
-
scroll_down
|
|
53
|
-
all_accommodations_reached?
|
|
54
|
-
end
|
|
55
|
-
parser.data
|
|
56
|
-
end
|
|
57
|
-
|
|
58
33
|
# @return [Aranha::Selenium::Session::Element]
|
|
59
34
|
def more_results_button
|
|
60
35
|
session.element(xpath: MORE_RESULTS_XPATH)
|
|
61
36
|
end
|
|
62
37
|
|
|
63
|
-
|
|
64
|
-
|
|
38
|
+
# @return [void]
|
|
39
|
+
def scroll_down
|
|
40
|
+
close_banner
|
|
41
|
+
click_more_results
|
|
42
|
+
super
|
|
65
43
|
end
|
|
66
44
|
|
|
67
45
|
# @return [Aranha::Selenium::Session]
|
|
68
|
-
def
|
|
46
|
+
memoize def session
|
|
69
47
|
::Aranha::Selenium::Session.new(driver: :chrome)
|
|
70
48
|
end
|
|
71
49
|
|
|
72
|
-
def scroll_down
|
|
73
|
-
session.scroll_down_by(SCROLL_DOWN_STEP)
|
|
74
|
-
end
|
|
75
|
-
|
|
76
50
|
require_sub __FILE__, require_mode: :kernel
|
|
77
51
|
end
|
|
78
52
|
end
|
|
@@ -4,10 +4,10 @@ module EhbrsRubyUtils
|
|
|
4
4
|
module CookingBook
|
|
5
5
|
class Recipe
|
|
6
6
|
class Measure
|
|
7
|
-
FLOAT_PATTERN = /\d+(?:\.\d+)
|
|
8
|
-
FRACTION_PATTERN = %r{(#{FLOAT_PATTERN})(?:\s*/\s*(#{FLOAT_PATTERN}))?}
|
|
9
|
-
QUANTITY_UNIT_PATTERN = /\A#{FRACTION_PATTERN}(?:\s*(\S+))?\z
|
|
10
|
-
VARIABLE_PATTERN = /\A~\z
|
|
7
|
+
FLOAT_PATTERN = /\d+(?:\.\d+)?/
|
|
8
|
+
FRACTION_PATTERN = %r{(#{FLOAT_PATTERN})(?:\s*/\s*(#{FLOAT_PATTERN}))?}
|
|
9
|
+
QUANTITY_UNIT_PATTERN = /\A#{FRACTION_PATTERN}(?:\s*(\S+))?\z/
|
|
10
|
+
VARIABLE_PATTERN = /\A~\z/
|
|
11
11
|
VARIABLE_TEXT = 'a gosto'
|
|
12
12
|
|
|
13
13
|
class << self
|
|
@@ -13,8 +13,8 @@ module EhbrsRubyUtils
|
|
|
13
13
|
self.options = self.class.lists.option.hash_keys_validate!(options)
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
def build(target_dir, &
|
|
17
|
-
::EhbrsRubyUtils::Fs::Selected::Build.new(self, target_dir, &
|
|
16
|
+
def build(target_dir, &)
|
|
17
|
+
::EhbrsRubyUtils::Fs::Selected::Build.new(self, target_dir, &)
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
def filename
|
|
@@ -33,8 +33,8 @@ module EhbrsRubyUtils
|
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
# @return [void]
|
|
36
|
-
def mudslide_run(*
|
|
37
|
-
r = ::EhbrsRubyUtils::Executables.mudslide.command(*
|
|
36
|
+
def mudslide_run(*)
|
|
37
|
+
r = ::EhbrsRubyUtils::Executables.mudslide.command(*).execute
|
|
38
38
|
raise_mudslide_run_error r, 'exit code not zero ' unless r.fetch(:exit_code).zero?
|
|
39
39
|
raise_mudslide_run_error r, 'blank stdout' if r.fetch(:stdout).blank?
|
|
40
40
|
raise_mudslide_run_error r, 'qrcode shown' if r.fetch(:stdout).include?('▄▄▄▄▄▄▄▄▄')
|
|
@@ -4,7 +4,7 @@ module EhbrsRubyUtils
|
|
|
4
4
|
module Vg
|
|
5
5
|
module Ps2
|
|
6
6
|
class IsoFile < ::EhbrsRubyUtils::Fs::Iso9660File
|
|
7
|
-
CODE_PATTERN = /[a-zA-Z]{4}_[0-9]{3}\.[0-9]{2}
|
|
7
|
+
CODE_PATTERN = /[a-zA-Z]{4}_[0-9]{3}\.[0-9]{2}/
|
|
8
8
|
CODE_PARSER = CODE_PATTERN.to_parser(&:to_s)
|
|
9
9
|
|
|
10
10
|
# @return [String]
|
|
@@ -13,7 +13,7 @@ module EhbrsRubyUtils
|
|
|
13
13
|
# ISO/WII & Wii
|
|
14
14
|
# WBFS/WII & Wii
|
|
15
15
|
# ISO/GC & GameCube
|
|
16
|
-
FILE_DISC_TYPE_PATTERN = %r{\A(\S+)/(\S+)\s+(?:\(([^)]+)\)\s+)?&\s+(\S+)\z}
|
|
16
|
+
FILE_DISC_TYPE_PATTERN = %r{\A(\S+)/(\S+)\s+(?:\(([^)]+)\)\s+)?&\s+(\S+)\z}
|
|
17
17
|
|
|
18
18
|
private
|
|
19
19
|
|
|
@@ -8,7 +8,7 @@ module EhbrsRubyUtils
|
|
|
8
8
|
module Wit
|
|
9
9
|
module Parsers
|
|
10
10
|
class Info
|
|
11
|
-
SECTION_NAME_PATTERN = /\A#{::Regexp.quote('IMAGE-FORMAT:')}(.+)\z
|
|
11
|
+
SECTION_NAME_PATTERN = /\A#{::Regexp.quote('IMAGE-FORMAT:')}(.+)\z/
|
|
12
12
|
|
|
13
13
|
enable_simple_cache
|
|
14
14
|
common_constructor :output
|
|
@@ -52,8 +52,8 @@ module EhbrsRubyUtils
|
|
|
52
52
|
checks.reject(&:passed?).map { |c| c.check.fix }.compact_blank
|
|
53
53
|
end
|
|
54
54
|
|
|
55
|
-
def pad_speaker(&
|
|
56
|
-
::EacRubyUtils::Speaker.context.on(::EacCli::Speaker.new(err_line_prefix: ' '), &
|
|
55
|
+
def pad_speaker(&)
|
|
56
|
+
::EacRubyUtils::Speaker.context.on(::EacCli::Speaker.new(err_line_prefix: ' '), &)
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
def new_padded_cli_speaker
|
|
@@ -14,9 +14,9 @@ module EhbrsRubyUtils
|
|
|
14
14
|
@added_checks ||= []
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
def add_check(name, *
|
|
17
|
+
def add_check(name, *)
|
|
18
18
|
check_path = "ehbrs_ruby_utils/videos2/unsupported/checks/#{name}"
|
|
19
|
-
added_checks << check_path.camelize.constantize.new(*
|
|
19
|
+
added_checks << check_path.camelize.constantize.new(*)
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
def base_checks
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
; DO NOT EDIT (unless you know what you are doing)
|
|
2
|
+
;
|
|
3
|
+
; This subdirectory is a git "subrepo", and this file is maintained by the
|
|
4
|
+
; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme
|
|
5
|
+
;
|
|
6
|
+
[subrepo]
|
|
7
|
+
remote = https://github.com/jsalatiel/wsbb-podman.git
|
|
8
|
+
branch = master
|
|
9
|
+
commit = 17e9e19bd755c3312b4cb7dd427acdf110b8a5f0
|
|
10
|
+
parent = f94d3b2833c4f75b55dd64d21d3440a3ab96a106
|
|
11
|
+
method = merge
|
|
12
|
+
cmdver = 0.4.1
|
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.49.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: 2026-
|
|
11
|
+
date: 2026-05-16 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: aranha
|
|
@@ -30,20 +30,14 @@ dependencies:
|
|
|
30
30
|
requirements:
|
|
31
31
|
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '0.
|
|
34
|
-
- - ">="
|
|
35
|
-
- !ruby/object:Gem::Version
|
|
36
|
-
version: 0.26.3
|
|
33
|
+
version: '0.28'
|
|
37
34
|
type: :runtime
|
|
38
35
|
prerelease: false
|
|
39
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
40
37
|
requirements:
|
|
41
38
|
- - "~>"
|
|
42
39
|
- !ruby/object:Gem::Version
|
|
43
|
-
version: '0.
|
|
44
|
-
- - ">="
|
|
45
|
-
- !ruby/object:Gem::Version
|
|
46
|
-
version: 0.26.3
|
|
40
|
+
version: '0.28'
|
|
47
41
|
- !ruby/object:Gem::Dependency
|
|
48
42
|
name: aranha-selenium
|
|
49
43
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -64,20 +58,14 @@ dependencies:
|
|
|
64
58
|
requirements:
|
|
65
59
|
- - "~>"
|
|
66
60
|
- !ruby/object:Gem::Version
|
|
67
|
-
version: '0.
|
|
68
|
-
- - ">="
|
|
69
|
-
- !ruby/object:Gem::Version
|
|
70
|
-
version: 0.98.5
|
|
61
|
+
version: '0.100'
|
|
71
62
|
type: :runtime
|
|
72
63
|
prerelease: false
|
|
73
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
74
65
|
requirements:
|
|
75
66
|
- - "~>"
|
|
76
67
|
- !ruby/object:Gem::Version
|
|
77
|
-
version: '0.
|
|
78
|
-
- - ">="
|
|
79
|
-
- !ruby/object:Gem::Version
|
|
80
|
-
version: 0.98.5
|
|
68
|
+
version: '0.100'
|
|
81
69
|
- !ruby/object:Gem::Dependency
|
|
82
70
|
name: avm-eac_rails_base0
|
|
83
71
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -127,7 +115,7 @@ dependencies:
|
|
|
127
115
|
version: '0.20'
|
|
128
116
|
- - ">="
|
|
129
117
|
- !ruby/object:Gem::Version
|
|
130
|
-
version: 0.20.
|
|
118
|
+
version: 0.20.2
|
|
131
119
|
type: :runtime
|
|
132
120
|
prerelease: false
|
|
133
121
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -137,7 +125,7 @@ dependencies:
|
|
|
137
125
|
version: '0.20'
|
|
138
126
|
- - ">="
|
|
139
127
|
- !ruby/object:Gem::Version
|
|
140
|
-
version: 0.20.
|
|
128
|
+
version: 0.20.2
|
|
141
129
|
- !ruby/object:Gem::Dependency
|
|
142
130
|
name: eac_rest
|
|
143
131
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -158,14 +146,14 @@ dependencies:
|
|
|
158
146
|
requirements:
|
|
159
147
|
- - "~>"
|
|
160
148
|
- !ruby/object:Gem::Version
|
|
161
|
-
version: '0.
|
|
149
|
+
version: '0.131'
|
|
162
150
|
type: :runtime
|
|
163
151
|
prerelease: false
|
|
164
152
|
version_requirements: !ruby/object:Gem::Requirement
|
|
165
153
|
requirements:
|
|
166
154
|
- - "~>"
|
|
167
155
|
- !ruby/object:Gem::Version
|
|
168
|
-
version: '0.
|
|
156
|
+
version: '0.131'
|
|
169
157
|
- !ruby/object:Gem::Dependency
|
|
170
158
|
name: eac_templates
|
|
171
159
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -260,20 +248,14 @@ dependencies:
|
|
|
260
248
|
requirements:
|
|
261
249
|
- - "~>"
|
|
262
250
|
- !ruby/object:Gem::Version
|
|
263
|
-
version: '0.
|
|
264
|
-
- - ">="
|
|
265
|
-
- !ruby/object:Gem::Version
|
|
266
|
-
version: 0.12.2
|
|
251
|
+
version: '0.13'
|
|
267
252
|
type: :development
|
|
268
253
|
prerelease: false
|
|
269
254
|
version_requirements: !ruby/object:Gem::Requirement
|
|
270
255
|
requirements:
|
|
271
256
|
- - "~>"
|
|
272
257
|
- !ruby/object:Gem::Version
|
|
273
|
-
version: '0.
|
|
274
|
-
- - ">="
|
|
275
|
-
- !ruby/object:Gem::Version
|
|
276
|
-
version: 0.12.2
|
|
258
|
+
version: '0.13'
|
|
277
259
|
description:
|
|
278
260
|
email:
|
|
279
261
|
executables: []
|
|
@@ -281,6 +263,11 @@ extensions: []
|
|
|
281
263
|
extra_rdoc_files: []
|
|
282
264
|
files:
|
|
283
265
|
- lib/ehbrs_ruby_utils.rb
|
|
266
|
+
- lib/ehbrs_ruby_utils/airbnb/parsers/page.rb
|
|
267
|
+
- lib/ehbrs_ruby_utils/airbnb/processors/list.rb
|
|
268
|
+
- lib/ehbrs_ruby_utils/airbnb/processors/page.rb
|
|
269
|
+
- lib/ehbrs_ruby_utils/airbnb/processors/page/build_accommodation.rb
|
|
270
|
+
- lib/ehbrs_ruby_utils/aranha/accommodations_processor.rb
|
|
284
271
|
- lib/ehbrs_ruby_utils/bga/game.rb
|
|
285
272
|
- lib/ehbrs_ruby_utils/bga/game/image.rb
|
|
286
273
|
- lib/ehbrs_ruby_utils/bga/game_statistics.rb
|
|
@@ -438,6 +425,7 @@ files:
|
|
|
438
425
|
- lib/ehbrs_ruby_utils/web_utils/videos/file.rb
|
|
439
426
|
- lib/ehbrs_ruby_utils/web_utils/videos/file/rename.rb
|
|
440
427
|
- lib/ehbrs_ruby_utils/web_utils/videos/files_list.rb
|
|
428
|
+
- template/ehbrs_ruby_utils/finances/bb_browser/docker_image/.gitrepo
|
|
441
429
|
- template/ehbrs_ruby_utils/finances/bb_browser/docker_image/Dockerfile
|
|
442
430
|
- template/ehbrs_ruby_utils/finances/bb_browser/docker_image/Makefile
|
|
443
431
|
- template/ehbrs_ruby_utils/finances/bb_browser/docker_image/README.md
|
|
@@ -460,7 +448,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
460
448
|
requirements:
|
|
461
449
|
- - ">="
|
|
462
450
|
- !ruby/object:Gem::Version
|
|
463
|
-
version: 2
|
|
451
|
+
version: '3.2'
|
|
464
452
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
465
453
|
requirements:
|
|
466
454
|
- - ">="
|