messenger 0.2.0 → 0.3.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.
@@ -0,0 +1,36 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/testtask'
4
+
5
+ Rake::TestTask.new(:test) do |test|
6
+ test.libs << 'lib' << 'test'
7
+ test.pattern = 'test/**/*_test.rb'
8
+ test.verbose = true
9
+ end
10
+
11
+ task :default => :test
12
+
13
+ require 'rake/rdoctask'
14
+
15
+ Rake::RDocTask.new do |rdoc|
16
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
17
+
18
+ rdoc.rdoc_dir = 'rdoc'
19
+ rdoc.title = "messenger #{version}"
20
+ rdoc.rdoc_files.include('README*')
21
+ rdoc.rdoc_files.include('lib/**/*.rb')
22
+ end
23
+
24
+ begin
25
+ require 'rcov/rcovtask'
26
+ Rcov::RcovTask.new do |test|
27
+ test.libs << 'test'
28
+ test.pattern = 'test/**/*_test.rb'
29
+ test.verbose = true
30
+ test.rcov_opts << '--exclude "gems/*"'
31
+ end
32
+ rescue LoadError
33
+ task :rcov do
34
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install rcov"
35
+ end
36
+ end
@@ -95,7 +95,7 @@ end
95
95
  #
96
96
  puts "# Sending message to #{ARGV[0]}"
97
97
  begin
98
- result = Messenger.send(ARGV[0], ARGV[1], options)
98
+ result = Messenger.deliver(ARGV[0], ARGV[1], options)
99
99
  if result.success?
100
100
  puts "# Message sent successfully"
101
101
  else
@@ -1,76 +1,9 @@
1
- $:.unshift File.dirname(__FILE__)
2
-
3
- require 'rubygems'
4
1
  require 'messenger/errors'
5
- require 'system_timer'
6
-
7
-
8
- module Messenger
9
-
10
- MESSAGER_VERSION = [0,1] unless defined?(MESSAGER_VERSION)
11
- APP_ROOT = File.expand_path(File.dirname(__FILE__) + '/..') unless defined?(APP_ROOT)
12
-
13
- def self.version
14
- MESSAGER_VERSION.join(".")
15
- end
16
-
17
- def self.root
18
- APP_ROOT
19
- end
20
-
21
-
22
- def self.valid_url?(url)
23
- service_handler = handler(url)
24
- service_handler.valid_url?(url)
25
- rescue ProtocolError
26
- false
27
- end
28
-
29
- def self.send(url, message, options={})
30
- service_handler = handler(url)
31
- SystemTimer.timeout_after(options[:timeout] || 15) do
32
- service_handler.send(url, message, options)
33
- end
34
- end
35
-
36
- def self.obfuscate(url)
37
- service_handler = handler(url)
38
- service_handler.obfuscate(url)
39
- end
40
-
41
-
42
- def self.protocol(url)
43
- # TODO: More services
44
- # sms://1231231234
45
- # twitter://username
46
- # aim://username
47
- case url
48
- when /^http/: :http
49
- when /^campfire/: :campfire
50
- when /^jabber/: :jabber
51
- when /^notifo/: :notifo
52
- when /^mailto|@+/: :email
53
- end
54
- end
55
-
56
- def self.handler(url)
57
- case protocol(url)
58
- when :email: Email
59
- when :http: Web
60
- when :campfire: Campfire
61
- when :jabber: Jabber
62
- when :notifo: Notifo
63
- else
64
- raise ProtocolError, "Malformed service URL: #{url}. Either this syntax is wrong or this service type is not yet implemented."
65
- end
66
- end
67
-
68
-
69
- autoload :Result, "messenger/result"
70
- autoload :Email, "messenger/email"
71
- autoload :Web, "messenger/web"
72
- autoload :Campfire, "messenger/campfire"
73
- autoload :Jabber, "messenger/jabber"
74
- autoload :Notifo, "messenger/notifo"
75
-
76
- end
2
+ require 'messenger/messenger'
3
+ require 'messenger/result'
4
+ require 'messenger/email'
5
+ require 'messenger/web'
6
+ require 'messenger/campfire'
7
+ require 'messenger/jabber'
8
+ require 'messenger/notifo'
9
+ require 'messenger/version'
@@ -1,51 +1,47 @@
1
- require 'httparty'
1
+ require 'typhoeus'
2
2
  require 'json'
3
3
 
4
- module Messenger
4
+ class Messenger::Campfire
5
5
 
6
- class Campfire
7
-
8
- def self.valid_url?(url)
9
- !!matcher(url)
10
- rescue NoMethodError
11
- false
12
- end
6
+ def self.valid_url?(url)
7
+ !!matcher(url)
8
+ rescue NoMethodError
9
+ false
10
+ end
13
11
 
14
- # URL format:
15
- # campfire://api-key:room-id@subdomain.campfirenow.com
16
- def self.send(url, body, options={})
17
- raise URLError, "The URL provided is invalid" unless valid_url?(url)
18
- ssl, api_key, room, subdomain = matcher(url)
19
- response = HTTParty.post(
20
- "http#{ssl ? "s" : ""}://#{subdomain}.campfirenow.com/room/#{room}/speak.json",
21
- :basic_auth => { :username => api_key, :password => "x" },
22
- :headers => { "Content-Type" => "application/json" },
23
- :body => { "message" => { "body" => body } }.to_json
24
- )
25
- Result.new(success?(response), response)
26
- end
12
+ # URL format:
13
+ # campfire://api-key:room-id@subdomain.campfirenow.com
14
+ def self.deliver(url, body, options={})
15
+ raise Messenger::URLError, "The URL provided is invalid" unless valid_url?(url)
16
+ ssl, api_key, room, subdomain = matcher(url)
17
+ options[:headers] ||= {}
18
+ response = Typhoeus::Request.post(
19
+ "http#{ssl ? "s" : ""}://#{api_key}:x@#{subdomain}.campfirenow.com/room/#{room}/speak.json",
20
+ :headers => { "Content-Type" => "application/json"}.merge(options[:headers]),
21
+ :body => { "message" => { "body" => body } }.to_json
22
+ )
23
+ Messenger::Result.new(success?(response), response)
24
+ end
27
25
 
