subtool 0.0.1

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.
@@ -0,0 +1,20 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ coverage
6
+ InstalledFiles
7
+ lib/bundler/man
8
+ pkg
9
+ rdoc
10
+ spec/reports
11
+ test/tmp
12
+ test/version_tmp
13
+ tmp
14
+ .idea
15
+ .netbeans
16
+ *~
17
+ # YARD artifacts
18
+ .yardoc
19
+ _yardoc
20
+ doc/
@@ -0,0 +1,9 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 1.9.2
5
+ - rbx-18mode
6
+ - rbx-19mode
7
+ - ruby-head
8
+ - 1.8.7
9
+ - ree
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source :rubygems
2
+ gemspec
@@ -0,0 +1,42 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ subtool (0.0.1)
5
+
6
+ GEM
7
+ remote: http://rubygems.org/
8
+ specs:
9
+ aruba (0.5.1)
10
+ childprocess (~> 0.3.6)
11
+ cucumber (>= 1.1.1)
12
+ rspec-expectations (>= 2.7.0)
13
+ builder (3.1.4)
14
+ childprocess (0.3.6)
15
+ ffi (~> 1.0, >= 1.0.6)
16
+ cucumber (1.2.1)
17
+ builder (>= 2.1.2)
18
+ diff-lcs (>= 1.1.3)
19
+ gherkin (~> 2.11.0)
20
+ json (>= 1.4.6)
21
+ diff-lcs (1.1.3)
22
+ ffi (1.2.0)
23
+ gherkin (2.11.5)
24
+ json (>= 1.4.6)
25
+ json (1.7.5)
26
+ multi_json (1.1.0)
27
+ rake (10.0.2)
28
+ rspec-expectations (2.12.0)
29
+ diff-lcs (~> 1.1.3)
30
+ simplecov (0.6.1)
31
+ multi_json (~> 1.0)
32
+ simplecov-html (~> 0.5.3)
33
+ simplecov-html (0.5.3)
34
+
35
+ PLATFORMS
36
+ ruby
37
+
38
+ DEPENDENCIES
39
+ aruba
40
+ rake
41
+ simplecov
42
+ subtool!
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ subtool is a copyrighted free software by creativ-IT.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,40 @@
1
+ [![Build Status](https://travis-ci.org/0livier/subtool.png)](https://travis-ci.org/0livier/subtool) [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/0livier/subtool)
2
+
3
+ subtool is a commandline tool that help fix the timing of subtitles files.
4
+
5
+ ## Installation
6
+
7
+ Install it using the gem command:
8
+
9
+ gem install subtool
10
+
11
+ ## Usage
12
+
13
+
14
+ ## Want another tool ?
15
+
16
+ There are several other tool to manipulate SRT files. Among them,
17
+
18
+ * https://github.com/remram44/srt-shift
19
+ * http://www.aegisub.org/
20
+ * https://github.com/thiagokimo/srt-shifter
21
+ * https://github.com/georgyvlad/srt
22
+
23
+
24
+ ## Reporting Bugs
25
+
26
+ Thanks for taking the time of giving the project an opportunity to enhance. Please use the Github tracker.
27
+
28
+
29
+ ## Submitting Patches or Pull Requests
30
+
31
+ * Fork the project.
32
+ * Make your feature addition or bug fix.
33
+ * Add tests for it. This is important so future version won't break unintentionally.
34
+ * Commit
35
+ * Send a pull request.
36
+
37
+
38
+ ## Copyright
39
+
40
+ Copyright (c) 2012 creativ-IT. See LICENSE for legal mumbo jumbo.
@@ -0,0 +1,39 @@
1
+ require 'rake/clean'
2
+ require 'rubygems'
3
+ require 'rubygems/package_task'
4
+ require 'cucumber'
5
+ require 'cucumber/rake/task'
6
+
7
+ spec = eval(File.read('subtool.gemspec'))
8
+
9
+ # needed to have "rake gem"
10
+ Gem::PackageTask.new(spec) do |pkg|
11
+ end
12
+
13
+ Dir.mkdir 'tmp' unless File.exists?("tmp")
14
+
15
+ CUKE_RESULTS = 'tmp/results.html'
16
+
17
+ CLEAN << CUKE_RESULTS
18
+
19
+ desc 'Run features'
20
+ Cucumber::Rake::Task.new(:features) do |t|
21
+ opts = "features --format html -o #{CUKE_RESULTS} --format progress -x"
22
+ opts += " --tags #{ENV['TAGS']}" if ENV['TAGS']
23
+ t.cucumber_opts = opts
24
+ t.fork = false
25
+ end
26
+
27
+ desc 'Run features tagged as work-in-progress (@wip)'
28
+ Cucumber::Rake::Task.new('features:wip') do |t|
29
+ tag_opts = ' --tags ~@pending'
30
+ tag_opts = ' --tags @wip'
31
+ t.cucumber_opts = "features --format html -o #{CUKE_RESULTS} --format pretty -x -s#{tag_opts}"
32
+ t.fork = false
33
+ end
34
+
35
+ task :cucumber => :features
36
+ task 'cucumber:wip' => 'features:wip'
37
+ task :wip => 'features:wip'
38
+
39
+ task :default => [:features]
@@ -0,0 +1,80 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'optparse'
4
+ require 'ostruct'
5
+ require 'pp'
6
+ require 'subtool'
7
+
8
+ options = OpenStruct.new(:delay => 1000.0)
9
+
10
+ option_parser = OptionParser.new do |opts|
11
+ opts.banner = 'Usage: subtool [options]'
12
+
13
+ opts.separator ''
14
+ opts.separator 'Specific options:'
15
+
16
+ opts.on('-d', '--delay SECONDS',
17
+ 'Amount of seconds to add or removed. Can be formatted as a float (e.g. 3.3). Default is 1.') do |seconds|
18
+ options.delay = Float(seconds)*1000
19
+ end
20
+
21
+ opts.on('-i', '--input FILENAME',
22
+ 'Input SRT filename. STDIN by default or if - is given.') do |filename|
23
+ options.input = filename unless filename == '-'
24
+ end
25
+
26
+ opts.on('-o', '--output FILENAME',
27
+ 'Ouput SRT filename. STDOUT by default or if - is given.') do |filename|
28
+ options.output = filename unless filename == '-'
29
+ end
30
+
31
+ opts.on_tail('-h', '--help', 'Show this message') do
32
+ puts opts
33
+
34
+ # @TODO Put commands help
35
+ # command 'add' do
36
+ # description "Adds a delay to the srt file, making the subtitles displayed later."
37
+ # command 'remove' do
38
+ # description "Makes the subtitles displayed earlier."
39
+
40
+ exit
41
+ end
42
+
43
+ # Another typical switch to print the version.
44
+ opts.on_tail('--version', 'Show version') do
45
+ puts Subtool::VERSION
46
+ exit
47
+ end
48
+ end
49
+
50
+ option_parser.order!
51
+
52
+ if ARGV.count == 0
53
+ puts option_parser
54
+ exit
55
+ end
56
+
57
+ commands = ARGV.dup
58
+
59
+ ARGV.replace([options.input]) if options.input
60
+ subtitles = Subtool::Import::Srt.filehandler(ARGF)
61
+
62
+ # @Todo more filters otherwise the loop won't make any sense
63
+ while commands.count > 0
64
+ case (command = commands.shift.downcase)
65
+ when 'add', 'remove'
66
+ if commands[0] && commands[0].match(/^\d+(?:\.\d+)?$/)
67
+ delay = Float(commands.shift)*1000
68
+ else
69
+ delay = options.delay
70
+ end
71
+ Subtool::Filter::Delay.add_to(subtitles, command == 'add' ? delay : -delay)
72
+ end
73
+ end
74
+
75
+ # output
76
+ if options.output
77
+ Subtool::Export::Srt.file(options.output, subtitles)
78
+ else
79
+ Subtool::Export::Srt.stdout(subtitles)
80
+ end
@@ -0,0 +1 @@
1
+ \_o< QUACK
@@ -0,0 +1,12 @@
1
+ 1
2
+ 00:00:20,000 --> 00:00:24,400
3
+ Altocumulus clouds occur between six thousand
4
+
5
+ 2
6
+ 00:00:24,600 --> 00:00:27,800
7
+ and twenty thousand feet above ground level.
8
+
9
+ 3
10
+ 01:01:01,100 --> 02:02:02,200
11
+ QUACK
12
+ \_o<
@@ -0,0 +1,55 @@
1
+ Feature: Modifying Parser Import / Export should get and write content properly
2
+
3
+ In order to modify users' srt files
4
+ As a developer of subtool
5
+ I want it to modify them properly
6
+
7
+ Scenario: Adding delay
8
+ When I parse a Srt file named "features/files/simple.srt"
9
+ And I add a delay of 1 second
10
+ Then I should have the following subtitles:
11
+ | id | start | end | body |
12
+ | 1 | 21000 | 25400 | Altocumulus clouds occur between six thousand |
13
+ | 2 | 25600 | 28800 | and twenty thousand feet above ground level. |
14
+ | 3 | 3662100 | 7323200 | QUACK\n\\_o< |
15
+
16
+ Scenario: Adding delay
17
+ When I parse a Srt file named "features/files/simple.srt"
18
+ And I add a delay of -1.5 second
19
+ Then I should have the following subtitles:
20
+ | id | start | end | body |
21
+ | 1 | 18500 | 22900 | Altocumulus clouds occur between six thousand |
22
+ | 2 | 23100 | 26300 | and twenty thousand feet above ground level. |
23
+ | 3 | 3659600 | 7320700 | QUACK\n\\_o< |
24
+
25
+ Scenario: Adding a delay to a file and reparsing it
26
+ When I parse a Srt file named "features/files/simple.srt"
27
+ And I add a delay of 2.1 second
28
+ And I export the subtitles to a file named "tmp/output_simple.srt"
29
+ And I parse a Srt file named "tmp/output_simple.srt"
30
+ Then I should have the following subtitles:
31
+ | id | start | end | body |
32
+ | 1 | 22100 | 26500 | Altocumulus clouds occur between six thousand |
33
+ | 2 | 26700 | 29900 | and twenty thousand feet above ground level. |
34
+ | 3 | 3663200 | 7324300 | QUACK\n\\_o< |
35
+
36
+
37
+ Scenario: Adding delay
38
+ When I parse a Srt file named "features/files/simple.srt"
39
+ And I add a delay of -1.5 second
40
+ Then I should have the following subtitles:
41
+ | id | start | end | body |
42
+ | 1 | 18500 | 22900 | Altocumulus clouds occur between six thousand |
43
+ | 2 | 23100 | 26300 | and twenty thousand feet above ground level. |
44
+ | 3 | 3659600 | 7320700 | QUACK\n\\_o< |
45
+
46
+ Scenario: Adding a delay to a file and reparsing it
47
+ When I parse a Srt file named "features/files/simple.srt"
48
+ And I add a delay of 2.1 second
49
+ And I export the subtitles to a file named "tmp/output_simple.srt"
50
+ And I parse a Srt file named "tmp/output_simple.srt"
51
+ Then I should have the following subtitles:
52
+ | id | start | end | body |
53
+ | 1 | 22100 | 26500 | Altocumulus clouds occur between six thousand |
54
+ | 2 | 26700 | 29900 | and twenty thousand feet above ground level. |
55
+ | 3 | 3663200 | 7324300 | QUACK\n\\_o< |
@@ -0,0 +1,20 @@
1
+ Feature: Getting Help
2
+
3
+ In order to RTFM
4
+ As a user of subtool
5
+ I want to get the manual
6
+
7
+ Scenario: Getting help with --help
8
+ When I call "subtool" with the argument "--help"
9
+ Then the exit status should be 0
10
+ Then the output should contain "Usage"
11
+
12
+ Scenario: exit status of 0
13
+ When I call "subtool" with the argument ""
14
+ Then the exit status should be 0
15
+ Then the output should contain "Usage"
16
+
17
+ Scenario: Getting help when no command is given
18
+ When I call "subtool" with the argument "-i features/files/simple.srt"
19
+ Then the exit status should be 0
20
+ Then the output should contain "Usage"
@@ -0,0 +1,31 @@
1
+ Feature: Parser Import / Export should get and write content properly
2
+
3
+ In order to modify users' srt files
4
+ As a developer of subtool
5
+ I want it to load and write them correctly
6
+
7
+ Scenario: Srt Loading
8
+ When I parse a Srt file named "features/files/simple.srt"
9
+ Then I should have the following subtitles:
10
+ | id | start | end | body |
11
+ | 1 | 20000 | 24400 | Altocumulus clouds occur between six thousand |
12
+ | 2 | 24600 | 27800 | and twenty thousand feet above ground level. |
13
+ | 3 | 3661100 | 7322200 | QUACK\n\\_o< |
14
+
15
+
16
+ Scenario: Writing file
17
+ When I parse a Srt file named "features/files/simple.srt"
18
+ And I export the subtitles to a file named "tmp/output_simple.srt"
19
+ And I parse a Srt file named "tmp/output_simple.srt"
20
+ Then I should have the following subtitles:
21
+ | id | start | end | body |
22
+ | 1 | 20000 | 24400 | Altocumulus clouds occur between six thousand |
23
+ | 2 | 24600 | 27800 | and twenty thousand feet above ground level. |
24
+ | 3 | 3661100 | 7322200 | QUACK\n\\_o< |
25
+
26
+ # need to call the binary since it does not capture the output of current process
27
+ Scenario: Writing file on STDOUT
28
+ When I call "subtool" with the argument "-i ../../features/files/simple.srt add 0"
29
+ Then the output should contain "1\n00:00:20,000 --> 00:00:24,400\nAltocumulus clouds occur between six thousand"
30
+ And the output should contain "2\n00:00:24,600 --> 00:00:27,800\nand twenty thousand feet above ground level."
31
+ And the output should contain "3\n01:01:01,100 --> 02:02:02,200\nQUACK"
@@ -0,0 +1,5 @@
1
+ require 'subtool'
2
+
3
+ When /^I add a delay of (-?\s*\d+(?:\.\d+)?) seconds?$/ do |seconds|
4
+ @subtitles = Subtool::Filter::Delay.add_to(@subtitles, (Float(seconds) * 1000).to_i)
5
+ end
@@ -0,0 +1,25 @@
1
+ require 'subtool'
2
+
3
+ When /^I call "([^"]+)"(?: with the arguments? "([^"]*)")?$/ do |app_name, parameters|
4
+ @app_name = app_name
5
+ step %(I run `#{app_name} #{parameters}`)
6
+ end
7
+
8
+ When /^I parse a Srt file named "([^"]+)"$/ do |filename|
9
+ @subtitles = Subtool::Import::Srt.file(filename)
10
+ end
11
+
12
+ When /^I export the subtitles to a file named "(.+)"$/ do |filename|
13
+ Subtool::Export::Srt.file(filename, @subtitles)
14
+ end
15
+
16
+ When /^I export the subtitles to STDOUT$/ do
17
+ Subtool::Export::Srt.stdout(@subtitles)
18
+ end
19
+
20
+
21
+ Then /^I should have the following subtitles:$/ do |table|
22
+ hasherize(table).each_with_index do |expected_values, i|
23
+ @subtitles[i].should === Subtool::Subtitle.new(expected_values[:id], expected_values[:start], expected_values[:end], expected_values[:body])
24
+ end
25
+ end
@@ -0,0 +1,65 @@
1
+ if RUBY_VERSION != '1.8.7'
2
+ require 'simplecov'
3
+ SimpleCov.start
4
+ SimpleCov.coverage_dir 'coverage/cucumber'
5
+ end
6
+
7
+ require 'aruba/cucumber'
8
+
9
+ ENV['PATH'] = "#{File.expand_path(File.dirname(__FILE__) + '/../../bin')}#{File::PATH_SEPARATOR}#{ENV['PATH']}"
10
+ LIB_DIR = File.join(File.expand_path(File.dirname(__FILE__)),'..','..','lib')
11
+
12
+ Before do
13
+ # Using "announce" causes massive warnings on 1.9.2
14
+ @puts = true
15
+ @original_rubylib = ENV['RUBYLIB']
16
+ ENV['RUBYLIB'] = LIB_DIR + File::PATH_SEPARATOR + ENV['RUBYLIB'].to_s
17
+ end
18
+
19
+ After do
20
+ ENV['RUBYLIB'] = @original_rubylib
21
+ end
22
+
23
+ # Starts with cucumber's built-in hashes method and adds a bit more magic:
24
+ #
25
+ # * Converts hash keys from stings to symbols
26
+ # * Converts numeric values into integers
27
+ # * Converts true/false strings into actual booleans
28
+ #
29
+ def hasherize(table)
30
+ table.hashes.map do |object|
31
+ result = {}
32
+ object.each do |attribute, value|
33
+ object[attribute] = to_boolean?(value)
34
+ object[attribute] = to_float?(object[attribute])
35
+ object[attribute] = to_integer?(object[attribute])
36
+ result[symbolize(attribute)] = object.delete(attribute) unless attribute.is_a?(Symbol)
37
+ end
38
+ result
39
+ end
40
+ end
41
+
42
+ private
43
+
44
+ # Converts human readable attribute names (e.g. 'transaction type') into rails-ready
45
+ # symbolized hash keys (e.g. :transaction type).
46
+ #
47
+ def symbolize(string)
48
+ string.to_sym
49
+ end
50
+
51
+ # Checks if the passed value contains only digits and underscores.
52
+ #
53
+ def to_integer?(value)
54
+ value.is_a?(String) && value.match(/^[\d_]+$/) ? value.to_i : value
55
+ end
56
+
57
+ def to_float?(value)
58
+ value.is_a?(String) && value.match(/^[\d_]+\.[\d_]+$/) ? Float(value) : value
59
+ end
60
+
61
+ # Converts true/false/t/f strings into proper booleans.
62
+ #
63
+ def to_boolean?(value)
64
+ value.is_a?(String) && value.strip.match(/^(t|f|true|false)$/i) ? !!(value =~ /t|true/i) : value
65
+ end
@@ -0,0 +1,5 @@
1
+ require 'subtool/version'
2
+ require 'subtool/subtitle'
3
+ require 'subtool/import/srt'
4
+ require 'subtool/export/srt'
5
+ require 'subtool/filter/delay'
@@ -0,0 +1,38 @@
1
+ module Subtool
2
+ module Export
3
+ class Srt
4
+
5
+ def self.filehandler(fh, subtitles)
6
+ subtitles.each do |subtitle|
7
+ fh.write self.to_srt_entry(subtitle)
8
+ fh.write "\n\n"
9
+ end
10
+ end
11
+
12
+ def self.file(filename, subtitles)
13
+ fh = File.open(filename, 'w')
14
+
15
+ self.filehandler(fh, subtitles)
16
+
17
+ fh.close
18
+ end
19
+
20
+ def self.stdout(subtitles)
21
+ self.filehandler($stdout, subtitles)
22
+ end
23
+
24
+ def self.to_srt_entry(subtitle)
25
+ "#{subtitle[:id]}\n#{self.time_to_s(subtitle[:start])} --> #{self.time_to_s(subtitle[:end])}\n#{subtitle[:body]}"
26
+ end
27
+
28
+ def self.time_to_s(time)
29
+ hours = sprintf '%02d', time / 3600000
30
+ minutes = sprintf '%02d', (time/60000).modulo(60)
31
+ seconds = sprintf '%02d', (time/1000).modulo(60)
32
+ milliseconds = sprintf '%03d', time.modulo(1000)
33
+ "#{hours}:#{minutes}:#{seconds},#{milliseconds}"
34
+ end
35
+
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,14 @@
1
+ module Subtool
2
+ module Filter
3
+ class Delay
4
+
5
+ def self.add_to(subtitles, seconds)
6
+ subtitles.map do |subtitle|
7
+ subtitle.add_delay(seconds)
8
+ subtitle
9
+ end
10
+ end
11
+
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,40 @@
1
+ module Subtool
2
+ module Import
3
+ class Srt
4
+
5
+ def self.filehandler(fh)
6
+ subtitles = []
7
+
8
+ until fh.eof? do
9
+
10
+ number = Integer(fh.readline.strip)
11
+ position = self.parse_position(fh.readline.strip)
12
+ body = fh.readline("\n\n").strip
13
+
14
+ subtitles.push(Subtool::Subtitle.new(number, position[:start], position[:end], body))
15
+ end
16
+
17
+ subtitles
18
+ end
19
+
20
+ def self.file(filename)
21
+ fh = File.open(filename)
22
+ subtitles = self.filehandler(fh)
23
+ fh.close
24
+
25
+ subtitles
26
+ end
27
+
28
+ def self.parse_position(position)
29
+ matches = position.match(/^(\d\d):(\d\d):(\d\d),(\d\d\d) --> (\d\d):(\d\d):(\d\d),(\d\d\d)$/)
30
+ throw Exception.new("Can't parse #{position} as a valid time range") unless matches
31
+ matches = matches[1..8].map { |s| Integer(s) }
32
+ {
33
+ :start => matches[0]*60*60*1000 + matches[1]*60*1000 + matches[2]*1000 + matches[3],
34
+ :end => matches[4]*60*60*1000 + matches[5]*60*1000 + matches[6]*1000 + matches[7]
35
+ }
36
+ end
37
+
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,10 @@
1
+ module Subtool
2
+ class Subtitle < Struct.new(:id, :start, :end, :body)
3
+
4
+ def add_delay(amount)
5
+ self[:start] = self[:start] + amount
6
+ self[:end] = self[:end] + amount
7
+ end
8
+
9
+ end
10
+ end
@@ -0,0 +1,3 @@
1
+ module Subtool
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,21 @@
1
+ # Ensure we require the local version and not one we might have installed already
2
+ require File.join([File.dirname(__FILE__), 'lib', 'subtool', 'version.rb'])
3
+ spec = Gem::Specification.new do |s|
4
+ s.name = 'subtool'
5
+ s.version = Subtool::VERSION
6
+ s.author = 'Olivier Garcia'
7
+ s.email = 'olivier@lol.cat'
8
+ s.homepage = 'http://linux-nerd.com'
9
+ s.platform = Gem::Platform::RUBY
10
+ s.summary = 'CLI tool for manipulating subtitles files'
11
+ s.description = 'subtool is a library and CLI program to add (or remove) delay in subtitles files'
12
+
13
+ s.files = `git ls-files`.split("\n")
14
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
15
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
16
+ s.require_paths = %w(lib)
17
+
18
+ s.add_development_dependency('rake')
19
+ s.add_development_dependency('aruba')
20
+ s.add_development_dependency('simplecov')
21
+ end
metadata ADDED
@@ -0,0 +1,102 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: subtool
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Olivier Garcia
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-01-19 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: &26298140 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *26298140
25
+ - !ruby/object:Gem::Dependency
26
+ name: aruba
27
+ requirement: &26297620 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *26297620
36
+ - !ruby/object:Gem::Dependency
37
+ name: simplecov
38
+ requirement: &26297180 !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: *26297180
47
+ description: subtool is a library and CLI program to add (or remove) delay in subtitles
48
+ files
49
+ email: olivier@lol.cat
50
+ executables:
51
+ - subtool
52
+ extensions: []
53
+ extra_rdoc_files: []
54
+ files:
55
+ - .gitignore
56
+ - .travis.yml
57
+ - Gemfile
58
+ - Gemfile.lock
59
+ - LICENSE
60
+ - README.md
61
+ - Rakefile
62
+ - bin/subtool
63
+ - features/files/malformed.srt
64
+ - features/files/simple.srt
65
+ - features/filter.feature
66
+ - features/help.feature
67
+ - features/import_export.feature
68
+ - features/step_definitions/filter.rb
69
+ - features/step_definitions/import_export.rb
70
+ - features/support/env.rb
71
+ - lib/subtool.rb
72
+ - lib/subtool/export/srt.rb
73
+ - lib/subtool/filter/delay.rb
74
+ - lib/subtool/import/srt.rb
75
+ - lib/subtool/subtitle.rb
76
+ - lib/subtool/version.rb
77
+ - subtool.gemspec
78
+ homepage: http://linux-nerd.com
79
+ licenses: []
80
+ post_install_message:
81
+ rdoc_options: []
82
+ require_paths:
83
+ - lib
84
+ required_ruby_version: !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
+ none: false
92
+ requirements:
93
+ - - ! '>='
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ requirements: []
97
+ rubyforge_project:
98
+ rubygems_version: 1.8.10
99
+ signing_key:
100
+ specification_version: 3
101
+ summary: CLI tool for manipulating subtitles files
102
+ test_files: []