xspf2m3u 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.autotest +13 -0
- data/.gitignore +10 -0
- data/.rspec +1 -0
- data/.rvmrc +1 -0
- data/.travis.yml +14 -0
- data/Gemfile +9 -0
- data/LICENSE.md +20 -0
- data/LICENSE.rdoc +20 -0
- data/README.md +31 -0
- data/README.rdoc +29 -0
- data/Rakefile +53 -0
- data/bin/xspf2m3u +3 -0
- data/cucumber.yml +2 -0
- data/features/CLI/toplevel.feature +65 -0
- data/features/step_definitions/xspf2m3u_steps.rb +4 -0
- data/features/support/env.rb +8 -0
- data/features/support/helpers.rb +6 -0
- data/lib/xspf2m3u/app.rb +53 -0
- data/lib/xspf2m3u/help.rb +45 -0
- data/lib/xspf2m3u/version.rb +3 -0
- data/lib/xspf2m3u/xsl/xspf2m3u.xsl +18 -0
- data/lib/xspf2m3u/xspf_patch.rb +32 -0
- data/lib/xspf2m3u.rb +16 -0
- data/spec/spec_helper.rb +8 -0
- data/xspf2m3u.gemspec +32 -0
- metadata +181 -0
data/.autotest
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
Autotest.add_hook(:initialize) {|at|
|
2
|
+
%w{.git .svn .hg .DS_Store .rvmrc ._* vendor test tmp log doc var}.each do |exception|
|
3
|
+
at.add_exception(exception)
|
4
|
+
end
|
5
|
+
at.clear_mappings # take out the default (test/test*rb)
|
6
|
+
at.add_mapping(%r{^(lib)|(util)/.*\.rb$}) {|f, _|
|
7
|
+
Dir['spec/**/*.rb']
|
8
|
+
}
|
9
|
+
at.add_mapping(%r{^spec/.*\.rb$}) {|filename, _|
|
10
|
+
filename
|
11
|
+
}
|
12
|
+
nil
|
13
|
+
}
|
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
-c -f d
|
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm --create use 1.9.3@xspf2m3u
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
source "http://rubygems.org"
|
2
|
+
|
3
|
+
gem "autotest-notification", :git => 'git://github.com/carlosbrando/autotest-notification.git', :branch => 'master'
|
4
|
+
gem "aruba", :git => 'git://github.com/cucumber/aruba.git', :branch => 'master'
|
5
|
+
|
6
|
+
# Specify your gem's dependencies in xspf2m3u.gemspec
|
7
|
+
gemspec
|
8
|
+
gem 'cucumber'
|
9
|
+
gem 'rspec'
|
data/LICENSE.md
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2012 Pavel Argentov
|
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.
|
data/LICENSE.rdoc
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2012 Pavel Argentov
|
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.
|
data/README.md
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# Xspf2m3u
|
2
|
+
|
3
|
+
[![Build Status](https://secure.travis-ci.org/argent-smith/xspf2m3u.png)](http://travis-ci.org/argent-smith/xspf2m3u)
|
4
|
+
|
5
|
+
__Author:__ Pavel Argentov <argentoff@gmail.com>
|
6
|
+
|
7
|
+
## Usage:
|
8
|
+
|
9
|
+
xspf2m3u help
|
10
|
+
|
11
|
+
xspf2m3u -i infile.xspf -o outfile.m3u
|
12
|
+
|
13
|
+
This CLI program converts a playlist in XSPF format into Extended M3U playlist.
|
14
|
+
|
15
|
+
## JRuby notice
|
16
|
+
|
17
|
+
Since this gem depends on no-jruby-compatible "ruby-xslt", it would not
|
18
|
+
build/install/work on JRuby.
|
19
|
+
|
20
|
+
## Feedback
|
21
|
+
|
22
|
+
Feel free to fork/patch/issue this thing. If you are on GitHub, you already
|
23
|
+
know how to do this :)
|
24
|
+
|
25
|
+
## Copyright
|
26
|
+
|
27
|
+
Copyright (c) 2012 Pavel Argentov. See LICENSE for details.
|
28
|
+
|
29
|
+
## LICENSE
|
30
|
+
|
31
|
+
MIT, see LICENSE.md or LICENSE.rdoc in the gem's package.
|
data/README.rdoc
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
= Xspf2m3u
|
2
|
+
|
3
|
+
*Author:* Pavel Argentov <argentoff@gmail.com>
|
4
|
+
|
5
|
+
== Usage:
|
6
|
+
|
7
|
+
xspf2m3u help
|
8
|
+
|
9
|
+
xspf2m3u -i infile.xspf -o outfile.m3u
|
10
|
+
|
11
|
+
This CLI program converts a playlist in XSPF format into Extended M3U playlist.
|
12
|
+
|
13
|
+
== JRuby notice
|
14
|
+
|
15
|
+
Since this gem depends on no-jruby-compatible "ruby-xslt", it would not
|
16
|
+
build/install/work on JRuby.
|
17
|
+
|
18
|
+
== Feedback
|
19
|
+
|
20
|
+
Feel free to fork/patch/issue this thing. If you are on GitHub, you already
|
21
|
+
know how to do this :)
|
22
|
+
|
23
|
+
== Copyright
|
24
|
+
|
25
|
+
Copyright (c) 2012 Pavel Argentov. See LICENSE for details.
|
26
|
+
|
27
|
+
== LICENSE
|
28
|
+
|
29
|
+
MIT, see LICENSE.md or LICENSE.rdoc in the gem's package.
|
data/Rakefile
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "bundler/setup"
|
3
|
+
require "bundler/gem_tasks"
|
4
|
+
|
5
|
+
require 'cucumber/rake/task'
|
6
|
+
Cucumber::Rake::Task.new(:features) do |features|
|
7
|
+
features.cucumber_opts = "features --tags ~@wip --format progress"
|
8
|
+
end
|
9
|
+
namespace :features do
|
10
|
+
Cucumber::Rake::Task.new(:pretty, "Run Cucumber features with output in pretty format") do |features|
|
11
|
+
features.cucumber_opts = "features --tags ~@wip --format pretty"
|
12
|
+
end
|
13
|
+
Cucumber::Rake::Task.new(:wip, "Run @wip (Work In Progress) Cucumber features") do |features|
|
14
|
+
features.cucumber_opts = "features --tags @wip --format progress"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
require 'rspec/core/rake_task'
|
19
|
+
desc "Run specs"
|
20
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
21
|
+
t.rspec_opts = %w(--color)
|
22
|
+
end
|
23
|
+
namespace :spec do
|
24
|
+
desc "Run specs with output in documentation format"
|
25
|
+
RSpec::Core::RakeTask.new(:doc) do |t|
|
26
|
+
t.rspec_opts = ["--color", "--format d"]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
desc "Default autotest task"
|
31
|
+
task :autotest => "autotest:spec"
|
32
|
+
|
33
|
+
namespace :autotest do
|
34
|
+
desc "Start Autotest CI"
|
35
|
+
task :spec => [".autotest", ".rspec"] do
|
36
|
+
sh "bundle exec autotest"
|
37
|
+
end
|
38
|
+
desc "autotest + features"
|
39
|
+
task :features => "cucumber.yml" do
|
40
|
+
sh "(bundle exec env AUTOFEATURE=true autotest)"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
rdoc_title = "Xspf2m3u: the playlist converter"
|
45
|
+
|
46
|
+
require 'rdoc/task'
|
47
|
+
Rake::RDocTask.new do |rd|
|
48
|
+
rd.title = rdoc_title
|
49
|
+
rd.main = "README.rdoc"
|
50
|
+
rd.rdoc_files.include("README.rdoc", "LICENSE.rdoc", "lib/**/*.rb")
|
51
|
+
end
|
52
|
+
|
53
|
+
task :default => [:spec, :features]
|
data/bin/xspf2m3u
ADDED
data/cucumber.yml
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
Feature: Toplevel application
|
2
|
+
As a user
|
3
|
+
In order to have an m3u playlist file
|
4
|
+
I run a converter application
|
5
|
+
|
6
|
+
Background: xspf sample
|
7
|
+
Given a file named "1.xspf" with:
|
8
|
+
"""
|
9
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
10
|
+
<playlist version="1" xmlns="http://xspf.org/ns/0/" xmlns:vlc="http://www.videolan.org/vlc/playlist/ns/0/">
|
11
|
+
<title>Все каналы ТВ и FM</title>
|
12
|
+
<trackList>
|
13
|
+
<track>
|
14
|
+
<location>http://1tv.tv.lan</location>
|
15
|
+
<title>TV : Первый канал</title>
|
16
|
+
<image>http://tv.lan/img/1tv.jpg</image>
|
17
|
+
</track>
|
18
|
+
</trackList>
|
19
|
+
</playlist>
|
20
|
+
"""
|
21
|
+
|
22
|
+
Scenario: running the app without options
|
23
|
+
When I run `xspf2m3u`
|
24
|
+
Then the output should contain "No value"
|
25
|
+
|
26
|
+
Scenario Outline: help display
|
27
|
+
When I run `xspf2m3u <h_key>`
|
28
|
+
Then the output should contain "Usage"
|
29
|
+
Examples:
|
30
|
+
| h_key |
|
31
|
+
| help |
|
32
|
+
| -h |
|
33
|
+
| --help |
|
34
|
+
|
35
|
+
Scenario Outline: displaying the version number
|
36
|
+
When I run `xspf2m3u <v_key>`
|
37
|
+
Then the version display should be correct
|
38
|
+
Examples:
|
39
|
+
| v_key |
|
40
|
+
| version |
|
41
|
+
| -V |
|
42
|
+
| --version |
|
43
|
+
|
44
|
+
Scenario Outline: conversion run variants
|
45
|
+
When I run `xspf2m3u <task> <from> <to>`
|
46
|
+
Then the output should match /<partial_output>/
|
47
|
+
And a file named "<file>" should exist
|
48
|
+
And a file named "<no_file>" should not exist
|
49
|
+
Examples:
|
50
|
+
| task | from | to | file | no_file | partial_output |
|
51
|
+
| | | -o 1.m3u | 1.xspf | 1.m3u | No value |
|
52
|
+
| | -i 1.xspf | | 1.xspf | 1.m3u | No value |
|
53
|
+
| convert | | -o 1.m3u | 1.xspf | 1.m3u | No value |
|
54
|
+
| convert | -i 1.xspf | | 1.xspf | 1.m3u | No value |
|
55
|
+
| | -i 1.xspf | -o 1.m3u | 1.m3u | | create +1.m3u |
|
56
|
+
| convert | -i 1.xspf | -o 1.m3u | 1.m3u | | create +1.m3u |
|
57
|
+
|
58
|
+
Scenario: conversion should be correct
|
59
|
+
When I run `xspf2m3u -i 1.xspf -o 1.m3u`
|
60
|
+
Then the file "1.m3u" should contain exactly:
|
61
|
+
"""
|
62
|
+
#EXTM3U
|
63
|
+
#EXTINF:-1,TV : Первый канал
|
64
|
+
http://1tv.tv.lan
|
65
|
+
"""
|
data/lib/xspf2m3u/app.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
module Xspf2m3u
|
2
|
+
# Top-level app
|
3
|
+
class App < Thor
|
4
|
+
|
5
|
+
include Thor::Actions
|
6
|
+
|
7
|
+
map %w{-V --version} => :version
|
8
|
+
|
9
|
+
desc "version", "Displays the program's version"
|
10
|
+
def version
|
11
|
+
say "xspf2m3u version #{VERSION}"
|
12
|
+
end
|
13
|
+
|
14
|
+
desc "convert", "Runs the converter"
|
15
|
+
|
16
|
+
method_option :infile,
|
17
|
+
:desc => "Input file",
|
18
|
+
:aliases => ["-i"],
|
19
|
+
:type => :string,
|
20
|
+
:required => true
|
21
|
+
|
22
|
+
method_option :outfile,
|
23
|
+
:desc => "Output file",
|
24
|
+
:aliases => ["-o"],
|
25
|
+
:type => :string,
|
26
|
+
:required => true
|
27
|
+
|
28
|
+
def convert
|
29
|
+
from = options[:infile]
|
30
|
+
to = options[:outfile]
|
31
|
+
|
32
|
+
begin
|
33
|
+
xspf = XSPF.new(File.read from)
|
34
|
+
create_file to do
|
35
|
+
xspf.to_xm3u
|
36
|
+
end
|
37
|
+
rescue Errno::ENOENT => message
|
38
|
+
raise Thor::Error, message
|
39
|
+
rescue NoMethodError
|
40
|
+
raise Thor::Error, "Error parsing #{from}"
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
default_task :convert
|
46
|
+
|
47
|
+
def help task = nil, subcommand = false
|
48
|
+
say Help.general_message if task.nil?
|
49
|
+
super
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Xspf2m3u
|
2
|
+
|
3
|
+
# Help helpers :)
|
4
|
+
class Help
|
5
|
+
|
6
|
+
# Toplevel program's banner.
|
7
|
+
PROG_BANNER = <<-EOF.gsub(/^ {4}/, '')
|
8
|
+
|
9
|
+
xspf -> m3u converter
|
10
|
+
|
11
|
+
EOF
|
12
|
+
|
13
|
+
# Toplevel program's usage message.
|
14
|
+
GENERAL_USAGE = <<-EOF.gsub(/^ {4}/, '')
|
15
|
+
|
16
|
+
xspf2m3u [task] [options]
|
17
|
+
|
18
|
+
Converts xspf playlist file (-i option) to m3u playlist file (-o option).
|
19
|
+
|
20
|
+
EOF
|
21
|
+
|
22
|
+
# Usage example
|
23
|
+
EXAMPLE = <<-EOF.gsub(/^ {4}/, '')
|
24
|
+
|
25
|
+
xspf2m3u -i 1.xspf -o 1.m3u
|
26
|
+
|
27
|
+
EOF
|
28
|
+
|
29
|
+
|
30
|
+
class << self
|
31
|
+
|
32
|
+
# General help message.
|
33
|
+
def general_message
|
34
|
+
<<-EOF.gsub(/^ {8}/, '')
|
35
|
+
Xspf2m3u:
|
36
|
+
#{PROG_BANNER}
|
37
|
+
Usage:
|
38
|
+
#{GENERAL_USAGE}
|
39
|
+
Example:
|
40
|
+
#{EXAMPLE}
|
41
|
+
EOF
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<!--
|
2
|
+
xspf2m3u.xsl: transform XSPF to Extended M3U
|
3
|
+
author: Pavel Argentov <argentoff@gmail.com>
|
4
|
+
-->
|
5
|
+
<xsl:stylesheet version = '1.0'
|
6
|
+
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
|
7
|
+
xmlns:xspf="http://xspf.org/ns/0/">
|
8
|
+
<xsl:output method="text" indent="no"/>
|
9
|
+
<xsl:template match="/">
|
10
|
+
<xsl:text>#EXTM3U</xsl:text>
|
11
|
+
<xsl:for-each select="//xspf:trackList/xspf:track">
|
12
|
+
#EXTINF:-1,<xsl:value-of select="./xspf:title"/>
|
13
|
+
<xsl:text>
|
14
|
+
</xsl:text>
|
15
|
+
<xsl:value-of select="./xspf:location"/>
|
16
|
+
</xsl:for-each>
|
17
|
+
</xsl:template>
|
18
|
+
</xsl:stylesheet>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# Extended m3u format driver for gem 'xspf'
|
2
|
+
module XSPFPatch
|
3
|
+
|
4
|
+
def self.included(base)
|
5
|
+
base.extend ClassMethods
|
6
|
+
base.class_eval do
|
7
|
+
|
8
|
+
end
|
9
|
+
base.send :include, InstanceMethods
|
10
|
+
end # self.included
|
11
|
+
|
12
|
+
module ClassMethods
|
13
|
+
|
14
|
+
end # ClassMethods
|
15
|
+
|
16
|
+
module InstanceMethods
|
17
|
+
|
18
|
+
def to_xm3u
|
19
|
+
xslt_path = File.join(File.dirname(__FILE__), "xsl", "xspf2m3u.xsl")
|
20
|
+
xslt = XML::XSLT.new
|
21
|
+
xslt.xml = self.to_xml
|
22
|
+
xslt.xsl = REXML::Document.new(File.new(xslt_path))
|
23
|
+
xslt.serve
|
24
|
+
end
|
25
|
+
|
26
|
+
end # InstanceMethods
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
class XSPF
|
31
|
+
include XSPFPatch
|
32
|
+
end
|
data/lib/xspf2m3u.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# from thor
|
2
|
+
require 'thor'
|
3
|
+
require 'thor/group'
|
4
|
+
|
5
|
+
# functionality
|
6
|
+
require 'xspf'
|
7
|
+
|
8
|
+
# ourselves
|
9
|
+
require "xspf2m3u/xspf_patch"
|
10
|
+
require "xspf2m3u/version"
|
11
|
+
require "xspf2m3u/help"
|
12
|
+
require "xspf2m3u/app"
|
13
|
+
|
14
|
+
module Xspf2m3u
|
15
|
+
App.start
|
16
|
+
end
|
data/spec/spec_helper.rb
ADDED
data/xspf2m3u.gemspec
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "xspf2m3u/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "xspf2m3u"
|
7
|
+
s.version = Xspf2m3u::VERSION
|
8
|
+
s.authors = ["Pavel Argentov"]
|
9
|
+
s.email = ["argentoff@gmail.com"]
|
10
|
+
s.homepage = "https://github.com/argent-smith/xspf2m3u"
|
11
|
+
s.summary = %q{Tiny simple little dumb xspf -> extended m3u converter}
|
12
|
+
s.description = %q{Usage: xspf2m3u -i one.xspf -o two.m3u}
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
|
19
|
+
s.extra_rdoc_files = %w{README.rdoc LICENSE.rdoc}
|
20
|
+
s.rdoc_options = %W{--main README.rdoc --line-numbers}
|
21
|
+
|
22
|
+
s.add_development_dependency "rake"
|
23
|
+
s.add_development_dependency "bddgen"
|
24
|
+
s.add_development_dependency "aruba"
|
25
|
+
s.add_development_dependency "ZenTest"
|
26
|
+
s.add_development_dependency "autotest-notification"
|
27
|
+
s.add_development_dependency "pry"
|
28
|
+
s.add_development_dependency "gemcutter"
|
29
|
+
|
30
|
+
s.add_runtime_dependency "thor"
|
31
|
+
s.add_runtime_dependency "xspf"
|
32
|
+
end
|
metadata
ADDED
@@ -0,0 +1,181 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: xspf2m3u
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Pavel Argentov
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-02-28 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: &338632460 !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: *338632460
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: bddgen
|
27
|
+
requirement: &338631750 !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: *338631750
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: aruba
|
38
|
+
requirement: &338630880 !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: *338630880
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: ZenTest
|
49
|
+
requirement: &338629600 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *338629600
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: autotest-notification
|
60
|
+
requirement: &338644900 !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: *338644900
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry
|
71
|
+
requirement: &338644090 !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: *338644090
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: gemcutter
|
82
|
+
requirement: &338643030 !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: *338643030
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: thor
|
93
|
+
requirement: &338641460 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
type: :runtime
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: *338641460
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: xspf
|
104
|
+
requirement: &338640340 !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
type: :runtime
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: *338640340
|
113
|
+
description: ! 'Usage: xspf2m3u -i one.xspf -o two.m3u'
|
114
|
+
email:
|
115
|
+
- argentoff@gmail.com
|
116
|
+
executables:
|
117
|
+
- xspf2m3u
|
118
|
+
extensions: []
|
119
|
+
extra_rdoc_files:
|
120
|
+
- README.rdoc
|
121
|
+
- LICENSE.rdoc
|
122
|
+
files:
|
123
|
+
- .autotest
|
124
|
+
- .gitignore
|
125
|
+
- .rspec
|
126
|
+
- .rvmrc
|
127
|
+
- .travis.yml
|
128
|
+
- Gemfile
|
129
|
+
- LICENSE.md
|
130
|
+
- LICENSE.rdoc
|
131
|
+
- README.md
|
132
|
+
- README.rdoc
|
133
|
+
- Rakefile
|
134
|
+
- bin/xspf2m3u
|
135
|
+
- cucumber.yml
|
136
|
+
- features/CLI/toplevel.feature
|
137
|
+
- features/step_definitions/xspf2m3u_steps.rb
|
138
|
+
- features/support/env.rb
|
139
|
+
- features/support/helpers.rb
|
140
|
+
- lib/xspf2m3u.rb
|
141
|
+
- lib/xspf2m3u/app.rb
|
142
|
+
- lib/xspf2m3u/help.rb
|
143
|
+
- lib/xspf2m3u/version.rb
|
144
|
+
- lib/xspf2m3u/xsl/xspf2m3u.xsl
|
145
|
+
- lib/xspf2m3u/xspf_patch.rb
|
146
|
+
- spec/spec_helper.rb
|
147
|
+
- xspf2m3u.gemspec
|
148
|
+
homepage: https://github.com/argent-smith/xspf2m3u
|
149
|
+
licenses: []
|
150
|
+
post_install_message:
|
151
|
+
rdoc_options:
|
152
|
+
- --main
|
153
|
+
- README.rdoc
|
154
|
+
- --line-numbers
|
155
|
+
require_paths:
|
156
|
+
- lib
|
157
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
158
|
+
none: false
|
159
|
+
requirements:
|
160
|
+
- - ! '>='
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
version: '0'
|
163
|
+
segments:
|
164
|
+
- 0
|
165
|
+
hash: -53171825
|
166
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
167
|
+
none: false
|
168
|
+
requirements:
|
169
|
+
- - ! '>='
|
170
|
+
- !ruby/object:Gem::Version
|
171
|
+
version: '0'
|
172
|
+
segments:
|
173
|
+
- 0
|
174
|
+
hash: -53171825
|
175
|
+
requirements: []
|
176
|
+
rubyforge_project:
|
177
|
+
rubygems_version: 1.8.17
|
178
|
+
signing_key:
|
179
|
+
specification_version: 3
|
180
|
+
summary: Tiny simple little dumb xspf -> extended m3u converter
|
181
|
+
test_files: []
|