cinch-lastfm 0.1.0 → 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.
- data/lib/cinch/plugins/lastfm.rb +25 -4
- data/spec/lastfm_spec.rb +23 -2
- metadata +38 -6
data/lib/cinch/plugins/lastfm.rb
CHANGED
@@ -1,16 +1,18 @@
|
|
1
1
|
require 'cinch'
|
2
2
|
require 'nokogiri'
|
3
3
|
require 'open-uri'
|
4
|
+
require 'redis'
|
5
|
+
require 'redis-namespace'
|
4
6
|
|
5
7
|
module Cinch
|
6
8
|
module Plugins
|
7
9
|
class Lastfm
|
8
10
|
include Cinch::Plugin
|
9
|
-
|
11
|
+
attr_accessor :backend, :redis
|
10
12
|
# Redis backend
|
11
13
|
|
12
14
|
class << self
|
13
|
-
attr_accessor :lfmapi
|
15
|
+
attr_accessor :lfmapi, :host, :port # Redis backend scrub
|
14
16
|
|
15
17
|
def configure(&block)
|
16
18
|
yield self
|
@@ -19,11 +21,15 @@ module Cinch
|
|
19
21
|
|
20
22
|
def initialize(*args)
|
21
23
|
super
|
22
|
-
|
23
|
-
|
24
|
+
@redis = Redis.new(:host => self.class.host, :port => self.class.port, :thread_safe => true)
|
25
|
+
@backend = Redis::Namespace.new("cinch-lastfm", :redis => redis)
|
26
|
+
# Redis backend
|
24
27
|
end
|
25
28
|
|
26
29
|
match %r{np ([a-zA-Z0-9]+)}, :method => :now_playing
|
30
|
+
match %r{link ([a-zA-Z0-9]+)}, :method => :link_account
|
31
|
+
match %r{np}, :method => :now_playing_user
|
32
|
+
|
27
33
|
|
28
34
|
# Gets Now Playing for an user
|
29
35
|
def now_playing(m, nick)
|
@@ -31,6 +37,21 @@ module Cinch
|
|
31
37
|
m.reply("#{nick} has recently played: #{artist} - #{track}")
|
32
38
|
end
|
33
39
|
|
40
|
+
# Gets Now Playing for a linked account
|
41
|
+
def now_playing_user(m)
|
42
|
+
nick = @backend.get(m.user)
|
43
|
+
if nick
|
44
|
+
artist, track = get_data(nick)
|
45
|
+
m.reply("#{nick} has recently played: #{artist} - #{track}")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Links a designated Last Fm account
|
50
|
+
def link_account(m, nick)
|
51
|
+
@backend.set(m.user, nick)
|
52
|
+
m.reply("#{m.user} is now linked with account #{nick}!")
|
53
|
+
end
|
54
|
+
|
34
55
|
def get_data(nick)
|
35
56
|
lfmXML = Nokogiri::XML(open("http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=#{nick}&api_key=#{self.class.lfmapi}"))
|
36
57
|
artist = lfmXML.xpath('//artist').first.content
|
data/spec/lastfm_spec.rb
CHANGED
@@ -4,6 +4,10 @@ describe Cinch::Plugins::Lastfm do
|
|
4
4
|
|
5
5
|
before :each do
|
6
6
|
Cinch::Plugins::Lastfm.any_instance.stub(:__register).and_return(true)
|
7
|
+
Cinch::Plugins::Lastfm.configure do |c|
|
8
|
+
c.host = "localhost"
|
9
|
+
c.port = "6379"
|
10
|
+
end
|
7
11
|
@bot = double()
|
8
12
|
end
|
9
13
|
|
@@ -12,11 +16,28 @@ describe Cinch::Plugins::Lastfm do
|
|
12
16
|
@lfmbot = Cinch::Plugins::Lastfm.new(@bot)
|
13
17
|
@message = double()
|
14
18
|
@lfmbot.stub(:get_data).and_return(["Artist","Track"])
|
15
|
-
@message.should_receive(:reply).with("
|
19
|
+
@message.should_receive(:reply).with("user has recently played: Artist - Track")
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should get now_playing" do
|
23
|
+
@lfmbot.now_playing(@message, "user")
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
context "#now_playing_user" do
|
29
|
+
before :each do
|
30
|
+
@lfmbot = Cinch::Plugins::Lastfm.new(@bot)
|
31
|
+
@message = double()
|
32
|
+
@message.stub(:user).and_return("testuser")
|
33
|
+
@lfmbot.stub(:get_data).and_return(["Artist","Track"])
|
34
|
+
@message.should_receive(:reply).with("testuser is now linked with account user!")
|
35
|
+
@message.should_receive(:reply).with("user has recently played: Artist - Track")
|
16
36
|
end
|
17
37
|
|
18
38
|
it "should get now_playing" do
|
19
|
-
@lfmbot.
|
39
|
+
@lfmbot.link_account(@message, "user")
|
40
|
+
@lfmbot.now_playing_user(@message)
|
20
41
|
end
|
21
42
|
|
22
43
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cinch-lastfm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,24 +9,24 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-06-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 1.5.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
29
|
+
version: 1.5.0
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: cinch
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -43,6 +43,38 @@ dependencies:
|
|
43
43
|
- - ! '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: 2.0.0
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: redis
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 3.0.0
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 3.0.0
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: redis-namespace
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 1.3.0
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 1.3.0
|
46
78
|
- !ruby/object:Gem::Dependency
|
47
79
|
name: rspec
|
48
80
|
requirement: !ruby/object:Gem::Requirement
|