ehbrs_ruby_utils 0.18.0 → 0.20.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.
Files changed (20) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ehbrs_ruby_utils/version.rb +1 -1
  3. data/lib/ehbrs_ruby_utils/videos/opensubtitles/parsers/episode.rb +30 -0
  4. data/lib/ehbrs_ruby_utils/videos/opensubtitles/parsers/title.rb +26 -0
  5. data/lib/ehbrs_ruby_utils/videos/opensubtitles/parsers.rb +13 -0
  6. data/lib/ehbrs_ruby_utils/videos/opensubtitles/processors/episode.rb +44 -0
  7. data/lib/ehbrs_ruby_utils/videos/opensubtitles/processors/subtitle.rb +39 -0
  8. data/lib/ehbrs_ruby_utils/videos/opensubtitles/processors/title.rb +37 -0
  9. data/lib/ehbrs_ruby_utils/videos/opensubtitles/processors.rb +13 -0
  10. data/lib/ehbrs_ruby_utils/videos/opensubtitles.rb +9 -0
  11. data/lib/ehbrs_ruby_utils/web_utils/instance.rb +23 -13
  12. data/spec/lib/ehbrs_ruby_utils/videos/opensubtitles/parsers/episode_spec.rb +7 -0
  13. data/spec/lib/ehbrs_ruby_utils/videos/opensubtitles/parsers/episode_spec_files/counterpart_s01e01.source.html +993 -0
  14. data/spec/lib/ehbrs_ruby_utils/videos/opensubtitles/parsers/episode_spec_files/counterpart_s01e01.target.yaml +5 -0
  15. data/spec/lib/ehbrs_ruby_utils/videos/opensubtitles/parsers/episode_spec_files/wire-season-1-page-1.source.html +478 -0
  16. data/spec/lib/ehbrs_ruby_utils/videos/opensubtitles/parsers/episode_spec_files/wire-season-1-page-1.target.yaml +43 -0
  17. data/spec/lib/ehbrs_ruby_utils/videos/opensubtitles/parsers/title_spec.rb +7 -0
  18. data/spec/lib/ehbrs_ruby_utils/videos/opensubtitles/parsers/title_spec_files/countepart.source.html +763 -0
  19. data/spec/lib/ehbrs_ruby_utils/videos/opensubtitles/parsers/title_spec_files/countepart.target.yaml +22 -0
  20. metadata +50 -36
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5acf6fe93e603883c1a2e9f816ffadcbd8d4a38bd20ccf813735e844f7b2e348
4
- data.tar.gz: f497605aacb3b71e4e0b45faaac5bd3f9ead04fda51e6ffef3593ef88cfe09d7
3
+ metadata.gz: dd6cda8266cb8a597f2a1c3847fca05b4002a9d387feae26339a1e9d808191d6
4
+ data.tar.gz: b69eab41353b59a452dbb4a44a23e54fc9c34458902d4e48e1d1dc423a1e63c0
5
5
  SHA512:
6
- metadata.gz: b4acafae07d720b20b8102e2757c39dee8a8ee629c68e05110440324a77850e147ac2a8954a0644c6b85a96cdb5b90db306f417b09be6b9c538a496387b6ad1a
7
- data.tar.gz: b4b6437fb9ad509308540a7913d6021c378f1e5450d66a65871ae4f5356adc6222db771840b666d672c75bb18e7212673ef00a79e94da70c65a4fd2ecbbbf931
6
+ metadata.gz: ced46b8aa2ebecd983986c3f6ff6e386aeeb0e3741457933a8da7d24cc945bc743a75695aea753aff086a7fe536608edd0631b1f538ae62d4b05b13409de1ae1
7
+ data.tar.gz: '0673885d858f19ed325b95708c749e7b25cf20c0ac3f9b2e2a78cafb151c48b696f7ac1aa4534c9f81ac591b3e68714489f41f40982884bfb1ea39396fce96a7'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EhbrsRubyUtils
4
- VERSION = '0.18.0'
4
+ VERSION = '0.20.0'
5
5
  end
