ehbrs-tools 0.11.0 → 0.12.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/google.rb +9 -0
- data/lib/ehbrs/google/translate.rb +11 -0
- data/lib/ehbrs/google/translate/session.rb +61 -0
- data/lib/ehbrs/runner/google.rb +19 -0
- data/lib/ehbrs/runner/google/translate.rb +92 -0
- data/lib/ehbrs/tools/version.rb +1 -1
- data/vendor/aranha-selenium/Gemfile +5 -0
- data/vendor/aranha-selenium/aranha-selenium.gemspec +19 -0
- data/vendor/aranha-selenium/lib/aranha/selenium.rb +8 -0
- data/vendor/aranha-selenium/lib/aranha/selenium/driver_factory.rb +47 -0
- data/vendor/aranha-selenium/lib/aranha/selenium/driver_factory/base.rb +76 -0
- data/vendor/aranha-selenium/lib/aranha/selenium/driver_factory/chrome.rb +28 -0
- data/vendor/aranha-selenium/lib/aranha/selenium/driver_factory/firefox.rb +54 -0
- data/vendor/aranha-selenium/lib/aranha/selenium/driver_factory/firefox_auto_download_mime_types +685 -0
- data/vendor/aranha-selenium/lib/aranha/selenium/session.rb +78 -0
- data/vendor/aranha-selenium/lib/aranha/selenium/version.rb +7 -0
- data/vendor/aranha-selenium/spec/rubocop_check_spec.rb +7 -0
- data/vendor/aranha-selenium/spec/spec_helper.rb +100 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/common_concern.rb +68 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/configs.rb +4 -12
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/configs.rb +1 -1
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/docopt_runner/_class_methods.rb +1 -1
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker.rb +1 -1
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/listable/list.rb +4 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/listable/lists.rb +10 -12
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/listable/symbol_list.rb +19 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/module/common_concern.rb +10 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/module/patch.rb +1 -1
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/module/require_sub.rb +2 -2
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/object/if_present.rb +1 -1
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/paths_hash.rb +1 -3
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/require_sub.rb +45 -2
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/version.rb +1 -1
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/yaml.rb +85 -2
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/common_concern_spec.rb +42 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/common_constructor_spec.rb +1 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/console/docopt_runner_spec.rb +5 -5
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/console/speaker_spec.rb +1 -1
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/envs/executable_spec.rb +4 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/fs/temp/temp_spec.rb +1 -1
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/listable_spec.rb +32 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/options_consumer_spec.rb +1 -1
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/hash/sym_keys_hash_spec.rb +1 -1
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/object/if_present_spec.rb +1 -1
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/object/template_spec.rb +1 -1
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/pathname/basename_sub_spec.rb +4 -4
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/require_sub_spec.rb +19 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/require_sub_spec/stubbed_module_a.rb +6 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/require_sub_spec/stubbed_not_module.rb +6 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/templates/searcher_spec.rb +1 -1
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/yaml_spec.rb +75 -0
- data/vendor/eac_ruby_utils/spec/locales/pt-BR.yml +17 -0
- metadata +26 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 01424b2d17105c7694679a4deb6dda7d0ab4b98f6ee0b32ed5d183bfdac33583
|
4
|
+
data.tar.gz: 271b08e6e6cf9a3868e06d1a13520030e6f1c55d167b86781f1250e92540dee7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bd53a0486dfec03c0d827ee8f759c5f28a490c93cb2320ea623f8a01ec5f9bdc106dd955f55114d098236b0418d96f62ab47cc2df8248b01da66bd87b3db52d8
|
7
|
+
data.tar.gz: 31dc82bd83f87cb8ea9ab4f2e8d2eac8ceba2477bf2d200156b3c01ada3794ddb673bb1d9581fc72ed9da97c3771393b701ae65f1c3c0447b9aeb344afb11d6a
|
data/lib/ehbrs/google.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'aranha/selenium/session'
|
4
|
+
|
5
|
+
module Ehbrs
|
6
|
+
module Google
|
7
|
+
module Translate
|
8
|
+
class Session
|
9
|
+
START_URL = 'https://translate.google.com.br/#view=home&op=docs&sl=en&tl=pt'
|
10
|
+
CLOSE_POPUP_CSS = '.dismiss-button'
|
11
|
+
FILE_INPUT_XPATH = '//*[@id = "tlid-file-input"]'
|
12
|
+
SUBMIT_XPATH = '//form[@action="//translate.googleusercontent.com/translate_f"]' \
|
13
|
+
'//input[@type="submit"]'
|
14
|
+
RESULT_XPATHS = [
|
15
|
+
'//script[contains(@src, "https://translate.google.com/translate_a")]',
|
16
|
+
'/html/body/pre'
|
17
|
+
].freeze
|
18
|
+
|
19
|
+
attr_reader :sub
|
20
|
+
|
21
|
+
def initialize
|
22
|
+
@sub = ::Aranha::Selenium::Session.new
|
23
|
+
end
|
24
|
+
|
25
|
+
def translate(source_document_path)
|
26
|
+
go_to_upload_form
|
27
|
+
input_file(source_document_path)
|
28
|
+
close_changes_alert_popup
|
29
|
+
click_on_translate_button
|
30
|
+
wait_for_load_translation
|
31
|
+
sub.current_source
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def go_to_upload_form
|
37
|
+
sub.navigate.to START_URL
|
38
|
+
sub.wait_for_element(xpath: FILE_INPUT_XPATH)
|
39
|
+
end
|
40
|
+
|
41
|
+
def input_file(source_document_path)
|
42
|
+
sub.find_element(xpath: FILE_INPUT_XPATH).send_keys(source_document_path)
|
43
|
+
end
|
44
|
+
|
45
|
+
def click_on_translate_button
|
46
|
+
sub.wait_for_click(xpath: SUBMIT_XPATH)
|
47
|
+
end
|
48
|
+
|
49
|
+
def close_changes_alert_popup
|
50
|
+
sub.wait_for_click(css: CLOSE_POPUP_CSS)
|
51
|
+
end
|
52
|
+
|
53
|
+
def wait_for_load_translation
|
54
|
+
sub.wait.until do
|
55
|
+
RESULT_XPATHS.any? { |xpath| sub.find_elements(xpath: xpath).size.positive? }
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_cli/default_runner'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
require 'eac_ruby_utils/console/docopt_runner'
|
6
|
+
|
7
|
+
module Ehbrs
|
8
|
+
class Runner < ::EacRubyUtils::Console::DocoptRunner
|
9
|
+
class Google < ::EacRubyUtils::Console::DocoptRunner
|
10
|
+
require_sub __FILE__
|
11
|
+
include ::EacCli::DefaultRunner
|
12
|
+
|
13
|
+
runner_definition do
|
14
|
+
desc 'Utilidades Google.'
|
15
|
+
subcommands
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_cli/default_runner'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
require 'eac_ruby_utils/console/docopt_runner'
|
6
|
+
require 'ehbrs/google/translate/session'
|
7
|
+
|
8
|
+
module Ehbrs
|
9
|
+
class Runner < ::EacRubyUtils::Console::DocoptRunner
|
10
|
+
class Google < ::EacRubyUtils::Console::DocoptRunner
|
11
|
+
class Translate < ::EacRubyUtils::Console::DocoptRunner
|
12
|
+
include ::EacCli::DefaultRunner
|
13
|
+
|
14
|
+
runner_definition do
|
15
|
+
desc 'Traduz um documento com Google Translate.'
|
16
|
+
arg_opt '-o', '--output-file', 'Salva saída em <output-file>.'
|
17
|
+
bool_opt '-w', '--overwrite', 'Permite sobreescrever arquivo de saída.'
|
18
|
+
pos_arg 'source-file'
|
19
|
+
end
|
20
|
+
|
21
|
+
def run
|
22
|
+
start_banner
|
23
|
+
validate
|
24
|
+
if output_to_stdout?
|
25
|
+
out(translated_content)
|
26
|
+
else
|
27
|
+
::File.write(output_file, translated_content)
|
28
|
+
end
|
29
|
+
success 'Concluído'
|
30
|
+
end
|
31
|
+
|
32
|
+
def start_banner
|
33
|
+
infov 'Source file', source_file
|
34
|
+
infov 'Target file', output_file
|
35
|
+
end
|
36
|
+
|
37
|
+
def translated_content_uncached
|
38
|
+
session.translate(source_file)
|
39
|
+
end
|
40
|
+
|
41
|
+
def source_file
|
42
|
+
options.fetch('<source-file>')
|
43
|
+
end
|
44
|
+
|
45
|
+
def output_file
|
46
|
+
options.fetch('--output-file') || default_output_file
|
47
|
+
end
|
48
|
+
|
49
|
+
def default_output_file
|
50
|
+
::File.join(
|
51
|
+
::File.dirname(source_file),
|
52
|
+
::File.basename(source_file, '.*') + '_translated.html'
|
53
|
+
)
|
54
|
+
end
|
55
|
+
|
56
|
+
def session_uncached
|
57
|
+
::Ehbrs::Google::Translate::Session.new
|
58
|
+
end
|
59
|
+
|
60
|
+
def validate
|
61
|
+
validate_source_file
|
62
|
+
validate_output_file
|
63
|
+
validate_output_content
|
64
|
+
end
|
65
|
+
|
66
|
+
def validate_source_file
|
67
|
+
return if ::File.exist?(source_file)
|
68
|
+
|
69
|
+
fatal_error "Source file \"#{source_file}\" does not exist"
|
70
|
+
end
|
71
|
+
|
72
|
+
def validate_output_file
|
73
|
+
return if output_to_stdout?
|
74
|
+
return unless ::File.exist?(output_file)
|
75
|
+
return if options.fetch('--overwrite')
|
76
|
+
|
77
|
+
fatal_error "Output file \"#{output_file}\" already exists"
|
78
|
+
end
|
79
|
+
|
80
|
+
def validate_output_content
|
81
|
+
return if translated_content.present?
|
82
|
+
|
83
|
+
fatal_error 'Output content is empty'
|
84
|
+
end
|
85
|
+
|
86
|
+
def output_to_stdout?
|
87
|
+
output_file == '-'
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
data/lib/ehbrs/tools/version.rb
CHANGED
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
$LOAD_PATH.push File.expand_path('lib', __dir__)
|
4
|
+
|
5
|
+
require 'aranha/selenium/version'
|
6
|
+
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = 'aranha-selenium'
|
9
|
+
s.version = ::Aranha::Selenium::VERSION
|
10
|
+
s.authors = ['Esquilo Azul Company']
|
11
|
+
s.summary = 'Selenium\' utilities for Ruby.'
|
12
|
+
|
13
|
+
s.files = Dir['{lib}/**/*', 'Gemfile']
|
14
|
+
|
15
|
+
s.add_dependency 'activesupport'
|
16
|
+
s.add_dependency 'selenium-webdriver', '~> 3.142', '>= 3.142.3'
|
17
|
+
|
18
|
+
s.add_development_dependency 'eac_ruby_gem_support', '~> 0.1', '>= 0.1.1'
|
19
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_support/core_ext/hash/indifferent_access'
|
4
|
+
require 'aranha/selenium/driver_factory/base'
|
5
|
+
require 'aranha/selenium/driver_factory/chrome'
|
6
|
+
require 'aranha/selenium/driver_factory/firefox'
|
7
|
+
|
8
|
+
module Aranha
|
9
|
+
module Selenium
|
10
|
+
class DriverFactory
|
11
|
+
class << self
|
12
|
+
def create_driver(options = {})
|
13
|
+
new(options).create_driver
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
attr_reader :options
|
18
|
+
|
19
|
+
def initialize(options)
|
20
|
+
@options = options.with_indifferent_access.freeze
|
21
|
+
end
|
22
|
+
|
23
|
+
def create_driver
|
24
|
+
driver_class.new(driver_options).build
|
25
|
+
end
|
26
|
+
|
27
|
+
def driver_name
|
28
|
+
(options[:driver] || default_driver_name).to_s
|
29
|
+
end
|
30
|
+
|
31
|
+
def driver_class
|
32
|
+
Aranha::Selenium::DriverFactory.const_get(driver_name.classify)
|
33
|
+
rescue NameError
|
34
|
+
raise "Unknown Aranha Selenium driver: \"#{driver_name}\"" \
|
35
|
+
" (Class \"Aranha::Selenium::DriverFactory::#{driver_name.classify}\" not found)"
|
36
|
+
end
|
37
|
+
|
38
|
+
def default_driver_name
|
39
|
+
:firefox
|
40
|
+
end
|
41
|
+
|
42
|
+
def driver_options
|
43
|
+
options.except(:driver)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_support/json'
|
4
|
+
require 'active_support/core_ext/hash/indifferent_access'
|
5
|
+
require 'selenium-webdriver'
|
6
|
+
require 'tmpdir'
|
7
|
+
|
8
|
+
module Aranha
|
9
|
+
module Selenium
|
10
|
+
class DriverFactory
|
11
|
+
class Base
|
12
|
+
DEFAULT_DOWNLOADS_DIR = ::File.join(::Dir.tmpdir, 'aranha_downloads_dir')
|
13
|
+
DEFAULT_ACCEPT_INSECURE_CERTS = false
|
14
|
+
DEFAULT_HEADLESS = false
|
15
|
+
DEFAULT_USER_AGENT = nil
|
16
|
+
|
17
|
+
class << self
|
18
|
+
attr_writer :default_accept_insecure_certs, :default_downloads_dir, :default_headless,
|
19
|
+
:default_user_agent
|
20
|
+
|
21
|
+
def default_downloads_dir
|
22
|
+
@default_downloads_dir || DEFAULT_DOWNLOADS_DIR
|
23
|
+
end
|
24
|
+
|
25
|
+
def default_accept_insecure_certs
|
26
|
+
@default_accept_insecure_certs || DEFAULT_ACCEPT_INSECURE_CERTS
|
27
|
+
end
|
28
|
+
|
29
|
+
def default_headless
|
30
|
+
@default_headless || DEFAULT_HEADLESS
|
31
|
+
end
|
32
|
+
|
33
|
+
def default_user_agent
|
34
|
+
@default_user_agent || DEFAULT_USER_AGENT
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
attr_reader :options
|
39
|
+
|
40
|
+
def initialize(options)
|
41
|
+
@options = options.with_indifferent_access.freeze
|
42
|
+
end
|
43
|
+
|
44
|
+
def build
|
45
|
+
raise 'Must be overrided'
|
46
|
+
end
|
47
|
+
|
48
|
+
def downloads_dir
|
49
|
+
option_value(:downloads_dir)
|
50
|
+
end
|
51
|
+
|
52
|
+
def accept_insecure_certs?
|
53
|
+
option_value(:accept_insecure_certs)
|
54
|
+
end
|
55
|
+
|
56
|
+
def headless?
|
57
|
+
option_value(:headless)
|
58
|
+
end
|
59
|
+
|
60
|
+
def user_agent
|
61
|
+
option_value(:user_agent)
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def option_value(key)
|
67
|
+
if options.key?(key)
|
68
|
+
options.fetch(key)
|
69
|
+
else
|
70
|
+
::Aranha::Selenium::DriverFactory::Base.send("default_#{key}")
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'aranha/selenium/driver_factory/base'
|
4
|
+
|
5
|
+
module Aranha
|
6
|
+
module Selenium
|
7
|
+
class DriverFactory
|
8
|
+
class Chrome < ::Aranha::Selenium::DriverFactory::Base
|
9
|
+
def build
|
10
|
+
::Selenium::WebDriver.for :chrome, options: chrome_options
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def chrome_options
|
16
|
+
r = ::Selenium::WebDriver::Chrome::Options.new
|
17
|
+
r.add_argument('--ignore-certificate-errors') if accept_insecure_certs?
|
18
|
+
r.add_argument('--headless') if headless?
|
19
|
+
r.add_argument('--disable-popup-blocking')
|
20
|
+
r.add_argument('--disable-translate')
|
21
|
+
r.add_argument("user-agent=#{user_agent}") if user_agent.present?
|
22
|
+
r.add_preference(:download, prompt_for_download: false, default_directory: downloads_dir)
|
23
|
+
r
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'aranha/selenium/driver_factory/base'
|
4
|
+
|
5
|
+
module Aranha
|
6
|
+
module Selenium
|
7
|
+
class DriverFactory
|
8
|
+
class Firefox < ::Aranha::Selenium::DriverFactory::Base
|
9
|
+
def build
|
10
|
+
::Selenium::WebDriver.for(
|
11
|
+
:firefox,
|
12
|
+
options: ::Selenium::WebDriver::Firefox::Options.new(
|
13
|
+
profile: build_profile,
|
14
|
+
args: build_args
|
15
|
+
),
|
16
|
+
desired_capabilities: build_capabilities
|
17
|
+
)
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def build_args
|
23
|
+
r = []
|
24
|
+
r << '-headless' if headless?
|
25
|
+
r
|
26
|
+
end
|
27
|
+
|
28
|
+
def build_capabilities
|
29
|
+
if accept_insecure_certs?
|
30
|
+
::Selenium::WebDriver::Remote::Capabilities.firefox(accept_insecure_certs: true)
|
31
|
+
else
|
32
|
+
::Selenium::WebDriver::Remote::Capabilities.firefox
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def build_profile
|
37
|
+
r = ::Selenium::WebDriver::Firefox::Profile.new
|
38
|
+
r['browser.download.dir'] = downloads_dir
|
39
|
+
r['browser.download.folderList'] = 2
|
40
|
+
r['browser.helperApps.neverAsk.saveToDisk'] = auto_download_mime_types.join(';')
|
41
|
+
r['pdfjs.disabled'] = true
|
42
|
+
r['general.useragent.override'] = user_agent if user_agent.present?
|
43
|
+
r
|
44
|
+
end
|
45
|
+
|
46
|
+
def auto_download_mime_types
|
47
|
+
::File.read(
|
48
|
+
::File.join(__dir__, 'firefox_auto_download_mime_types')
|
49
|
+
).each_line.map(&:strip)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|