showfix 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .idea
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
5
+ - 2.1.0
6
+ script: bundle exec rspec spec
7
+ before_install:
8
+ - gem update --system
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,13 @@
1
+ # Contributing to Showfix
2
+
3
+ ## Issues
4
+
5
+ Found a bug in Showfix? Open an issue on [GitHub Issues](https://github.com/webdestroya/showfix/issues).
6
+
7
+ ## Pull requests
8
+
9
+ Ready to submit a pull request? Great! Contributions are most welcome. To get your contributions accepted, make sure:
10
+
11
+ * All the tests pass. Run `rspec`.
12
+ * No code quality warnings are generated by [RuboCop](https://github.com/bbatsov/rubocop). Run `rubocop`.
13
+ * Any new code paths you've added are covered by tests.
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2014 Mitch Dempsey
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,46 @@
1
+ # Showfix
2
+
3
+
4
+ [![Gem Version](http://img.shields.io/gem/v/showfix.svg)][gem]
5
+ [![Build Status](https://travis-ci.org/webdestroya/showfix.svg)][travis]
6
+ [![Dependency Status](https://gemnasium.com/webdestroya/showfix.svg)][gemnasium]
7
+ [![Code Climate](http://img.shields.io/codeclimate/github/webdestroya/showfix.svg)][codeclimate]
8
+ [![Coverage Status](http://img.shields.io/coveralls/webdestroya/showfix.svg)][coveralls]
9
+
10
+ [gem]: https://rubygems.org/gems/showfix
11
+ [travis]: https://travis-ci.org/webdestroya/showfix
12
+ [gemnasium]: https://gemnasium.com/webdestroya/showfix
13
+ [codeclimate]: https://codeclimate.com/github/webdestroya/showfix
14
+ [coveralls]: https://coveralls.io/r/webdestroya/showfix
15
+
16
+ ## Description
17
+
18
+ This gem allows you to easily rename TV episode files. Useful for mass-renaming mismatched show titles.
19
+
20
+
21
+ ## Installation
22
+
23
+ ```sh
24
+ $ gem install showfix
25
+ ```
26
+
27
+ ## Usage
28
+
29
+ *TODO*
30
+
31
+ ## Roadmap
32
+
33
+ * Support for multi-episode files (S01E20-E21)
34
+ * Ability to manually enter season/episode numbers for show files that are not numbered at all
35
+
36
+ ## Contributing
37
+
38
+ See the [contribution guide](https://github.com/webdestroya/showfix/blob/master/CONTRIBUTING.md).
39
+
40
+ ## Thanks
41
+
42
+ Special thanks to [Philipp Böhm](https://github.com/pboehm) for making [serienrenamer](https://github.com/pboehm/serienrenamer)
43
+
44
+ ## License
45
+
46
+ [MIT](http://opensource.org/licenses/MIT)
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new
5
+
6
+ task default: [:spec]
data/bin/showfix ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler"
4
+ require "showfix/cli"
5
+
6
+ Showfix::CLI.start
@@ -0,0 +1,83 @@
1
+ module Showfix
2
+ class Cleaner
3
+
4
+ # http://en.wikipedia.org/wiki/Pirated_movie_release_types
5
+
6
+ AUDIO_FLAGS = %w(DD51 AC3 Dubbed DD20 Synced AAC DTS MP3).freeze
7
+ VIDEO_FLAGS = %w(1080p 720p XviD x264 h264 HDTV euHD PDTV HD Divx5).freeze
8
+
9
+ SOURCE_FLAGS = %w(
10
+ DVDRip HDTVRip HDRip SATRip BDRip iTunesHD WEBRiP BLURAYRiP BluRay
11
+ iTunesHDRip RiP WEB DL PublicHD CAMRip WP TC Telecine CAM TS PDVD
12
+ Telesync PPV PPVRip SCR SCREENER DVDSCR DDC R5 HDDVD DVDRips
13
+ ).freeze
14
+
15
+ AUTHOR_FLAGS = %w(
16
+ inspired AMBiTiOUS SiGHT RiP iNTERNAL CRoW c0nFuSed UTOPiA scum EXPiRED
17
+ CRiSP ZZGtv ARCHiV Prim3time Nfo Repack SiMPTY DELiCiOUS UNDELiCiOUS
18
+ fBi CiD RedSeven OiNK dxva FraMeSToR CtrlHD LOL drngr PARADOX RELOADED
19
+ DIMENSION anoXmous YIFY KILLERS HiDt Z3R0K BiTT ViSiON KiNGDOM SPARKS
20
+ MVGroup JIVE RKSTR ESiR
21
+ ).freeze
22
+
23
+ FLAGS = [AUDIO_FLAGS, VIDEO_FLAGS, SOURCE_FLAGS, AUTHOR_FLAGS].flatten.freeze
24
+
25
+ def initialize(options={})
26
+ @options = {
27
+ flags: true,
28
+ year: true
29
+ }.merge(options)
30
+ end
31
+
32
+ # Perform some cleanup on the filename
33
+ def clean(string)
34
+
35
+ string = self.unix_friendly(string)
36
+
37
+ # Clean trailing/leading periods
38
+ string = self.trim(string)
39
+
40
+ if @options[:flags]
41
+ string = self.remove_flags(string)
42
+ end
43
+
44
+ if @options[:year]
45
+ string = self.strip_year(string)
46
+ end
47
+
48
+ # Clean trailing/leading periods
49
+ string = self.trim(string)
50
+
51
+ string
52
+ end
53
+
54
+ def trim(string)
55
+ string.strip.gsub(/\A\.+|\.+\Z/, '')
56
+ end
57
+
58
+ # Make unix friendly
59
+ def unix_friendly(string)
60
+ string.gsub(/\s+-\s+/, '.')
61
+ .gsub(/[- \(\)]+/, '.')
62
+ .gsub(/'/,'')
63
+ .gsub(/[\[\]]+/,'')
64
+ .gsub(/&/,'.and.')
65
+ .gsub(/\.{2,}/,'.')
66
+ end
67
+
68
+ def remove_flags(string)
69
+ flags = FLAGS.join('|')
70
+
71
+ string.gsub(/(\W(#{flags})){2,}/i, '')
72
+ .gsub(/((#{flags})\W){2,}/i, '')
73
+ .gsub(/^((#{flags})\W?){2,}$/i, '')
74
+ .gsub(/\W(#{flags}){1,}$/i, '')
75
+ end
76
+
77
+ def strip_year(string)
78
+ string.gsub(/^(?:19|20)\d{2}\D/, '\1')
79
+ string.gsub(/(?:19|20)\d{2}$/, '\1')
80
+ end
81
+
82
+ end
83
+ end
@@ -0,0 +1,76 @@
1
+ require 'thor'
2
+ require 'showfix'
3
+
4
+ module Showfix
5
+ class CLI < Thor
6
+ include Thor::Actions
7
+
8
+ desc "rename", "Rename TV show files in a directory"
9
+ method_option "directory", type: :string, banner: 'PATH', aliases: "-d",
10
+ default: ".",
11
+ desc: "Specify the directory to work in. If not specified, use the current directory."
12
+ method_option "season", type: :numeric, aliases: "-s",
13
+ banner: '1', desc: "The season/series number"
14
+ method_option "pretend", type: :boolean, lazy_default: true, default: false,
15
+ aliases: "-p", desc: "Do not rename files, only show outcome"
16
+ method_option 'strip-year', type: :boolean, lazy_default: true, default: false,
17
+ desc: 'Strip years from file names', aliases: '-y'
18
+ method_option 'clean', type: :boolean, lazy_default: true, default: true,
19
+ desc: "Strip encoding and resolution flags from filenames", aliases: '-c'
20
+ def rename
21
+
22
+ path = File.absolute_path(options['directory'])
23
+
24
+ if options['directory'] != "."
25
+ say "Scanning directory: #{path}"
26
+ say ""
27
+ end
28
+
29
+ episode_opts = {}
30
+
31
+ Dir["#{path}/*"].each do |file|
32
+ basename = File.basename(file)
33
+ episode = Showfix::Episode.new(basename, episode_opts)
34
+
35
+ if episode.acceptable_file?
36
+
37
+ unless episode.has_episode_info?
38
+ say "INPUT"
39
+ end
40
+
41
+ say "#{basename} => "
42
+
43
+ # If they fixed it
44
+ if episode.has_episode_info?
45
+ say "#{episode.to_formatted_s}"
46
+
47
+ unless options['pretend']
48
+ rename_file(file, episode.to_formatted_s)
49
+ end
50
+
51
+ else
52
+ say "SKIPPED"
53
+ end
54
+
55
+ end
56
+ end
57
+ end
58
+
59
+ private
60
+
61
+ def rename_file(source_path, dest_file)
62
+ raise IOError, 'source file not found' unless File.file?(source_path)
63
+
64
+ dest_path = File.join(File.dirname(source_path), dest_file)
65
+
66
+ raise IOError, 'destination already exists' if File.file?(dest_path)
67
+
68
+ begin
69
+ File.rename(source_path, dest_path)
70
+ rescue SystemCallError
71
+ puts "Unable to rename file #{File.basename(source_path)}"
72
+ end
73
+ end
74
+
75
+ end
76
+ end
@@ -0,0 +1,74 @@
1
+ require 'showfix'
2
+
3
+ module Showfix
4
+ class Episode
5
+
6
+ # Video files, and some subtitles
7
+ VALID_EXTENSIONS = %w(avi mkv mp4 mpg mpeg mov m4v srt)
8
+
9
+ attr_accessor :season, :series, :episode, :title
10
+ attr_reader :filename, :options, :extension, :file_no_ext
11
+
12
+ def initialize(filename, options={})
13
+
14
+ raise ArgumentError, 'no filename' unless filename
15
+
16
+ @filename = filename
17
+ @options = {
18
+ season: nil
19
+ }.merge(options)
20
+
21
+ @cleaner = Cleaner.new(@options)
22
+ @parser = Parser.new(@options)
23
+
24
+ @season ||= options[:season] # if they passed in a default season
25
+
26
+ @file_no_ext = @filename.chomp(File.extname(@filename))
27
+ @extension = File.extname(@filename).gsub(/\./, '').downcase
28
+
29
+ self.update_episode_info
30
+ end
31
+
32
+ def skip?
33
+ !acceptable_file? || !has_episode_info?
34
+ end
35
+
36
+ def has_episode_info?
37
+ !@season.nil? && !@episode.nil? && @season.is_a?(Fixnum) && @episode.is_a?(Fixnum)
38
+ end
39
+
40
+ # Determines if this is a file we should work with
41
+ def acceptable_file?
42
+ VALID_EXTENSIONS.include?(self.extension)
43
+ end
44
+
45
+
46
+ def to_formatted_s
47
+
48
+ f_series = ""
49
+ if @series && @series.strip.size > 0
50
+ f_series = "#{@series.strip}."
51
+ end
52
+
53
+ f_title = ""
54
+ if @title && @title.strip.size > 0
55
+ f_title = ".#{@title.strip}"
56
+ end
57
+
58
+ "%sS%.2dE%.2d%s.%s" % [f_series, @season, @episode, f_title, @extension]
59
+ end
60
+
61
+ # Extract info from the filename, and update fields as necessary
62
+ def update_episode_info
63
+ info = @parser.parse(@file_no_ext)
64
+
65
+ if info
66
+ keys = info.names
67
+ @series ||= @cleaner.clean(info[:series]) if keys.include?('series')
68
+ @season ||= info[:season].to_i if keys.include?('season')
69
+ @episode ||= info[:episode].to_i if keys.include?('episode')
70
+ @title ||= @cleaner.clean(info[:title]) if keys.include?('title')
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,44 @@
1
+ module Showfix
2
+ class Parser
3
+
4
+ # matchData pre_match / post_match for getting data after the matched part
5
+ PATTERNS = [
6
+ # Show.Season.01.Episode.01.Title
7
+ /^(?<series>.*)(?:\.)?Season(?:\.)?(?<season>\d+)(?:\.)?Episode(?<episode>\d+)(?:\.)?(?<title>.*)$/i,
8
+ # Show.S01E01.Title ; Show.S01.E01.Title ; Show S01 E01 Title
9
+ /^(?<series>.*)(?:\.|\s+)?S(?<season>\d+)(?:\.|\s+)?E(?<episode>\d+)(?:\.|\s+)?(?<title>.*)$/i,
10
+ # 1x1; 12x12
11
+ /^(?<series>.*)(?:\.)?(?<season>\d+)x(?<episode>\d+)(?:\.)?(?<title>.*)$/,
12
+ # Show 01 - Title
13
+ /^(?<series>.*)\s+(?<episode>\d{1,2})\s+-\s+(?<title>.+)$/,
14
+ # [Show] 01 Episode
15
+ /(?<series>.*)\s*(?<episode>\d{1,2})\s+(?<title>.+)$/,
16
+ # 101; 1212
17
+ /^(?<series>.*\D)(?<season>\d+)(?<episode>\d{2})(?<title>\W*.*)$/,
18
+
19
+ # TERRIBLE ONES ------------------------------------------------
20
+
21
+ # ^101$
22
+ /^(?<season>\d+)(?<episode>\d{2})$/
23
+
24
+ ].freeze
25
+
26
+ def initialize(options={})
27
+ @options = {}.merge(options)
28
+ end
29
+
30
+ # Parse a given string and look for matches
31
+ def parse(string)
32
+
33
+ matches = PATTERNS.map do |pattern|
34
+ pattern.match(string)
35
+ end.compact
36
+
37
+ if matches.size > 0
38
+ matches.first
39
+ else
40
+ nil
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,3 @@
1
+ module Showfix
2
+ VERSION = "1.0.0"
3
+ end
data/lib/showfix.rb ADDED
@@ -0,0 +1,8 @@
1
+ require "showfix/version"
2
+ require 'showfix/cleaner.rb'
3
+ require 'showfix/parser.rb'
4
+ require 'showfix/episode.rb'
5
+
6
+ module Showfix
7
+
8
+ end
data/showfix.gemspec ADDED
@@ -0,0 +1,31 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "showfix/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "showfix"
8
+ spec.version = Showfix::VERSION
9
+ spec.authors = ["Mitch Dempsey"]
10
+ spec.email = ["mrdempsey@gmail.com"]
11
+ spec.description = %q{A gem to easily rename TV show files.}
12
+ spec.summary = %q{A gem to easily rename TV show files.}
13
+ spec.homepage = "https://github.com/webdestroya/showfix"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.required_ruby_version = ">= 1.9.3"
22
+
23
+ spec.add_runtime_dependency "bundler", ">= 1.3"
24
+ spec.add_runtime_dependency "thor", ">= 0.18.1"
25
+
26
+ spec.add_development_dependency "rake"
27
+ spec.add_development_dependency "rspec", ">= 3.0.0.beta1"
28
+ spec.add_development_dependency "simplecov"
29
+ spec.add_development_dependency "coveralls"
30
+ spec.add_development_dependency "pry"
31
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper.rb'
2
+
3
+ describe Showfix::Cleaner do
4
+
5
+ let(:cleaner) { Showfix::Cleaner.new }
6
+
7
+ describe '#clean' do
8
+ it 'when'
9
+ end
10
+
11
+ describe '#unix_friendly' do
12
+
13
+ end
14
+
15
+ describe '#remove_flags' do
16
+
17
+ end
18
+
19
+ describe '#strip_year' do
20
+ it { expect(cleaner.strip_year("Castle.2009")).to eq("Castle.") }
21
+ it { expect(cleaner.strip_year("Castle.2009.Blah")).to eq("Castle.2009.Blah") }
22
+ end
23
+
24
+ describe '#trim' do
25
+ it { expect(cleaner.trim(".Something.")).to eq("Something") }
26
+ it { expect(cleaner.trim("..Something..")).to eq("Something") }
27
+ it { expect(cleaner.trim("Something")).to eq("Something") }
28
+ it { expect(cleaner.trim(" Something")).to eq("Something") }
29
+ it { expect(cleaner.trim(" Something ")).to eq("Something") }
30
+ it { expect(cleaner.trim("Something ")).to eq("Something") }
31
+ it { expect(cleaner.trim(".Something ")).to eq("Something") }
32
+ end
33
+ end
@@ -0,0 +1,42 @@
1
+ require 'spec_helper.rb'
2
+
3
+
4
+ describe Showfix::Episode do
5
+
6
+ describe '#skip?' do
7
+ it { expect(Showfix::Episode.new("Something.avi").skip?).to be(true) }
8
+ it { expect(Showfix::Episode.new("Something.txt").skip?).to be(true) }
9
+ it { expect(Showfix::Episode.new("S01E01.txt").skip?).to be(true) }
10
+
11
+ it { expect(Showfix::Episode.new("S01E01.avi").skip?).to be(false) }
12
+ end
13
+
14
+ describe "#acceptable_file?" do
15
+ it 'allows correct filetypes' do
16
+ %w(avi mkv mp4 mpg mpeg mov m4v srt).each do |ext|
17
+ expect(Showfix::Episode.new("something.#{ext}").acceptable_file?).to be(true)
18
+ end
19
+ end
20
+
21
+ it 'blocks incorrect filetypes' do
22
+ %w(nfo sfx rar txt url).each do |ext|
23
+ expect(Showfix::Episode.new("something.#{ext}").acceptable_file?).to be(false)
24
+ end
25
+ end
26
+ end
27
+
28
+ describe '#has_episode_info?' do
29
+ let(:valid) { Showfix::Episode.new("Series.S01E01.Title.mkv") }
30
+ let(:invalid) { Showfix::Episode.new("Series.Title.mkv") }
31
+ it { expect(valid.has_episode_info?).to be(true) }
32
+ it { expect(invalid.has_episode_info?).to be(false) }
33
+ end
34
+
35
+
36
+ describe '#to_formatted_s' do
37
+
38
+ end
39
+
40
+ it '#rename'
41
+
42
+ end
@@ -0,0 +1,64 @@
1
+ require 'spec_helper.rb'
2
+
3
+ describe Showfix::Parser do
4
+ let(:parser) { Showfix::Parser.new }
5
+
6
+ describe '#parse' do
7
+
8
+ it 'matches season and episode' do
9
+ [
10
+ "The Adventures of Brisco County Jr - 1x03 - No Man's Land (DVDRip)",
11
+ "1x03 Redux-1",
12
+ "Friends.s01.e03.1994.BDRip.1080p.Ukr.Eng.AC3.Hurtom.TNU.Tenax555",
13
+ "ER.S01E03.Going.Home.720p.WEB-DL.AAC.2.0.h.264-TjHD",
14
+ "1966-09-22 - TOS S01 E03 - Mudds Women",
15
+ "Dexter.S01E03.2006.Bluray.1080p.DTS.x264.dxva-FraMeSToR",
16
+ "Doctor.Who.2005.S01E03.The.Unquiet.Dead",
17
+ "Columbo.S01E03.1971.Death.Lends.a.Hand.720p.BluRay",
18
+ "Law.&.Order 1x03 The Reapers Helper",
19
+ "Law & Order - 1x03 - Reapers Helper [PDTV-drngr]",
20
+ "Law & Order - s01e03 - Refuge 2",
21
+ "LawandOrder.CI.2001.1x03.DVDRip.MP3-MrD",
22
+ "Law.and.Order.LA.S01E03.HDTV.XviD-LOL",
23
+ "law.and.order.svu.103.dvdrip",
24
+ "law.and.order.svu.103-caph",
25
+ "The Universe S01E03 The End of the Earth.1080p.BluRay.x264-CtrlHD",
26
+ "Stargate SG-1 [1x03] Emancipation",
27
+ "The.Office.US.S01.E03.Title.720p.WEB-DL",
28
+ "S01E03",
29
+ "103",
30
+ "1x03",
31
+ "0103",
32
+ ].each do |file|
33
+ match = parser.parse(file)
34
+ expect(match).to_not be_nil
35
+
36
+ expect(match[:season]).to match(/^0?1$/)
37
+ expect(match[:episode]).to match(/^0?3$/)
38
+ end
39
+ end
40
+
41
+ it 'matches series name'
42
+
43
+ it 'matches title'
44
+
45
+ it 'matches series and title'
46
+
47
+ it 'matches all info'
48
+
49
+
50
+
51
+ # Law.and.Order.S20E21-E22.HDTV.XviD-NoTV.avi
52
+ # Stargate SG-1 [8x01-02] New Order Part 1 and Part 2.avi
53
+ # Stargate SG-1 [7x21-22] Lost City Part 1 and Part 2.avi
54
+
55
+ # law.and.order.1702.hdtv-lol.avi
56
+ # law.and.order.svu.901-caph.avi
57
+ # law.and.order.svu.906-caph.[VTV].avi
58
+ # law.and.order.svu.0910-yestv.avi
59
+ # law.and.order.svu.813.Loophole.avi
60
+ # 615.Hooked.avi
61
+ # s06e01.mkv
62
+
63
+ end
64
+ end
@@ -0,0 +1,21 @@
1
+ require "simplecov"
2
+ require "coveralls"
3
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
4
+ SimpleCov::Formatter::HTMLFormatter,
5
+ Coveralls::SimpleCov::Formatter
6
+ ]
7
+ SimpleCov.start { add_filter "/spec/" }
8
+
9
+ require "pry"
10
+ require "showfix"
11
+ require "showfix/cli"
12
+
13
+ RSpec.configure do |config|
14
+ config.mock_with :rspec do |mocks_config|
15
+ mocks_config.verify_doubled_constant_names = true
16
+ # Enable config option this when a new rspec-mocks beta including this patch is released:
17
+ # https://github.com/rspec/rspec-mocks/pull/466
18
+ #
19
+ # mocks_config.verify_partial_doubles = true
20
+ end
21
+ end
metadata ADDED
@@ -0,0 +1,151 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: showfix
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Mitch Dempsey
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-04-14 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: &2153642240 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '1.3'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *2153642240
25
+ - !ruby/object:Gem::Dependency
26
+ name: thor
27
+ requirement: &2153640440 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 0.18.1
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *2153640440
36
+ - !ruby/object:Gem::Dependency
37
+ name: rake
38
+ requirement: &2153639380 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *2153639380
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec
49
+ requirement: &2153637980 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 3.0.0.beta1
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *2153637980
58
+ - !ruby/object:Gem::Dependency
59
+ name: simplecov
60
+ requirement: &2153636460 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *2153636460
69
+ - !ruby/object:Gem::Dependency
70
+ name: coveralls
71
+ requirement: &2153651980 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *2153651980
80
+ - !ruby/object:Gem::Dependency
81
+ name: pry
82
+ requirement: &2153649840 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *2153649840
91
+ description: A gem to easily rename TV show files.
92
+ email:
93
+ - mrdempsey@gmail.com
94
+ executables:
95
+ - showfix
96
+ extensions: []
97
+ extra_rdoc_files: []
98
+ files:
99
+ - .gitignore
100
+ - .rspec
101
+ - .travis.yml
102
+ - CONTRIBUTING.md
103
+ - Gemfile
104
+ - LICENSE
105
+ - README.md
106
+ - Rakefile
107
+ - bin/showfix
108
+ - lib/showfix.rb
109
+ - lib/showfix/cleaner.rb
110
+ - lib/showfix/cli.rb
111
+ - lib/showfix/episode.rb
112
+ - lib/showfix/parser.rb
113
+ - lib/showfix/version.rb
114
+ - showfix.gemspec
115
+ - spec/cleaner_spec.rb
116
+ - spec/episode_spec.rb
117
+ - spec/parser_spec.rb
118
+ - spec/spec_helper.rb
119
+ homepage: https://github.com/webdestroya/showfix
120
+ licenses:
121
+ - MIT
122
+ post_install_message:
123
+ rdoc_options: []
124
+ require_paths:
125
+ - lib
126
+ required_ruby_version: !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: 1.9.3
132
+ required_rubygems_version: !ruby/object:Gem::Requirement
133
+ none: false
134
+ requirements:
135
+ - - ! '>='
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ segments:
139
+ - 0
140
+ hash: -3802511965446294085
141
+ requirements: []
142
+ rubyforge_project:
143
+ rubygems_version: 1.8.15
144
+ signing_key:
145
+ specification_version: 3
146
+ summary: A gem to easily rename TV show files.
147
+ test_files:
148
+ - spec/cleaner_spec.rb
149
+ - spec/episode_spec.rb
150
+ - spec/parser_spec.rb
151
+ - spec/spec_helper.rb