elk 0.0.3p0 → 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/README.MD CHANGED
@@ -1,4 +1,4 @@
1
- Elk
1
+ Elk - 46elks API-client [![Tested with Travis-CI](https://secure.travis-ci.org/jage/elk.png)](http://travis-ci.org/#!/jage/elk)
2
2
  ===
3
3
 
4
4
  Ruby client for 46elks "Voice, SMS & MMS" service. http://46elks.com/
data/lib/elk.rb CHANGED
@@ -10,11 +10,13 @@ require 'elk/sms'
10
10
  module Elk
11
11
  BASE_DOMAIN = 'api.46elks.com'
12
12
  API_VERSION = 'a1'
13
- VERSION = '0.0.3'
13
+ VERSION = '0.0.4'
14
14
 
15
15
  class AuthError < RuntimeError; end
16
16
  class ServerError < RuntimeError; end
17
17
  class BadResponse < RuntimeError; end
18
+ class BadRequest < RuntimeError; end
19
+ class MissingParameter < RuntimeError; end
18
20
 
19
21
  class << self
20
22
  attr_accessor :username
@@ -45,6 +47,8 @@ module Elk
45
47
  raise AuthError, "Authentication failed"
46
48
  rescue RestClient::InternalServerError
47
49
  raise ServerError, "Server error"
50
+ rescue RestClient::Forbidden => e
51
+ raise BadRequest, e.http_body
48
52
  end
49
53
 
50
54
  def parse_json(body)
@@ -53,4 +57,12 @@ module Elk
53
57
  raise BadResponse, "Can't parse JSON"
54
58
  end
55
59
  end
60
+ end
61
+
62
+ class Hash
63
+ def require_keys!(required_keys)
64
+ unless (missing_parameters = required_keys - self.keys).empty?
65
+ raise Elk::MissingParameter, "Requires #{missing_parameters.collect {|s| ":#{s}"}.join(', ')} parameters"
66
+ end
67
+ end
56
68
  end
data/lib/elk/number.rb CHANGED
@@ -47,6 +47,7 @@ module Elk
47
47
 
48
48
  class << self
49
49
  def allocate(parameters)
50
+ parameters.require_keys!([:sms_url, :country])
50
51
  response = Elk.post('/Numbers', parameters)
51
52
  self.new(Elk.parse_json(response.body))
52
53
  end
data/lib/elk/sms.rb CHANGED
@@ -22,15 +22,16 @@ module Elk
22
22
  end
23
23
 
24
24
  class << self
25
- def send(settings)
26
- parameters = {}.merge(settings)
27
- response = Elk.post('/SMS', parameters)
28
- self.new(Elk.parse_json(response.body))
29
- ensure
25
+ def send(parameters)
26
+ parameters.require_keys!([:from, :message, :to])
27
+
30
28
  # Warn if the from string will be capped by the sms gateway
31
- if parameters[:from].match(/^(\w{11,})$/)
29
+ if parameters[:from] && parameters[:from].match(/^(\w{11,})$/)
32
30
  warn "SMS 'from' value #{parameters[:from]} will be capped at 11 chars"
33
31
  end
32
+
33
+ response = Elk.post('/SMS', parameters)
34
+ self.new(Elk.parse_json(response.body))
34
35
  end
35
36
 
36
37
  def all
data/spec/elk_spec.rb CHANGED
@@ -2,6 +2,14 @@ require 'spec_helper'
2
2
  require 'elk'
3
3
 
4
4
  describe Elk do
5
+ it 'should handle garbage json' do
6
+ bad_response_body = fixture('bad_response_body.txt').read
7
+
8
+ expect {
9
+ Elk.parse_json(bad_response_body)
10
+ }.to raise_error(Elk::BadResponse)
11
+ end
12
+
5
13
  describe Elk::Number do
6
14
  it 'allocates a number' do
7
15
  stub_request(:post, "https://USERNAME:PASSWORD@api.46elks.com/a1/Numbers").
@@ -120,12 +128,12 @@ describe Elk do
120
128
  }.to raise_error(Elk::ServerError)
121
129
  end
122
130
 
123
- it 'gets garbage numbers' do
124
- bad_response_body = fixture('bad_response_body.txt').read
131
+ it 'should handle no parameters' do
132
+ configure_elk
125
133
 
126
134
  expect {
127
- Elk.parse_json(bad_response_body)
128
- }.to raise_error(Elk::BadResponse)
135
+ sms = Elk::Number.allocate({})
136
+ }.to raise_error(Elk::MissingParameter)
129
137
  end
130
138
  end
131
139
 
@@ -221,5 +229,27 @@ describe Elk do
221
229
  sms.message.should == 'Your order #171 has now been sent!'
222
230
  end
223
231
 
232
+ it 'should handle invalid to number' do
233
+ stub_request(:post, "https://USERNAME:PASSWORD@api.46elks.com/a1/SMS").
234
+ with(:body => {"from" => "+46761042247", :message => "Your order #171 has now been sent!", :to => "monkey"},
235
+ :headers => {'Accept'=>'application/json', 'Content-Type'=>'application/x-www-form-urlencoded'}).
236
+ to_return(fixture('invalid_to_number.txt'))
237
+
238
+ configure_elk
239
+
240
+ expect {
241
+ sms = Elk::SMS.send(:from => '+46761042247',
242
+ :to => 'monkey',
243
+ :message => 'Your order #171 has now been sent!')
244
+ }.to raise_error(Elk::BadRequest, 'Invalid to number')
245
+ end
246
+
247
+ it 'should handle no parameters' do
248
+ configure_elk
249
+
250
+ expect {
251
+ sms = Elk::SMS.send({})
252
+ }.to raise_error(Elk::MissingParameter)
253
+ end
224
254
  end
