musicbrainz_automatcher 0.1.1 → 0.2.0

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.
Files changed (2) hide show
  1. data/lib/musicbrainz_automatcher.rb +20 -17
  2. metadata +35 -29
@@ -1,6 +1,8 @@
1
1
  require 'active_support'
2
2
  require 'rbrainz'
3
+ require 'logger'
3
4
  require 'iconv'
5
+ require 'time'
4
6
  require 'text'
5
7
 
6
8
  # Monkey patch String class to add our escaping method
@@ -40,10 +42,9 @@ class MusicbrainzAutomatcher
40
42
  # Given an array of artists and a track title, return an rbrainz artist object.
41
43
  # If there is no match in MusicBrainz, then false is returned
42
44
  def match_artist(artists, title=nil)
43
-
44
45
  # Only interested in first item of title array
45
46
  title = title.first if title.is_a?(Array)
46
-
47
+
47
48
  # Remove excess whitespace from the title
48
49
  title.strip! unless title.nil?
49
50
 
@@ -52,7 +53,7 @@ class MusicbrainzAutomatcher
52
53
 
53
54
  # Return false if no artist names given
54
55
  return false if artists.empty?
55
-
56
+
56
57
  # Set title to nil, if it is an empty string
57
58
  title = nil if !title.nil? and title.size<1
58
59
 
@@ -62,14 +63,14 @@ class MusicbrainzAutomatcher
62
63
 
63
64
  # Remove items from the artist array until we get a match
64
65
  mbartist_id = false
65
-
66
+
66
67
  ## Ignore if artist name contains two consecutive stars (they contain a sware words)
67
68
  unless artist =~ /\*\*/
68
-
69
+
69
70
  ## First: lookup based on track name and artist
70
71
  unless title.nil?
71
72
  mbartist_id = lookup_by_track( artist, title )
72
-
73
+
73
74
  ## Second: try removing brackets from the track name
74
75
  if !mbartist_id
75
76
  matches = title.match(/^(.+)\s+\(.+\)$/)
@@ -86,7 +87,7 @@ class MusicbrainzAutomatcher
86
87
  end
87
88
  end
88
89
  end
89
-
90
+
90
91
  # Response is the MusicBrainz ID
91
92
  mbartist_id
92
93
  end
@@ -96,18 +97,20 @@ class MusicbrainzAutomatcher
96
97
  protected
97
98
 
98
99
  ## Perform a block if key isn't already cached.
99
- def do_cached(string, &block)
100
- key = Digest::SHA1.hexdigest(string)
101
-
100
+ def do_cached( key, &block )
102
101
  # have a look in the cache
103
102
  value = @cache.fetch( key )
104
- if value.nil?
105
- # Cache MISS : execute the block
106
- value = block.call( key )
107
- # Store value in the cache
108
- @cache.write( key, value, :expires_at => Time.parse("18:00"))
109
- end
110
- value
103
+
104
+ # Cache HIT?
105
+ return value unless value.nil?
106
+
107
+ # Cache MISS : execute the block
108
+ value = block.call( key )
109
+
110
+ # Store value in the cache
111
+ @cache.write( key, value, :expires_at => Time.parse("18:00"))
112
+
113
+ return value
111
114
  end
112
115
 
113
116
  # Clean up the artist name array
metadata CHANGED
@@ -1,7 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: musicbrainz_automatcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ prerelease:
5
+ version: 0.2.0
5
6
  platform: ruby
6
7
  authors:
7
8
  - Patrick Sinclair
@@ -9,59 +10,64 @@ autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
12
 
12
- date: 2010-08-18 00:00:00 +01:00
13
+ date: 2011-06-05 00:00:00 +01:00
13
14
  default_executable:
14
15
  dependencies:
15
16
  - !ruby/object:Gem::Dependency
16
- name: Text
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
17
+ name: text
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
20
21
  requirements:
21
22
  - - ~>
22
23
  - !ruby/object:Gem::Version
23
- version: "1.1"
24
- version:
24
+ version: "0.2"
25
+ type: :runtime
26
+ version_requirements: *id001
25
27
  - !ruby/object:Gem::Dependency
26
28
  name: rbrainz
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
30
32
  requirements:
31
33
  - - ~>
32
34
  - !ruby/object:Gem::Version
33
- version: "0.5"
34
- version:
35
+ version: 0.5.1
36
+ type: :runtime
37
+ version_requirements: *id002
35
38
  - !ruby/object:Gem::Dependency
36
39
  name: activesupport
37
- type: :runtime
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
40
43
  requirements:
41
44
  - - ~>
42
45
  - !ruby/object:Gem::Version
43
- version: "2.3"
44
- version:
46
+ version: "3.0"
47
+ type: :runtime
48
+ version_requirements: *id003
45
49
  - !ruby/object:Gem::Dependency
46
50
  name: rspec
47
- type: :development
48
- version_requirement:
49
- version_requirements: !ruby/object:Gem::Requirement
51
+ prerelease: false
52
+ requirement: &id004 !ruby/object:Gem::Requirement
53
+ none: false
50
54
  requirements:
51
55
  - - ">="
52
56
  - !ruby/object:Gem::Version
53
57
  version: "0"
54
- version:
58
+ type: :development
59
+ version_requirements: *id004
55
60
  - !ruby/object:Gem::Dependency
56
61
  name: mocha
57
- type: :development
58
- version_requirement:
59
- version_requirements: !ruby/object:Gem::Requirement
62
+ prerelease: false
63
+ requirement: &id005 !ruby/object:Gem::Requirement
64
+ none: false
60
65
  requirements:
61
66
  - - ">="
62
67
  - !ruby/object:Gem::Version
63
68
  version: "0"
64
- version:
69
+ type: :development
70
+ version_requirements: *id005
65
71
  description:
66
72
  email: metade@gmail.com
67
73
  executables: []
@@ -84,21 +90,21 @@ rdoc_options:
84
90
  require_paths:
85
91
  - lib
86
92
  required_ruby_version: !ruby/object:Gem::Requirement
93
+ none: false
87
94
  requirements:
88
95
  - - ">="
89
96
  - !ruby/object:Gem::Version
90
97
  version: "0"
91
- version:
92
98
  required_rubygems_version: !ruby/object:Gem::Requirement
99
+ none: false
93
100
  requirements:
94
101
  - - ">="
95
102
  - !ruby/object:Gem::Version
96
103
  version: "0"
97
- version:
98
104
  requirements: []
99
105
 
100
106
  rubyforge_project: musicbrainz_automatcher
101
- rubygems_version: 1.3.5
107
+ rubygems_version: 1.6.2
102
108
  signing_key:
103
109
  specification_version: 3
104
110
  summary: musicbrainz_automatcher matches artists/tracks names to MusicBrainz intelligently