serienrenamer 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -16,26 +16,23 @@ class TestInformationStore < Test::Unit::TestCase
16
16
 
17
17
  @empty_file = Tempfile.new('information_storage')
18
18
 
19
- VCR.use_cassette("info_store_#{method_name}") do
20
- TestHelper.create_test_files(@@files.values)
21
- TestHelper.cwd
22
-
23
- @episodes = Hash.new
24
- storage = Serienrenamer::InformationStore.new("storage.yml")
25
-
26
- @@files.each do |key, value|
27
- filenametxt = File.new(value, "w")
28
- filenametxt.write(value)
29
- filenametxt.close
30
-
31
- episode = Serienrenamer::Episode.new(value)
32
- episode.rename
33
- @episodes[key] = episode
34
- storage.store(episode)
35
- end
36
- storage.write
37
- end
19
+ TestHelper.create_test_files(@@files.values)
20
+ TestHelper.cwd
21
+
22
+ @episodes = Hash.new
23
+ storage = Serienrenamer::InformationStore.new("storage.yml")
38
24
 
25
+ @@files.each do |key, value|
26
+ filenametxt = File.new(value, "w")
27
+ filenametxt.write(value)
28
+ filenametxt.close
29
+
30
+ episode = Serienrenamer::Episode.new(value)
31
+ episode.rename
32
+ @episodes[key] = episode
33
+ storage.store(episode)
34
+ end
35
+ storage.write
39
36
  end
40
37
 
41
38
  def teardown
@@ -38,51 +38,49 @@ class TestPluginSerienjunkiesFeed < Test::Unit::TestCase
38
38
  # improve this so that the Plugin uses a local xml file
39
39
  def test_information_extraction
40
40
 
41
- VCR.use_cassette("sjunkie_feed_#{method_name}") do
42
- simps = Serienrenamer::Episode.new(@@files['simps'])
43
- data = @feed.generate_episode_information(simps)[0]
44
- simps.add_episode_information(data, true)
45
- assert_equal("S22E16 - Ein Sommernachtstrip.avi", simps.to_s)
41
+ simps = Serienrenamer::Episode.new(@@files['simps'])
42
+ data = @feed.generate_episode_information(simps)[0]
43
+ simps.add_episode_information(data, true)
44
+ assert_equal("S22E16 - Ein Sommernachtstrip.avi", simps.to_s)
46
45
 
47
- flpo = Serienrenamer::Episode.new(@@files['flpo'])
48
- data = @feed.generate_episode_information(flpo)[0]
49
- flpo.add_episode_information(data, true)
50
- assert_equal("S04E04 - Getrübte Erinnerungen.avi", flpo.to_s)
46
+ flpo = Serienrenamer::Episode.new(@@files['flpo'])
47
+ data = @feed.generate_episode_information(flpo)[0]
48
+ flpo.add_episode_information(data, true)
49
+ assert_equal("S04E04 - Getruebte Erinnerungen.avi", flpo.to_s)
51
50
 
52
- big = Serienrenamer::Episode.new(@@files['biglove'])
53
- data = @feed.generate_episode_information(big)[0]
54
- big.add_episode_information(data, true)
55
- assert_equal("S05E06 - Scheidung.avi", big.to_s)
51
+ big = Serienrenamer::Episode.new(@@files['biglove'])
52
+ data = @feed.generate_episode_information(big)[0]
53
+ big.add_episode_information(data, true)
54
+ assert_equal("S05E06 - Scheidung.avi", big.to_s)
56
55
 
57
- crmi = Serienrenamer::Episode.new(@@files['crmi'])
58
- data = @feed.generate_episode_information(crmi)[0]
59
- crmi.add_episode_information(data, true)
60
- assert_equal("S06E22 - Die Dunkelkammer Mörder.avi", crmi.to_s)
56
+ crmi = Serienrenamer::Episode.new(@@files['crmi'])
57
+ data = @feed.generate_episode_information(crmi)[0]
58
+ crmi.add_episode_information(data, true)
59
+ assert_equal("S06E22 - Die Dunkelkammer Moerder.avi", crmi.to_s)
61
60
 