@@ -0,0 +1,30 @@
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 Videos
8
+ module Opensubtitles
9
+ module Parsers
10
+ class Episode < ::Aranha::Parsers::Html::ItemList
11
+ ITEMS_XPATH = '//table[@id = "search_results"]/tbody/tr[starts-with(@id, "name")]'
12
+
13
+ field :href, :string, './/a[contains(@href, "/subtitleserve/")]/@href'
14
+
15
+ def items_xpath
16
+ ITEMS_XPATH
17
+ end
18
+
19
+ def data
20
+ { subtitles: items_data, next_page_href: next_page_href }
21
+ end
22
+
23
+ def next_page_href
24
+ nokogiri.at_xpath('//*[@id = "pager"]//a[text() = ">>"]/@href').if_present(&:text)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,26 @@
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 Videos
8
+ module Opensubtitles
9
+ module Parsers
10
+ class Title < ::Aranha::Parsers::Html::ItemList
11
+ ITEMS_XPATH = '//table[@id = "search_results"]/tbody/tr[@itemprop = "episode"]'
12
+
13
+ field :href, :string, './/a[@itemprop = "url"]/@href'
14
+
15
+ def items_xpath
16
+ ITEMS_XPATH
17
+ end
18
+
19
+ def data
20
+ { episodes: items_data }
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EhbrsRubyUtils
6
+ module Videos
7
+ module Opensubtitles
8
+ module Parsers
9
+ require_sub __FILE__
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'aranha/default_processor'
4
+ require 'ehbrs_ruby_utils/videos/opensubtitles/parsers/episode'
5
+ require 'ehbrs_ruby_utils/videos/opensubtitles/processors/subtitle'
6
+ require 'eac_ruby_utils/core_ext'
7
+
8
+ module EhbrsRubyUtils
9
+ module Videos
10
+ module Opensubtitles
11
+ module Processors
12
+ class Episode < ::Aranha::DefaultProcessor
13
+ enable_simple_cache
14
+ enable_speaker
15
+
16
+ def perform
17
+ infov source_uri, subtitles.count
18
+ subtitles.each(&:perform)
19
+ next_page.if_present(&:perform)
20
+ end
21
+
22
+ private
23
+
24
+ def next_page_uncached
25
+ data.fetch(:next_page_href)
26
+ .if_present { |v| self.class.new(source_uri + v, extra_data) }
27
+ end
28
+
29
+ def subtitle_uri(subtitle_data)
30
+ source_uri + subtitle_data.fetch(:href)
31
+ end
32
+
33
+ def subtitles_uncached
34
+ data.fetch(:subtitles).map do |subtitle_data|
35
+ ::EhbrsRubyUtils::Videos::Opensubtitles::Processors::Subtitle.new(
36
+ subtitle_uri(subtitle_data), extra_data
37
+ )
38
+ end + next_page.if_present([], &:subtitles)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'aranha/default_processor'
4
+ require 'eac_fs/cached_download'
5
+ require 'eac_ruby_utils/core_ext'
6
+
7
+ module EhbrsRubyUtils
8
+ module Videos
9
+ module Opensubtitles
10
+ module Processors
11
+ class Subtitle < ::Aranha::DefaultProcessor
12
+ enable_simple_cache
13
+ enable_speaker
14
+
15
+ def perform
16
+ infov ' * ', source_uri
17
+ assert_download
18
+ rescue ::RuntimeError => e
19
+ error(e)
20
+ end
21
+
22
+ private
23
+
24
+ def assert_download
25
+ cached_download.assert
26
+ end
27
+
28
+ def cached_download_uncached
29
+ ::EacFs::CachedDownload.new(source_uri, fs_cache)
30
+ end
31
+
32
+ def fs_object_id
33
+ source_uri.to_s.parameterize
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'aranha/default_processor'
4
+ require 'ehbrs_ruby_utils/videos/opensubtitles/parsers/title'
5
+ require 'ehbrs_ruby_utils/videos/opensubtitles/processors/episode'
6
+ require 'eac_ruby_utils/core_ext'
7
+
8
+ module EhbrsRubyUtils
9
+ module Videos
10
+ module Opensubtitles
11
+ module Processors
12
+ class Title < ::Aranha::DefaultProcessor
13
+ enable_simple_cache
14
+ enable_speaker
15
+
16
+ def perform
17
+ infov 'Episodes', episodes.count
18
+ episodes.each(&:perform)
19
+ end
20
+
21
+ private
22
+
23
+ def episode_uri(episode_data)
24
+ source_uri + episode_data.fetch(:href)
25
+ end
26
+
27
+ def episodes_uncached
28
+ data.fetch(:episodes).map do |episode_data|
29
+ ::EhbrsRubyUtils::Videos::Opensubtitles::Processors::Episode
30
+ .new(episode_uri(episode_data), extra_data)
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EhbrsRubyUtils
6
+ module Videos
7
+ module Opensubtitles
8
+ module Processors
9
+ require_sub __FILE__
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EhbrsRubyUtils
6
+ module Opensubtitles
7
+ require_sub __FILE__
8
+ end
9
+ end
@@ -1,14 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'eac_rest/api'
3
4
  require 'eac_ruby_utils/core_ext'