28
- def self.obfuscate(url)
29
- raise URLError, "The URL provided is invalid" unless valid_url?(url)
30
- ssl, api_key, room, subdomain = matcher(url)
31
- "campfire#{ssl ? "-ssl" : ""}://xxxx:#{room}@#{subdomain}.campfirenow.com"
32
- end
26
+ def self.obfuscate(url)
27
+ raise Messenger::URLError, "The URL provided is invalid" unless valid_url?(url)
28
+ ssl, api_key, room, subdomain = matcher(url)
29
+ "campfire#{ssl ? "-ssl" : ""}://xxxx:#{room}@#{subdomain}.campfirenow.com"
30
+ end
33
31
 
34
32
 
35
- private
33
+ private
36
34
 
37
- def self.matcher(url)
38
- url.match(/^campfire(-ssl)?:\/\/([^:]+):([^@]+)@([^\.]+).campfirenow.com/)[1,4]
39
- end
35
+ def self.matcher(url)
36
+ url.match(/^campfire(-ssl)?:\/\/([^:]+):([^@]+)@([^\.]+).campfirenow.com/)[1,4]
37
+ end
40
38
 
41
- def self.success?(response)
42
- case response.code
43
- when 200, 201: true
44
- else
45
- false
46
- end
39
+ def self.success?(response)
40
+ case response.code
41
+ when 200, 201: true
42
+ else
43
+ false
47
44
  end
48
-
49
45
  end
50
46
 
51
47
  end
@@ -1,38 +1,34 @@
1
1
  require 'mail'
2
2
 
3
- module Messenger
3
+ class Messenger::Email
4
4
 
5
- class Email
6
-
7
- def self.valid_url?(url)
8
- !!url.match(/^(mailto:)?[^@]+@.*$/)
9
- end
10
-
11
- # URL format:
12
- # mailto:email@example.com
13
- #
14
- # Options:
15
- # :email_from => Who the email is from
16
- # :email_subject => The subject of the email
17
- def self.send(url, message, options={})
18
- raise URLError, "The URL provided is invalid" unless valid_url?(url)
19
- mail = Mail.new do
20
- from options[:email_from]
21
- to url.sub(/mailto:/, '')
22
- subject options[:email_subject]
23
- body message
24
- end
25
- mail.deliver!
26
- Result.new(true, nil)
27
- rescue Errno::ECONNREFUSED, Errno::EAFNOSUPPORT => e
28
- Result.new(false, e)
29
- end
5
+ def self.valid_url?(url)
6
+ !!url.match(/^(mailto:)?[^@]+@.*$/)
7
+ end
30
8
 
31
- def self.obfuscate(url)
32
- raise URLError, "The URL provided is invalid" unless valid_url?(url)
33
- url
9
+ # URL format:
10
+ # mailto:email@example.com
11
+ #
12
+ # Options:
13
+ # :email_from => Who the email is from
14
+ # :email_subject => The subject of the email
15
+ def self.deliver(url, message, options={})
16
+ raise Messenger::URLError, "The URL provided is invalid" unless valid_url?(url)
17
+ mail = Mail.new do
18
+ from options[:email_from]
19
+ to url.sub(/mailto:/, '')
20
+ subject options[:email_subject]
21
+ body message
34
22
  end
23
+ mail.deliver!
24
+ Messenger::Result.new(true, nil)
25
+ rescue Errno::ECONNREFUSED, Errno::EAFNOSUPPORT => e
26
+ Messenger::Result.new(false, e)
27
+ end
35
28
 
29
+ def self.obfuscate(url)
30
+ raise Messenger::URLError, "The URL provided is invalid" unless valid_url?(url)
31
+ url
36
32
  end
37
33
 
38
34
  end
@@ -1,49 +1,45 @@
1
1
  require 'xmpp4r-simple'
2
2
 
3
- module Messenger
3
+ module Messenger::Jabber
4
4
 
5
- class Jabber
6
-
7
- def self.valid_url?(url)
8
- !!matcher(url)
9
- rescue NoMethodError
10
- false
11
- end
12
-
13
- # URL format:
14
- # jabber://email@example.com/server_hostname
15
- #
16
- # The server's hostname is optional, but needed for Google Apps jabber accounts.
17
- #
18
- # Options:
19
- # :jabber_id => The jabber id of the sender
20
- # :jabber_password => The password of the sender
21
- def self.send(url, body, options={})
22
- raise URLError, "The URL provided is invalid" unless valid_url?(url)
23
- recipient, host = url.sub("jabber://", "").split("/")[0,2]
24
- jabber = ::Jabber::Simple.new(options[:jabber_id], options[:jabber_password], host)
25
- jabber.deliver(recipient, body)
26
- pending_messages_count = 1
27
- until pending_messages_count == 0
28
- pending_messages_count = jabber.send(:queue, :pending_messages).size
29
- sleep 1
30
- end
31
- status = jabber.subscribed_to?(recipient)
32
- Result.new(status, status ? nil : "Not yet authorized")
33
- end
5
+ def self.valid_url?(url)
6
+ !!matcher(url)
7
+ rescue NoMethodError
8
+ false
9
+ end
34
10
 