62
- two = Serienrenamer::Episode.new(@@files['two'])
63
- data = @feed.generate_episode_information(two)[0]
64
- two.add_episode_information(data, true)
65
- assert_equal("S09E07 - Das Tagebuch.avi", two.to_s)
61
+ two = Serienrenamer::Episode.new(@@files['two'])
62
+ data = @feed.generate_episode_information(two)[0]
63
+ two.add_episode_information(data, true)
64
+ assert_equal("S09E07 - Das Tagebuch.avi", two.to_s)
66
65
 
67
- sea = Serienrenamer::Episode.new(@@files['sea'])
68
- data = @feed.generate_episode_information(sea)[0]
69
- sea.add_episode_information(data, true)
70
- assert_equal("S05E11 - Der Morgen danach.avi", sea.to_s)
66
+ sea = Serienrenamer::Episode.new(@@files['sea'])
67
+ data = @feed.generate_episode_information(sea)[0]
68
+ sea.add_episode_information(data, true)
69
+ assert_equal("S05E11 - Der Morgen danach.avi", sea.to_s)
71
70
 
72
- csiny = Serienrenamer::Episode.new(@@files['csiny'])
73
- data = @feed.generate_episode_information(csiny)[0]
74
- csiny.add_episode_information(data, true)
75
- assert_equal("S07E21 - Kugelhagel.avi", csiny.to_s)
71
+ csiny = Serienrenamer::Episode.new(@@files['csiny'])
72
+ data = @feed.generate_episode_information(csiny)[0]
73
+ csiny.add_episode_information(data, true)
74
+ assert_equal("S07E21 - Kugelhagel.avi", csiny.to_s)
76
75
 
77
- # the following episodes are not exisiting in the feed
78
- # so it should returns nil
79
- sherlock = Serienrenamer::Episode.new(@@files['shlock'])
80
- data = @feed.generate_episode_information(sherlock)[0]
81
- assert_nil(data)
76
+ # the following episodes are not exisiting in the feed
77
+ # so it should returns nil
78
+ sherlock = Serienrenamer::Episode.new(@@files['shlock'])
79
+ data = @feed.generate_episode_information(sherlock)[0]
80
+ assert_nil(data)
82
81
 
83
- theunit = Serienrenamer::Episode.new(@@files['unit'])
84
- data = @feed.generate_episode_information(theunit)[0]
85
- assert_nil(data)
86
- end
82
+ theunit = Serienrenamer::Episode.new(@@files['unit'])
83
+ data = @feed.generate_episode_information(theunit)[0]
84
+ assert_nil(data)
87
85
  end
88
86
  end
@@ -38,28 +38,22 @@ class TestPluginTextfile < Test::Unit::TestCase
38
38
  end
39
39
 
40
40
  def test_information_extraction
41
- VCR.use_cassette("textfile_#{method_name}") do
42
- how = Serienrenamer::Episode.new(@@directories['hmym'])
43
- data = Serienrenamer::Plugin::Textfile.generate_episode_information(how)[0]
44
- how.add_episode_information(data, true)
45
- assert_equal("S07E05 - Die Exkursion.avi", how.to_s)
46
- end
41
+ how = Serienrenamer::Episode.new(@@directories['hmym'])
42
+ data = Serienrenamer::Plugin::Textfile.generate_episode_information(how)[0]
43
+ how.add_episode_information(data, true)
44
+ assert_equal("S07E05 - Die Exkursion.avi", how.to_s)
47
45
  end
48
46
 
49
47
  def test_select_right_textfile
50
- VCR.use_cassette("textfile_#{method_name}") do
51
- how = Serienrenamer::Episode.new(@@directories['hmmg'])
52
- data = Serienrenamer::Plugin::Textfile.generate_episode_information(how)[0]
53
- how.add_episode_information(data, true)
54
- assert_equal("S07E11 - Plan B.avi", how.to_s)
55
- end
48
+ how = Serienrenamer::Episode.new(@@directories['hmmg'])
49
+ data = Serienrenamer::Plugin::Textfile.generate_episode_information(how)[0]
50
+ how.add_episode_information(data, true)
51
+ assert_equal("S07E11 - Plan B.avi", how.to_s)
56
52
  end
57
53
 
58
54
  def test_information_extraction_with_directory_parameter
