addic7ed 3.0.0 → 4.0.0.pre.beta.5
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/addic7ed.rb +5 -10
- data/lib/addic7ed/common.rb +13 -1285
- data/lib/addic7ed/config.json +1417 -0
- data/lib/addic7ed/errors.rb +8 -7
- data/lib/addic7ed/models/episode.rb +112 -0
- data/lib/addic7ed/models/search.rb +90 -0
- data/lib/addic7ed/models/subtitle.rb +109 -0
- data/lib/addic7ed/models/subtitles_collection.rb +63 -0
- data/lib/addic7ed/models/video_file.rb +147 -0
- data/lib/addic7ed/service.rb +13 -0
- data/lib/addic7ed/services/check_compatibility.rb +44 -0
- data/lib/addic7ed/services/download_subtitle.rb +53 -0
- data/lib/addic7ed/services/get_shows_list.rb +29 -0
- data/lib/addic7ed/services/{addic7ed_comment_normalizer.rb → normalize_comment.rb} +4 -8
- data/lib/addic7ed/services/normalize_version.rb +22 -0
- data/lib/addic7ed/services/parse_page.rb +43 -0
- data/lib/addic7ed/services/parse_subtitle.rb +79 -0
- data/lib/addic7ed/services/url_encode_show_name.rb +46 -0
- data/lib/addic7ed/version.rb +1 -1
- metadata +63 -50
- data/bin/addic7ed +0 -144
- data/lib/addic7ed/episode.rb +0 -95
- data/lib/addic7ed/parser.rb +0 -105
- data/lib/addic7ed/services/addic7ed_version_normalizer.rb +0 -24
- data/lib/addic7ed/show_list.rb +0 -61
- data/lib/addic7ed/subtitle.rb +0 -72
- data/lib/addic7ed/video_file.rb +0 -41
- data/spec/lib/addic7ed/common_spec.rb +0 -21
- data/spec/lib/addic7ed/episode_spec.rb +0 -165
- data/spec/lib/addic7ed/services/addic7ed_comment_normalizer_spec.rb +0 -12
- data/spec/lib/addic7ed/services/addic7ed_version_normalizer_spec.rb +0 -73
- data/spec/lib/addic7ed/show_list_spec.rb +0 -42
- data/spec/lib/addic7ed/subtitle_spec.rb +0 -182
- data/spec/lib/addic7ed/video_file_spec.rb +0 -159
- data/spec/responses/basic_redirection.http +0 -13
- data/spec/responses/homepage.http +0 -921
- data/spec/responses/redirection_loop.http +0 -12
- data/spec/responses/walking-dead-3-2-1.http +0 -770
- data/spec/responses/walking-dead-3-2-48.http +0 -2117
- data/spec/responses/walking-dead-3-2-7.http +0 -659
- data/spec/responses/walking-dead-3-2-8.http +0 -815
- data/spec/responses/walking-dead-3-2-8_best_subtitle.http +0 -1928
- data/spec/responses/walking-dead-3-4-8.http +0 -732
- data/spec/responses/walking-dead-3-42-8.http +0 -13
- data/spec/spec_helper.rb +0 -26
@@ -0,0 +1,44 @@
|
|
1
|
+
module Addic7ed
|
2
|
+
class CheckCompatibility
|
3
|
+
include Service
|
4
|
+
|
5
|
+
attr_reader :subtitle, :group
|
6
|
+
|
7
|
+
def initialize(subtitle, group)
|
8
|
+
@subtitle = subtitle
|
9
|
+
@group = group
|
10
|
+
end
|
11
|
+
|
12
|
+
def call
|
13
|
+
defined_as_compatible? || generally_compatible? || commented_as_compatible?
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def defined_as_compatible?
|
19
|
+
subtitle.version.split(",").include? group
|
20
|
+
end
|
21
|
+
|
22
|
+
def generally_compatible?
|
23
|
+
COMPATIBILITY_720P[subtitle.version] == group || COMPATIBILITY_720P[group] == subtitle.version
|
24
|
+
end
|
25
|
+
|
26
|
+
def commented_as_compatible?
|
27
|
+
return false if /(won'?t|doesn'?t|not) +work/i =~ subtitle.comment
|
28
|
+
return false if /resync +(from|of|for)/i =~ subtitle.comment
|
29
|
+
!!comment_matches_a_compatible_group?
|
30
|
+
end
|
31
|
+
|
32
|
+
def comment_matches_a_compatible_group?
|
33
|
+
Regexp.new("(#{compatible_groups.join('|')})", "i") =~ subtitle.comment
|
34
|
+
end
|
35
|
+
|
36
|
+
def compatible_groups
|
37
|
+
@compatible_groups ||= [
|
38
|
+
group,
|
39
|
+
COMPATIBILITY_720P[group],
|
40
|
+
COMPATIBILITY_720P[subtitle.version]
|
41
|
+
].compact.uniq
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Addic7ed
|
2
|
+
class DownloadSubtitle
|
3
|
+
include Service
|
4
|
+
|
5
|
+
HTTP_REDIRECT_LIMIT = 8
|
6
|
+
|
7
|
+
attr_reader :url, :filename, :referer, :redirect_count
|
8
|
+
|
9
|
+
def initialize(url, filename, referer, redirect_count = 0)
|
10
|
+
@url = url
|
11
|
+
@filename = filename
|
12
|
+
@referer = referer
|
13
|
+
@redirect_count = redirect_count
|
14
|
+
end
|
15
|
+
|
16
|
+
def call
|
17
|
+
raise DownloadError, "Too many HTTP redirections" if redirect_count >= HTTP_REDIRECT_LIMIT
|
18
|
+
raise DailyLimitExceeded, "Daily limit exceeded" if %r{^/downloadexceeded.php} =~ url
|
19
|
+
return follow_redirection(response["location"]) if response.is_a? Net::HTTPRedirection
|
20
|
+
write(response.body)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def uri
|
26
|
+
@uri ||= URI(url)
|
27
|
+
end
|
28
|
+
|
29
|
+
def response
|
30
|
+
@response ||= Net::HTTP.start(uri.hostname, uri.port) do |http|
|
31
|
+
request = Net::HTTP::Get.new(uri.request_uri)
|
32
|
+
request["Referer"] = referer # Addic7ed requires the Referer to be correct
|
33
|
+
request["User-Agent"] = USER_AGENTS.sample
|
34
|
+
http.request(request)
|
35
|
+
end
|
36
|
+
rescue
|
37
|
+
raise DownloadError, "A network error occured"
|
38
|
+
end
|
39
|
+
|
40
|
+
def follow_redirection(location_header)
|
41
|
+
# Addic7ed is serving redirection URL not-encoded,
|
42
|
+
# but Ruby does not support it (see http://bugs.ruby-lang.org/issues/7396)
|
43
|
+
new_url = URI.escape(location_header)
|
44
|
+
DownloadSubtitle.call(new_url, filename, url, redirect_count + 1)
|
45
|
+
end
|
46
|
+
|
47
|
+
def write(content)
|
48
|
+
Kernel.open(filename, "w") { |f| f << content }
|
49
|
+
rescue
|
50
|
+
raise DownloadError, "Cannot write to disk"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require "singleton"
|
2
|
+
|
3
|
+
module Addic7ed
|
4
|
+
class GetShowsList
|
5
|
+
include Singleton
|
6
|
+
|
7
|
+
def self.call
|
8
|
+
instance.call
|
9
|
+
end
|
10
|
+
|
11
|
+
def call
|
12
|
+
@shows ||= homepage_body.css("select#qsShow option:not(:first-child)").map(&:text)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def homepage_body
|
18
|
+
@homepage_body ||= Oga.parse_html(addic7ed_homepage.body)
|
19
|
+
end
|
20
|
+
|
21
|
+
def addic7ed_homepage
|
22
|
+
Net::HTTP.start("www.addic7ed.com") do |http|
|
23
|
+
request = Net::HTTP::Get.new("/")
|
24
|
+
request["User-Agent"] = USER_AGENTS.sample
|
25
|
+
http.request(request)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -1,19 +1,15 @@
|
|
1
1
|
module Addic7ed
|
2
|
-
class
|
2
|
+
class NormalizeComment
|
3
|
+
include Service
|
4
|
+
|
3
5
|
attr_reader :comment
|
4
6
|
|
5
7
|
def initialize(comment)
|
6
8
|
@comment = comment || ""
|
7
9
|
end
|
8
10
|
|
9
|
-
def self.call(comment)
|
10
|
-
new(comment).call
|
11
|
-
end
|
12
|
-
|
13
11
|
def call
|
14
|
-
comment.downcase
|
12
|
+
comment.downcase.strip
|
15
13
|
end
|
16
14
|
end
|
17
|
-
|
18
|
-
private
|
19
15
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Addic7ed
|
2
|
+
class NormalizeVersion
|
3
|
+
include Service
|
4
|
+
|
5
|
+
attr_reader :version
|
6
|
+
|
7
|
+
def initialize(version)
|
8
|
+
@version = version || ""
|
9
|
+
end
|
10
|
+
|
11
|
+
def call
|
12
|
+
version
|
13
|
+
.gsub(/[[:space:]]/, "")
|
14
|
+
.upcase
|
15
|
+
.gsub(/,[\d\. ]+MBS$/, "")
|
16
|
+
.gsub(/(^VERSION *|720P|1080P|HDTV|PROPER|RERIP|INTERNAL|X\.?264)/, "")
|
17
|
+
.gsub(/[- \.\,]/, " ")
|
18
|
+
.strip
|
19
|
+
.gsub(/ +/, ",")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require "oga"
|
2
|
+
require "net/http"
|
3
|
+
require "open-uri"
|
4
|
+
|
5
|
+
module Addic7ed
|
6
|
+
class ParsePage
|
7
|
+
include Service
|
8
|
+
|
9
|
+
attr_reader :uri
|
10
|
+
|
11
|
+
def initialize(url)
|
12
|
+
@uri = URI(url)
|
13
|
+
end
|
14
|
+
|
15
|
+
def call
|
16
|
+
raise NoSubtitleFound unless subtitles_found?
|
17
|
+
subtitles_nodes.map { |subtitle_node| Addic7ed::ParseSubtitle.call(subtitle_node) }
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def page_dom
|
23
|
+
raise EpisodeNotFound if server_response.body.nil? || server_response.body.empty?
|
24
|
+
@page_dom ||= Oga.parse_html(server_response.body)
|
25
|
+
end
|
26
|
+
|
27
|
+
def subtitles_nodes
|
28
|
+
@subtitles_nodes ||= page_dom.css("#container95m table.tabel95 table.tabel95")
|
29
|
+
end
|
30
|
+
|
31
|
+
def server_response
|
32
|
+
@server_response ||= Net::HTTP.start(uri.hostname, uri.port) do |http|
|
33
|
+
request = Net::HTTP::Get.new(uri.request_uri)
|
34
|
+
request["User-Agent"] = USER_AGENTS.sample
|
35
|
+
http.request(request)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def subtitles_found?
|
40
|
+
page_dom.css("select#filterlang ~ font[color='yellow']").empty? && !subtitles_nodes.empty?
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require "oga"
|
2
|
+
|
3
|
+
module Addic7ed
|
4
|
+
class ParseSubtitle
|
5
|
+
include Service
|
6
|
+
|
7
|
+
attr_reader :subtitle_node
|
8
|
+
|
9
|
+
FIELDS = [:version, :language, :status, :url, :source, :hi, :downloads, :comment].freeze
|
10
|
+
|
11
|
+
def initialize(subtitle_node)
|
12
|
+
@subtitle_node = subtitle_node
|
13
|
+
end
|
14
|
+
|
15
|
+
def call
|
16
|
+
Addic7ed::Subtitle.new(extract_fields)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def extract_fields
|
22
|
+
FIELDS.map do |field|
|
23
|
+
{ field => send(:"extract_#{field}") }
|
24
|
+
end.reduce(:merge)
|
25
|
+
end
|
26
|
+
|
27
|
+
def extract_field(selector, options = { required: true })
|
28
|
+
node = subtitle_node.css(selector).first
|
29
|
+
raise Addic7ed::ParsingError if options[:required] && node.nil?
|
30
|
+
yield node
|
31
|
+
end
|
32
|
+
|
33
|
+
def extract_version
|
34
|
+
extract_field(".NewsTitle", &:text)
|
35
|
+
end
|
36
|
+
|
37
|
+
def extract_language
|
38
|
+
extract_field(".language") do |node|
|
39
|
+
node.text.gsub(/\A\W*/, "").gsub(/[^\w\)]*\z/, "")
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def extract_status
|
44
|
+
extract_field("tr:nth-child(3) td:nth-child(4) b") do |node|
|
45
|
+
node.text.strip
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def extract_url
|
50
|
+
extract_field("a.buttonDownload:last-of-type") do |node|
|
51
|
+
"http://www.addic7ed.com#{node['href']}"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def extract_source
|
56
|
+
extract_field("tr:nth-child(3) td:first-child a", required: false) do |node|
|
57
|
+
node["href"] unless node.nil?
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def extract_hi
|
62
|
+
extract_field("tr:nth-child(4) td.newsDate img:last-of-type") do |node|
|
63
|
+
node.attribute("title") == "Hearing Impaired"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def extract_downloads
|
68
|
+
extract_field("tr:nth-child(4) td.newsDate") do |node|
|
69
|
+
/(?<downloads>\d*) Downloads/.match(node.text)[:downloads]
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def extract_comment
|
74
|
+
extract_field("tr:nth-child(2) td.newsDate") do |node|
|
75
|
+
node.text.gsub(/<img[^>]+\>/i, "")
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Addic7ed
|
2
|
+
class URLEncodeShowName
|
3
|
+
include Service
|
4
|
+
|
5
|
+
attr_reader :filename
|
6
|
+
|
7
|
+
def initialize(filename)
|
8
|
+
@filename = filename
|
9
|
+
end
|
10
|
+
|
11
|
+
# This service is unfortunately over complex because we have to compare the given show name to
|
12
|
+
# the actual Addic7ed shows list in order to find out how Addic7ed URL-encodes this show name
|
13
|
+
# (this is due to the inconsistency of their URL-encoding policy)
|
14
|
+
def call
|
15
|
+
matching_shows = matching_shows(ignore_year: false)
|
16
|
+
matching_shows = matching_shows(ignore_year: true) if matching_shows.empty?
|
17
|
+
raise ShowNotFound if matching_shows.empty?
|
18
|
+
matching_shows.last.tr(" ", "_")
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def matching_shows(opts)
|
24
|
+
addic7ed_shows.select { |show_name| matching?(show_name, opts) }
|
25
|
+
end
|
26
|
+
|
27
|
+
def normalize(show_name, opts)
|
28
|
+
show_name
|
29
|
+
.downcase
|
30
|
+
.delete("'")
|
31
|
+
.gsub(/[_\.]+/, " ")
|
32
|
+
.gsub(/ (US|UK)( |$)/i, " (\\1)\\2")
|
33
|
+
.gsub(/ (\d{4})( |$)/i, " (\\1)\\2")
|
34
|
+
.strip
|
35
|
+
.tap { |showname| showname.gsub!(/ \(\d{4}\)( |$)/, '\1') if opts[:ignore_year] }
|
36
|
+
end
|
37
|
+
|
38
|
+
def matching?(addic7ed_show, opts)
|
39
|
+
normalize(addic7ed_show, opts) == normalize(filename, opts)
|
40
|
+
end
|
41
|
+
|
42
|
+
def addic7ed_shows
|
43
|
+
@addic7ed_shows ||= GetShowsList.call
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/addic7ed/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: addic7ed
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0.pre.beta.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Baudino
|
@@ -66,6 +66,48 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: inch
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: yard
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
69
111
|
- !ruby/object:Gem::Dependency
|
70
112
|
name: oga
|
71
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -96,42 +138,30 @@ dependencies:
|
|
96
138
|
version: 1.8.3
|
97
139
|
description: Ruby script (cli) to fetch subtitles on Addic7ed
|
98
140
|
email: michael.baudino@alpine-lab.com
|
99
|
-
executables:
|
100
|
-
- addic7ed
|
141
|
+
executables: []
|
101
142
|
extensions: []
|
102
143
|
extra_rdoc_files: []
|
103
144
|
files:
|
104
145
|
- LICENSE.md
|
105
|
-
- bin/addic7ed
|
106
146
|
- lib/addic7ed.rb
|
107
147
|
- lib/addic7ed/common.rb
|
108
|
-
- lib/addic7ed/
|
148
|
+
- lib/addic7ed/config.json
|
109
149
|
- lib/addic7ed/errors.rb
|
110
|
-
- lib/addic7ed/
|
111
|
-
- lib/addic7ed/
|
112
|
-
- lib/addic7ed/
|
113
|
-
- lib/addic7ed/
|
114
|
-
- lib/addic7ed/
|
150
|
+
- lib/addic7ed/models/episode.rb
|
151
|
+
- lib/addic7ed/models/search.rb
|
152
|
+
- lib/addic7ed/models/subtitle.rb
|
153
|
+
- lib/addic7ed/models/subtitles_collection.rb
|
154
|
+
- lib/addic7ed/models/video_file.rb
|
155
|
+
- lib/addic7ed/service.rb
|
156
|
+
- lib/addic7ed/services/check_compatibility.rb
|
157
|
+
- lib/addic7ed/services/download_subtitle.rb
|
158
|
+
- lib/addic7ed/services/get_shows_list.rb
|
159
|
+
- lib/addic7ed/services/normalize_comment.rb
|
160
|
+
- lib/addic7ed/services/normalize_version.rb
|
161
|
+
- lib/addic7ed/services/parse_page.rb
|
162
|
+
- lib/addic7ed/services/parse_subtitle.rb
|
163
|
+
- lib/addic7ed/services/url_encode_show_name.rb
|
115
164
|
- lib/addic7ed/version.rb
|
116
|
-
- lib/addic7ed/video_file.rb
|
117
|
-
- spec/lib/addic7ed/common_spec.rb
|
118
|
-
- spec/lib/addic7ed/episode_spec.rb
|
119
|
-
- spec/lib/addic7ed/services/addic7ed_comment_normalizer_spec.rb
|
120
|
-
- spec/lib/addic7ed/services/addic7ed_version_normalizer_spec.rb
|
121
|
-
- spec/lib/addic7ed/show_list_spec.rb
|
122
|
-
- spec/lib/addic7ed/subtitle_spec.rb
|
123
|
-
- spec/lib/addic7ed/video_file_spec.rb
|
124
|
-
- spec/responses/basic_redirection.http
|
125
|
-
- spec/responses/homepage.http
|
126
|
-
- spec/responses/redirection_loop.http
|
127
|
-
- spec/responses/walking-dead-3-2-1.http
|
128
|
-
- spec/responses/walking-dead-3-2-48.http
|
129
|
-
- spec/responses/walking-dead-3-2-7.http
|
130
|
-
- spec/responses/walking-dead-3-2-8.http
|
131
|
-
- spec/responses/walking-dead-3-2-8_best_subtitle.http
|
132
|
-
- spec/responses/walking-dead-3-4-8.http
|
133
|
-
- spec/responses/walking-dead-3-42-8.http
|
134
|
-
- spec/spec_helper.rb
|
135
165
|
homepage: https://github.com/michaelbaudino/addic7ed-ruby
|
136
166
|
licenses:
|
137
167
|
- MIT
|
@@ -147,31 +177,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
147
177
|
version: '0'
|
148
178
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
149
179
|
requirements:
|
150
|
-
- - "
|
180
|
+
- - ">"
|
151
181
|
- !ruby/object:Gem::Version
|
152
|
-
version:
|
182
|
+
version: 1.3.1
|
153
183
|
requirements: []
|
154
184
|
rubyforge_project:
|
155
185
|
rubygems_version: 2.4.8
|
156
186
|
signing_key:
|
157
187
|
specification_version: 4
|
158
188
|
summary: Addic7ed auto-downloader
|
159
|
-
test_files:
|
160
|
-
|
161
|
-
- spec/lib/addic7ed/episode_spec.rb
|
162
|
-
- spec/lib/addic7ed/services/addic7ed_comment_normalizer_spec.rb
|
163
|
-
- spec/lib/addic7ed/services/addic7ed_version_normalizer_spec.rb
|
164
|
-
- spec/lib/addic7ed/show_list_spec.rb
|
165
|
-
- spec/lib/addic7ed/subtitle_spec.rb
|
166
|
-
- spec/lib/addic7ed/video_file_spec.rb
|
167
|
-
- spec/responses/basic_redirection.http
|
168
|
-
- spec/responses/homepage.http
|
169
|
-
- spec/responses/redirection_loop.http
|
170
|
-
- spec/responses/walking-dead-3-2-1.http
|
171
|
-
- spec/responses/walking-dead-3-2-48.http
|
172
|
-
- spec/responses/walking-dead-3-2-7.http
|
173
|
-
- spec/responses/walking-dead-3-2-8.http
|
174
|
-
- spec/responses/walking-dead-3-2-8_best_subtitle.http
|
175
|
-
- spec/responses/walking-dead-3-4-8.http
|
176
|
-
- spec/responses/walking-dead-3-42-8.http
|
177
|
-
- spec/spec_helper.rb
|
189
|
+
test_files: []
|
190
|
+
has_rdoc:
|