35
- def self.obfuscate(url)
36
- raise URLError, "The URL provided is invalid" unless valid_url?(url)
37
- url
11
+ # URL format:
12
+ # jabber://email@example.com/server_hostname
13
+ #
14
+ # The server's hostname is optional, but needed for Google Apps jabber accounts.
15
+ #
16
+ # Options:
17
+ # :jabber_id => The jabber id of the sender
18
+ # :jabber_password => The password of the sender
19
+ def self.deliver(url, body, options={})
20
+ raise Messenger::URLError, "The URL provided is invalid" unless valid_url?(url)
21
+ recipient, host = url.sub("jabber://", "").split("/")[0,2]
22
+ jabber = ::Jabber::Simple.new(options[:jabber_id], options[:jabber_password], host)
23
+ jabber.deliver(recipient, body)
24
+ pending_messages_count = 1
25
+ until pending_messages_count == 0
26
+ pending_messages_count = jabber.send(:queue, :pending_messages).size
27
+ sleep 1
38
28
  end
29
+ status = jabber.subscribed_to?(recipient)
30
+ Messenger::Result.new(status, status ? nil : "Not yet authorized")
31
+ end
39
32
 
33
+ def self.obfuscate(url)
34
+ raise Messenger::URLError, "The URL provided is invalid" unless valid_url?(url)
35
+ url
36
+ end
40
37
 
41
- private
42
38
 
43
- def self.matcher(url)
44
- url.sub("jabber://", "").match("@")
45
- end
39
+ private
46
40
 
41
+ def self.matcher(url)
42
+ url.sub("jabber://", "").match("@")
47
43
  end
48
44
 
49
45
  end
@@ -0,0 +1,69 @@
1
+ require 'system_timer'
2
+ require 'base64'
3
+
4
+ module Messenger
5
+
6
+ MESSAGER_VERSION = [0,1] unless defined?(MESSAGER_VERSION)
7
+ APP_ROOT = File.expand_path(File.dirname(__FILE__) + '/..') unless defined?(APP_ROOT)
8
+
9
+ def self.version
10
+ MESSAGER_VERSION.join(".")
11
+ end
12
+
13
+ def self.root
14
+ APP_ROOT
15
+ end
16
+
17
+
18
+ def self.valid_url?(url)
19
+ service_handler = handler(url)
20
+ service_handler.valid_url?(url)
21
+ rescue ProtocolError
22
+ false
23
+ end
24
+
25
+ def self.deliver(url, message, options={})
26
+ service_handler = handler(url)
27
+ SystemTimer.timeout_after(options[:timeout] || 15) do
28
+ service_handler.deliver(url, message, options)
29
+ end
30
+ end
31
+
32
+ def self.obfuscate(url)
33
+ service_handler = handler(url)
34
+ service_handler.obfuscate(url)
35
+ end
36
+
37
+
38
+ def self.protocol(url)
39
+ # TODO: More services
40
+ # sms://1231231234
41
+ # twitter://username
42
+ # aim://username
43
+ case url
44
+ when /^http/: :http
45
+ when /^campfire/: :campfire
46
+ when /^jabber/: :jabber
47
+ when /^notifo/: :notifo
48
+ when /^mailto|@+/: :email
49
+ end
50
+ end
51
+
52
+ def self.handler(url)
53
+ case protocol(url)
54
+ when :email: Messenger::Email
55
+ when :http: Messenger::Web
56
+ when :campfire: Messenger::Campfire
57
+ when :jabber: Messenger::Jabber
58
+ when :notifo: Messenger::Notifo
59
+ else
60
+ raise Messenger::ProtocolError, "Malformed service URL: #{url}. Either this syntax is wrong or this service type is not yet implemented."
61
+ end
62
+ end
63
+
64
+ def self.basic_auth(user, password)
65
+ encoded_credentials = ["#{user}:#{password}"].pack("m*").gsub(/\n/, '')
66
+ {"HTTP_AUTHORIZATION" => "Basic #{encoded_credentials}"}
67
+ end
68
+
69
+ end
@@ -1,47 +1,42 @@
1
- require 'httparty'
1
+ require 'typhoeus'
2
2
  require 'json'
3
3
 
4
- module Messenger
4
+ class Messenger::Notifo
5
5
 
6
- class Notifo
7
-
8
- def self.valid_url?(url)
9
- !!url.match(/^notifo:\/\/.+$/)
10
- end
11
-
12
- # URL format:
13
- # notifo://username
14
- #
15
- # Options:
16
- # :notifo_api_username => The service's API username
17
- # :notifo_api_secret => The service's API secret
18
- # :notifo_title => The notificaiton title
19
- # :notifo_url => Open this URL
20
- def self.send(url, message, options={})
21
- raise URLError, "The URL provided is invalid" unless valid_url?(url)
22
- username = matcher(url)
23
- response = HTTParty.post("https://api.notifo.com/v1/send_notification",
24
- :body => { :to => username, :msg => message, :title => options[:notifo_title], :uri => options[:notifo_url] },
25
- :basic_auth => { :username => options[:notifo_api_username], :password => options[:notifo_api_secret] })
26
- Result.new(success?(response), response)
27
- end
6
+ def self.valid_url?(url)
7
+ !!url.match(/^notifo:\/\/.+$/)
8
+ end
28
9
 
