imified 0.0.3 → 0.0.4

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/imified.gemspec CHANGED
@@ -22,7 +22,7 @@ Gem::Specification.new do |s|
22
22
  s.require_paths = ["lib"]
23
23
 
24
24
  s.add_dependency 'activesupport'
25
+ s.add_dependency 'nokogiri'
25
26
 
26
27
  s.add_development_dependency 'rspec'
27
-
28
28
  end
@@ -0,0 +1,24 @@
1
+ class Imified::Userkey
2
+ def self.find(recipient)
3
+ if recipient.include?('@')
4
+ find_userkey_by_email(recipient)
5
+ else
6
+ recipient
7
+ end
8
+ end
9
+
10
+ private
11
+
12
+ def self.find_userkey_by_email(email, attempt = 1)
13
+ Imified.user_list ||= Imified.get_all_users
14
+ recipient = Imified.user_list.xpath("//user/screenname[text() = '#{email}']/../userkey/text()").map(&:to_s).join(',')
15
+ recipient = update_users_and_try_again(email) if recipient.nil? && attempt == 1
16
+ recipient
17
+ end
18
+
19
+ def self.update_users_and_try_again(email)
20
+ Imified.get_all_users
21
+ self.find_userkey_by_email(email, 2)
22
+ end
23
+
24
+ end
@@ -1,3 +1,3 @@
1
1
  module Imified
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/lib/imified.rb CHANGED
@@ -1,9 +1,11 @@
1
1
  require 'active_support/core_ext/module/attribute_accessors'
2
2
  require 'net/https'
3
+ require 'nokogiri'
3
4
  require 'uri'
4
5
 
5
6
  module Imified
6
7
  autoload :Request, 'imified/request'
8
+ autoload :Userkey, 'imified/userkey'
7
9
  autoload :Version, 'imified/version'
8
10
 
9
11
  # Imified API url
@@ -18,6 +20,9 @@ module Imified
18
20
  # User's Imified account password
19
21
  mattr_accessor :password
20
22
 
23
+ # User's your bot knows about
24
+ mattr_accessor :user_list
25
+
21
26
  # Default way to setup Imified.
22
27
  # To be used during initialization.
23
28
  #
@@ -102,6 +107,7 @@ module Imified
102
107
  def Imified.get_all_users
103
108
  request = Imified::Request.new
104
109
  response = request.submit
110
+ self.user_list = Nokogiri::XML(response)
105
111
  end
106
112
 
107
113
  def Imified.get_user(userkey)
@@ -112,7 +118,7 @@ module Imified
112
118
 
113
119
  def Imified.send_message(msg, options)
114
120
  request = Imified::Request.new('send')
115
- request.add_field 'userkey', options[:to]
121
+ request.add_field 'userkey', Imified::Userkey.find(options[:to])
116
122
  request.add_field 'msg', msg
117
123
  response = request.submit
118
124
  end
data/spec/imified_spec.rb CHANGED
@@ -60,6 +60,15 @@ describe Imified do
60
60
  Imified.send_message('A Message', :to => 'someones userkey')
61
61
  end
62
62
 
63
+ it "should lookup the userkey using the specified email" do
64
+ Imified.stub!(:user_list).
65
+ and_return(example_get_all_users_response)
66
+ mock_request.
67
+ should_receive(:add_field).
68
+ with('userkey', '123456789')
69
+ Imified.send_message('A Message', :to => 'me@jkarayusuf.com')
70
+ end
71
+
63
72
  it "should submit the request" do
64
73
  mock_request.should_receive(:submit)
65
74
  Imified.send_message('A Message', :to => 'someones userkey')
data/spec/spec_helper.rb CHANGED
@@ -12,4 +12,26 @@ RSpec.configure do |config|
12
12
  Imified.password = 'rspec_password'
13
13
  Imified.botkey = 'rspec_botkey'
14
14
  end
15
+
16
+ def example_get_all_users_response
17
+ response = %Q{
18
+ <rsp stat="ok">
19
+ <users count="1">
20
+ <user>
21
+ <status>Online</status>
22
+ <extendedstatus>Working on an IMified bot</extendedstatus>
23
+ <userkey>123456789</userkey>
24
+ <screenname>me@jkarayusuf.com</screenname>
25
+ <user>user_screenname</user>
26
+ <network>AIM</network>
27
+ <created>2007-09-26 13:30:25</created>
28
+ <lastonline>2007-09-28 15:20:15</lastonline>
29
+ <lastcall>2007-09-28 15:20:15</lastcall>
30
+ </user>
31
+ </users>
32
+ </rsp>
33
+ }
34
+
35
+ Nokogiri::XML(response)
36
+ end
15
37
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: imified
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-10-11 00:00:00.000000000Z
12
+ date: 2011-11-03 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &70117993265980 !ruby/object:Gem::Requirement
16
+ requirement: &70239258913500 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,21 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70117993265980
24
+ version_requirements: *70239258913500
25
+ - !ruby/object:Gem::Dependency
26
+ name: nokogiri
27
+ requirement: &70239258912960 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70239258912960
25
36
  - !ruby/object:Gem::Dependency
26
37
  name: rspec
27
- requirement: &70117993265540 !ruby/object:Gem::Requirement
38
+ requirement: &70239258912420 !ruby/object:Gem::Requirement
28
39
  none: false
29
40
  requirements:
30
41
  - - ! '>='
@@ -32,7 +43,7 @@ dependencies:
32
43
  version: '0'
33
44
  type: :development
34
45
  prerelease: false
35
- version_requirements: *70117993265540
46
+ version_requirements: *70239258912420
36
47
  description: ! " The IMified API exposes methods for sending messages,\n fetching
37
48
  user details, and updating status. To get started,\n you'll
38
49
  need to sign up for a free developer account at:\n http://imified.com/account/signup "
@@ -50,6 +61,7 @@ files:
50
61
  - imified.gemspec
51
62
  - lib/imified.rb
52
63
  - lib/imified/request.rb
64
+ - lib/imified/userkey.rb
53
65
  - lib/imified/version.rb
54
66
  - spec/imified_spec.rb
55
67
  - spec/request_spec.rb