225
255
  end
@@ -0,0 +1,8 @@
1
+ HTTP/1.1 403 Forbidden
2
+ Server: nginx/0.7.67
3
+ Date: Mon, 18 Jul 2011 09:43:29 GMT
4
+ Content-Type: text/plain
5
+ Connection: keep-alive
6
+ Content-Length: 17
7
+
8
+ Invalid to number
@@ -0,0 +1,8 @@
1
+ HTTP/1.1 404 Not Found
2
+ Server: nginx/0.7.67
3
+ Date: Mon, 18 Jul 2011 09:46:48 GMT
4
+ Content-Type: text/plain
5
+ Connection: keep-alive
6
+ Content-Length: 9
7
+
8
+ Not found
metadata CHANGED
@@ -1,8 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elk
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: 5
5
- version: 0.0.3p0
4
+ hash: 23
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 4
10
+ version: 0.0.4
6
11
  platform: ruby
7
12
  authors:
8
13
  - Johan Eckerstroem
@@ -10,7 +15,8 @@ autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
17
 
13
- date: 2011-07-17 00:00:00 Z
18
+ date: 2011-07-18 00:00:00 +02:00
19
+ default_executable:
14
20
  dependencies:
15
21
  - !ruby/object:Gem::Dependency
16
22
  name: json_pure
@@ -20,6 +26,11 @@ dependencies:
20
26
  requirements:
21
27
  - - ~>
22
28
  - !ruby/object:Gem::Version
29
+ hash: 7
30
+ segments:
31
+ - 1
32
+ - 5
33
+ - 2
23
34
  version: 1.5.2
24
35
  type: :runtime
25
36
  version_requirements: *id001
@@ -31,6 +42,11 @@ dependencies:
31
42
  requirements:
32
43
  - - ~>
33
44
  - !ruby/object:Gem::Version
45
+ hash: 9
46
+ segments:
47
+ - 1
48
+ - 6
49
+ - 3
34
50
  version: 1.6.3
35
51
  type: :runtime
36
52
  version_requirements: *id002
@@ -42,6 +58,11 @@ dependencies:
42
58
  requirements:
43
59
  - - ~>
44
60
  - !ruby/object:Gem::Version
61
+ hash: 63
62
+ segments:
63
+ - 0
64
+ - 9
65
+ - 2
45
66
  version: 0.9.2
46
67
  type: :development
47
68
  version_requirements: *id003
@@ -53,6 +74,11 @@ dependencies:
53
74
  requirements:
54
75
  - - ~>
55
76
  - !ruby/object:Gem::Version
77
+ hash: 23
78
+ segments:
79
+ - 2
80
+ - 6
81
+ - 0
56
82
  version: 2.6.0
57
83
  type: :development
58
84
  version_requirements: *id004
@@ -64,10 +90,15 @@ dependencies:
64
90
  requirements:
65
91
  - - ~>
66
92
  - !ruby/object:Gem::Version
93
+ hash: 7
94
+ segments:
95
+ - 1
96
+ - 6
97
+ - 4
67
98
  version: 1.6.4
68
99
  type: :development
69
100
  version_requirements: *id005
70
- description: elk can be used to allocate a phone numbers, manage the numbers and send/recieve messages through these numbers.
101
+ description: Used to configure numbers, send/reciev SMS/MMS/Voice messages at 46elks
71
102
  email: johan@duh.se
72
103
  executables: []
73
104
 
@@ -85,6 +116,8 @@ files:
85
116
  - spec/fixtures/bad_response_body.txt
86
117
  - spec/fixtures/deallocates_a_number.txt
87
118
  - spec/fixtures/gets_allocated_numbers.txt
119
+ - spec/fixtures/invalid_to_number.txt
120
+ - spec/fixtures/no_parameters.txt
88
121
  - spec/fixtures/reloads_a_number.txt
89
122
  - spec/fixtures/reloads_a_sms.txt
90
123
  - spec/fixtures/sends_a_sms.txt
@@ -94,7 +127,8 @@ files:
94
127
  - spec/fixtures/updates_a_number.txt
95
128
  - spec/spec_helper.rb
96
129
  - README.MD
97
- homepage: https://github.com/jage/elk
130
+ has_rdoc: true
131
+ homepage:
98
132
  licenses: []
99
133
 
100
134
  post_install_message:
@@ -107,17 +141,23 @@ required_ruby_version: !ruby/object:Gem::Requirement
107
141
  requirements:
108
142
  - - ">="
109
143
  - !ruby/object:Gem::Version
144
+ hash: 3
145
+ segments:
146
+ - 0
110
147
  version: "0"
111
148
  required_rubygems_version: !ruby/object:Gem::Requirement
112
149
  none: false
113
150
  requirements:
114
- - - ">"
151
+ - - ">="
115
152
  - !ruby/object:Gem::Version
116
- version: 1.3.1
153
+ hash: 3
154
+ segments:
155
+ - 0
156
+ version: "0"
117
157
  requirements: []
118
158
 
119
159
  rubyforge_project:
120
- rubygems_version: 1.8.5
160
+ rubygems_version: 1.3.7
121
161
  signing_key:
122
162
  specification_version: 3
123
163
  summary: Client library for 46elks SMS/MMS/Voice service.