29
- def self.obfuscate(url)
30
- raise URLError, "The URL provided is invalid" unless valid_url?(url)
31
- url
32
- end
10
+ # URL format:
11
+ # notifo://username
12
+ #
13
+ # Options:
14
+ # :notifo_api_username => The service's API username
15
+ # :notifo_api_secret => The service's API secret
16
+ # :notifo_title => The notificaiton title
17
+ # :notifo_url => Open this URL
18
+ def self.deliver(url, message, options={})
19
+ raise Messenger::URLError, "The URL provided is invalid" unless valid_url?(url)
20
+ username = matcher(url)
21
+ response = Typhoeus::Request.post("https://#{options[:notifo_api_username]}:#{options[:notifo_api_secret]}@api.notifo.com/v1/send_notification",
22
+ :body => { :to => username, :msg => message, :title => options[:notifo_title], :uri => options[:notifo_url] }.to_param)
23
+ Messenger::Result.new(success?(response), response)
24
+ end
33
25
 
26
+ def self.obfuscate(url)
27
+ raise Messenger::URLError, "The URL provided is invalid" unless valid_url?(url)
28
+ url
29
+ end
34
30
 
35
- private
36
31
 
37
- def self.matcher(url)
38
- url.match(/^notifo:\/\/(.+)/)[1]
39
- end
32
+ private
40
33
 
41
- def self.success?(response)
42
- response.code == 200
43
- end
34
+ def self.matcher(url)
35
+ url.match(/^notifo:\/\/(.+)/)[1]
36
+ end
44
37
 
38
+ def self.success?(response)
39
+ response.code == 200
45
40
  end
46
41
 
47
42
  end
@@ -1,30 +1,26 @@
1
- module Messenger
1
+ class Messenger::Result
2
2
 
3
- class Result
3
+ attr_reader :response
4
4
 
5
- attr_reader :response
6
-
7
- def initialize(success, response)
8
- @success = success
9
- @response = response
10
- end
5
+ def initialize(success, response)
6
+ @success = success
7
+ @response = response
8
+ end
11
9
 
12
- def success?
13
- !!@success
14
- end
10
+ def success?
11
+ !!@success
12
+ end
15
13
 
16
- def code
17
- response.code rescue nil
18
- end
14
+ def code
15
+ response.code rescue nil
16
+ end
19
17
 
20
- def body
21
- if response.respond_to?(:body)
22
- response.body
23
- else
24
- response.to_s
25
- end
18
+ def body
19
+ if response.respond_to?(:body)
20
+ response.body
21
+ else
22
+ response.to_s
26
23
  end
27
-
28
24
  end
29
25
 
30
26
  end
@@ -0,0 +1,3 @@
1
+ module Messenger
2
+ VERSION = '0.3.0'
3
+ end
@@ -1,47 +1,43 @@
1
- require 'httparty'
1
+ require 'typhoeus'
2
2
 
3
- module Messenger
3
+ class Messenger::Web
4
4
 
5
- class Web
6
-
7
- def self.valid_url?(url)
8
- !!URI.parse(url)
9
- rescue URI::InvalidURIError
10
- false
11
- end
5
+ def self.valid_url?(url)
6
+ !!URI.parse(url)
7
+ rescue URI::InvalidURIError
8
+ false
9
+ end
12
10
 
13
- # URL format:
14
- # http://example.com
15
- # https://user:pass@example.com
16
- #
17
- # The body of the message is posted as the body of the request, not the query.
18
- def self.send(url, body, options={})
19
- raise URLError, "The URL provided is invalid" unless self.valid_url?(url)
20
- response = HTTParty.post(url, options.merge(:body => body))
21
- Result.new(success?(response), response)
22
- end
11
+ # URL format:
12
+ # http://example.com
13
+ # https://user:pass@example.com
14
+ #
15
+ # The body of the message is posted as the body of the request, not the query.
16
+ def self.deliver(url, body, options={})
17
+ raise Messenger::URLError, "The URL provided is invalid" unless valid_url?(url)
18
+ response = Typhoeus::Request.post(url, options.merge(:body => body))
19
+ Messenger::Result.new(success?(response), response)
20
+ end
23
21
 