59
- VCR.use_cassette("textfile_#{method_name}") do
60
- how = @@directories['hmym']
61
- data = Serienrenamer::Plugin::Textfile.generate_episode_information(how)[0]
62
- assert_not_nil(data)
63
- end
55
+ how = @@directories['hmym']
56
+ data = Serienrenamer::Plugin::Textfile.generate_episode_information(how)[0]
57
+ assert_not_nil(data)
64
58
  end
65
59
  end
@@ -0,0 +1,40 @@
1
+ # encoding: utf-8
2
+ require File.dirname(__FILE__) + '/test_helper.rb'
3
+
4
+ class TestPluginUmlauts < Test::Unit::TestCase
5
+
6
+ def test_repairing_umlauts
7
+ VCR.use_cassette("episode_#{method_name}") do
8
+ assert_equal("Duell für Änderung",
9
+ Serienrenamer::Plugin::Umlauts.filter("Duell fuer Aenderung"))
10
+
11
+ assert_equal("Zaubersprüche",
12
+ Serienrenamer::Plugin::Umlauts.filter("Zaubersprueche"))
13
+ assert_equal("Ungeheuerlich",
14
+ Serienrenamer::Plugin::Umlauts.filter("Ungeheuerlich"))
15
+ assert_equal("Frauen",
16
+ Serienrenamer::Plugin::Umlauts.filter("Frauen"))
17
+ assert_equal("Abführmittel",
18
+ Serienrenamer::Plugin::Umlauts.filter("Abfuehrmittel"))
19
+ assert_equal("tödlich",
20
+ Serienrenamer::Plugin::Umlauts.filter("toedlich"))
21
+ assert_equal("König",
22
+ Serienrenamer::Plugin::Umlauts.filter("Koenig"))
23
+ assert_equal("Öko",
24
+ Serienrenamer::Plugin::Umlauts.filter("Oeko"))
25
+ assert_equal("Männer",
26
+ Serienrenamer::Plugin::Umlauts.filter("Maenner"))
27
+ assert_equal("Draufgänger",
28
+ Serienrenamer::Plugin::Umlauts.filter("Draufgaenger"))
29
+ assert_equal("Unglücksvögel",
30
+ Serienrenamer::Plugin::Umlauts.filter("Ungluecksvoegel"))
31
+ assert_equal("Jäger",
32
+ Serienrenamer::Plugin::Umlauts.filter("Jaeger"))
33
+ assert_equal("Loyalität",
34
+ Serienrenamer::Plugin::Umlauts.filter("Loyalitaet"))
35
+ # both forms do not exist
36
+ assert_equal("Moeback",
37
+ Serienrenamer::Plugin::Umlauts.filter("Moeback"))
38
+ end
39
+ end
40
+ end
metadata CHANGED
@@ -1,97 +1,70 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: serienrenamer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Philipp Böhm
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-03 00:00:00.000000000 Z
11
+ date: 2014-03-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: wlapi
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 0.8.5
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.8.5
27
- - !ruby/object:Gem::Dependency
28
- name: mediawiki-gateway
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - '>='
32
- - !ruby/object:Gem::Version
33
- version: 0.4.4
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - '>='
39
- - !ruby/object:Gem::Version
40
- version: 0.4.4
41
- - !ruby/object:Gem::Dependency
42
- name: mechanize
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - '>='
46
- - !ruby/object:Gem::Version
47
- version: '2.3'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - '>='
53
- - !ruby/object:Gem::Version
54
- version: '2.3'
55
27
  - !ruby/object:Gem::Dependency
56
28
  name: highline
57
29
  requirement: !ruby/object:Gem::Requirement
58
30
  requirements:
59
- - - '>='
31
+ - - ">="
60
32
  - !ruby/object:Gem::Version
61
33
  version: 1.6.11
62
34
  type: :runtime
63
35
  prerelease: false
64
36
  version_requirements: !ruby/object:Gem::Requirement
65
37
  requirements:
66
- - - '>='
38
+ - - ">="
67
39
  - !ruby/object:Gem::Version
68
40
  version: 1.6.11
69
41
  - !ruby/object:Gem::Dependency
70
42
  name: hashconfig
71
43
  requirement: !ruby/object:Gem::Requirement
