ehbrs_ruby_utils 0.32.0 → 0.35.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/parsers/game_in_progress.rb +2 -2
- data/lib/ehbrs_ruby_utils/bga/parsers/table/options.rb +3 -3
- data/lib/ehbrs_ruby_utils/bga/session/skip_trophies.rb +1 -1
- data/lib/ehbrs_ruby_utils/bga/session/user.rb +1 -3
- data/lib/ehbrs_ruby_utils/bga/table/whatsapp_formatters/base.rb +1 -1
- data/lib/ehbrs_ruby_utils/circular_list_spreader/base_level.rb +1 -1
- data/lib/ehbrs_ruby_utils/circular_list_spreader/group_level.rb +1 -1
- data/lib/ehbrs_ruby_utils/cooking_book/build/base_page.rb +42 -0
- data/lib/ehbrs_ruby_utils/cooking_book/build/index_page.rb +26 -0
- data/lib/ehbrs_ruby_utils/cooking_book/build/recipe_page.rb +26 -0
- data/lib/ehbrs_ruby_utils/cooking_book/build.rb +45 -0
- data/lib/ehbrs_ruby_utils/cooking_book/project.rb +31 -0
- data/lib/ehbrs_ruby_utils/cooking_book/recipe/ingredient.rb +21 -0
- data/lib/ehbrs_ruby_utils/cooking_book/recipe/measure.rb +60 -0
- data/lib/ehbrs_ruby_utils/cooking_book/recipe/part.rb +32 -0
- data/lib/ehbrs_ruby_utils/cooking_book/recipe.rb +37 -0
- data/lib/ehbrs_ruby_utils/cooking_book.rb +9 -0
- data/lib/ehbrs_ruby_utils/fs/selected/build.rb +1 -1
- data/lib/ehbrs_ruby_utils/music/lyrics_book/resource.rb +1 -1
- data/lib/ehbrs_ruby_utils/patches/object/template.rb +2 -2
- data/lib/ehbrs_ruby_utils/patches/object.rb +1 -1
- data/lib/ehbrs_ruby_utils/patches.rb +1 -1
- data/lib/ehbrs_ruby_utils/version.rb +1 -1
- data/lib/ehbrs_ruby_utils/vg/wii/file_move.rb +89 -0
- data/lib/ehbrs_ruby_utils/vg/wii/game_file.rb +87 -0
- data/lib/ehbrs_ruby_utils/vg/wii/wit/image_format.rb +47 -0
- data/lib/ehbrs_ruby_utils/vg/wii/wit/parsers/dump.rb +67 -0
- data/lib/ehbrs_ruby_utils/vg/wii/wit/parsers/info.rb +39 -0
- data/lib/ehbrs_ruby_utils/vg/wii/wit/path.rb +55 -0
- data/lib/ehbrs_ruby_utils/vg/wii/wit.rb +13 -0
- data/lib/ehbrs_ruby_utils/vg/wii.rb +11 -0
- data/lib/ehbrs_ruby_utils/vg.rb +9 -0
- data/lib/ehbrs_ruby_utils/videos/container.rb +1 -1
- data/lib/ehbrs_ruby_utils/videos/opensubtitles/processors/subtitles_provider.rb +51 -0
- data/lib/ehbrs_ruby_utils/videos/opensubtitles/processors/title.rb +5 -0
- data/lib/ehbrs_ruby_utils/videos/quality.rb +1 -3
- data/lib/ehbrs_ruby_utils/videos/resolution.rb +2 -2
- data/lib/ehbrs_ruby_utils/videos/series/rename/file/basename_parser.rb +2 -2
- data/lib/ehbrs_ruby_utils/videos/series/rename/file.rb +2 -2
- data/lib/ehbrs_ruby_utils/videos/series/rename/line_result.rb +2 -2
- data/lib/ehbrs_ruby_utils/videos/series/rename/line_result_group.rb +1 -0
- data/lib/ehbrs_ruby_utils/videos/series/rename/season_group.rb +1 -0
- data/lib/ehbrs_ruby_utils/videos/stream.rb +1 -1
- data/lib/ehbrs_ruby_utils/web_utils/videos/file.rb +1 -1
- metadata +44 -146
- data/.rspec +0 -1
- data/.rubocop.yml +0 -45
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress_spec.rb +0 -7
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress_spec_files/player_84920871_2023-06-12.source.html +0 -8657
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress_spec_files/player_84920871_2023-06-12.target.yaml +0 -41
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress_spec_files/player_84920871_2023-06-19.source.html +0 -8650
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress_spec_files/player_84920871_2023-06-19.target.yaml +0 -41
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress_spec_files/player_93167144_2023-06-12.source.html +0 -8657
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress_spec_files/player_93167144_2023-06-12.target.yaml +0 -5
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress_spec_files/player_93205235_2023-06-12.source.html +0 -8657
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress_spec_files/player_93205235_2023-06-12.target.yaml +0 -13
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress_spec_files/player_93212034_2023-06-12.source.html +0 -8657
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress_spec_files/player_93212034_2023-06-12.target.yaml +0 -29
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress_spec_files/player_93223573_2023-06-12.source.html +0 -8657
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress_spec_files/player_93223573_2023-06-12.target.yaml +0 -7
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress_spec_files/player_93248308_2023-06-12.source.html +0 -8657
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_in_progress_spec_files/player_93248308_2023-06-12.target.yaml +0 -1
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_stats_spec.rb +0 -7
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_stats_spec_files/1.source.html +0 -1082
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_stats_spec_files/1.target.yaml +0 -151
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_stats_spec_files/2.source.html +0 -1083
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/game_stats_spec_files/2.target.yaml +0 -1127
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/table_spec.rb +0 -7
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/table_spec_files/table_302873643.source.html +0 -1491
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/table_spec_files/table_302873643.target.yaml +0 -40
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/table_spec_files/table_308782287.source.html +0 -1965
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/table_spec_files/table_308782287.target.yaml +0 -46
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/table_spec_files/table_356513708.source.html +0 -1497
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/table_spec_files/table_356513708.target.yaml +0 -56
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/table_spec_files/table_357408039.source.html +0 -1500
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/table_spec_files/table_357408039.target.yaml +0 -66
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/table_spec_files/table_368448439.source.html +0 -1497
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/table_spec_files/table_368448439.target.yaml +0 -58
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/table_spec_files/table_373602409.source.html +0 -1441
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/table_spec_files/table_373602409.target.yaml +0 -30
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/table_spec_files/table_373747455.source.html +0 -1521
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/table_spec_files/table_373747455.target.yaml +0 -59
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/table_spec_files/table_383405743.source.html +0 -1480
- data/spec/lib/ehbrs_ruby_utils/bga/parsers/table_spec_files/table_383405743.target.yaml +0 -32
- data/spec/lib/ehbrs_ruby_utils/circular_list_spreader_spec.rb +0 -68
- data/spec/lib/ehbrs_ruby_utils/circular_list_spreader_spec_files/ehbrs_music1.source.yaml +0 -124
- data/spec/lib/ehbrs_ruby_utils/circular_list_spreader_spec_files/ehbrs_music1.target.yaml +0 -70
- data/spec/lib/ehbrs_ruby_utils/circular_list_spreader_spec_files/minimum.source.yaml +0 -7
- data/spec/lib/ehbrs_ruby_utils/circular_list_spreader_spec_files/minimum.target.yaml +0 -5
- data/spec/lib/ehbrs_ruby_utils/videos/opensubtitles/parsers/episode_spec.rb +0 -7
- data/spec/lib/ehbrs_ruby_utils/videos/opensubtitles/parsers/episode_spec_files/counterpart_s01e01.source.html +0 -993
- data/spec/lib/ehbrs_ruby_utils/videos/opensubtitles/parsers/episode_spec_files/counterpart_s01e01.target.yaml +0 -5
- data/spec/lib/ehbrs_ruby_utils/videos/opensubtitles/parsers/episode_spec_files/wire-season-1-page-1.source.html +0 -478
- data/spec/lib/ehbrs_ruby_utils/videos/opensubtitles/parsers/episode_spec_files/wire-season-1-page-1.target.yaml +0 -43
- data/spec/lib/ehbrs_ruby_utils/videos/opensubtitles/parsers/title_spec.rb +0 -7
- data/spec/lib/ehbrs_ruby_utils/videos/opensubtitles/parsers/title_spec_files/countepart.source.html +0 -763
- data/spec/lib/ehbrs_ruby_utils/videos/opensubtitles/parsers/title_spec_files/countepart.target.yaml +0 -22
- data/spec/lib/ehbrs_ruby_utils/videos/resolution_spec.rb +0 -18
- data/spec/lib/ehbrs_ruby_utils/videos/stream_spec.rb +0 -13
- data/spec/lib/ehbrs_ruby_utils/videos/stream_spec_files/menina_ovo_attachment.source.yaml +0 -28
- data/spec/lib/ehbrs_ruby_utils/videos/stream_spec_files/menina_ovo_attachment.target.yaml +0 -8
- data/spec/lib/ehbrs_ruby_utils/videos/stream_spec_files/menina_ovo_audio.source.yaml +0 -49
- data/spec/lib/ehbrs_ruby_utils/videos/stream_spec_files/menina_ovo_audio.target.yaml +0 -8
- data/spec/lib/ehbrs_ruby_utils/videos/stream_spec_files/menina_ovo_subtitle.source.yaml +0 -43
- data/spec/lib/ehbrs_ruby_utils/videos/stream_spec_files/menina_ovo_subtitle.target.yaml +0 -8
- data/spec/lib/ehbrs_ruby_utils/videos/stream_spec_files/menina_ovo_video.source.yaml +0 -59
- data/spec/lib/ehbrs_ruby_utils/videos/stream_spec_files/menina_ovo_video.target.yaml +0 -8
- data/spec/rubocop_check_spec.rb +0 -3
- data/spec/spec_helper.rb +0 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 763112ae8325274f9c7a277a78e6984bb2c3e89632214f89d3bc3bced8e1acde
|
|
4
|
+
data.tar.gz: 61448a174beb1981acaa3615a923a61fc39c9bd1c615839abef486a8c716b2a4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7a6948ad99b05f1f9742c1a79391ea3a8f7138420efaa6b6f4b966b86d3460f74e01027311170ba0b051a7ac66e27f7c08998344374bded000cb9ba0d93a5a31
|
|
7
|
+
data.tar.gz: 6515790504ba6e0c848f0c0941de5f3f5fd6f1b9bb396e356af85ea66957f857bfc3865b7b16258d2d5c54fffb55dac5439944884920e4e236766cba3407ff29
|
|
@@ -8,7 +8,7 @@ module EhbrsRubyUtils
|
|
|
8
8
|
module Parsers
|
|
9
9
|
class GameInProgress < ::Aranha::Parsers::Html::ItemList
|
|
10
10
|
ITEMS_XPATH = '//*[@id = "gametables_inprogress_all"]' \
|
|
11
|
-
|
|
11
|
+
'//*[starts-with(@id, "gametableblock_")]'
|
|
12
12
|
STATUS_CLASS_PATTERN = /\Agametable_status_(.+)\z/.freeze
|
|
13
13
|
STATUS_CLASS_PARSER = STATUS_CLASS_PATTERN.to_parser { |m| m[1] }
|
|
14
14
|
|
|
@@ -29,7 +29,7 @@ module EhbrsRubyUtils
|
|
|
29
29
|
private
|
|
30
30
|
|
|
31
31
|
def process_status(status)
|
|
32
|
-
status.split
|
|
32
|
+
status.split.lazy.map { |s| STATUS_CLASS_PARSER.parse(s.strip) }.find(&:present?) ||
|
|
33
33
|
raise("No status class found in \"#{status}\"")
|
|
34
34
|
end
|
|
35
35
|
end
|
|
@@ -9,12 +9,12 @@ module EhbrsRubyUtils
|
|
|
9
9
|
module Parsers
|
|
10
10
|
class Table < ::Aranha::Parsers::Html::Item
|
|
11
11
|
class Options < ::Aranha::Parsers::Html::ItemList
|
|
12
|
-
ITEMS_XPATH = '//div[starts-with(@id, "gameoption_")' \
|
|
13
|
-
|
|
12
|
+
ITEMS_XPATH = '//div[starts-with(@id, "gameoption_") ' \
|
|
13
|
+
'and not(contains(@style, "none"))]'
|
|
14
14
|
|
|
15
15
|
field :label, :string, './div[@class = "row-label"]/text()'
|
|
16
16
|
field :value, :string, './div[@class = "row-value"]' \
|
|
17
|
-
|
|
17
|
+
"//*[#{xpath_ends_with('@id', "'_displayed_value'")}]/text()"
|
|
18
18
|
field :description, :string, './div[@class = "gameoption_description"]/text()'
|
|
19
19
|
|
|
20
20
|
def items_xpath
|
|
@@ -7,7 +7,7 @@ module EhbrsRubyUtils
|
|
|
7
7
|
class Session < ::SimpleDelegator
|
|
8
8
|
module SkipTrophies
|
|
9
9
|
TROPHY_SKIP_BUTTON_XPATH = '//*[@id = "splashedNotifications_overlay"]' \
|
|
10
|
-
|
|
10
|
+
'//*[starts-with(@id, "continue_btn_")]'
|
|
11
11
|
TROPHY_SKIP_TIMEOUT = 5
|
|
12
12
|
|
|
13
13
|
# @param &block [Proc]
|
|
@@ -18,9 +18,7 @@ module EhbrsRubyUtils
|
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
def on_logged(&block)
|
|
21
|
-
|
|
22
|
-
raise "Login failed for BoardGameUser user \"#{username}\"" unless login
|
|
23
|
-
end
|
|
21
|
+
raise "Login failed for BoardGameUser user \"#{username}\"" if !logged? && !login
|
|
24
22
|
|
|
25
23
|
block.call
|
|
26
24
|
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
|
4
|
+
|
|
5
|
+
module EhbrsRubyUtils
|
|
6
|
+
module CookingBook
|
|
7
|
+
class Build
|
|
8
|
+
class BasePage < SimpleDelegator
|
|
9
|
+
attr_reader :parent
|
|
10
|
+
|
|
11
|
+
def initialize(parent, source_object)
|
|
12
|
+
super(source_object)
|
|
13
|
+
@parent = parent
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def build
|
|
17
|
+
target_path.write(target_content)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def href
|
|
21
|
+
"#{target_basename}.html"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def target_path
|
|
25
|
+
parent.target_dir.join(href)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def target_content
|
|
29
|
+
erb_result('layout', ::EhbrsRubyUtils::CookingBook::Build::BasePage)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def inner_content
|
|
33
|
+
erb_result('inner', self.class)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def erb_result(template_basename, template_source = self)
|
|
37
|
+
template_source.erb_template("#{template_basename}.html.erb", self)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
|
4
|
+
require 'ehbrs_ruby_utils/cooking_book/build/base_page'
|
|
5
|
+
|
|
6
|
+
module EhbrsRubyUtils
|
|
7
|
+
module CookingBook
|
|
8
|
+
class Build
|
|
9
|
+
class IndexPage < ::EhbrsRubyUtils::CookingBook::Build::BasePage
|
|
10
|
+
TITLE = 'Início'
|
|
11
|
+
|
|
12
|
+
def initialize(parent)
|
|
13
|
+
super(parent, nil)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def target_basename
|
|
17
|
+
'index'
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def title
|
|
21
|
+
TITLE
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
|
4
|
+
require 'ehbrs_ruby_utils/cooking_book/build/base_page'
|
|
5
|
+
|
|
6
|
+
module EhbrsRubyUtils
|
|
7
|
+
module CookingBook
|
|
8
|
+
class Build
|
|
9
|
+
class RecipePage < ::EhbrsRubyUtils::CookingBook::Build::BasePage
|
|
10
|
+
def target_basename
|
|
11
|
+
title.variableize
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def parts
|
|
15
|
+
@parts ||= super.map { |e| Part.new(e) }
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
class Part < SimpleDelegator
|
|
19
|
+
def content
|
|
20
|
+
::EhbrsRubyUtils::CookingBook::Build::RecipePage.erb_template('part.html.erb', self)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
|
4
|
+
require 'eac_ruby_utils/fs/clearable_directory'
|
|
5
|
+
|
|
6
|
+
module EhbrsRubyUtils
|
|
7
|
+
module CookingBook
|
|
8
|
+
class Build
|
|
9
|
+
require_sub __FILE__
|
|
10
|
+
enable_simple_cache
|
|
11
|
+
enable_listable
|
|
12
|
+
lists.add_symbol :option, :target_dir
|
|
13
|
+
|
|
14
|
+
common_constructor :project, :options, default: [{}] do
|
|
15
|
+
self.options = self.class.lists.option.hash_keys_validate!(options.symbolize_keys)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def run
|
|
19
|
+
target_dir.clear
|
|
20
|
+
index_page.build
|
|
21
|
+
recipes_pages.each(&:build)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
def index_page_uncached
|
|
27
|
+
::EhbrsRubyUtils::CookingBook::Build::IndexPage.new(self)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def recipes_pages_uncached
|
|
31
|
+
project.recipes.map do |recipe|
|
|
32
|
+
::EhbrsRubyUtils::CookingBook::Build::RecipePage.new(self, recipe)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def target_dir_uncached
|
|
37
|
+
::EacRubyUtils::Fs::ClearableDirectory.new(options[OPTION_TARGET_DIR] || default_target_dir)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def default_target_dir
|
|
41
|
+
project.root.join('dist')
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
|
4
|
+
require 'ehbrs_ruby_utils/cooking_book/recipe'
|
|
5
|
+
|
|
6
|
+
module EhbrsRubyUtils
|
|
7
|
+
module CookingBook
|
|
8
|
+
class Project
|
|
9
|
+
RECIPES_ROOT_SUBPATH = 'recipes'
|
|
10
|
+
|
|
11
|
+
enable_simple_cache
|
|
12
|
+
common_constructor :root do
|
|
13
|
+
self.root = root.to_pathname
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
delegate :to_s, to: :root
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
|
|
20
|
+
def recipes_root_uncached
|
|
21
|
+
root.join(RECIPES_ROOT_SUBPATH)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def recipes_uncached
|
|
25
|
+
::Dir.glob(File.join('**', '*.{yml,yaml}'), base: recipes_root.to_path).map do |subpath|
|
|
26
|
+
::EhbrsRubyUtils::CookingBook::Recipe.from_file(recipes_root.join(subpath))
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
|
4
|
+
require 'ehbrs_ruby_utils/cooking_book/recipe/measure'
|
|
5
|
+
|
|
6
|
+
module EhbrsRubyUtils
|
|
7
|
+
module CookingBook
|
|
8
|
+
class Recipe
|
|
9
|
+
class Ingredient
|
|
10
|
+
class << self
|
|
11
|
+
def build(label, value)
|
|
12
|
+
new(label, ::EhbrsRubyUtils::CookingBook::Recipe::Measure.build(value))
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
enable_simple_cache
|
|
17
|
+
common_constructor :name, :measure
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
|
4
|
+
require 'eac_ruby_utils/yaml'
|
|
5
|
+
require 'ehbrs_ruby_utils/cooking_book/recipe/ingredient'
|
|
6
|
+
|
|
7
|
+
module EhbrsRubyUtils
|
|
8
|
+
module CookingBook
|
|
9
|
+
class Recipe
|
|
10
|
+
class Measure
|
|
11
|
+
FLOAT_PATTERN = /\d+(?:\.\d+)?/.freeze
|
|
12
|
+
FRACTION_PATTERN = %r{(#{FLOAT_PATTERN})(?:\s*/\s*(#{FLOAT_PATTERN}))?}.freeze
|
|
13
|
+
QUANTITY_UNIT_PATTERN = /\A#{FRACTION_PATTERN}(?:\s*(\S+))?\z/.freeze
|
|
14
|
+
VARIABLE_PATTERN = /\A~\z/.freeze
|
|
15
|
+
VARIABLE_TEXT = 'a gosto'
|
|
16
|
+
|
|
17
|
+
class << self
|
|
18
|
+
def build(value)
|
|
19
|
+
value = value.to_s.strip
|
|
20
|
+
build_from_variable(value) || build_from_pattern(value) || build_unknown(value)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def build_from_variable(value)
|
|
26
|
+
VARIABLE_PATTERN.if_match(value, false) do
|
|
27
|
+
new(nil, nil, nil)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def build_from_pattern(value)
|
|
32
|
+
QUANTITY_UNIT_PATTERN.if_match(value, false) do |m|
|
|
33
|
+
new(m[1].if_present(&:to_f), m[2].if_present(&:to_f), m[3])
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def build_unknown(value)
|
|
38
|
+
new(nil, nil, "unknown format: |#{value}|")
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
common_constructor :numerator, :denominator, :unit
|
|
43
|
+
|
|
44
|
+
def to_s
|
|
45
|
+
return VARIABLE_TEXT if variable?
|
|
46
|
+
|
|
47
|
+
"#{quantity_to_s} #{unit}"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def quantity_to_s
|
|
51
|
+
numerator.to_s + (denominator.if_present('') { |v| "/ #{v}" })
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def variable?
|
|
55
|
+
numerator.blank?
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
|
4
|
+
require 'eac_ruby_utils/yaml'
|
|
5
|
+
require 'ehbrs_ruby_utils/cooking_book/recipe/ingredient'
|
|
6
|
+
|
|
7
|
+
module EhbrsRubyUtils
|
|
8
|
+
module CookingBook
|
|
9
|
+
class Recipe
|
|
10
|
+
class Part
|
|
11
|
+
enable_simple_cache
|
|
12
|
+
common_constructor :title, :source_data
|
|
13
|
+
|
|
14
|
+
def notes
|
|
15
|
+
source_data[:notes]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
|
|
20
|
+
def ingredients_uncached
|
|
21
|
+
source_data.fetch(:ingredients).map do |label, value|
|
|
22
|
+
::EhbrsRubyUtils::CookingBook::Recipe::Ingredient.build(label, value)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def steps_uncached
|
|
27
|
+
source_data.fetch(:steps)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
|
4
|
+
require 'eac_ruby_utils/yaml'
|
|
5
|
+
|
|
6
|
+
module EhbrsRubyUtils
|
|
7
|
+
module CookingBook
|
|
8
|
+
class Recipe
|
|
9
|
+
enable_simple_cache
|
|
10
|
+
require_sub __FILE__
|
|
11
|
+
|
|
12
|
+
class << self
|
|
13
|
+
def from_file(path)
|
|
14
|
+
new(::EacRubyUtils::Yaml.load_file(path))
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
common_constructor :source_data do
|
|
19
|
+
self.source_data = source_data.deep_symbolize_keys
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def title
|
|
23
|
+
source_data.fetch(:title)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def notes
|
|
27
|
+
source_data[:notes]
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def parts
|
|
31
|
+
@parts ||= source_data.fetch(:parts).map do |k, v|
|
|
32
|
+
::EhbrsRubyUtils::CookingBook::Recipe::Part.new(k, v)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -7,7 +7,7 @@ module EhbrsRubyUtils
|
|
|
7
7
|
module Fs
|
|
8
8
|
class Selected
|
|
9
9
|
class Build
|
|
10
|
-
DEFAULT_TARGET_BASENAME_PROC =
|
|
10
|
+
DEFAULT_TARGET_BASENAME_PROC = proc { |path| path.basename.to_path }
|
|
11
11
|
|
|
12
12
|
attr_reader :selected, :target_dir, :target_basename_proc
|
|
13
13
|
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
|
4
|
+
require 'ehbrs/executables'
|
|
5
|
+
require 'ehbrs_ruby_utils/vg/wii/wit/image_format'
|
|
6
|
+
require 'ehbrs_ruby_utils/vg/wii/wit/path'
|
|
7
|
+
require 'fileutils'
|
|
8
|
+
|
|
9
|
+
module EhbrsRubyUtils
|
|
10
|
+
module Vg
|
|
11
|
+
module Wii
|
|
12
|
+
class FileMove
|
|
13
|
+
common_constructor :game, :target do
|
|
14
|
+
self.target = ::EhbrsRubyUtils::Vg::Wii::Wit::Path.assert(target)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
['', 'path_', 'type_'].each do |prefix|
|
|
18
|
+
method_name = "#{prefix}change?"
|
|
19
|
+
define_method(method_name) do
|
|
20
|
+
source.send(method_name, target)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def run
|
|
25
|
+
[%w[path type], %w[path], %w[type]].each do |parts|
|
|
26
|
+
next unless parts.all? { |part| send("#{part}_change?") }
|
|
27
|
+
|
|
28
|
+
assert_target_dir
|
|
29
|
+
send("change_#{parts.join('_and_')}")
|
|
30
|
+
check_target
|
|
31
|
+
break
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def source
|
|
36
|
+
game.wit_path
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
private
|
|
40
|
+
|
|
41
|
+
def assert_target_dir
|
|
42
|
+
target.path.parent.mkpath
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def change_path
|
|
46
|
+
::FileUtils.mv(source.path, target.path)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def change_path_and_type
|
|
50
|
+
::Ehbrs::Executables.wit.command
|
|
51
|
+
.append(change_path_and_type_args)
|
|
52
|
+
.system!
|
|
53
|
+
check_target
|
|
54
|
+
source.path.unlink
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def change_path_and_type_args
|
|
58
|
+
r = %w[copy]
|
|
59
|
+
target_image_format.if_present { |v| r << v.option }
|
|
60
|
+
r + [source.path, target.path]
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def change_type
|
|
64
|
+
::Ehbrs::Executables.wit.command
|
|
65
|
+
.append(change_type_args)
|
|
66
|
+
.system!
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def change_type_args
|
|
70
|
+
r = %w[convert]
|
|
71
|
+
target_image_format.if_present { |v| r << v.option }
|
|
72
|
+
r + [target.path]
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def check_target
|
|
76
|
+
return if ::EhbrsRubyUtils::Vg::Wii::GameFile.new(target.path).valid?
|
|
77
|
+
|
|
78
|
+
raise "Target \"#{target}\" is not a valid Wii game"
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def target_image_format
|
|
82
|
+
return nil if target.type.blank?
|
|
83
|
+
|
|
84
|
+
::EhbrsRubyUtils::Vg::Wii::Wit::ImageFormat.by_name(target.type)
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
|
4
|
+
require 'eac_ruby_utils/custom_format'
|
|
5
|
+
require 'ehbrs_ruby_utils/vg/wii/wit/parsers/dump'
|
|
6
|
+
require 'ehbrs_ruby_utils/vg/wii/wit/path'
|
|
7
|
+
require 'pathname'
|
|
8
|
+
|
|
9
|
+
module EhbrsRubyUtils
|
|
10
|
+
module Vg
|
|
11
|
+
module Wii
|
|
12
|
+
class GameFile < ::Pathname
|
|
13
|
+
enable_simple_cache
|
|
14
|
+
|
|
15
|
+
DISC_NUMBER_PATTERN = /disc.?(\d)/i.freeze
|
|
16
|
+
|
|
17
|
+
FORMAT = ::EacRubyUtils::CustomFormat.new(
|
|
18
|
+
b: :basename,
|
|
19
|
+
d: :dirname,
|
|
20
|
+
D: :disc_number,
|
|
21
|
+
e: :extname,
|
|
22
|
+
i: :id6,
|
|
23
|
+
m: :normalized_disc_name,
|
|
24
|
+
n: :disc_name,
|
|
25
|
+
N: :nintendont_basename,
|
|
26
|
+
s: :sanitized_disc_name,
|
|
27
|
+
t: :database_title,
|
|
28
|
+
T: :disc_type
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
def database_title
|
|
32
|
+
properties.fetch('DB title')
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def disc_name
|
|
36
|
+
properties.fetch('Disc name')
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def disc_number
|
|
40
|
+
DISC_NUMBER_PATTERN.if_match(basename.to_s, false) { |m| m[1].to_i }.if_present(1)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def disc_type
|
|
44
|
+
properties.fetch('File & disc type/type')
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def format(string)
|
|
48
|
+
FORMAT.format(string).with(self)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def normalized_disc_name
|
|
52
|
+
sanitized_disc_name.downcase
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def nintendont_basename
|
|
56
|
+
n = disc_number
|
|
57
|
+
n == 1 ? 'game' : "disc#{n}"
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def id6
|
|
61
|
+
properties.fetch('Disc & part IDs/disc')
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def sanitized_disc_name
|
|
65
|
+
::ActiveSupport::Inflector.transliterate(disc_name).gsub(/[^0-9a-z ]/i, '')
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def valid?
|
|
69
|
+
properties.present?
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def wit_path
|
|
73
|
+
::EhbrsRubyUtils::Vg::Wii::Wit::Path.new(disc_type, self)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
private
|
|
77
|
+
|
|
78
|
+
def properties_uncached
|
|
79
|
+
r = ::Ehbrs::Executables.wit.command.append(['dump', to_s]).execute
|
|
80
|
+
return nil unless r.fetch(:exit_code).zero?
|
|
81
|
+
|
|
82
|
+
::EhbrsRubyUtils::Vg::Wii::Wit::Parsers::Dump.new(r.fetch(:stdout)).properties
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|