24
- def self.obfuscate(url)
25
- raise URLError, "The URL provided is invalid" unless self.valid_url?(url)
26
- path = URI.parse(url)
27
- if path.password
28
- url.sub(/#{path.password}/, 'xxxx')
29
- else
30
- url
31
- end
22
+ def self.obfuscate(url)
23
+ raise Messenger::URLError, "The URL provided is invalid" unless valid_url?(url)
24
+ path = URI.parse(url)
25
+ if path.password
26
+ url.sub(/#{path.password}/, 'xxxx')
27
+ else
28
+ url
32
29
  end
30
+ end
33
31
 
34
32
 
35
- private
33
+ private
36
34
 
37
- def self.success?(response)
38
- case response.code
39
- when 200, 201: true
40
- else
41
- false
42
- end
35
+ def self.success?(response)
36
+ case response.code
37
+ when 200, 201: true
38
+ else
39
+ false
43
40
  end
44
-
45
41
  end
46
42
 
47
43
  end
metadata CHANGED
@@ -1,150 +1,121 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: messenger
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
5
4
  prerelease: false
6
5
  segments:
7
6
  - 0
8
- - 2
7
+ - 3
9
8
  - 0
10
- version: 0.2.0
9
+ version: 0.3.0
11
10
  platform: ruby
12
11
  authors:
13
12
  - Brandon Arbini
13
+ - Nathan Sutton
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-06-17 00:00:00 -05:00
19
- default_executable: messenger
18
+ date: 2010-06-22 00:00:00 -05:00
19
+ default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: trollop
22
+ name: SystemTimer
23
23
  prerelease: false
24
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
25
  requirements:
27
26
  - - ">="
28
27
  - !ruby/object:Gem::Version
29
- hash: 17
30
28
  segments:
31
- - 1
32
- - 15
33
- version: "1.15"
29
+ - 0
30
+ version: "0"
34
31
  type: :runtime
35
32
  version_requirements: *id001
36
33
  - !ruby/object:Gem::Dependency
37
- name: mime-types
34
+ name: xmpp4r-simple
38
35
  prerelease: false
39
36
  requirement: &id002 !ruby/object:Gem::Requirement
40
- none: false
41
37
  requirements:
42
38
  - - ">="
43
39
  - !ruby/object:Gem::Version
44
- hash: 47
45
40
  segments:
46
- - 1
47
- - 16
48
- version: "1.16"
41
+ - 0
42
+ version: "0"
49
43
  type: :runtime
50
44
  version_requirements: *id002
51
45
  - !ruby/object:Gem::Dependency
52
- name: httparty
46
+ name: mail
53
47
  prerelease: false
54
48
  requirement: &id003 !ruby/object:Gem::Requirement
55
- none: false
56
49
  requirements:
57
50
  - - ">="
58
51
  - !ruby/object:Gem::Version
59
- hash: 15
60
52
  segments:
61
53
  - 0
62
- - 5
63
- - 2
64
- version: 0.5.2
54
+ version: "0"
65
55
  type: :runtime
66
56
  version_requirements: *id003
67
57
  - !ruby/object:Gem::Dependency
68
- name: SystemTimer
58
+ name: typhoeus
69
59
  prerelease: false
70
60
  requirement: &id004 !ruby/object:Gem::Requirement
71
- none: false
72
61
  requirements:
73
62
  - - ">="
74
63
  - !ruby/object:Gem::Version
75
- hash: 21
76
64
  segments:
77
- - 1
78
- - 1
79
- - 3
80
- version: 1.1.3
65
+ - 0
66
+ version: "0"
81
67
  type: :runtime
82
68
  version_requirements: *id004
83
69
  - !ruby/object:Gem::Dependency
84
- name: xmpp4r
70
+ name: trollop
85
71
  prerelease: false
86
72
  requirement: &id005 !ruby/object:Gem::Requirement
87
- none: false
88
73
  requirements:
89
- - - "="
74
+ - - ">="
90
75
  - !ruby/object:Gem::Version
91
- hash: 1
92
76
  segments:
93
77
  - 0
94
- - 5
95
- version: "0.5"
78
+ version: "0"
96
79
  type: :runtime
97
80
  version_requirements: *id005
98
81
  - !ruby/object:Gem::Dependency
99
- name: xmpp4r-simple
82
+ name: shoulda
100
83
  prerelease: false
101
84
  requirement: &id006 !ruby/object:Gem::Requirement
102
- none: false
103
85
  requirements:
104
- - - "="
86
+ - - ">="
105
87
  - !ruby/object:Gem::Version
106
- hash: 47
107
88
  segments:
108
89
  - 0
109
- - 8
110
- - 8
111
- version: 0.8.8
112
- type: :runtime
90
+ version: "0"
91
+ type: :development
113
92
  version_requirements: *id006
114
93
  - !ruby/object:Gem::Dependency
115
- name: json_pure
94
+ name: mocha
116
95
  prerelease: false
117
96
  requirement: &id007 !ruby/object:Gem::Requirement
118
- none: false
119
97
  requirements:
120
98
  - - ">="
121
99
  - !ruby/object:Gem::Version
122
- hash: 31
123
100
  segments:
124
- - 1
125
- - 2
126
101
  - 0
127
- version: 1.2.0
128
- type: :runtime
102
+ version: "0"
103
+ type: :development
129
104
  version_requirements: *id007
130
105
  - !ruby/object:Gem::Dependency
131
- name: mail
106
+ name: webmock
132
107
  prerelease: false
133
108
  requirement: &id008 !ruby/object:Gem::Requirement
134
- none: false
135
109
  requirements:
136
110
  - - ">="
137
111
  - !ruby/object:Gem::Version
138
- hash: 15
139
112
  segments:
140
- - 2
141
- - 1
142
- - 2
143
- version: 2.1.2
144
- type: :runtime
113
+ - 0
114
+ version: "0"
115
+ type: :development
145
116
  version_requirements: *id008
146
- description: "Messenger: easy message sending"
147
- email: brandon@zencoder.tv
117
+ description: "Messenger: easy message sending for various protocols."
118
+ email: brandon@zencoder.com
148
119
  executables:
149
120
  - messenger
150
121
  extensions: []
@@ -153,66 +124,48 @@ extra_rdoc_files:
153
124
  - LICENSE
154
125
  - README.markdown
155
126
  files:
156
- - README.markdown
157
- - VERSION.yml
158
- - lib/messenger.rb
159
127
  - lib/messenger/campfire.rb
160
128
  - lib/messenger/email.rb
161
129
  - lib/messenger/errors.rb
162
130
  - lib/messenger/jabber.rb
131
+ - lib/messenger/messenger.rb
163
132
  - lib/messenger/notifo.rb
164
133
  - lib/messenger/result.rb
134
+ - lib/messenger/version.rb
165
135
  - lib/messenger/web.rb
166
- - test/test_campfire.rb
167
- - test/test_email.rb
168
- - test/test_helper.rb
169
- - test/test_jabber.rb
170
- - test/test_messenger.rb
171
- - test/test_notifo.rb
172
- - test/test_result.rb
173
- - test/test_web.rb
136
+ - lib/messenger.rb
174
137
  - LICENSE
175
- - bin/messenger
138
+ - README.markdown
139
+ - Rakefile
176
140
  has_rdoc: true
177
141
  homepage: http://github.com/zencoder/messenger
178
142
  licenses: []
179
143
 
180
144
  post_install_message:
181
- rdoc_options:
182
- - --charset=UTF-8
145
+ rdoc_options: []
146
+
183
147
  require_paths:
184
148
  - lib
185
149
  required_ruby_version: !ruby/object:Gem::Requirement
186
- none: false
187
150
  requirements:
188
151
  - - ">="
189
152
  - !ruby/object:Gem::Version
190
- hash: 3
191
153
  segments:
192
154
  - 0
193
155
  version: "0"
194
156
  required_rubygems_version: !ruby/object:Gem::Requirement
195
- none: false
196
157
  requirements:
197
158
  - - ">="
198
159
  - !ruby/object:Gem::Version
199
- hash: 3
200
160
  segments:
201
161
  - 0
202
162
  version: "0"
203
163
  requirements: []
204
164
 
205
- rubyforge_project:
206
- rubygems_version: 1.3.7
165
+ rubyforge_project: messenger
166
+ rubygems_version: 1.3.6
207
167
  signing_key:
208
168
  specification_version: 3
209
169
  summary: "Messenger: easy message sending"
210
- test_files:
211
- - test/test_campfire.rb
212
- - test/test_email.rb
213
- - test/test_helper.rb
214
- - test/test_jabber.rb
215
- - test/test_messenger.rb
216
- - test/test_notifo.rb
217
- - test/test_result.rb
218
- - test/test_web.rb
170
+ test_files: []
171
+
@@ -1,5 +0,0 @@
1
- ---
2
- :minor: 2
3
- :build:
4
- :patch: 0
5
- :major: 0
@@ -1,73 +0,0 @@
1
- require "test_helper"
2
- require 'httparty'
3
-
4
- module Messenger
5
-
6
- class CampfireTest < Test::Unit::TestCase
7
-
8
- context "Campfire notification" do
9
- setup do
10
- @success_response = stub(:code => 200)
11
- @failure_response = stub(:code => 500)
12
- end
13
-
14
- should "post a successful message" do
15
- HTTParty.expects(:post).with("http://subdomain.campfirenow.com/room/room/speak.json", :basic_auth => { :username => 'api', :password => 'x' }, :body => '{"message":{"body":"content"}}', :headers => { "Content-Type" => "application/json" }).returns(@success_response)
16
- result = Campfire.send("campfire://api:room@subdomain.campfirenow.com", 'content')
17
- assert result.success?
18
- assert_equal @success_response, result.response
19
- end
20
-
21
- should "post to secure URL" do
22
- HTTParty.expects(:post).with("https://subdomain.campfirenow.com/room/room/speak.json", :basic_auth => { :username => 'api', :password => 'x' }, :body => '{"message":{"body":"content"}}', :headers => { "Content-Type" => "application/json" }).returns(@success_response)
23
- result = Campfire.send("campfire-ssl://api:room@subdomain.campfirenow.com", 'content')
24
- assert result.success?
25
- assert_equal @success_response, result.response
26
- end
27
-
28
- should "post a failed message" do
29
- HTTParty.expects(:post).with("http://subdomain.campfirenow.com/room/room/speak.json", :basic_auth => { :username => 'api', :password => 'x' }, :body => '{"message":{"body":"content"}}', :headers => { "Content-Type" => "application/json" }).returns(@failure_response)
30
- result = Campfire.send("campfire://api:room@subdomain.campfirenow.com", 'content')
31
- assert_equal false, result.success?
32
- assert_equal @failure_response, result.response
33
- end
34
-
35
- should "raise when sending to an invalid URL" do
36
- assert_raises URLError do
37
- Campfire.send("campfire://missing_room@subdomain.campfirenow.com", 'content')
38
- end
39
- end
40
-
41
- should "obfuscate the URL" do
42
- assert_equal "campfire://xxxx:1234@example.campfirenow.com", Campfire.obfuscate("campfire://asdf1234:1234@example.campfirenow.com")
43
- end
44
-
45
- should "obfuscate a secure URL" do
46
- assert_equal "campfire-ssl://xxxx:1234@example.campfirenow.com", Campfire.obfuscate("campfire-ssl://asdf1234:1234@example.campfirenow.com")
47
- end
48
-
49
- should "raise when obfuscating an invalid URL" do
50
- assert_raises URLError do
51
- Campfire.obfuscate("campfire://missing_room@subdomain.campfirenow.com")
52
- end
53
- end
54
- end
55
-
56
- context "Campfire URL validation" do
57
- should "return true for good URLs" do
58
- assert true, Campfire.valid_url?("campfire://api_key:room@subdomain.campfirenow.com")
59
- assert true, Campfire.valid_url?("campfire-ssl://api_key:room@subdomain.campfirenow.com")
60
- end
61
-
62
- should "return false for bad URLs" do
63
- assert_equal false, Campfire.valid_url?("campfire://!")
64
- assert_equal false, Campfire.valid_url?("campfire://api_key@subdomain.campfirenow.com")
65
- assert_equal false, Campfire.valid_url?("campfire://:room@subdomain.campfirenow.com")
66
- assert_equal false, Campfire.valid_url?("campfire://api_key:room@subdomain")
67
- assert_equal false, Campfire.valid_url?("campfire://api_key:room@campfirenow.com")
68
- end
69
- end
70
-
71
- end
72
-
73
- end
@@ -1,55 +0,0 @@
1
- require "test_helper"
2
- require 'mail'
3
-
4
- module Messenger
5
-
6
- class EmailTest < Test::Unit::TestCase
7
-
8
- context "Email notification" do
9
- setup do
10
- Mail.defaults do
11
- delivery_method :test
12
- end
13
- end
14
-
15
- should "send an email" do
16
- Email.send("mailto:to_test@example.com", "Test message", :email_from => "from_test@example.com", :email_subject => "Test")
17
- assert_equal 1, Mail::TestMailer.deliveries.length
18
- assert_equal ["to_test@example.com"], Mail::TestMailer.deliveries.first.to
19
- assert_equal ["from_test@example.com"], Mail::TestMailer.deliveries.first.from
20
- assert_equal "Test", Mail::TestMailer.deliveries.first.subject
21
- assert_equal "Test message", Mail::TestMailer.deliveries.first.body.to_s
22
- end
23
-
24
- should "raise if trying to send to an invalid URL" do
25
- assert_raises URLError do
26
- Email.send("mailto:test", :body => "whatever", :email_from => "from_test@example.com", :email_subject => "Test")
27
- end
28
- end
29
-
30
- should "obfuscate the URL" do
31
- assert_equal "mailto:test@example.com", Email.obfuscate("mailto:test@example.com")
32
- end
33
-
34
- should "raise if trying obfuscate an invalid URL" do
35
- assert_raises URLError do
36
- Email.obfuscate("mailto:test")
37
- end
38
- end
39
- end
40
-
41
- context "Email notificaiton URL validation" do
42
- should "return true for good URLs" do
43
- assert true, Email.valid_url?("mailto:test@example.com")
44
- end
45
-
46
- should "return false for bad URLs" do
47
- assert_equal false, Email.valid_url?("mailto:")
48
- assert_equal false, Email.valid_url?("mailto:test")
49
- assert_equal false, Email.valid_url?("mailto:example.com")
50
- end
51
- end
52
-
53
- end
54
-
55
- end
@@ -1,11 +0,0 @@
1
- require "messenger"
2
- require 'test/unit'
3
- require 'shoulda'
4
- require 'mocha'
5
- require 'webmock/test_unit'
6
-
7
- class Test::Unit::TestCase
8
- include WebMock
9
- end
10
-
11
- Dir["#{File.dirname(__FILE__)}/shoulda_macros/*.rb"].each {|file| require file }
@@ -1,66 +0,0 @@
1
- require "test_helper"
2
- require 'xmpp4r-simple'
3
-
4
- module Messenger
5
-
6
- class JabberTest < Test::Unit::TestCase
7
-
8
- context "Jabber notification" do
9
- setup do
10
- @successful_jabber = stub("jabber", :deliver => nil, :queue => stub("queue", :size => 0), :subscribed_to? => true)
11
- @failed_jabber = stub("jabber", :deliver => nil, :queue => stub("queue", :size => 0), :subscribed_to? => false)
12
- end
13
-
14
- should "send a successful jabber message" do
15
- ::Jabber::Simple.expects(:new).with("notifier@zencoder.com", "asdfasdf", nil).returns(@successful_jabber)
16
- result = Jabber.send("jabber://brandon@zencoder.com", "Test message", :jabber_id => "notifier@zencoder.com", :jabber_password => "asdfasdf")
17
- assert result.success?
18
- assert_nil result.response
19
- end
20
-
21
- should "determine and set the jabber host" do
22
- ::Jabber::Simple.expects(:new).with("notifier@zencoder.com", "asdfasdf", "host.com").returns(@successful_jabber)
23
- result = Jabber.send("jabber://brandon@zencoder.com/host.com", "Test message", :jabber_id => "notifier@zencoder.com", :jabber_password => "asdfasdf")
24
- assert result.success?
25
- assert_nil result.response
26
- end
27
-
28
- should "fail if the recipient is not subscribed" do
29
- ::Jabber::Simple.expects(:new).with("notifier@zencoder.com", "asdfasdf", nil).returns(@failed_jabber)
30
- result = Jabber.send("jabber://brandon@zencoder.com", "Test message", :jabber_id => "notifier@zencoder.com", :jabber_password => "asdfasdf")
31
- assert_equal false, result.success?
32
- assert_equal "Not yet authorized", result.response
33
- end
34
-
35
- should "raise when sending to an invalid URL" do
36
- assert_raises URLError do
37
- Jabber.send("jabber://", :jabber_id => "asdf", :jabber_password => "asdf")
38
- end
39
- end
40
-
41
- should "obfuscate the URL" do
42
- assert_equal "jabber://test@example.com", Jabber.obfuscate("jabber://test@example.com")
43
- end
44
-
45
- should "raise when obfuscating an invalid URL" do
46
- assert_raises URLError do
47
- Jabber.obfuscate("jabber://")
48
- end
49
- end
50
- end
51
-
52
- context "Jabber URL validation" do
53
- should "return true for good URLs" do
54
- assert true, Jabber.valid_url?("jabber://test@example.com")
55
- end
56
-
57
- should "return false for bad URLs" do
58
- assert_equal false, Jabber.valid_url?("jabber://!")
59
- assert_equal false, Jabber.valid_url?("jabber://test")
60
- assert_equal false, Jabber.valid_url?("jabber://example.com")
61
- end
62
- end
63
-
64
- end
65
-
66
- end
@@ -1,41 +0,0 @@
1
- require "test_helper"
2
-
3
- module Messenger
4
-
5
- class MessengerTest < Test::Unit::TestCase
6
-
7
- should "determine the proper protocol" do
8
- assert_equal :email, Messenger.protocol("mailto:test@example.com")
9
- assert_equal :email, Messenger.protocol("test@example.com")
10
- assert_equal :http, Messenger.protocol("http://example.com")
11
- assert_equal :http, Messenger.protocol("https://example.com")
12
- assert_equal :jabber, Messenger.protocol("jabber://test@example.com")
13
- assert_equal :campfire, Messenger.protocol("campfire://api_key:room_id@subdomain.campfirenow.com")
14
- assert_nil Messenger.protocol("bogus")
15
- end
16
-
17
- should "determine the proper notification handler given a protocol" do
18
- assert_equal Email, Messenger.handler("mailto:test@example.com")
19
- assert_equal Email, Messenger.handler("test@example.com")
20
- assert_equal Web, Messenger.handler("http://example.com")
21
- assert_equal Web, Messenger.handler("https://example.com")
22
- assert_equal Jabber, Messenger.handler("jabber://test@example.com")
23
- assert_equal Campfire, Messenger.handler("campfire://api_key:room_id@subdomain.campfirenow.com")
24
- assert_raises Messenger::ProtocolError do
25
- Messenger.handler("example.com")
26
- end
27
- end
28
-
29
- should "determine valid URLs" do
30
- assert Messenger.valid_url?("mailto:test@example.com")
31
- assert Messenger.valid_url?("test@example.com")
32
- assert Messenger.valid_url?("http://example.com")
33
- assert Messenger.valid_url?("https://example.com")
34
- assert Messenger.valid_url?("jabber://test@example.com")
35
- assert Messenger.valid_url?("campfire://api_key:room_id@subdomain.campfirenow.com")
36
- assert !Messenger.valid_url?("bogus")
37
- end
38
-
39
- end
40
-
41
- end
@@ -1,40 +0,0 @@
1
- require "test_helper"
2
- require 'httparty'
3
-
4
- module Messenger
5
-
6
- class NotifoTest < Test::Unit::TestCase
7
-
8
- context "Notifo notification" do
9
- should "post a successful message" do
10
- stub_request(:post, "https://api.notifo.com/v1/send_notification").to_return(:status => 200)
11
- result = Notifo.send("notifo://testuser", 'message')
12
- assert result.success?
13
- end
14
-
15
- should "post a failed message" do
16
- stub_request(:post, "https://api.notifo.com/v1/send_notification").to_return(:status => 400)
17
- result = Notifo.send("notifo://testuser", 'message')
18
- assert !result.success?
19
- end
20
-
21
- should "raise when sending to an invalid URL" do
22
- assert_raises URLError do
23
- Notifo.send("notifo://", 'message')
24
- end
25
- end
26
- end
27
-
28
- context "Notifo URL validation" do
29
- should "return true for good URLs" do
30
- assert true, Notifo.valid_url?("notifo://testuser")
31
- end
32
-
33
- should "return false for bad URLs" do
34
- assert_equal false, Notifo.valid_url?("notifo://")
35
- end
36
- end
37
-
38
- end
39
-
40
- end
@@ -1,25 +0,0 @@
1
- require "test_helper"
2
-
3
- module Messenger
4
-
5
- class ResultTest < Test::Unit::TestCase
6
-
7
- context "A result" do
8
-
9
- should "return success as a boolean" do
10
- result = Result.new(true, "Response")
11
- assert result.success?
12
- result = Result.new(false, "Response")
13
- assert_equal false, result.success?
14
- end
15
-
16
- should "give access to the raw response" do
17
- result = Result.new(true, "Response")
18
- assert_equal "Response", result.response
19
- end
20
-
21
- end
22
-
23
- end
24
-
25
- end
@@ -1,65 +0,0 @@
1
- require "test_helper"
2
- require 'httparty'
3
-
4
- module Messenger
5
-
6
- class WebTest < Test::Unit::TestCase
7
-
8
- context "Web notification" do
9
- setup do
10
- @success_response = stub("response", :code => 200)
11
- @failure_response = stub("response", :code => 500)
12
- end
13
-
14
- should "post a successful message" do
15
- HTTParty.expects(:post).with("http://example.com", :body => '{ "key": "value" }', :headers => { "Content-Type" => "application/json" }).returns(@success_response)
16
- result = Web.send("http://example.com", '{ "key": "value" }', :headers => { "Content-Type" => "application/json" })
17
- assert result.success?
18
- assert_equal @success_response, result.response
19
- end
20
-
21
- should "post a failed message" do
22
- HTTParty.expects(:post).with("http://example.com", :body => '{ "key": "value" }', :headers => { "Content-Type" => "application/json" }).returns(@failure_response)
23
- result = Web.send("http://example.com", '{ "key": "value" }', :headers => { "Content-Type" => "application/json" })
24
- assert_equal false, result.success?
25
- assert_equal @failure_response, result.response
26
- end
27
-
28
- should "raise if trying to send to an invalid URL" do
29
- assert_raises URLError do
30
- Web.send("http://!", :body => "whatever")
31
- end
32
- end
33
-
34
- should "obfuscate the URL" do
35
- assert_equal "http://example.com", Web.obfuscate("http://example.com")
36
- assert_equal "http://user:xxxx@example.com", Web.obfuscate("http://user:secure_pass@example.com")
37
- assert_equal "https://user:xxxx@example.com", Web.obfuscate("https://user:secure_pass@example.com")
38
- end
39
-
40
- should "raise if trying to obfuscate an invalid URL" do
41
- assert_raises URLError do
42
- Web.obfuscate("http://!")
43
- end
44
- end
45
- end
46
-
47
- context "Web notificaiton URL validation" do
48
- should "return true for good URLs" do
49
- assert true, Web.valid_url?("http://example.com")
50
- assert true, Web.valid_url?("https://example.com")
51
- assert true, Web.valid_url?("https://user@example.com")
52
- assert true, Web.valid_url?("http://user:pass@example.com")
53
- assert true, Web.valid_url?("https://user:#{URI.escape('!#$%^&*¢ç⎋')}@example.com")
54
- end
55
-
56
- should "return false for bad URLs" do
57
- assert_equal false, Web.valid_url?("http://!")
58
- assert_equal false, Web.valid_url?("http://")
59
- assert_equal false, Web.valid_url?("https://")
60
- end
61
- end
62
-
63
- end
64
-
65
- end