72
44
  requirements:
73
- - - '>='
45
+ - - ">="
74
46
  - !ruby/object:Gem::Version
75
47
  version: 0.0.1
76
48
  type: :runtime
77
49
  prerelease: false
78
50
  version_requirements: !ruby/object:Gem::Requirement
79
51
  requirements:
80
- - - '>='
52
+ - - ">="
81
53
  - !ruby/object:Gem::Version
82
54
  version: 0.0.1
83
55
  description: Ruby Script that brings your series into an appropriate format like \"S01E01
84
56
  - Episodename.avi\"
85
57
  email:
86
- - philipp@i77i.de
58
+ - dev@pboehm.org
87
59
  executables:
88
60
  - serienrenamer
89
61
  extensions: []
90
62
  extra_rdoc_files: []
91
63
  files:
92
- - .gitignore
93
- - .travis.yml
64
+ - ".gitignore"
65
+ - ".travis.yml"
94
66
  - Gemfile
67
+ - Gemfile.lock
95
68
  - README.rdoc
96
69
  - Rakefile
97
70
  - bin/serienrenamer
@@ -100,23 +73,19 @@ files:
100
73
  - lib/serienrenamer/information_store.rb
101
74
  - lib/serienrenamer/plugin.rb
102
75
  - lib/serienrenamer/plugin/episode_identifier.rb
103
- - lib/serienrenamer/plugin/serienjunkies_de.rb
104
76
  - lib/serienrenamer/plugin/serienjunkies_feed.rb
105
- - lib/serienrenamer/plugin/serienjunkies_org.rb
106
77
  - lib/serienrenamer/plugin/textfile.rb
107
- - lib/serienrenamer/plugin/wikipedia.rb
78
+ - lib/serienrenamer/plugin/umlauts.rb
108
79
  - lib/serienrenamer/version.rb
109
80
  - serienrenamer.gemspec
110
81
  - test/serienjunkies_feed_sample.xml
111
- - test/skipped_test_plugin_serienjunkies_org.rb
112
- - test/skipped_test_plugin_wikipedia.rb
113
82
  - test/test_episode.rb
114
83
  - test/test_helper.rb
115
84
  - test/test_information_store.rb
116
85
  - test/test_plugin_episode_identifier.rb
117
- - test/test_plugin_serienjunkies_de.rb
118
86
  - test/test_plugin_serienjunkies_feed.rb
119
87
  - test/test_plugin_textfile.rb
88
+ - test/test_plugin_umlauts.rb
120
89
  homepage: http://github.com/pboehm/serienrenamer
121
90
  licenses: []
122
91
  metadata: {}
@@ -126,29 +95,27 @@ require_paths:
126
95
  - lib
127
96
  required_ruby_version: !ruby/object:Gem::Requirement
128
97
  requirements:
129
- - - '>='
98
+ - - ">="
130
99
  - !ruby/object:Gem::Version
131
100
  version: 1.9.0
132
101
  required_rubygems_version: !ruby/object:Gem::Requirement
133
102
  requirements:
134
- - - '>='
103
+ - - ">="
135
104
  - !ruby/object:Gem::Version
136
105
  version: '0'
137
106
  requirements: []
138
107
  rubyforge_project:
139
- rubygems_version: 2.0.3
108
+ rubygems_version: 2.2.0
140
109
  signing_key:
141
110
  specification_version: 4
142
111
  summary: Ruby Script that brings your series into an appropriate format like \"S01E01
143
112
  - Episodename.avi\"
144
113
  test_files:
145
114
  - test/serienjunkies_feed_sample.xml
146
- - test/skipped_test_plugin_serienjunkies_org.rb
147
- - test/skipped_test_plugin_wikipedia.rb
148
115
  - test/test_episode.rb
149
116
  - test/test_helper.rb
150
117
  - test/test_information_store.rb
151
118
  - test/test_plugin_episode_identifier.rb
152
- - test/test_plugin_serienjunkies_de.rb
153
119
  - test/test_plugin_serienjunkies_feed.rb
154
120
  - test/test_plugin_textfile.rb