4
5
  require 'avm/instances/base'
5
- require 'httpclient'
6
6
 
7
7
  module EhbrsRubyUtils
8
8
  module WebUtils
9
9
  class Instance < ::Avm::Instances::Base
10
10
  require_sub __FILE__
11
11
 
12
+ # @return [EacRest::Api]
13
+ def api
14
+ ::EacRest::Api.new(root_url, read_entry(:admin_username), read_entry(:admin_password))
15
+ end
16
+
12
17
  def finances
13
18
  @finances ||= ::EhbrsRubyUtils::WebUtils::Instance::Finances.new(self)
14
19
  end
@@ -17,21 +22,26 @@ module EhbrsRubyUtils
17
22
  read_entry(::Avm::Instances::EntryKeys::WEB_URL)
18
23
  end
19
24
 
20
- def resource_url(resource_url_suffix)
21
- root_url + '/' + resource_url_suffix.gsub(%r{\A/+}, '')
22
- end
23
-
25
+ # @param resource_url_suffix [String]
26
+ # @param options [Hash]
27
+ # @return [EacRest::Response]
24
28
  def http_request(resource_url_suffix, options = {})
25
- method = options.delete(:method) || 'get'
26
- url = resource_url(resource_url_suffix)
27
- http_client.request(method, url, options)
29
+ options = http_request_options(options)
30
+ r = api.request(resource_url_suffix).verb(options.verb).headers(options.headers)
31
+ .body_data(options.body_data).response
32
+ ::Struct.new(:status, :body).new(r.status, r.body_str)
28
33
  end
29
34
 
30
- def http_client_uncached
31
- client = HTTPClient.new
32
- client.force_basic_auth = true
33
- client.set_basic_auth(root_url, read_entry(:admin_username), read_entry(:admin_password))
34
- client
35
+ private
36
+
37
+ # @return [::Struct.new(:verb, :body_data, :headers)]
38
+ def http_request_options(options)
39
+ options = options.to_options_consumer
40
+ verb = options.consume(:method, :get).to_sym
41
+ body_data = options.consume(:body)
42
+ headers = options.consume(:header)
43
+ options.validate
44
+ ::Struct.new(:verb, :body_data, :headers).new(verb, body_data, headers)
35
45
  end
36
46
  end
37
47
  end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ehbrs_ruby_utils/videos/opensubtitles/parsers/episode'
4
+
5
+ RSpec.describe ::EhbrsRubyUtils::Videos::Opensubtitles::Parsers::Episode do
6
+ include_examples 'source_target_fixtures', __FILE__
7
+ end