rupeepeethree 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.
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ *.gem
data/.travis.yml ADDED
@@ -0,0 +1,9 @@
1
+ language: ruby
2
+ notifications:
3
+ email:
4
+ - mcfiredrill@gmail.com
5
+ rvm:
6
+ - 1.9.2
7
+ - 1.9.3
8
+ - 2.0.0
9
+ script: bundle exec rake
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem 'rspec'
4
+ gem 'rake'
5
+ gem 'taglib-ruby'
6
+ gem 'trollop'
7
+ gem 'cocaine'
8
+ gem 'mime-types'
data/Gemfile.lock ADDED
@@ -0,0 +1,36 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ activesupport (3.2.12)
5
+ i18n (~> 0.6)
6
+ multi_json (~> 1.0)
7
+ climate_control (0.0.3)
8
+ activesupport (>= 3.0)
9
+ cocaine (0.5.1)
10
+ climate_control (>= 0.0.3, < 1.0)
11
+ diff-lcs (1.2.1)
12
+ i18n (0.6.4)
13
+ mime-types (1.21)
14
+ multi_json (1.6.1)
15
+ rake (10.0.3)
16
+ rspec (2.13.0)
17
+ rspec-core (~> 2.13.0)
18
+ rspec-expectations (~> 2.13.0)
19
+ rspec-mocks (~> 2.13.0)
20
+ rspec-core (2.13.0)
21
+ rspec-expectations (2.13.0)
22
+ diff-lcs (>= 1.1.3, < 2.0)
23
+ rspec-mocks (2.13.0)
24
+ taglib-ruby (0.5.2)
25
+ trollop (1.16.2)
26
+
27
+ PLATFORMS
28
+ ruby
29
+
30
+ DEPENDENCIES
31
+ cocaine
32
+ mime-types
33
+ rake
34
+ rspec
35
+ taglib-ruby
36
+ trollop
data/History.txt ADDED
@@ -0,0 +1,6 @@
1
+ === 1.0.0 / 2013-03-10
2
+
3
+ * 1 major enhancement
4
+
5
+ * Birthday!
6
+
data/Manifest.txt ADDED
@@ -0,0 +1,13 @@
1
+ Gemfile
2
+ Gemfile.lock
3
+ History.txt
4
+ Manifest.txt
5
+ README.md
6
+ Rakefile
7
+ bin/rupeepeethree
8
+ lib/rupeepeethree.rb
9
+ lib/rupeepeethree/version.rb
10
+ lib/rupeepeethree/tagger.rb
11
+ spec/rupeepeethree_spec.rb
12
+ spec/fixtures/cover_art.jpg
13
+ spec/fixtures/test.mp3
data/README.md ADDED
@@ -0,0 +1,62 @@
1
+ # rupeepeethree
2
+
3
+ http://github.com/datafruits/rupeepeethree
4
+
5
+ ## DESCRIPTION:
6
+
7
+ [![Build Status](https://secure.travis-ci.org/datafruits/rupeepeethree.png?branch=master)](http://travis-ci.org/datafruits/rupeepeethree)
8
+
9
+ tag your mp3 files. a command line wrapper around taglib-ruby.
10
+
11
+ ## FEATURES/PROBLEMS:
12
+
13
+ * a dumb name
14
+ * probably works
15
+ * has tests
16
+ * easier to change the album art than eyeD3
17
+
18
+ ## SYNOPSIS:
19
+
20
+ `rp3 -t "a cool song about pineapples" -p ~/pics/pineapple_tshirt.png pineapple_fortress.mp3`
21
+
22
+ ## REQUIREMENTS:
23
+
24
+ * taglib
25
+
26
+ ## INSTALL:
27
+
28
+ * gem install rupeepeethree
29
+
30
+ ## DEVELOPERS:
31
+
32
+ After checking out the source, run:
33
+
34
+ $ rake newb
35
+
36
+ This task will install any missing dependencies, run the tests/specs,
37
+ and generate the RDoc.
38
+
39
+ ## LICENSE:
40
+
41
+ (The MIT License)
42
+
43
+ Copyright (c) 2013
44
+
45
+ Permission is hereby granted, free of charge, to any person obtaining
46
+ a copy of this software and associated documentation files (the
47
+ 'Software'), to deal in the Software without restriction, including
48
+ without limitation the rights to use, copy, modify, merge, publish,
49
+ distribute, sublicense, and/or sell copies of the Software, and to
50
+ permit persons to whom the Software is furnished to do so, subject to
51
+ the following conditions:
52
+
53
+ The above copyright notice and this permission notice shall be
54
+ included in all copies or substantial portions of the Software.
55
+
56
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
57
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
58
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
59
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
60
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
61
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
62
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,16 @@
1
+ # -*- ruby -*-
2
+
3
+ require "rubygems"
4
+ require "hoe"
5
+
6
+ Hoe.plugin :gemspec
7
+
8
+ Hoe.spec "rupeepeethree" do
9
+ developer("Tony Miller", "mcfiredrill@gmail.com")
10
+
11
+ # self.rubyforge_name = "rupeepeethreex" # if different than "rupeepeethree"
12
+
13
+ license "MIT" # this should match the license in the README
14
+ end
15
+
16
+ # vim: syntax=ruby
data/bin/rp3 ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rupeepeethree'
4
+
5
+ Rupeepeethree.run ARGV
@@ -0,0 +1,41 @@
1
+ # encoding: utf-8
2
+ require 'rupeepeethree/tagger'
3
+ require 'rupeepeethree/version'
4
+ require 'trollop'
5
+
6
+ class Rupeepeethree
7
+ def self.run(args)
8
+ p = Trollop::Parser.new do
9
+ version "RP3 version #{VERSION} by Tony Miller"
10
+ banner <<-EOS
11
+ ░█▀▄░█▀█░▀▀█
12
+ ░█▀▄░█▀▀░░▀▄
13
+ ░▀░▀░▀░░░▀▀░
14
+ ┣¨キ┣¨キ
15
+ You thought your mp3s were cool. Turns out you were wrong. Your mp3s have no tags. You must tag them!
16
+ EOS
17
+ opt :title, "title", type: String, short: 't'
18
+ opt :artist, "artist", type: String, short: 'a'
19
+ opt :year, "track year", type: String, short: 'Y'
20
+ opt :album, "album title", type: String, short: 'A'
21
+ opt :picture, "artwork", type: String, short: 'p'
22
+ opt :clear, "clear all tags!"
23
+ end
24
+
25
+ opts = Trollop::with_standard_exception_handling p do
26
+ raise Trollop::HelpNeeded if ARGV.empty? # show help screen
27
+ p.parse ARGV
28
+ end
29
+
30
+ mp3 = ARGV[0]
31
+ if mp3.nil?
32
+ abort("no mp3 specified...")
33
+ end
34
+ if opts[:clear]
35
+ Tagger.clear(mp3)
36
+ else
37
+ Tagger.tag(mp3,opts)
38
+ puts Tagger.print_tags(mp3)
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,65 @@
1
+ require 'taglib'
2
+ require 'mime/types'
3
+
4
+ class Tagger
5
+ def self.tag(mp3,tags)
6
+ TagLib::MPEG::File.open(mp3) do |f|
7
+ t = f.id3v2_tag || TagLib::ID3v2::Tag.new
8
+ if tags[:title]
9
+ t.title = tags[:title]
10
+ end
11
+ if tags[:artist]
12
+ t.artist = tags[:artist]
13
+ end
14
+ if tags[:album]
15
+ t.album = tags[:album]
16
+ end
17
+ if tags[:year]
18
+ t.year = tags[:year].to_i
19
+ end
20
+ if tags[:picture]
21
+ image_file = File.expand_path(tags[:picture])
22
+ # delete old frame if it exists
23
+ cover = t.frame_list('APIC').first
24
+ if cover
25
+ t.remove_frame(cover)
26
+ end
27
+ cover = TagLib::ID3v2::AttachedPictureFrame.new
28
+ cover.mime_type = mime_type(image_file)
29
+ cover.type = TagLib::ID3v2::AttachedPictureFrame::FrontCover
30
+ cover.picture = File.open(image_file,"rb"){|f|f.read}
31
+ t.add_frame(cover)
32
+ end
33
+ f.save
34
+ end
35
+ end
36
+
37
+ # clear all tags
38
+ def self.clear(mp3)
39
+ TagLib::MPEG::File.open(mp3) do |f|
40
+ f.strip
41
+ end
42
+ end
43
+
44
+ def self.print_tags(mp3)
45
+ result = ""
46
+ TagLib::MPEG::File.open(mp3) do |f|
47
+ t = f.id3v2_tag
48
+
49
+ result << "title: #{t.title}\n"
50
+ result << "artist: #{t.artist}\n"
51
+ result << "album: #{t.album}\n"
52
+ result << "year: #{t.year}\n"
53
+
54
+ t.frame_list('APIC').each do |cover|
55
+ result << "image: [#{cover.mime_type}] [#{cover.picture.length} bytes]\n"
56
+ end
57
+ end
58
+ return result
59
+ end
60
+
61
+ private
62
+ def self.mime_type(file)
63
+ MIME::Types.type_for(file).to_s
64
+ end
65
+ end
@@ -0,0 +1,3 @@
1
+ class Rupeepeethree
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,42 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib/', __FILE__)
3
+ $:.unshift lib unless $:.include?(lib)
4
+
5
+ require 'rupeepeethree/version'
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = "rupeepeethree"
9
+ s.version = Rupeepeethree::VERSION
10
+
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.authors = ["Tony Miller"]
13
+ s.date = "2013-03-14"
14
+ s.description = "tag your mp3 files. a command line wrapper around taglib-ruby."
15
+ s.email = ["mcfiredrill@gmail.com"]
16
+ s.executables = ["rp3"]
17
+ s.extra_rdoc_files = ["History.txt", "Manifest.txt"]
18
+ s.files = `git ls-files`.split("\n")
19
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
20
+ s.homepage = "http://github.com/datafruits/rupeepeethree"
21
+ s.licenses = ["MIT"]
22
+ s.rdoc_options = ["--main", "README.md"]
23
+ s.require_paths = ["lib"]
24
+ s.rubyforge_project = "rupeepeethree"
25
+ s.rubygems_version = "1.8.25"
26
+ s.summary = "tag your mp3 files"
27
+
28
+ if s.respond_to? :specification_version then
29
+ s.specification_version = 3
30
+
31
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
32
+ s.add_development_dependency(%q<rdoc>, ["~> 3.10"])
33
+ s.add_development_dependency(%q<hoe>, ["~> 3.5"])
34
+ else
35
+ s.add_dependency(%q<rdoc>, ["~> 3.10"])
36
+ s.add_dependency(%q<hoe>, ["~> 3.5"])
37
+ end
38
+ else
39
+ s.add_dependency(%q<rdoc>, ["~> 3.10"])
40
+ s.add_dependency(%q<hoe>, ["~> 3.5"])
41
+ end
42
+ end
Binary file
Binary file
@@ -0,0 +1,34 @@
1
+ require './lib/rupeepeethree/tagger'
2
+
3
+ describe Tagger do
4
+ let(:mp3) { 'spec/fixtures/test.mp3' }
5
+ before :each do
6
+ Tagger.clear(mp3)
7
+ end
8
+ it "edits the existing cover art frame instead of creating a new one" do
9
+ tags = {picture: "spec/fixtures/cover_art.jpg"}
10
+ image_string = /image: \[\[image\/jpeg\]\] \[59562 bytes\]\n/
11
+ Tagger.tag(mp3, tags)
12
+ result = Tagger.print_tags(mp3)
13
+ result.should match(image_string)
14
+
15
+ Tagger.tag(mp3, tags)
16
+ result = Tagger.print_tags(mp3)
17
+ result.should_not match(/#{image_string}{2}/)
18
+ end
19
+ it "clears the tags" do
20
+ tags = {title: "foodfight",
21
+ artist: "ninjaturtle",
22
+ album: "purplerain",
23
+ year: "1987",
24
+ picture: "spec/fixtures/cover_art.jpg"}
25
+ Tagger.tag(mp3, tags)
26
+ Tagger.clear(mp3)
27
+ result = Tagger.print_tags(mp3)
28
+ result.should match(/title: \n/)
29
+ result.should match(/artist: \n/)
30
+ result.should match(/album: \n/)
31
+ result.should match(/year: 0\n/)
32
+ result.should_not match(/image:/)
33
+ end
34
+ end
@@ -0,0 +1,39 @@
1
+ require "rupeepeethree"
2
+ require "cocaine"
3
+
4
+ describe Rupeepeethree do
5
+ before :all do
6
+ @rp3 = "ruby -Ilib bin/rp3"
7
+ end
8
+ before :each do
9
+ # clear tags
10
+ line = Cocaine::CommandLine.new(@rp3, "-c :mp3")
11
+ line.run(mp3: "spec/fixtures/test.mp3")
12
+ end
13
+ it "sets a title tag" do
14
+ line = Cocaine::CommandLine.new(@rp3, "-t :title :mp3")
15
+ result = line.run(title: "foodfight", mp3: "spec/fixtures/test.mp3")
16
+ result.should match(/foodfight/)
17
+ end
18
+ it "sets an artist tag" do
19
+ line = Cocaine::CommandLine.new(@rp3, "-a :artist :mp3")
20
+ result = line.run(artist: "ninjaturtle", mp3: "spec/fixtures/test.mp3")
21
+ result.should match(/ninjaturtle/)
22
+ end
23
+ it "sets an album tag" do
24
+ line = Cocaine::CommandLine.new(@rp3, "-A :album :mp3")
25
+ result = line.run(album: "purplerain", mp3: "spec/fixtures/test.mp3")
26
+ result.should match(/purplerain/)
27
+ end
28
+ it "sets a year tag" do
29
+ line = Cocaine::CommandLine.new(@rp3, "-Y :year :mp3")
30
+ result = line.run(year: "1987", mp3: "spec/fixtures/test.mp3")
31
+ result.should match(/1987/)
32
+ end
33
+ it "sets album art tag" do
34
+ line = Cocaine::CommandLine.new(@rp3, "-p :pic :mp3")
35
+ result = line.run(pic: "spec/fixtures/cover_art.jpg", mp3: "spec/fixtures/test.mp3")
36
+ result.should match(/image\/jpeg/)
37
+ result.should match(/59562 bytes/)
38
+ end
39
+ end
metadata ADDED
@@ -0,0 +1,105 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rupeepeethree
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Tony Miller
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-03-14 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rdoc
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '3.10'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '3.10'
30
+ - !ruby/object:Gem::Dependency
31
+ name: hoe
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '3.5'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '3.5'
46
+ description: tag your mp3 files. a command line wrapper around taglib-ruby.
47
+ email:
48
+ - mcfiredrill@gmail.com
49
+ executables:
50
+ - rp3
51
+ extensions: []
52
+ extra_rdoc_files:
53
+ - History.txt
54
+ - Manifest.txt
55
+ files:
56
+ - .gitignore
57
+ - .travis.yml
58
+ - Gemfile
59
+ - Gemfile.lock
60
+ - History.txt
61
+ - Manifest.txt
62
+ - README.md
63
+ - Rakefile
64
+ - bin/rp3
65
+ - lib/rupeepeethree.rb
66
+ - lib/rupeepeethree/tagger.rb
67
+ - lib/rupeepeethree/version.rb
68
+ - rupeepeethree.gemspec
69
+ - spec/fixtures/cover_art.jpg
70
+ - spec/fixtures/test.mp3
71
+ - spec/rupeepeethree/tagger_spec.rb
72
+ - spec/rupeepeethree_spec.rb
73
+ homepage: http://github.com/datafruits/rupeepeethree
74
+ licenses:
75
+ - MIT
76
+ post_install_message:
77
+ rdoc_options:
78
+ - --main
79
+ - README.md
80
+ require_paths:
81
+ - lib
82
+ required_ruby_version: !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ requirements: []
95
+ rubyforge_project: rupeepeethree
96
+ rubygems_version: 1.8.25
97
+ signing_key:
98
+ specification_version: 3
99
+ summary: tag your mp3 files
100
+ test_files:
101
+ - spec/fixtures/cover_art.jpg
102
+ - spec/fixtures/test.mp3
103
+ - spec/rupeepeethree/tagger_spec.rb
104
+ - spec/rupeepeethree_spec.rb
105
+ has_rdoc: