serienrenamer 0.1.2 → 0.2.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.
@@ -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