prowlr 0.2.2
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/.document +5 -0
- data/.gitignore +6 -0
- data/LICENSE +20 -0
- data/README.md +53 -0
- data/Rakefile +56 -0
- data/VERSION +1 -0
- data/bin/prowlr +62 -0
- data/examples/add.rb +7 -0
- data/examples/add_instance.rb +8 -0
- data/examples/helpers/config_store.rb +59 -0
- data/examples/remaining_calls.rb +7 -0
- data/examples/reset_date.rb +7 -0
- data/examples/valid_apikey.rb +7 -0
- data/examples/verify.rb +7 -0
- data/lib/prowlr.rb +52 -0
- data/prowlr.gemspec +66 -0
- data/test/fixtures/bad_request.xml +4 -0
- data/test/fixtures/invalid_apikey.xml +4 -0
- data/test/fixtures/success.xml +4 -0
- data/test/prowlr_test.rb +127 -0
- data/test/test_helper.rb +34 -0
- metadata +84 -0
data/.document
ADDED
data/.gitignore
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 Rob Bevan
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
# prowlr
|
2
|
+
|
3
|
+
Yet another [Prowl](https://prowl.weks.net/) [API](https://prowl.weks.net/api.php) gem. Includes a command line interface. Depends on (the very awesome) [httparty](http://railstips.org/2008/7/29/it-s-an-httparty-and-everyone-is-invited).
|
4
|
+
|
5
|
+
Install: gem install robbevan-prowlr --source=http://gems.github.com/
|
6
|
+
|
7
|
+
### Add event:
|
8
|
+
Prowlr.add(:apikey => 'apikey', :event => 'Notification from prowlr gem', :description => "Sent: #{Time.now}")
|
9
|
+
=> {"code"=>"200", "remaining"=>"981", "resetdate"=>"1247481311"}
|
10
|
+
|
11
|
+
Required: apikey and event or description. Optional: application, providerkey, priority. See [API](https://prowl.weks.net/api.php) for details.
|
12
|
+
|
13
|
+
### Create instance and add event:
|
14
|
+
prowlr = Prowlr.new('apikey')
|
15
|
+
prowlr.add(:event => 'Notification from prowlr gem', :description => "Sent: #{Time.now}")
|
16
|
+
=> {"code"=>"200", "remaining"=>"980", "resetdate"=>"1247481311"}
|
17
|
+
|
18
|
+
### Verify:
|
19
|
+
Prowlr.verify('apikey')
|
20
|
+
=> {"code"=>"200", "remaining"=>"979", "resetdate"=>"1247481311"}
|
21
|
+
|
22
|
+
### Valid API key?
|
23
|
+
Prowlr.valid_apikey?('apikey')
|
24
|
+
=> true (or false)
|
25
|
+
|
26
|
+
### Remaining calls:
|
27
|
+
Prowlr.remaining_calls('apikey')
|
28
|
+
=> 997 (or nil if API key not valid)
|
29
|
+
|
30
|
+
### Reset date:
|
31
|
+
Prowlr.reset_date('apikey')
|
32
|
+
=> Mon Jul 13 11:35:11 +0100 2009 (or nil if API key not valid)
|
33
|
+
|
34
|
+
See [examples](http://github.com/robbevan/prowlr/tree/master/examples).
|
35
|
+
|
36
|
+
### From the command line:
|
37
|
+
prowlr -h
|
38
|
+
USAGE: /opt/local/bin/prowlr [options] [apikey] [event]
|
39
|
+
-a, --application [APPLICATION] Name of your application. Defaults to prowlr.gem if omitted.
|
40
|
+
-d, --description [DESCRIPTION] Description of the event
|
41
|
+
-k, --providerkey [PROVIDER KEY] Your provider API key. Only necessary if you have been whitelisted.
|
42
|
+
-p, --priority [PRIORITY] Priority: an integer value ranging [-2, 2]: Very Low, Moderate, Normal, High, Emergency. Defaults to 0 if omitted.
|
43
|
+
-h, --help Show help documentation
|
44
|
+
|
45
|
+
### Post a url to your iPhone:
|
46
|
+
prowlr apikey -d 'http://www.google.com' 'URL'
|
47
|
+
|
48
|
+
### Post a phone number:
|
49
|
+
prowlr apikey -d '0800 800 8000' 'Phone number'
|
50
|
+
|
51
|
+
## Copyright
|
52
|
+
|
53
|
+
Copyright (c) 2009 Rob Bevan. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "prowlr"
|
8
|
+
gem.summary = %Q{Yet another Prowl API gem and command line interface}
|
9
|
+
gem.email = "robbevan@xpt.com"
|
10
|
+
gem.homepage = "http://github.com/robbevan/prowlr"
|
11
|
+
gem.authors = ["Rob Bevan"]
|
12
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
13
|
+
end
|
14
|
+
|
15
|
+
rescue LoadError
|
16
|
+
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
17
|
+
end
|
18
|
+
|
19
|
+
require 'rake/testtask'
|
20
|
+
Rake::TestTask.new(:test) do |test|
|
21
|
+
test.libs << 'lib' << 'test'
|
22
|
+
test.pattern = 'test/**/*_test.rb'
|
23
|
+
test.verbose = true
|
24
|
+
end
|
25
|
+
|
26
|
+
begin
|
27
|
+
require 'rcov/rcovtask'
|
28
|
+
Rcov::RcovTask.new do |test|
|
29
|
+
test.libs << 'test'
|
30
|
+
test.pattern = 'test/**/*_test.rb'
|
31
|
+
test.verbose = true
|
32
|
+
end
|
33
|
+
rescue LoadError
|
34
|
+
task :rcov do
|
35
|
+
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
task :default => :test
|
41
|
+
|
42
|
+
require 'rake/rdoctask'
|
43
|
+
Rake::RDocTask.new do |rdoc|
|
44
|
+
if File.exist?('VERSION.yml')
|
45
|
+
config = YAML.load(File.read('VERSION.yml'))
|
46
|
+
version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
|
47
|
+
else
|
48
|
+
version = ""
|
49
|
+
end
|
50
|
+
|
51
|
+
rdoc.rdoc_dir = 'rdoc'
|
52
|
+
rdoc.title = "prowlr #{version}"
|
53
|
+
rdoc.rdoc_files.include('README*')
|
54
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
55
|
+
end
|
56
|
+
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.2.2
|
data/bin/prowlr
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "optparse"
|
4
|
+
require "pp"
|
5
|
+
|
6
|
+
$:.unshift(File.join(File.dirname(__FILE__), "/../lib"))
|
7
|
+
require 'prowlr'
|
8
|
+
|
9
|
+
options = {
|
10
|
+
:application => 'prowlr.gem'
|
11
|
+
}
|
12
|
+
|
13
|
+
def die(msg)
|
14
|
+
STDERR.puts(msg)
|
15
|
+
exit 1
|
16
|
+
end
|
17
|
+
|
18
|
+
OptionParser.new do |o|
|
19
|
+
o.banner = "\rUSAGE: #{$0} [options] [apikey] [event]"
|
20
|
+
|
21
|
+
o.on("-a",
|
22
|
+
"--application [APPLICATION]",
|
23
|
+
"Name of your application. Defaults to prowlr.gem if omitted.") do |a|
|
24
|
+
options[:application] = a
|
25
|
+
end
|
26
|
+
|
27
|
+
o.on("-d",
|
28
|
+
"--description [DESCRIPTION]",
|
29
|
+
"Description of the event") do |d|
|
30
|
+
options[:description] = d
|
31
|
+
end
|
32
|
+
|
33
|
+
o.on("-k",
|
34
|
+
"--providerkey [PROVIDER KEY]",
|
35
|
+
"Your provider API key. Only necessary if you have been whitelisted.") do |k|
|
36
|
+
options[:providerkey] = k
|
37
|
+
end
|
38
|
+
|
39
|
+
o.on("-p",
|
40
|
+
"--priority [PRIORITY]",
|
41
|
+
"Priority: an integer value ranging [-2, 2]: Very Low, Moderate, Normal, High, Emergency. Defaults to 0 if omitted.") do |p|
|
42
|
+
options[:priority] = p
|
43
|
+
end
|
44
|
+
|
45
|
+
o.on("-h", "--help", "Show help documentation") do |h|
|
46
|
+
puts o
|
47
|
+
exit
|
48
|
+
end
|
49
|
+
end.parse!
|
50
|
+
|
51
|
+
if ARGV.length < 2
|
52
|
+
STDERR.puts "You need to provide your apikey and an event"
|
53
|
+
STDERR.puts "USAGE: #{$0} [options] [apikey] [event]"
|
54
|
+
end
|
55
|
+
|
56
|
+
apikey = ARGV[0]
|
57
|
+
event = ARGV[1]
|
58
|
+
|
59
|
+
prowlr = Prowlr.new(apikey)
|
60
|
+
options.merge!(:apikey => apikey, :event => event)
|
61
|
+
response = prowlr.add(options)
|
62
|
+
puts "Error: #{response['error'].inspect}" if response['error']
|
data/examples/add.rb
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'lib', 'prowlr')
|
2
|
+
require File.join(File.dirname(__FILE__), 'helpers', 'config_store')
|
3
|
+
require 'pp'
|
4
|
+
|
5
|
+
config = ConfigStore.new("#{ENV['HOME']}/.prowlr")
|
6
|
+
|
7
|
+
pp Prowlr.add(:apikey => config['apikey'], :event => 'Notification from prowlr gem', :description => "Sent: #{Time.now}")
|
@@ -0,0 +1,8 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'lib', 'prowlr')
|
2
|
+
require File.join(File.dirname(__FILE__), 'helpers', 'config_store')
|
3
|
+
require 'pp'
|
4
|
+
|
5
|
+
config = ConfigStore.new("#{ENV['HOME']}/.prowlr")
|
6
|
+
|
7
|
+
prowlr = Prowlr.new(config['apikey'])
|
8
|
+
pp prowlr.add(:event => 'Notification from prowlr gem', :description => "Sent: #{Time.now}")
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# Copyright (c) 2009 John Nunemaker
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
# a copy of this software and associated documentation files (the
|
5
|
+
# "Software"), to deal in the Software without restriction, including
|
6
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
# the following conditions:
|
10
|
+
#
|
11
|
+
# The above copyright notice and this permission notice shall be
|
12
|
+
# included in all copies or substantial portions of the Software.
|
13
|
+
#
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
22
|
+
class ConfigStore
|
23
|
+
attr_reader :file
|
24
|
+
|
25
|
+
def initialize(file)
|
26
|
+
@file = file
|
27
|
+
end
|
28
|
+
|
29
|
+
def load
|
30
|
+
@config ||= YAML::load(open(file))
|
31
|
+
self
|
32
|
+
end
|
33
|
+
|
34
|
+
def [](key)
|
35
|
+
load
|
36
|
+
@config[key]
|
37
|
+
end
|
38
|
+
|
39
|
+
def []=(key, value)
|
40
|
+
@config[key] = value
|
41
|
+
end
|
42
|
+
|
43
|
+
def delete(*keys)
|
44
|
+
keys.each { |key| @config.delete(key) }
|
45
|
+
save
|
46
|
+
self
|
47
|
+
end
|
48
|
+
|
49
|
+
def update(c={})
|
50
|
+
@config.merge!(c)
|
51
|
+
save
|
52
|
+
self
|
53
|
+
end
|
54
|
+
|
55
|
+
def save
|
56
|
+
File.open(file, 'w') { |f| f.write(YAML.dump(@config)) }
|
57
|
+
self
|
58
|
+
end
|
59
|
+
end
|
data/examples/verify.rb
ADDED
data/lib/prowlr.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
gem 'httparty'
|
3
|
+
require 'httparty'
|
4
|
+
|
5
|
+
class Prowlr
|
6
|
+
include HTTParty
|
7
|
+
format :xml
|
8
|
+
|
9
|
+
base_uri 'https://prowl.weks.net/publicapi'
|
10
|
+
|
11
|
+
class ProwlrError < StandardError; end
|
12
|
+
|
13
|
+
def initialize(apikey)
|
14
|
+
@apikey = apikey
|
15
|
+
end
|
16
|
+
|
17
|
+
def add(options={})
|
18
|
+
options.merge!({:apikey => @apikey})
|
19
|
+
self.class.add(options)
|
20
|
+
end
|
21
|
+
|
22
|
+
class << self
|
23
|
+
def verify(apikey)
|
24
|
+
raise_errors(get('/verify', :query => {:apikey => apikey})['prowl'])
|
25
|
+
end
|
26
|
+
|
27
|
+
def valid_apikey?(apikey)
|
28
|
+
verify(apikey)['code'].to_i == 200 rescue false
|
29
|
+
end
|
30
|
+
|
31
|
+
def remaining_calls(apikey)
|
32
|
+
verify(apikey)['remaining'].to_i rescue nil
|
33
|
+
end
|
34
|
+
|
35
|
+
def reset_date(apikey)
|
36
|
+
Time.at(verify(apikey)['resetdate'].to_i) rescue nil
|
37
|
+
end
|
38
|
+
|
39
|
+
def add(options={})
|
40
|
+
options.merge!({:application => 'prowlr gem'}) unless options[:application]
|
41
|
+
raise_errors(post('/add', :query => options)['prowl'])
|
42
|
+
end
|
43
|
+
|
44
|
+
def raise_errors(response)
|
45
|
+
unless error = response['error']
|
46
|
+
response['success']
|
47
|
+
else
|
48
|
+
raise ProwlrError, error
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/prowlr.gemspec
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{prowlr}
|
5
|
+
s.version = "0.2.2"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Rob Bevan"]
|
9
|
+
s.date = %q{2009-07-13}
|
10
|
+
s.default_executable = %q{prowlr}
|
11
|
+
s.email = %q{robbevan@xpt.com}
|
12
|
+
s.executables = ["prowlr"]
|
13
|
+
s.extra_rdoc_files = [
|
14
|
+
"LICENSE",
|
15
|
+
"README.md"
|
16
|
+
]
|
17
|
+
s.files = [
|
18
|
+
".document",
|
19
|
+
".gitignore",
|
20
|
+
"LICENSE",
|
21
|
+
"README.md",
|
22
|
+
"Rakefile",
|
23
|
+
"VERSION",
|
24
|
+
"bin/prowlr",
|
25
|
+
"examples/add.rb",
|
26
|
+
"examples/add_instance.rb",
|
27
|
+
"examples/helpers/config_store.rb",
|
28
|
+
"examples/remaining_calls.rb",
|
29
|
+
"examples/reset_date.rb",
|
30
|
+
"examples/valid_apikey.rb",
|
31
|
+
"examples/verify.rb",
|
32
|
+
"lib/prowlr.rb",
|
33
|
+
"prowlr.gemspec",
|
34
|
+
"test/fixtures/bad_request.xml",
|
35
|
+
"test/fixtures/invalid_apikey.xml",
|
36
|
+
"test/fixtures/success.xml",
|
37
|
+
"test/prowlr_test.rb",
|
38
|
+
"test/test_helper.rb"
|
39
|
+
]
|
40
|
+
s.homepage = %q{http://github.com/robbevan/prowlr}
|
41
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
42
|
+
s.require_paths = ["lib"]
|
43
|
+
s.rubygems_version = %q{1.3.3}
|
44
|
+
s.summary = %q{Yet another Prowl API gem and command line interface}
|
45
|
+
s.test_files = [
|
46
|
+
"test/prowlr_test.rb",
|
47
|
+
"test/test_helper.rb",
|
48
|
+
"examples/add.rb",
|
49
|
+
"examples/add_instance.rb",
|
50
|
+
"examples/helpers/config_store.rb",
|
51
|
+
"examples/remaining_calls.rb",
|
52
|
+
"examples/reset_date.rb",
|
53
|
+
"examples/valid_apikey.rb",
|
54
|
+
"examples/verify.rb"
|
55
|
+
]
|
56
|
+
|
57
|
+
if s.respond_to? :specification_version then
|
58
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
59
|
+
s.specification_version = 3
|
60
|
+
|
61
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
62
|
+
else
|
63
|
+
end
|
64
|
+
else
|
65
|
+
end
|
66
|
+
end
|
data/test/prowlr_test.rb
ADDED
@@ -0,0 +1,127 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ProwlrTest < Test::Unit::TestCase
|
4
|
+
context "Verifying an API key" do
|
5
|
+
should "raise an exception if an invalid API key is passed" do
|
6
|
+
apikey = 'invalid-apikey'
|
7
|
+
stub_api_call(:get, 'verify', {:apikey => apikey}, 'invalid_apikey.xml')
|
8
|
+
assert_raises Prowlr::ProwlrError do
|
9
|
+
Prowlr.verify(apikey)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
should "return 200 if a valid API key is passed" do
|
14
|
+
apikey = 'valid-apikey'
|
15
|
+
stub_api_call(:get, 'verify', {:apikey => apikey}, 'success.xml')
|
16
|
+
assert_equal 200, Prowlr.verify(apikey)['code'].to_i
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context "Validating an API key" do
|
21
|
+
should "return 'false' if an invalid API key is passed" do
|
22
|
+
apikey = 'invalid-apikey'
|
23
|
+
stub_api_call(:get, 'verify', {:apikey => apikey}, 'invalid_apikey.xml')
|
24
|
+
assert !Prowlr.valid_apikey?(apikey)
|
25
|
+
end
|
26
|
+
|
27
|
+
should "return 'true' if a valid API key is passed" do
|
28
|
+
apikey = 'valid-apikey'
|
29
|
+
stub_api_call(:get, 'verify', {:apikey => apikey}, 'success.xml')
|
30
|
+
assert Prowlr.valid_apikey?(apikey)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context "Fetching the number of remaining API calls" do
|
35
|
+
should "return nil if an invalid API key is passed" do
|
36
|
+
apikey = 'invalid-apikey'
|
37
|
+
stub_api_call(:get, 'verify', {:apikey => apikey}, 'invalid_apikey.xml')
|
38
|
+
assert_nil Prowlr.remaining_calls(apikey)
|
39
|
+
end
|
40
|
+
|
41
|
+
should "return 999 if a valid API key is passed" do
|
42
|
+
apikey = 'valid-apikey'
|
43
|
+
stub_api_call(:get, 'verify', {:apikey => apikey}, 'success.xml')
|
44
|
+
assert_equal 999, Prowlr.remaining_calls(apikey)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "Fetching the date when the number of remaining API calls is reset" do
|
49
|
+
should "return nil if an invalid API key is passed" do
|
50
|
+
apikey = 'invalid-apikey'
|
51
|
+
stub_api_call(:get, 'verify', {:apikey => apikey}, 'invalid_apikey.xml')
|
52
|
+
assert_nil Prowlr.reset_date(apikey)
|
53
|
+
end
|
54
|
+
|
55
|
+
should "return the date if a valid API key is passed" do
|
56
|
+
apikey = 'valid-apikey'
|
57
|
+
stub_api_call(:get, 'verify', {:apikey => apikey}, 'success.xml')
|
58
|
+
assert_equal Time.at(1247418349), Prowlr.reset_date(apikey)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
context "Adding an event" do
|
63
|
+
setup do
|
64
|
+
@params = {:apikey => 'valid-apikey',
|
65
|
+
:application => 'an application',
|
66
|
+
:event => 'an event',
|
67
|
+
:description => 'a description'}
|
68
|
+
end
|
69
|
+
|
70
|
+
should "raise an exception if an invalid API key is passed" do
|
71
|
+
@params.merge!({:apikey => 'invalid-apikey'})
|
72
|
+
stub_api_call(:post, 'add', @params, 'invalid_apikey.xml')
|
73
|
+
assert_raises Prowlr::ProwlrError do
|
74
|
+
Prowlr.add(@params)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
should "raise an exception if neither an event or a description is passed" do
|
79
|
+
@params.delete(:event)
|
80
|
+
@params.delete(:description)
|
81
|
+
stub_api_call(:post, 'add', @params, 'bad_request.xml')
|
82
|
+
assert_raises Prowlr::ProwlrError do
|
83
|
+
Prowlr.add(@params)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
should "return 200 if a valid API key and required params are passed" do
|
88
|
+
stub_api_call(:post, 'add', @params, 'success.xml')
|
89
|
+
assert_equal 200, Prowlr.add(@params)['code'].to_i
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
context "Creating an instance and adding an event" do
|
94
|
+
setup do
|
95
|
+
@params = {:application => 'an application',
|
96
|
+
:event => 'an event',
|
97
|
+
:description => 'a description'}
|
98
|
+
end
|
99
|
+
|
100
|
+
should "raise an exception if the instance was initialized with an invalid API key" do
|
101
|
+
apikey = 'invalid_apikey'
|
102
|
+
prowlr = Prowlr.new(apikey)
|
103
|
+
stub_api_call(:post, 'add', @params.merge(:apikey => apikey), 'invalid_apikey.xml')
|
104
|
+
assert_raises Prowlr::ProwlrError do
|
105
|
+
prowlr.add(@params)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
should "raise an exception if neither an event or a description is passed" do
|
110
|
+
apikey = 'invalid_apikey'
|
111
|
+
prowlr = Prowlr.new(apikey)
|
112
|
+
@params.delete(:event)
|
113
|
+
@params.delete(:description)
|
114
|
+
stub_api_call(:post, 'add', @params.merge(:apikey => apikey), 'bad_request.xml')
|
115
|
+
assert_raises Prowlr::ProwlrError do
|
116
|
+
prowlr.add(@params)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
should "return 200 if the instance was initialized with a valid API key and required params are passed" do
|
121
|
+
apikey = 'valid_apikey'
|
122
|
+
prowlr = Prowlr.new(apikey)
|
123
|
+
stub_api_call(:post, 'add', @params.merge(:apikey => apikey), 'success.xml')
|
124
|
+
assert_equal 200, prowlr.add(@params)['code'].to_i
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'shoulda'
|
4
|
+
require 'mocha'
|
5
|
+
require 'fakeweb'
|
6
|
+
require 'uri'
|
7
|
+
|
8
|
+
FakeWeb.allow_net_connect = false
|
9
|
+
|
10
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
11
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
12
|
+
require 'prowlr'
|
13
|
+
|
14
|
+
class Test::Unit::TestCase
|
15
|
+
end
|
16
|
+
|
17
|
+
def fixture_file(filename)
|
18
|
+
return '' if filename == ''
|
19
|
+
file_path = File.expand_path(File.dirname(__FILE__) + '/fixtures/' + filename)
|
20
|
+
File.read(file_path)
|
21
|
+
end
|
22
|
+
|
23
|
+
def prowlr_uri(uri)
|
24
|
+
uri =~ /^https/ ? uri : "https://prowl.weks.net/publicapi/#{uri}"
|
25
|
+
end
|
26
|
+
|
27
|
+
def encode_params(params)
|
28
|
+
params.map {|k,v| "#{URI.escape(k.to_s)}=#{URI.escape(v.to_s)}"}.join('&')
|
29
|
+
end
|
30
|
+
|
31
|
+
def stub_api_call(method, uri, params, filename)
|
32
|
+
uri = "#{prowlr_uri(uri)}?#{encode_params(params)}"
|
33
|
+
FakeWeb.register_uri(method, uri, :body => fixture_file(filename))
|
34
|
+
end
|
metadata
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: prowlr
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Rob Bevan
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-07-13 00:00:00 +01:00
|
13
|
+
default_executable: prowlr
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description:
|
17
|
+
email: robbevan@xpt.com
|
18
|
+
executables:
|
19
|
+
- prowlr
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- LICENSE
|
24
|
+
- README.md
|
25
|
+
files:
|
26
|
+
- .document
|
27
|
+
- .gitignore
|
28
|
+
- LICENSE
|
29
|
+
- README.md
|
30
|
+
- Rakefile
|
31
|
+
- VERSION
|
32
|
+
- bin/prowlr
|
33
|
+
- examples/add.rb
|
34
|
+
- examples/add_instance.rb
|
35
|
+
- examples/helpers/config_store.rb
|
36
|
+
- examples/remaining_calls.rb
|
37
|
+
- examples/reset_date.rb
|
38
|
+
- examples/valid_apikey.rb
|
39
|
+
- examples/verify.rb
|
40
|
+
- lib/prowlr.rb
|
41
|
+
- prowlr.gemspec
|
42
|
+
- test/fixtures/bad_request.xml
|
43
|
+
- test/fixtures/invalid_apikey.xml
|
44
|
+
- test/fixtures/success.xml
|
45
|
+
- test/prowlr_test.rb
|
46
|
+
- test/test_helper.rb
|
47
|
+
has_rdoc: true
|
48
|
+
homepage: http://github.com/robbevan/prowlr
|
49
|
+
licenses: []
|
50
|
+
|
51
|
+
post_install_message:
|
52
|
+
rdoc_options:
|
53
|
+
- --charset=UTF-8
|
54
|
+
require_paths:
|
55
|
+
- lib
|
56
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: "0"
|
61
|
+
version:
|
62
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: "0"
|
67
|
+
version:
|
68
|
+
requirements: []
|
69
|
+
|
70
|
+
rubyforge_project:
|
71
|
+
rubygems_version: 1.3.3
|
72
|
+
signing_key:
|
73
|
+
specification_version: 3
|
74
|
+
summary: Yet another Prowl API gem and command line interface
|
75
|
+
test_files:
|
76
|
+
- test/prowlr_test.rb
|
77
|
+
- test/test_helper.rb
|
78
|
+
- examples/add.rb
|
79
|
+
- examples/add_instance.rb
|
80
|
+
- examples/helpers/config_store.rb
|
81
|
+
- examples/remaining_calls.rb
|
82
|
+
- examples/reset_date.rb
|
83
|
+
- examples/valid_apikey.rb
|
84
|
+
- examples/verify.rb
|