musix_match 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ == MIT License
2
+
3
+ Copyright (c) 2010, Andrea Franz - (http://gravityblast.com)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,96 @@
1
+ = Musix Match
2
+
3
+ _ _
4
+ | | _ _ | |
5
+ | | | | | | | |
6
+ | | _ _ | | | | _ _ | |
7
+ | || || || | MusixMatch is wrapper for the musixmatch.com API's. | || || || |
8
+ | || || || | With this library you can search for lyrics and tracks | || || || |
9
+ | | || || | using the http://musixmatch.com service. | | || || |
10
+ | | | |
11
+ | | | |
12
+ \ / \ /
13
+ ---------- ----------
14
+
15
+ == Installation
16
+
17
+ gem install musix_match
18
+
19
+ == Usage
20
+
21
+ require 'musix_match'
22
+
23
+ MusixMatch::API::Base.api_key = 'YOUR_API_KEY'
24
+
25
+ === Lyrics search
26
+
27
+ response = MusixMatch.search_lyrics(:q_artist => 'Pantera')
28
+ if response.status_code == 200
29
+ response.each do |lyrics|
30
+ puts "#{lyrics.lyrics_id}: #{lyrics.track_name} (#{lyrics.artist_name})"
31
+ end
32
+ end
33
+
34
+ Available options for the search_lyrics methods are:
35
+
36
+ * q: string to be searched in every data field
37
+ * q_track: string to be searched among tracks titles
38
+ * q_artist: string to be searched among artists names
39
+ * format: desired output format
40
+ * page: requested page of results
41
+ * page_size: desired number of items per result page
42
+
43
+ === Getting lyrics
44
+
45
+ response = MusixMatch.get_lyrics(lyrics_id)
46
+ if response.status_code == 200 && lyrics = response.lyrics
47
+ puts lyrics.lyrics_body
48
+ end
49
+
50
+ === Track search
51
+
52
+ response = MusixMatch.search_track(:q_artist => 'Pantera')
53
+ if response.status_code == 200
54
+ response.each do |track|
55
+ puts "#{track.track_id}: #{track.track_name} (#{track.artist_name})"
56
+ end
57
+ end
58
+
59
+ === Getting track
60
+
61
+ response = MusixMatch.get_track(track_id)
62
+ if response.status_code == 200 && track = response.track
63
+ puts "#{track.track_name} (#{track.artist_name})"
64
+ puts "Lyrics id: #{track.lyrics_id}"
65
+ end
66
+
67
+ == Lyrics
68
+
69
+ The Lyrics object has the following attributes:
70
+
71
+ * lyrics_id
72
+ * lyrics_body
73
+ * track_name
74
+ * artist_name
75
+
76
+ == Track
77
+
78
+ The track object has the following attributes:
79
+
80
+ * track_id
81
+ * track_mbid
82
+ * lyrics_id
83
+ * track_name
84
+ * artist_id
85
+ * artist_mbid
86
+ * artist_name
87
+
88
+ == Links
89
+
90
+ * Repository: git://github.com/pilu/musix_match.git
91
+ * Musixmatch site: {musixmatch.com}[http://musixmatch.com]
92
+ * Musixmatch API: {developer.musixmatch.com}[http://developer.musixmatch.com]
93
+
94
+ == Author
95
+
96
+ Andrea Franz - {http://gravityblast.com}[http://gravityblast.com]
data/Rakefile ADDED
@@ -0,0 +1,28 @@
1
+ require 'rubygems'
2
+ require 'json'
3
+ require 'spec/rake/spectask'
4
+
5
+ Spec::Rake::SpecTask.new do |t|
6
+ t.spec_files = FileList['spec/**/*_spec.rb']
7
+ end
8
+
9
+ task :default => :spec
10
+
11
+ begin
12
+ require 'jeweler'
13
+ Jeweler::Tasks.new do |gemspec|
14
+ gemspec.name = "musix_match"
15
+ gemspec.summary = "API wrapper for musixmatch.com API's"
16
+ gemspec.description = "API wrapper for musixmatch.com API's"
17
+ gemspec.email = "andrea@gravityblast.com"
18
+ gemspec.homepage = "http://github.com/pilu/musix_match"
19
+ gemspec.authors = ["Andrea Franz"]
20
+ gemspec.files = FileList['LICENSE', 'README.rdoc', 'Rakefile', 'lib/**/*.rb', 'spec/**/*.rb']
21
+ gemspec.add_dependency('json')
22
+ gemspec.add_dependency('httparty', '>= 0.6.1')
23
+ gemspec.extra_rdoc_files = ['README.rdoc', 'LICENSE']
24
+ gemspec.rdoc_options = ['--main=README.rdoc', '--charset=UTF-8']
25
+ end
26
+ rescue LoadError
27
+ puts "Jeweler not available. Install it with: gem install jeweler"
28
+ end
@@ -0,0 +1,42 @@
1
+ module MusixMatch
2
+ module API
3
+ class APIKeyNotSpecifiedException < Exception; end
4
+
5
+ class Base
6
+ API_URL = 'http://api.musixmatch.com/ws/1.0'
7
+
8
+ def self.api_key=(value)
9
+ @@api_key = value
10
+ end
11
+
12
+ def self.api_key
13
+ class_variable_defined?("@@api_key") ? @@api_key : nil
14
+ end
15
+
16
+ def self.url_for(method, params={})
17
+ params.merge!({ :apikey => api_key })
18
+ url_params = params.collect{|k, v| "#{k}=#{v}"}.join('&')
19
+ URI.escape("#{API_URL}/#{method}?#{url_params}")
20
+ end
21
+
22
+ def self.get(method, params={})
23
+ raise APIKeyNotSpecifiedException.new('You must specify the API key. MusixMatch::API::Base.api_key = "YOUR_API_KEY"') if api_key.nil?
24
+ response = HTTParty.get(url_for(method, params))
25
+ case response.parsed_response
26
+ when Hash
27
+ response.parsed_response
28
+ when String
29
+ JSON.parse(response.parsed_response)
30
+ end
31
+ end
32
+
33
+ def api_key
34
+ self.class.api_key
35
+ end
36
+
37
+ def get(method, params={})
38
+ self.class.get(method, params)
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,23 @@
1
+ module MusixMatch
2
+ module API
3
+ class Finder < Base
4
+ def find_lyrics(lyrics_id)
5
+ response = get('lyrics.get', {:lyrics_id => lyrics_id})
6
+ LyricsFindResult.new(response)
7
+ end
8
+
9
+ def find_track(track_id)
10
+ response = get('track.get', {:track_id => track_id})
11
+ TrackFindResult.new(response)
12
+ end
13
+
14
+ def self.find_lyrics(lyrics_id)
15
+ Finder.new.find_lyrics(lyrics_id)
16
+ end
17
+
18
+ def self.find_track(track_id)
19
+ Finder.new.find_track(track_id)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ module MusixMatch
2
+ module API
3
+ class Search < Base
4
+ def search_lyrics(options={})
5
+ response = get('lyrics.search', options)
6
+ LyricsSearchResult.new(response)
7
+ end
8
+
9
+ def search_track(options={})
10
+ response = get('track.search', options)
11
+ TrackSearchResult.new(response)
12
+ end
13
+
14
+ def self.search_lyrics(options={})
15
+ Search.new.search_lyrics(options)
16
+ end
17
+
18
+ def self.search_track(options={})
19
+ Search.new.search_track(options)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,28 @@
1
+ module MusixMatch
2
+ class LyricsFindResult
3
+ attr_reader :status_code, :execute_time, :lyrics
4
+
5
+ def initialize(response)
6
+ parse_response(response)
7
+ end
8
+
9
+ protected
10
+
11
+ def parse_response(response)
12
+ parse_response_header(response)
13
+ parse_response_body(response)
14
+ end
15
+
16
+ def parse_response_header(response)
17
+ [:status_code, :execute_time].each do |key|
18
+ instance_variable_set "@#{key}", response['message']['header'][key.to_s]
19
+ end
20
+ end
21
+
22
+ def parse_response_body(response)
23
+ if status_code == 200
24
+ @lyrics = Models::Lyrics.new(response['message']['body']['lyrics_list']['lyrics'])
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,35 @@
1
+ module MusixMatch
2
+ class LyricsSearchResult
3
+ attr_reader :status_code, :execute_time, :available
4
+
5
+ def initialize(response)
6
+ @lyrics_list = []
7
+ parse_response(response)
8
+ end
9
+
10
+ def each
11
+ @lyrics_list.each do |lyrics|
12
+ yield lyrics
13
+ end
14
+ end
15
+
16
+ protected
17
+
18
+ def parse_response(response)
19
+ parse_response_header(response)
20
+ parse_response_body(response)
21
+ end
22
+
23
+ def parse_response_header(response)
24
+ [:status_code, :execute_time, :available].each do |key|
25
+ instance_variable_set "@#{key}", response['message']['header'][key.to_s]
26
+ end
27
+ end
28
+
29
+ def parse_response_body(response)
30
+ response['message']['body']['lyrics_list'].each do |obj|
31
+ @lyrics_list << Models::Lyrics.new(obj['lyrics'])
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,9 @@
1
+ module MusixMatch
2
+ module Models
3
+ class Lyrics
4
+ include Model
5
+
6
+ model_with_attributes :lyrics_id, :lyrics_body, :track_name, :artist_name
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,37 @@
1
+ module MusixMatch
2
+ module Models
3
+ module Model
4
+ def self.included(base)
5
+ base.send(:extend, ClassMethods)
6
+ ModelBuilder.build_constructor(self)
7
+ end
8
+
9
+ module ClassMethods
10
+ def model_with_attributes(*attributes)
11
+ attr_accessor(*attributes)
12
+ ModelBuilder.build_constructor(self, *attributes)
13
+ end
14
+
15
+ def search(options={})
16
+ API::Search.send("search_#{self.name.split('::').last.downcase}", options)
17
+ end
18
+
19
+ def get(item_id)
20
+ API::Finder.send("find_#{self.name.split('::').last.downcase}", item_id)
21
+ end
22
+ end
23
+ end
24
+
25
+ module ModelBuilder
26
+ def self.build_constructor(base, *attributes)
27
+ initialize_method = Proc.new do |*params|
28
+ model_params = params.first || {}
29
+ attributes.each do |attribute|
30
+ instance_variable_set("@#{attribute}", model_params.delete(attribute.to_s))
31
+ end
32
+ end
33
+ base.send(:define_method, :initialize, &initialize_method)
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,9 @@
1
+ module MusixMatch
2
+ module Models
3
+ class Track
4
+ include Model
5
+
6
+ model_with_attributes :track_id, :track_mbid, :lyrics_id, :track_name, :artist_id, :artist_mbid, :artist_name
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,28 @@
1
+ module MusixMatch
2
+ class TrackFindResult
3
+ attr_reader :status_code, :execute_time, :track
4
+
5
+ def initialize(response)
6
+ parse_response(response)
7
+ end
8
+
9
+ protected
10
+
11
+ def parse_response(response)
12
+ parse_response_header(response)
13
+ parse_response_body(response)
14
+ end
15
+
16
+ def parse_response_header(response)
17
+ [:status_code, :execute_time].each do |key|
18
+ instance_variable_set "@#{key}", response['message']['header'][key.to_s]
19
+ end
20
+ end
21
+
22
+ def parse_response_body(response)
23
+ if status_code == 200
24
+ @track = Models::Track.new(response['message']['body']['track_list']['track'])
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,35 @@
1
+ module MusixMatch
2
+ class TrackSearchResult
3
+ attr_reader :status_code, :execute_time, :available
4
+
5
+ def initialize(response)
6
+ @track_list = []
7
+ parse_response(response)
8
+ end
9
+
10
+ def each
11
+ @track_list.each do |lyrics|
12
+ yield lyrics
13
+ end
14
+ end
15
+
16
+ protected
17
+
18
+ def parse_response(response)
19
+ parse_response_header(response)
20
+ parse_response_body(response)
21
+ end
22
+
23
+ def parse_response_header(response)
24
+ [:status_code, :execute_time, :available].each do |key|
25
+ instance_variable_set "@#{key}", response['message']['header'][key.to_s]
26
+ end
27
+ end
28
+
29
+ def parse_response_body(response)
30
+ response['message']['body']['track_list'].each do |obj|
31
+ @track_list << Models::Track.new(obj['track'])
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,42 @@
1
+ require 'uri'
2
+
3
+ gem_libs = %w(json httparty)
4
+ begin
5
+ gem_libs.each{|lib| require lib}
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ gem_libs.each{|lib| require lib}
9
+ end
10
+
11
+ musix_match_path = File.dirname(__FILE__)
12
+
13
+ ['api/base',
14
+ 'models/model',
15
+ 'models/lyrics',
16
+ 'lyrics_search_result',
17
+ 'track_search_result',
18
+ 'api/search',
19
+ 'lyrics_find_result',
20
+ 'track_find_result',
21
+ 'api/finder',
22
+ 'models/track'].each do |lib|
23
+ require musix_match_path + '/musix_match/' + lib
24
+ end
25
+
26
+ module MusixMatch
27
+ def self.get_lyrics(*args)
28
+ Models::Lyrics.get(*args)
29
+ end
30
+
31
+ def self.search_lyrics(*args)
32
+ Models::Lyrics.search(*args)
33
+ end
34
+
35
+ def self.get_track(*args)
36
+ Models::Track.get(*args)
37
+ end
38
+
39
+ def self.search_track(*args)
40
+ Models::Track.search(*args)
41
+ end
42
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Finder' do
4
+
5
+ lyrics_find_response = {'message' => {'body' => {'lyrics_list' => {'lyrics' => {}}}, 'header' => { 'status_code' => 200, 'execute_time' => 1 }}}
6
+ track_find_response = {'message' => {'body' => {'track_list' => {'track' => {}} }, 'header' => { 'status_code' => 200, 'execute_time' => 1 }}}
7
+
8
+ it "should initialize a new Finder object and call find_lyrics" do
9
+ finder = mock(MusixMatch::API::Finder)
10
+ MusixMatch::API::Finder.should_receive(:new).and_return(finder)
11
+ lyrics_id = 1
12
+ finder.should_receive(:find_lyrics).with(lyrics_id)
13
+ MusixMatch::API::Finder.find_lyrics(lyrics_id)
14
+ end
15
+
16
+ it "should call get with lyrics.get and initialize a LyricsFindResult object" do
17
+ finder = MusixMatch::API::Finder.new
18
+ lyrics_id = 1
19
+ finder.should_receive(:get).with('lyrics.get', :lyrics_id => lyrics_id).and_return(lyrics_find_response)
20
+ MusixMatch::LyricsFindResult.should_receive(:new).with(lyrics_find_response)
21
+ finder.find_lyrics(lyrics_id)
22
+ end
23
+
24
+ it "should initialize a new Finder object and call find_track" do
25
+ finder = mock(MusixMatch::API::Finder)
26
+ MusixMatch::API::Finder.should_receive(:new).and_return(finder)
27
+ track_id = 1
28
+ finder.should_receive(:find_track).with(track_id)
29
+ MusixMatch::API::Finder.find_track(track_id)
30
+ end
31
+
32
+ it "should call get with track.get and initialize a TrackFinderResult" do
33
+ finder = MusixMatch::API::Finder.new
34
+ track_id = 1
35
+ finder.should_receive(:get).with('track.get', :track_id => track_id).and_return(track_find_response)
36
+ MusixMatch::TrackFindResult.should_receive(:new).with(track_find_response)
37
+ finder.find_track(track_id)
38
+ end
39
+ end
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Lyrics' do
4
+ it 'should call search_lyrics on Search class' do
5
+ params = { :q_artist => 'artist name' }
6
+ MusixMatch::API::Search.should_receive(:search_lyrics).with(params)
7
+ MusixMatch::Models::Lyrics.search(params)
8
+ end
9
+
10
+ it 'should call find_lyrics on Finder class' do
11
+ lyrics_id = 1
12
+ MusixMatch::API::Finder.should_receive(:find_lyrics).with(lyrics_id)
13
+ MusixMatch::Models::Lyrics.get(lyrics_id)
14
+ end
15
+
16
+ context 'when created' do
17
+ it 'should have the search class method' do
18
+ MusixMatch::Models::Lyrics.should respond_to(:search)
19
+ end
20
+
21
+ it 'should have the get class method' do
22
+ MusixMatch::Models::Lyrics.should respond_to(:get)
23
+ end
24
+ end
25
+
26
+ context 'when initialized' do
27
+ it 'should set lyrics_id' do
28
+ lyrics_id = 1
29
+ lyrics = MusixMatch::Models::Lyrics.new('lyrics_id' => lyrics_id)
30
+ lyrics.lyrics_id.should == lyrics_id
31
+ end
32
+
33
+ it 'should set lyrics_body' do
34
+ lyrics_body = "lyrics body"
35
+ lyrics = MusixMatch::Models::Lyrics.new('lyrics_body' => lyrics_body)
36
+ lyrics.lyrics_body.should == lyrics_body
37
+ end
38
+
39
+ it 'should set track_name' do
40
+ track_name = "track name"
41
+ lyrics = MusixMatch::Models::Lyrics.new('track_name' => track_name)
42
+ lyrics.track_name.should == track_name
43
+ end
44
+
45
+ it 'should set artist_name' do
46
+ artist_name = "artist name"
47
+ lyrics = MusixMatch::Models::Lyrics.new('artist_name' => artist_name)
48
+ lyrics.artist_name.should == artist_name
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'MusixMatch' do
4
+ it "should call get on Lyrics" do
5
+ lyrics_id = 1
6
+ MusixMatch::Models::Lyrics.should_receive(:get).with(lyrics_id)
7
+ MusixMatch.get_lyrics(lyrics_id)
8
+ end
9
+
10
+ it "should call get on Track" do
11
+ track_id = 1
12
+ MusixMatch::Models::Track.should_receive(:get).with(track_id)
13
+ MusixMatch.get_track(track_id)
14
+ end
15
+
16
+ it "should call search on Lyrics" do
17
+ params = { :q_artist => 'artist name' }
18
+ MusixMatch::Models::Lyrics.should_receive(:search).with(params)
19
+ MusixMatch.search_lyrics(params)
20
+ end
21
+
22
+ it "should call search on Track" do
23
+ params = { :q_artist => 'artist name' }
24
+ MusixMatch::Models::Track.should_receive(:search).with(params)
25
+ MusixMatch.search_track(params)
26
+ end
27
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Search' do
4
+
5
+ lyrics_search_response = {'message' => {'body' => {'lyrics_list' => []}, 'header' => { 'status_code' => 200, 'execute_time' => 1, 'available' => 10 }}}
6
+ track_search_response = {'message' => {'body' => {'track_list' => [] }, 'header' => { 'status_code' => 200, 'execute_time' => 1, 'available' => 10 }}}
7
+
8
+ it "should initialize a new Search object and call search_lyrics" do
9
+ search = mock(MusixMatch::API::Search)
10
+ MusixMatch::API::Search.should_receive(:new).and_return(search)
11
+ options = { :q_artist => 'artist name' }
12
+ search.should_receive(:search_lyrics).with(options)
13
+ MusixMatch::API::Search.search_lyrics(options)
14
+ end
15
+
16
+ it "should call get with lyrics.search and initialize a LyricsSearchResult object" do
17
+ search = MusixMatch::API::Search.new
18
+ options = { :q_artist => 'artist name' }
19
+ search.should_receive(:get).with('lyrics.search', options).and_return(lyrics_search_response)
20
+ MusixMatch::LyricsSearchResult.should_receive(:new).with(lyrics_search_response)
21
+ search.search_lyrics(options)
22
+ end
23
+
24
+ it "should initialize a new Search object and call search_track" do
25
+ search = mock(MusixMatch::API::Search)
26
+ MusixMatch::API::Search.should_receive(:new).and_return(search)
27
+ options = { :q_artist => 'artist name' }
28
+ search.should_receive(:search_track).with(options)
29
+ MusixMatch::API::Search.search_track(options)
30
+ end
31
+
32
+ it "should call get with track.search and initialize a TrackSearchResult" do
33
+ search = MusixMatch::API::Search.new
34
+ options = { :q_artist => 'artist name' }
35
+ search.should_receive(:get).with('track.search', options).and_return(track_search_response)
36
+ MusixMatch::TrackSearchResult.should_receive(:new).with(track_search_response)
37
+ search.search_track(options)
38
+ end
39
+ end
@@ -0,0 +1 @@
1
+ require File.dirname(__FILE__) + '/../lib/musix_match'
@@ -0,0 +1,69 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Track' do
4
+ it 'should call search_track on Search class' do
5
+ params = { :q_artist => 'artist name' }
6
+ MusixMatch::API::Search.should_receive(:search_track).with(params)
7
+ MusixMatch::Models::Track.search(params)
8
+ end
9
+
10
+ it 'should call find_track on Finder class' do
11
+ track_id = 1
12
+ MusixMatch::API::Finder.should_receive(:find_track).with(track_id)
13
+ MusixMatch::Models::Track.get(track_id)
14
+ end
15
+
16
+ context 'when created' do
17
+ it 'should have the search class method' do
18
+ MusixMatch::Models::Track.should respond_to(:search)
19
+ end
20
+
21
+ it 'should have the get class method' do
22
+ MusixMatch::Models::Track.should respond_to(:get)
23
+ end
24
+ end
25
+
26
+ context 'when initialized' do
27
+ it 'should set track_id' do
28
+ track_id = 1
29
+ track = MusixMatch::Models::Track.new('track_id' => track_id)
30
+ track.track_id.should == track_id
31
+ end
32
+
33
+ it 'should set track_mbid' do
34
+ track_mbid = 1
35
+ track = MusixMatch::Models::Track.new('track_mbid' => track_mbid)
36
+ track.track_mbid.should == track_mbid
37
+ end
38
+
39
+ it 'should set lyrics_id' do
40
+ lyrics_id = 1
41
+ track = MusixMatch::Models::Track.new('lyrics_id' => lyrics_id)
42
+ track.lyrics_id.should == lyrics_id
43
+ end
44
+
45
+ it 'should set track_name' do
46
+ track_name = "track name"
47
+ track = MusixMatch::Models::Track.new('track_name' => track_name)
48
+ track.track_name.should == track_name
49
+ end
50
+
51
+ it 'should set artist_id' do
52
+ artist_id = 1
53
+ track = MusixMatch::Models::Track.new('artist_id' => artist_id)
54
+ track.artist_id.should == artist_id
55
+ end
56
+
57
+ it 'should set artist_mbid' do
58
+ artist_mbid = 1
59
+ track = MusixMatch::Models::Track.new('artist_mbid' => artist_mbid)
60
+ track.artist_mbid.should == artist_mbid
61
+ end
62
+
63
+ it 'should set artist_name' do
64
+ artist_name = "artist name"
65
+ track = MusixMatch::Models::Track.new('artist_name' => artist_name)
66
+ track.artist_name.should == artist_name
67
+ end
68
+ end
69
+ end
metadata ADDED
@@ -0,0 +1,122 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: musix_match
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Andrea Franz
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-09-20 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: json
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: httparty
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 5
44
+ segments:
45
+ - 0
46
+ - 6
47
+ - 1
48
+ version: 0.6.1
49
+ type: :runtime
50
+ version_requirements: *id002
51
+ description: API wrapper for musixmatch.com API's
52
+ email: andrea@gravityblast.com
53
+ executables: []
54
+
55
+ extensions: []
56
+
57
+ extra_rdoc_files:
58
+ - LICENSE
59
+ - README.rdoc
60
+ files:
61
+ - LICENSE
62
+ - README.rdoc
63
+ - Rakefile
64
+ - lib/musix_match.rb
65
+ - lib/musix_match/api/base.rb
66
+ - lib/musix_match/api/finder.rb
67
+ - lib/musix_match/api/search.rb
68
+ - lib/musix_match/lyrics_find_result.rb
69
+ - lib/musix_match/lyrics_search_result.rb
70
+ - lib/musix_match/models/lyrics.rb
71
+ - lib/musix_match/models/model.rb
72
+ - lib/musix_match/models/track.rb
73
+ - lib/musix_match/track_find_result.rb
74
+ - lib/musix_match/track_search_result.rb
75
+ - spec/finder_spec.rb
76
+ - spec/lyrics_spec.rb
77
+ - spec/musix_match_spec.rb
78
+ - spec/search_spec.rb
79
+ - spec/spec_helper.rb
80
+ - spec/track_spec.rb
81
+ has_rdoc: true
82
+ homepage: http://github.com/pilu/musix_match
83
+ licenses: []
84
+
85
+ post_install_message:
86
+ rdoc_options:
87
+ - --main=README.rdoc
88
+ - --charset=UTF-8
89
+ require_paths:
90
+ - lib
91
+ required_ruby_version: !ruby/object:Gem::Requirement
92
+ none: false
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ hash: 3
97
+ segments:
98
+ - 0
99
+ version: "0"
100
+ required_rubygems_version: !ruby/object:Gem::Requirement
101
+ none: false
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ hash: 3
106
+ segments:
107
+ - 0
108
+ version: "0"
109
+ requirements: []
110
+
111
+ rubyforge_project:
112
+ rubygems_version: 1.3.7
113
+ signing_key:
114
+ specification_version: 3
115
+ summary: API wrapper for musixmatch.com API's
116
+ test_files:
117
+ - spec/finder_spec.rb
118
+ - spec/lyrics_spec.rb
119
+ - spec/musix_match_spec.rb
120
+ - spec/search_spec.rb
121
+ - spec/spec_helper.rb
122
+ - spec/track_spec.rb