prowl 0.1.2 → 0.1.3

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 (5) hide show
  1. data/README +12 -10
  2. data/lib/prowl.rb +31 -11
  3. data/prowl.gemspec +1 -1
  4. data/test/prowl_test.rb +4 -4
  5. metadata +1 -1
data/README CHANGED
@@ -22,11 +22,12 @@
22
22
  together and lets you send push notifications via HTTP
23
23
  to any iPhone that has the prowl app installed.
24
24
 
25
- Prowl.add("api key abc123def456", {
25
+ Prowl.add(
26
+ :apikey => "api key abc123def456",
26
27
  :application => "World Saving Project Manager",
27
28
  :event => "Canceled",
28
29
  :description => "It sucked, so I canceled it. Sorry :("
29
- })
30
+ )
30
31
 
31
32
  The user has given you its API key. That lets you
32
33
  send push notifications to the users iPhone, through
@@ -35,18 +36,19 @@
35
36
 
36
37
  --~~ Usage ~~--
37
38
 
38
- Three required parameters:
39
-
40
- :application
41
- :event
42
- :description
39
+ Four required parameters:
40
+
41
+ :apikey (string / array of strings)
42
+ :application (string)
43
+ :event (string)
44
+ :description (string)
43
45
 
44
46
  You can use Prowl.add, or create instances of Prowl
45
47
  manually.
46
48
 
47
- Prowl.add("apikey", :application => "Foo", ...)
49
+ Prowl.add(:apikey => "123abc", :application => "Foo", ...)
48
50
  Prowl.verify("apikey")
49
51
 
50
- p = Prowl.new("apikey123abc")
52
+ p = Prowl.new(:apikey => "apikey123abc", :application => "FooApp")
51
53
  p.valid?
52
- p.add(...)
54
+ p.add(:event => "It's valid", ...)
data/lib/prowl.rb CHANGED
@@ -5,45 +5,65 @@ require 'uri'
5
5
 
6
6
  class Prowl
7
7
  class MissingAPIKey < RuntimeError; end
8
+ class TooManyAPIKeys < RuntimeError; end
8
9
  class PriorityOutOfRange < RuntimeError; end
9
10
 
10
11
  API_URL = "https://prowl.weks.net:443/publicapi"
12
+ MAX_API_KEYS = 5
11
13
  PRIORITY_RANGE = -2..2
12
14
 
13
- def initialize(api_key)
14
- @api_key = api_key
15
+ def initialize(defaults = {})
16
+ @defaults = defaults
15
17
  end
16
18
 
17
19
  def add(params = {})
18
20
  perform("add", params)
19
21
  end
20
22
 
23
+ # Modify this instance's defaults
24
+ def defaults(params)
25
+ @defaults = @defaults.merge(params)
26
+ end
27
+
21
28
  def valid?
22
29
  @valid ||= (perform("verify") == 200)
23
30
  end
24
31
 
25
32
  # Utility function that creates an instance and sends a prowl
26
- def self.add(api_key, params = {})
27
- new(api_key).add(params)
33
+ def self.add(params = {})
34
+ new(params).add
28
35
  end
29
36
 
30
37
  # Utility function to verify API keys
31
- def self.verify(api_key)
32
- new(api_key).valid?
38
+ def self.verify(apikey)
39
+ new({:apikey => apikey}).valid?
33
40
  end
34
41
 
35
42
  private
36
43
 
37
- def perform(action, params)
38
- if !@api_key
44
+ def perform(action, params = {})
45
+ # Merge the default params with any custom ones
46
+ unless !@defaults
47
+ params = @defaults.merge(params)
48
+ end
49
+
50
+ if !params[:apikey] || (params[:apikey].is_a?(Array) && params[:apikey].size < 1)
39
51
  raise MissingAPIKey
40
52
  end
41
53
 
54
+ # Raise an exception if we're trying to use more API keys than allowed for this action
55
+ if params[:apikey].is_a?(Array) && ((action == "verify" && params[:apikey].size > 1) || params[:apikey].size > MAX_API_KEYS)
56
+ raise TooManyAPIKeys
57
+ end
58
+
42
59
  if params[:priority] && !PRIORITY_RANGE.include?(params[:priority])
43
60
  raise PriorityOutOfRange
44
61
  end
45
62
 
46
- params[:apikey] = @api_key
63
+ # If there are multiple API Keys in an array, merge them into a comma-delimited string
64
+ if params[:apikey].is_a?(Array)
65
+ params[:apikey] = params[:apikey].collect{|v| v + ","}.to_s.chop.chop
66
+ end
47
67
 
48
68
  uri = URI.parse("#{API_URL}/#{action}")
49
69
  http = Net::HTTP.new(uri.host, uri.port)
@@ -60,6 +80,6 @@ end
60
80
  if __FILE__ == $0
61
81
  api_key = "change me"
62
82
 
63
- p Prowl.add(api_key, :application => "Fishes", :event => "silly", :description => "Awwawaw.", :priority => 1)
64
- p Prowl.new(api_key).valid?
83
+ p Prowl.add(:apikey => api_key, :application => "Fishes", :event => "silly", :description => "Awwawaw.", :priority => 1)
84
+ p Prowl.verify(api_key)
65
85
  end
data/prowl.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "prowl"
3
- s.version = "0.1.2"
3
+ s.version = "0.1.3"
4
4
  s.date = "2009-07-08"
5
5
  s.authors = ["August Lilleaas"]
6
6
  s.email = "augustlilleaas@gmail.com"
data/test/prowl_test.rb CHANGED
@@ -8,22 +8,22 @@ require 'mocha'
8
8
 
9
9
  class ProwlTest < Test::Unit::TestCase
10
10
  def test_not_without_an_api_key
11
- assert_raises(Prowl::MissingAPIKey) { Prowl.add(nil) }
11
+ assert_raises(Prowl::MissingAPIKey) { Prowl.add(:apikey => nil) }
12
12
  end
13
13
 
14
14
  def test_invalid_priority
15
- assert_raises(Prowl::PriorityOutOfRange) { Prowl.add("foo", :priority => 10)}
15
+ assert_raises(Prowl::PriorityOutOfRange) { Prowl.add(:apikey => "foo", :priority => 10)}
16
16
  end
17
17
 
18
18
  def test_valid_api_key
19
19
  Prowl.any_instance.expects(:perform).returns(200)
20
- assert_equal 200, Prowl.add("my api key", :application => "Fishes", :event => "Silly", :description => "Blah")
20
+ assert_equal 200, Prowl.add(:apikey => "my api key", :application => "Fishes", :event => "Silly", :description => "Blah")
21
21
  end
22
22
 
23
23
  # Uh.. Such a silly test.
24
24
  def test_invalid_api_key
25
25
  Prowl.any_instance.expects(:perform).returns(666)
26
- assert_equal 666, Prowl.add("my api key", :application => "Fishes", :event => "Silly", :description => "Blah")
26
+ assert_equal 666, Prowl.add(:apikey => "my api key", :application => "Fishes", :event => "Silly", :description => "Blah")
27
27
  end
28
28
 
29
29
  def test_verify_with_api_key
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prowl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - August Lilleaas