ehbrs-tools 0.16.0 → 0.16.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 +4 -4
- data/lib/ehbrs/tools/version.rb +1 -1
- data/lib/ehbrs/vg/wii/wit/parsers/dump.rb +10 -5
- data/vendor/aranha-parsers/Gemfile +5 -0
- data/vendor/aranha-parsers/aranha-parsers.gemspec +23 -0
- data/vendor/aranha-parsers/lib/aranha/parsers.rb +9 -0
- data/vendor/aranha-parsers/lib/aranha/parsers/base.rb +79 -0
- data/vendor/aranha-parsers/lib/aranha/parsers/html.rb +11 -0
- data/vendor/aranha-parsers/lib/aranha/parsers/html/base.rb +47 -0
- data/vendor/aranha-parsers/lib/aranha/parsers/html/item.rb +24 -0
- data/vendor/aranha-parsers/lib/aranha/parsers/html/item_list.rb +29 -0
- data/vendor/aranha-parsers/lib/aranha/parsers/html/node.rb +13 -0
- data/vendor/aranha-parsers/lib/aranha/parsers/html/node/base.rb +36 -0
- data/vendor/aranha-parsers/lib/aranha/parsers/html/node/default.rb +126 -0
- data/vendor/aranha-parsers/lib/aranha/parsers/invalid_state_exception.rb +8 -0
- data/vendor/aranha-parsers/lib/aranha/parsers/patches.rb +11 -0
- data/vendor/aranha-parsers/lib/aranha/parsers/patches/ofx_parser.rb +38 -0
- data/vendor/aranha-parsers/lib/aranha/parsers/source_address.rb +55 -0
- data/vendor/aranha-parsers/lib/aranha/parsers/source_address/file.rb +31 -0
- data/vendor/aranha-parsers/lib/aranha/parsers/source_address/hash_http_get.rb +25 -0
- data/vendor/aranha-parsers/lib/aranha/parsers/source_address/hash_http_post.rb +45 -0
- data/vendor/aranha-parsers/lib/aranha/parsers/source_address/http_get.rb +49 -0
- data/vendor/aranha-parsers/lib/aranha/parsers/source_target_fixtures.rb +77 -0
- data/vendor/aranha-parsers/lib/aranha/parsers/spec/source_target_fixtures_example.rb +70 -0
- data/vendor/aranha-parsers/lib/aranha/parsers/version.rb +7 -0
- data/vendor/aranha-parsers/spec/lib/aranha/parsers/source_address/http_get_spec.rb +21 -0
- data/vendor/aranha-parsers/spec/lib/aranha/parsers/source_address_spec.rb +74 -0
- data/vendor/aranha-parsers/spec/lib/aranha/parsers/source_target_fixtures_spec.rb +27 -0
- data/vendor/aranha-parsers/spec/lib/aranha/parsers/source_target_fixtures_spec_files/stub1.source.txt +1 -0
- data/vendor/aranha-parsers/spec/lib/aranha/parsers/source_target_fixtures_spec_files/stub1.target.html +1 -0
- data/vendor/aranha-parsers/spec/lib/aranha/parsers/source_target_fixtures_spec_files/stub2.source.html +1 -0
- data/vendor/aranha-parsers/spec/lib/aranha/parsers/source_target_fixtures_spec_files/stub3.target.yaml +1 -0
- data/vendor/aranha-parsers/spec/lib/rubocop_check_spec.rb +7 -0
- data/vendor/aranha-parsers/spec/spec_helper.rb +8 -0
- data/vendor/eac_cli/lib/eac_cli/definition.rb +14 -4
- data/vendor/eac_cli/lib/eac_cli/definition/help_formatter.rb +76 -0
- data/vendor/eac_cli/lib/eac_cli/definition/positional_argument.rb +15 -2
- data/vendor/eac_cli/lib/eac_cli/parser/options_collection.rb +4 -63
- data/vendor/eac_cli/lib/eac_cli/version.rb +1 -1
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/configs.rb +4 -69
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/configs/entry_reader.rb +81 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/configs/password_entry_reader.rb +18 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/configs/read_entry_options.rb +7 -2
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/configs/store_passwords_entry_reader.rb +27 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/object/debug.rb +17 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/version.rb +1 -1
- metadata +38 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 802c81117166172af4ea59889f51ca8fa22e9619c3db5c3c6cea3facefd67816
|
4
|
+
data.tar.gz: 524a0c12d36e164f7530653ace84b229d3c90b382bd148fc2dabdf51611881e4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8704fd788c833ebd36f2c3bab048855993cba2fbe29555040027965195d698eba76d2e36d77ded10672bf50027b441af11d9732ce8bf8dde6fb821623155ea1e
|
7
|
+
data.tar.gz: 45fa1972f370a98e24424a55ff81b964525799512e6d288fbde84996c5d36540cf368491de00423036f327cc5470889fae2ea0fcf52f40eb29fdfc736275a797
|
data/lib/ehbrs/tools/version.rb
CHANGED
@@ -11,7 +11,11 @@ module Ehbrs
|
|
11
11
|
enable_simple_cache
|
12
12
|
common_constructor :output
|
13
13
|
|
14
|
-
|
14
|
+
# WIA/WII (v1.00,LZMA2.7@100) & Wii
|
15
|
+
# ISO/WII & Wii
|
16
|
+
# WBFS/WII & Wii
|
17
|
+
# ISO/GC & GameCube
|
18
|
+
FILE_DISC_TYPE_PATTERN = %r{\A(\S+)/(\S+)\s+(?:\(([^\)]+)\)\s+)?&\s+(\S+)\z}.freeze
|
15
19
|
|
16
20
|
private
|
17
21
|
|
@@ -42,10 +46,11 @@ module Ehbrs
|
|
42
46
|
end
|
43
47
|
|
44
48
|
def parse_file_disc_type(value)
|
45
|
-
FILE_DISC_TYPE_PATTERN
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
+
r = FILE_DISC_TYPE_PATTERN.match(value).if_present do |m|
|
50
|
+
{ type: m[1], platform_acronym: m[2], type_extra: m[3],
|
51
|
+
platform_name: m[4] }
|
52
|
+
end
|
53
|
+
r.if_blank { raise "\"#{FILE_DISC_TYPE_PATTERN}\" does not match \"#{value}\"" }
|
49
54
|
end
|
50
55
|
|
51
56
|
def parse_disc_part_ids(value)
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
$LOAD_PATH.push File.expand_path('lib', __dir__)
|
4
|
+
|
5
|
+
require 'aranha/parsers/version'
|
6
|
+
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = 'aranha-parsers'
|
9
|
+
s.version = ::Aranha::Parsers::VERSION
|
10
|
+
s.authors = ['Esquilo Azul Company']
|
11
|
+
s.summary = 'Parsers\' utilities for Ruby.'
|
12
|
+
|
13
|
+
s.files = Dir['{lib}/**/*', 'Gemfile']
|
14
|
+
|
15
|
+
s.add_dependency 'activesupport', '>= 4.0.0'
|
16
|
+
s.add_dependency 'addressable', '~> 2.7'
|
17
|
+
s.add_dependency 'curb', '~> 0.9.10'
|
18
|
+
s.add_dependency 'eac_ruby_utils', '~> 0.33', '>= 0.33.1'
|
19
|
+
s.add_dependency 'httpclient', '~> 2.8', '>= 2.8.3'
|
20
|
+
s.add_dependency 'ofx-parser', '~> 1.1.0'
|
21
|
+
|
22
|
+
s.add_development_dependency 'eac_ruby_gem_support', '~> 0.1'
|
23
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'open-uri'
|
4
|
+
require 'fileutils'
|
5
|
+
require 'aranha/parsers/source_address'
|
6
|
+
require 'eac_ruby_utils/fs/temp'
|
7
|
+
|
8
|
+
module Aranha
|
9
|
+
module Parsers
|
10
|
+
class Base
|
11
|
+
class << self
|
12
|
+
def from_content(content)
|
13
|
+
::EacRubyUtils::Fs::Temp.on_file do |path|
|
14
|
+
path.write(content)
|
15
|
+
r = new(path.to_path)
|
16
|
+
r.content
|
17
|
+
r
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def parse_content(content)
|
22
|
+
from_content(content).data
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
LOG_DIR_ENVVAR = 'ARANHA_PARSERS_LOG_DIR'
|
27
|
+
|
28
|
+
attr_reader :source_address
|
29
|
+
|
30
|
+
def initialize(url)
|
31
|
+
@source_address = ::Aranha::Parsers::SourceAddress.new(url)
|
32
|
+
log_content(source_address.serialize, '-source-address')
|
33
|
+
end
|
34
|
+
|
35
|
+
delegate :url, to: :source_address
|
36
|
+
|
37
|
+
def content
|
38
|
+
@content ||= begin
|
39
|
+
s = source_address.content
|
40
|
+
log_content(s)
|
41
|
+
s
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def log_content(content, suffix = '')
|
48
|
+
path = log_file(suffix)
|
49
|
+
|
50
|
+
return unless path
|
51
|
+
|
52
|
+
File.open(path, 'wb') { |file| file.write(content) }
|
53
|
+
end
|
54
|
+
|
55
|
+
def log_file(suffix)
|
56
|
+
dir = log_parsers_dir
|
57
|
+
return nil unless dir
|
58
|
+
|
59
|
+
f = ::File.join(dir, "#{self.class.name.parameterize}#{suffix}.log")
|
60
|
+
FileUtils.mkdir_p(File.dirname(f))
|
61
|
+
f
|
62
|
+
end
|
63
|
+
|
64
|
+
def log_parsers_dir
|
65
|
+
return ENV[LOG_DIR_ENVVAR] if ENV[LOG_DIR_ENVVAR]
|
66
|
+
return ::Rails.root.join('log', 'parsers') if rails_root_exist?
|
67
|
+
|
68
|
+
nil
|
69
|
+
end
|
70
|
+
|
71
|
+
def rails_root_exist?
|
72
|
+
::Rails.root
|
73
|
+
true
|
74
|
+
rescue NameError
|
75
|
+
false
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'nokogiri'
|
4
|
+
require 'aranha/parsers/base'
|
5
|
+
require 'aranha/parsers/html/node/default'
|
6
|
+
|
7
|
+
module Aranha
|
8
|
+
module Parsers
|
9
|
+
module Html
|
10
|
+
class Base < ::Aranha::Parsers::Base
|
11
|
+
class << self
|
12
|
+
def fields
|
13
|
+
@fields ||= []
|
14
|
+
@fields.dup
|
15
|
+
end
|
16
|
+
|
17
|
+
def field(name, type, xpath)
|
18
|
+
@fields ||= []
|
19
|
+
@fields << Field.new(name, type, xpath)
|
20
|
+
end
|
21
|
+
|
22
|
+
Field = Struct.new(:name, :type, :xpath)
|
23
|
+
end
|
24
|
+
|
25
|
+
def nokogiri
|
26
|
+
@nokogiri ||= Nokogiri::HTML(content, &:noblanks)
|
27
|
+
end
|
28
|
+
|
29
|
+
protected
|
30
|
+
|
31
|
+
def node_parser_class
|
32
|
+
::Aranha::Parsers::Html::Node::Default
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def node_parser
|
38
|
+
@node_parser ||= node_parser_class.new(fields)
|
39
|
+
end
|
40
|
+
|
41
|
+
def fields
|
42
|
+
self.class.fields.map { |f| [f.name, f.type, f.xpath] }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'aranha/parsers/html/base'
|
4
|
+
|
5
|
+
module Aranha
|
6
|
+
module Parsers
|
7
|
+
module Html
|
8
|
+
class Item < Base
|
9
|
+
def data
|
10
|
+
@data ||= node_parser.parse(item_node)
|
11
|
+
end
|
12
|
+
|
13
|
+
def item_node
|
14
|
+
@item_node ||= begin
|
15
|
+
r = item_xpath ? nokogiri.at_xpath(item_xpath) : nokogiri
|
16
|
+
raise "Item node not found (Item xpath: #{item_xpath})" unless r
|
17
|
+
|
18
|
+
r
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'aranha/parsers/html/base'
|
4
|
+
|
5
|
+
module Aranha
|
6
|
+
module Parsers
|
7
|
+
module Html
|
8
|
+
class ItemList < Base
|
9
|
+
def data
|
10
|
+
items_data
|
11
|
+
end
|
12
|
+
|
13
|
+
def items_data
|
14
|
+
count = 0
|
15
|
+
@data ||= nokogiri.xpath(items_xpath).map do |m|
|
16
|
+
count += 1
|
17
|
+
node_parser.parse(m)
|
18
|
+
end
|
19
|
+
rescue StandardError => e
|
20
|
+
raise StandardError, "#{e.message} (Count: #{count})"
|
21
|
+
end
|
22
|
+
|
23
|
+
def items_xpath
|
24
|
+
raise "Class #{self.class} has no method \"#{__method__}\". Implement it"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Aranha
|
4
|
+
module Parsers
|
5
|
+
module Html
|
6
|
+
module Node
|
7
|
+
class Base
|
8
|
+
attr_reader :fields
|
9
|
+
|
10
|
+
def initialize(fields)
|
11
|
+
@fields = fields
|
12
|
+
end
|
13
|
+
|
14
|
+
def parse(node)
|
15
|
+
fields.map do |f|
|
16
|
+
begin
|
17
|
+
[f[0], parse_field(node, f[2], f[1])]
|
18
|
+
rescue StandardError => e
|
19
|
+
raise StandardError, "#{e.message}\nFields: #{f}"
|
20
|
+
end
|
21
|
+
end.to_h
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def parse_field(node, xpath, parser_method)
|
27
|
+
value_method = "#{parser_method}_value"
|
28
|
+
return send(value_method, node, xpath) if respond_to?(value_method)
|
29
|
+
|
30
|
+
raise "Method \"#{value_method}\" not found in #{self.class}"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,126 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'aranha/parsers/html/node/base'
|
4
|
+
|
5
|
+
module Aranha
|
6
|
+
module Parsers
|
7
|
+
module Html
|
8
|
+
module Node
|
9
|
+
class Default < ::Aranha::Parsers::Html::Node::Base
|
10
|
+
def string_value(node, xpath)
|
11
|
+
if node.at_xpath(xpath)
|
12
|
+
sanitize_string(node.at_xpath(xpath).text)
|
13
|
+
else
|
14
|
+
''
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def string_recursive_value(node, xpath, required = true)
|
19
|
+
root = node.at_xpath(xpath)
|
20
|
+
if root.blank?
|
21
|
+
return nil unless required
|
22
|
+
|
23
|
+
raise "No node found (Xpath: #{xpath})"
|
24
|
+
end
|
25
|
+
result = string_recursive(root)
|
26
|
+
return result if result.present?
|
27
|
+
return nil unless required
|
28
|
+
|
29
|
+
raise "String blank (Xpath: #{xpath})"
|
30
|
+
end
|
31
|
+
|
32
|
+
def string_recursive_optional_value(node, xpath)
|
33
|
+
string_recursive_value(node, xpath, false)
|
34
|
+
end
|
35
|
+
|
36
|
+
def quoted_value(node, xpath)
|
37
|
+
s = string_value(node, xpath)
|
38
|
+
return '' unless s
|
39
|
+
|
40
|
+
m = /\"([^\"]+)\"/.match(s)
|
41
|
+
return m[1] if m
|
42
|
+
|
43
|
+
''
|
44
|
+
end
|
45
|
+
|
46
|
+
def integer_value(node, xpath)
|
47
|
+
r = string_value(node, xpath)
|
48
|
+
return nil if r.blank?
|
49
|
+
|
50
|
+
m = /\d+/.match(r)
|
51
|
+
raise "Integer not found in \"#{r}\"" unless m
|
52
|
+
|
53
|
+
m[0].to_i
|
54
|
+
end
|
55
|
+
|
56
|
+
def integer_optional_value(node, xpath)
|
57
|
+
r = string_value(node, xpath)
|
58
|
+
m = /\d+/.match(r)
|
59
|
+
m ? m[0].to_i : nil
|
60
|
+
end
|
61
|
+
|
62
|
+
def float_value(node, xpath)
|
63
|
+
parse_float(node, xpath, true)
|
64
|
+
end
|
65
|
+
|
66
|
+
def float_optional_value(node, xpath)
|
67
|
+
parse_float(node, xpath, false)
|
68
|
+
end
|
69
|
+
|
70
|
+
def array_value(node, xpath)
|
71
|
+
r = node.xpath(xpath).map { |n| n.text.strip }
|
72
|
+
r.join('|')
|
73
|
+
end
|
74
|
+
|
75
|
+
def join_value(node, xpath)
|
76
|
+
m = ''
|
77
|
+
node.xpath(xpath).each do |n|
|
78
|
+
m << n.text.strip
|
79
|
+
end
|
80
|
+
m
|
81
|
+
end
|
82
|
+
|
83
|
+
def duration_value(node, xpath)
|
84
|
+
m = /(\d+) m/.match(join_value(node, xpath))
|
85
|
+
m ? m[1].to_i : nil
|
86
|
+
end
|
87
|
+
|
88
|
+
def regxep(node, xpath, pattern)
|
89
|
+
s = string_value(node, xpath)
|
90
|
+
m = pattern.match(s)
|
91
|
+
return m if m
|
92
|
+
|
93
|
+
raise "Pattern \"#{pattern}\" not found in string \"#{s}\""
|
94
|
+
end
|
95
|
+
|
96
|
+
private
|
97
|
+
|
98
|
+
def parse_float(node, xpath, required)
|
99
|
+
s = string_value(node, xpath)
|
100
|
+
m = /\d+(?:[\.\,](\d+))?/.match(s)
|
101
|
+
if m
|
102
|
+
m[0].delete('.').tr(',', '.').to_f
|
103
|
+
elsif required
|
104
|
+
raise "Float value not found in \"#{s}\""
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def sanitize_string(obj)
|
109
|
+
obj.to_s.tr("\u00A0", ' ').strip
|
110
|
+
end
|
111
|
+
|
112
|
+
def string_recursive(node)
|
113
|
+
return sanitize_string(node.text) if node.is_a?(::Nokogiri::XML::Text)
|
114
|
+
|
115
|
+
s = ''
|
116
|
+
node.children.each do |child|
|
117
|
+
child_s = string_recursive(child)
|
118
|
+
s += ' ' + child_s if child_s.present?
|
119
|
+
end
|
120
|
+
sanitize_string(s)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|