121
+ - test/test_plugin_umlauts.rb
@@ -1,131 +0,0 @@
1
- #
2
- # Class that extracts information about episodes
3
- # from the serienjunkies.de-Page
4
- #
5
- require 'uri'
6
- require 'mechanize'
7
-
8
- module Serienrenamer
9
- module Plugin
10
-
11
- class SerienjunkiesDe < Serienrenamer::Pluginbase
12
-
13
- def self.plugin_name; "SerienjunkiesDe" end
14
- def self.plugin_url; "http://serienjunkies.de" end
15
- def self.usable; true end
16
- def self.priority; 50 end
17
-
18
- # this method will be called from the main program
19
- # with an Serienrenamer::Episode instance as parameter
20
- #
21
- # if this is the first call to this method, it builds up
22
- # a hash with all series and existing episodes, which can
23
- # be used by all future method calls
24
- #
25
- def self.generate_episode_information(episode)
26
-
27
- raise ArgumentError, "Serienrenamer::Episode instance needed" unless
28
- episode.is_a?(Serienrenamer::Episode)
29
-
30
- unless defined? @cached_data
31
- @cached_data = Hash.new
32
- end
33
-
34
- if ! @cached_data.has_key?(episode.series)
35
-
36
- if episode.series.match(/\w+/)
37
-
38
- # determine link to series
39
- seriespage_link = self.find_link_to_series_page(episode.series)
40
-
41
- if seriespage_link
42
- seriesdata = self.parse_seriespage(seriespage_link)
43
-
44
- @cached_data[episode.series] = seriesdata
45
- end
46
- end
47
- end
48
-
49
- matched_episodes = []
50
-
51
- # tries to find an episodename in cached_data
52
- # otherwise returns empty array
53
- begin
54
- series = @cached_data[episode.series]
55
- identifier = "S%.2dE%.2d" % [ episode.season, episode.episode ]
56
- episodename = series[identifier]
57
-
58
- if episodename.match(/\w+/)
59
- matched_episodes.push(episodename)
60
- end
61
- rescue
62
- end
63
-
64
- return matched_episodes
65
- end
66
-
67
- # tries to find the link to the series page because there are
68
- # plenty of different writings of some series
69
- # :seriesname: - name of the series
70
- #
71
- # TODO make this more intelligent so that it tries other forms
72
- # of the name
73
- #
74
- # returns a link to a seriejunkies.de-page or nil if no page was found
75
- def self.find_link_to_series_page(seriesname)
76
- raise ArgumentError, "seriesname expected" unless seriesname.match(/\w+/)
77
-
78
- self.build_agent unless defined? @agent
79
-
80
- url = URI.join(plugin_url, "serien/%s.html" % seriesname[0].downcase )
81
-
82
- @agent.get(url).search("a.slink").each do |series|
83
- if series.text.match(/#{seriesname}/i)
84
- return URI.join( plugin_url, series[:href]).to_s
85
- end
86
- end
87
-
88
- return nil
89
- end
90
-
91
- # parses the supplied url and returns a hash with
92
- # episode information indexed by episode identifier
93
- # :page_url: - url of the serienjunkies page
94
- # :german: - extract only german titles if true
95
- def self.parse_seriespage(page_url, german=true)
96
-
97
- self.build_agent unless defined? @agent
98
-
99
- series = {}
100
-
101
- seriesdoc = @agent.get(page_url)
102
- epidoc = @agent.click(seriesdoc.link_with(:text => /^Episoden$/i))
103
-
104
- epidoc.search('div#sjserie > div.topabstand > table.eplist tr').each do |episode|
105
-
106
- next unless episode.search("td.thh").empty? # skip headings
107
-
108
- firstchild = episode.search(":first-child")[0].text
109
- md = firstchild.match(/(?<season>\d+)x(?<episode>\d+)/)
110
-
111
- next unless md
112
-
113
- # extract and save these information
114
- identifier = "S%.2dE%.2d" % [ md[:season].to_i, md[:episode].to_i ]
115
-
116
- german = episode.search("a")[1]
117
- next unless german
118
-
119
- series[identifier] = german.text.strip
120
- end
121
-
122
- return series
123
- end
124
-
125
- # build up a mechanize instance
126
- def self.build_agent
127
- @agent = Mechanize.new
128
- end
129
- end
130
- end
131
- end