penny_sms_muncher 0.0.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.
- data/.document +5 -0
- data/.gitignore +22 -0
- data/API_RESPONSES.txt +96 -0
- data/LICENSE +20 -0
- data/README.textile +46 -0
- data/Rakefile +51 -0
- data/VERSION +1 -0
- data/lib/penny_sms.rb +124 -0
- data/penny_sms_muncher.gemspec +61 -0
- data/spec/penny_sms_muncher_spec.rb +148 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +11 -0
- metadata +98 -0
data/.document
ADDED
data/.gitignore
ADDED
data/API_RESPONSES.txt
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
**BLANK MESSAGE**
|
2
|
+
---
|
3
|
+
fault:
|
4
|
+
- value:
|
5
|
+
- struct:
|
6
|
+
- member:
|
7
|
+
- name:
|
8
|
+
- faultCode
|
9
|
+
value:
|
10
|
+
- i4:
|
11
|
+
- "403"
|
12
|
+
- name:
|
13
|
+
- faultString
|
14
|
+
value:
|
15
|
+
- string:
|
16
|
+
- "Error: API KEY is not vaild, contact support@pennysms.com"
|
17
|
+
|
18
|
+
**BAD API KEY**
|
19
|
+
---
|
20
|
+
fault:
|
21
|
+
- value:
|
22
|
+
- struct:
|
23
|
+
- member:
|
24
|
+
- name:
|
25
|
+
- faultCode
|
26
|
+
value:
|
27
|
+
- i4:
|
28
|
+
- "403"
|
29
|
+
- name:
|
30
|
+
- faultString
|
31
|
+
value:
|
32
|
+
- string:
|
33
|
+
- "Error: API KEY is not vaild, contact support@pennysms.com"
|
34
|
+
|
35
|
+
**BAD PHONE NUMBER**
|
36
|
+
---
|
37
|
+
fault:
|
38
|
+
- value:
|
39
|
+
- struct:
|
40
|
+
- member:
|
41
|
+
- name:
|
42
|
+
- faultCode
|
43
|
+
value:
|
44
|
+
- i4:
|
45
|
+
- "500"
|
46
|
+
- name:
|
47
|
+
- faultString
|
48
|
+
value:
|
49
|
+
- string:
|
50
|
+
- "Error: invalid cell number"
|
51
|
+
|
52
|
+
**INVALID PHONE #**
|
53
|
+
<?xml version="1.0" ?><methodResponse><fault><value><struct><member><name>faultCode</name><value><i4>500</i4></value></member><member><name>faultString</name><value><string>Error: unsupported cell number</string></value></member></struct></value></fault></methodResponse>
|
54
|
+
|
55
|
+
---
|
56
|
+
fault:
|
57
|
+
- value:
|
58
|
+
- struct:
|
59
|
+
- member:
|
60
|
+
- name:
|
61
|
+
- faultCode
|
62
|
+
value:
|
63
|
+
- i4:
|
64
|
+
- "500"
|
65
|
+
- name:
|
66
|
+
- faultString
|
67
|
+
value:
|
68
|
+
- string:
|
69
|
+
- "Error: unsupported cell number"
|
70
|
+
|
71
|
+
|
72
|
+
**??? (ALTERNATE BAD PHONE NUMBER?)**
|
73
|
+
---
|
74
|
+
fault:
|
75
|
+
- value:
|
76
|
+
- struct:
|
77
|
+
- member:
|
78
|
+
- name:
|
79
|
+
- faultCode
|
80
|
+
value:
|
81
|
+
- i4:
|
82
|
+
- "501"
|
83
|
+
- name:
|
84
|
+
- faultString
|
85
|
+
value:
|
86
|
+
- string:
|
87
|
+
- "Error: Try again later"
|
88
|
+
|
89
|
+
**ALL GOOD**
|
90
|
+
---
|
91
|
+
params:
|
92
|
+
- param:
|
93
|
+
- value:
|
94
|
+
- string:
|
95
|
+
- OK
|
96
|
+
|
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 chris A
|
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.textile
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
h1. PennySMS Muncher
|
2
|
+
|
3
|
+
A little bit of code to make PennySMS XML requests.
|
4
|
+
|
5
|
+
<pre><code>
|
6
|
+
>> require 'penny_sms'
|
7
|
+
>> include PennySMSMuncher
|
8
|
+
>> req = PennySMS::XMLRequest.new(penny_sms_api_key, from_email, phone_number, body)
|
9
|
+
...
|
10
|
+
>> response = req.send_sms
|
11
|
+
... # PennySMSMuncher::PennySMS::Response object>> response.success?
|
12
|
+
=> true
|
13
|
+
>> response.status
|
14
|
+
=> "OK"
|
15
|
+
>> req = PennySMS::XMLRequest.new(penny_sms_api_key, from_email, '6175551234', body)
|
16
|
+
...
|
17
|
+
>> response = req.send_sms
|
18
|
+
... # PennySMSMuncher::PennySMS::Response object
|
19
|
+
>> response.status
|
20
|
+
=> error"
|
21
|
+
>> response.success?
|
22
|
+
=> false
|
23
|
+
>> response.fault_code
|
24
|
+
=> "500"
|
25
|
+
>> response.fault_name
|
26
|
+
=> "Error: unsupported cell number"
|
27
|
+
>> response.raw
|
28
|
+
=> <Net::HTTPOK 200 OK readbody=true>
|
29
|
+
>> response.raw.body
|
30
|
+
=> "<?xml version="1.0" ?><methodResponse><fault><value><struct><member><name>faultCode</name><value><i4>500</i4></value></member><member><name>faultString</name><value><string>Error: unsupported cell number</string></value></member></struct></value></fault></methodResponse>\n"
|
31
|
+
>> response.data
|
32
|
+
... # LibXML::XML::Document object
|
33
|
+
</code>
|
34
|
+
</pre>
|
35
|
+
|
36
|
+
|
37
|
+
Here is the minimalist PennySMS doc: https://www.pennysms.com/docs_xml
|
38
|
+
|
39
|
+
h2. Note on Patches/Pull Requests
|
40
|
+
|
41
|
+
* Go ahead and make the JSON work.
|
42
|
+
* And feel free to chat me up.
|
43
|
+
|
44
|
+
h2. Copyright
|
45
|
+
|
46
|
+
Copyright (c) 2010 chris A. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "penny_sms_muncher"
|
8
|
+
gem.summary = %Q{A little bit of code to make PennySMS XML requests.}
|
9
|
+
gem.description = %Q{A little bit of code to make PennySMS XML requests. But not JSON requests right now.}
|
10
|
+
gem.email = "chris@whatbirdthings.com"
|
11
|
+
gem.homepage = "http://github.com/whatbird/penny_sms_muncher"
|
12
|
+
gem.authors = ["chris A", "Matthew Shanley"]
|
13
|
+
|
14
|
+
gem.add_development_dependency "rspec", ">= 1.2.9"
|
15
|
+
|
16
|
+
gem.add_dependency('addressable', '>= 2.1.1')
|
17
|
+
gem.add_dependency('libxml-ruby', '>= 1.1.3')
|
18
|
+
|
19
|
+
|
20
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
21
|
+
end
|
22
|
+
Jeweler::GemcutterTasks.new
|
23
|
+
rescue LoadError
|
24
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
25
|
+
end
|
26
|
+
|
27
|
+
require 'spec/rake/spectask'
|
28
|
+
Spec::Rake::SpecTask.new(:spec) do |spec|
|
29
|
+
spec.libs << 'lib' << 'spec'
|
30
|
+
spec.spec_files = FileList['spec/**/*_spec.rb']
|
31
|
+
end
|
32
|
+
|
33
|
+
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
34
|
+
spec.libs << 'lib' << 'spec'
|
35
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
36
|
+
spec.rcov = true
|
37
|
+
end
|
38
|
+
|
39
|
+
task :spec => :check_dependencies
|
40
|
+
|
41
|
+
task :default => :spec
|
42
|
+
|
43
|
+
require 'rake/rdoctask'
|
44
|
+
Rake::RDocTask.new do |rdoc|
|
45
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
46
|
+
|
47
|
+
rdoc.rdoc_dir = 'rdoc'
|
48
|
+
rdoc.title = "penny_sms_muncher #{version}"
|
49
|
+
rdoc.rdoc_files.include('README*')
|
50
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
51
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.0
|
data/lib/penny_sms.rb
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'erb'
|
3
|
+
|
4
|
+
require 'addressable/uri'
|
5
|
+
require 'xml'
|
6
|
+
|
7
|
+
module PennySMSMuncher
|
8
|
+
module PennySMS
|
9
|
+
class Request
|
10
|
+
attr_accessor :api_key, :text, :url, :from_email, :phone_number, :response
|
11
|
+
|
12
|
+
def initialize(api_key, from_email, phone_number, text, api_url=nil)
|
13
|
+
self.url = Addressable::URI.parse(api_url || @api_url)
|
14
|
+
self.phone_number = phone_number
|
15
|
+
self.from_email = from_email
|
16
|
+
self.text = text
|
17
|
+
self.api_key = api_key
|
18
|
+
self.from_email = from_email
|
19
|
+
end
|
20
|
+
|
21
|
+
def request
|
22
|
+
req = Net::HTTP::Post.new url.path,
|
23
|
+
initheader = {'Content-Type' => @content_type}
|
24
|
+
req.body = template
|
25
|
+
req
|
26
|
+
end
|
27
|
+
|
28
|
+
def send_sms
|
29
|
+
resp = Net::HTTP.new(url.host).start {|http| http.request(request) }
|
30
|
+
|
31
|
+
if resp.is_a? Net::HTTPSuccess
|
32
|
+
self.response = Response.new(resp)
|
33
|
+
else
|
34
|
+
raise APIError, "PennySMS API changed or busted. Or gem obsolete."
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class Response
|
40
|
+
attr_accessor :data, :raw, :status
|
41
|
+
|
42
|
+
def initialize(raw)
|
43
|
+
self.raw = raw
|
44
|
+
self.data = XML::Parser.string(raw.body).parse # JSON?
|
45
|
+
self.set_status
|
46
|
+
self
|
47
|
+
end
|
48
|
+
|
49
|
+
def success?
|
50
|
+
!fault_code
|
51
|
+
end
|
52
|
+
|
53
|
+
def set_status
|
54
|
+
if fault
|
55
|
+
self.status = 'error'
|
56
|
+
else
|
57
|
+
self.status = data.find('//params//string').first.content
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def fault_code
|
62
|
+
fault.find('//i4').first.content if fault
|
63
|
+
end
|
64
|
+
|
65
|
+
def fault_name
|
66
|
+
fault.find('//string').first.content if fault
|
67
|
+
end
|
68
|
+
|
69
|
+
def fault
|
70
|
+
return unless data && !data.find('//fault').empty?
|
71
|
+
data.find('//fault//member')[0]
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
class XMLRequest < Request
|
76
|
+
def initialize(*args)
|
77
|
+
@api_url = 'http://api.pennysms.com/xmlrpc'
|
78
|
+
@rpc_method = 'send'
|
79
|
+
@content_type = 'text/xml'
|
80
|
+
super
|
81
|
+
end
|
82
|
+
|
83
|
+
def template
|
84
|
+
ERB.new(%q{<?xml version="1.0"?>
|
85
|
+
<methodCall>
|
86
|
+
<methodName><%= @rpc_method %></methodName>
|
87
|
+
<params>
|
88
|
+
<param>
|
89
|
+
<value><string><%= api_key %></string></value>
|
90
|
+
</param>
|
91
|
+
<param>
|
92
|
+
<value><string><%= from_email %></string></value>
|
93
|
+
</param>
|
94
|
+
<param>
|
95
|
+
<value><string><%= phone_number %></string></value>
|
96
|
+
</param>
|
97
|
+
<param>
|
98
|
+
<value><string><%= text %></string></value>
|
99
|
+
</param>
|
100
|
+
</params>
|
101
|
+
</methodCall>}.gsub(/^ /, '')).result(binding)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
# DOES NOT WORK 2009-12-22
|
106
|
+
class JSONRequest < Request
|
107
|
+
def initialize(*args)
|
108
|
+
raise NoMethodError, "JSONRequest not working. Figure it out though and let me know"
|
109
|
+
@api_url = 'http://api.pennysms.com/jsonrpc'
|
110
|
+
@rpc_method = 'send'
|
111
|
+
@content_type = 'text/json'
|
112
|
+
super
|
113
|
+
end
|
114
|
+
|
115
|
+
def template
|
116
|
+
{:method => @rpc_method,
|
117
|
+
:params => [api_key,from_email,phone_number,text]
|
118
|
+
}.to_json
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
class APIError < Exception; end
|
123
|
+
end
|
124
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{penny_sms_muncher}
|
8
|
+
s.version = "0.0.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["chris A", "Matthew Shanley"]
|
12
|
+
s.date = %q{2010-01-12}
|
13
|
+
s.description = %q{A little bit of code to make PennySMS XML requests. But not JSON requests right now.}
|
14
|
+
s.email = %q{chris@whatbirdthings.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE",
|
17
|
+
"README.textile"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
".gitignore",
|
22
|
+
"API_RESPONSES.txt",
|
23
|
+
"LICENSE",
|
24
|
+
"Rakefile",
|
25
|
+
"VERSION",
|
26
|
+
"lib/penny_sms.rb",
|
27
|
+
"penny_sms_muncher.gemspec",
|
28
|
+
"spec/penny_sms_muncher_spec.rb",
|
29
|
+
"spec/spec.opts",
|
30
|
+
"spec/spec_helper.rb"
|
31
|
+
]
|
32
|
+
s.homepage = %q{http://github.com/whatbird/penny_sms_muncher}
|
33
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
34
|
+
s.require_paths = ["lib"]
|
35
|
+
s.rubygems_version = %q{1.3.5}
|
36
|
+
s.summary = %q{A little bit of code to make PennySMS XML requests.}
|
37
|
+
s.test_files = [
|
38
|
+
"spec/penny_sms_muncher_spec.rb",
|
39
|
+
"spec/spec_helper.rb"
|
40
|
+
]
|
41
|
+
|
42
|
+
if s.respond_to? :specification_version then
|
43
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
44
|
+
s.specification_version = 3
|
45
|
+
|
46
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
47
|
+
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
48
|
+
s.add_runtime_dependency(%q<addressable>, [">= 2.1.1"])
|
49
|
+
s.add_runtime_dependency(%q<libxml-ruby>, [">= 1.1.3"])
|
50
|
+
else
|
51
|
+
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
52
|
+
s.add_dependency(%q<addressable>, [">= 2.1.1"])
|
53
|
+
s.add_dependency(%q<libxml-ruby>, [">= 1.1.3"])
|
54
|
+
end
|
55
|
+
else
|
56
|
+
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
57
|
+
s.add_dependency(%q<addressable>, [">= 2.1.1"])
|
58
|
+
s.add_dependency(%q<libxml-ruby>, [">= 1.1.3"])
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
@@ -0,0 +1,148 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
require File.expand_path(File.dirname(__FILE__)) + "/../lib/penny_sms.rb"
|
3
|
+
include PennySMSMuncher
|
4
|
+
|
5
|
+
|
6
|
+
module PennySMSHelper
|
7
|
+
def failing_sms
|
8
|
+
@phone = '5555555555'
|
9
|
+
@email = 'mouse house'
|
10
|
+
@message = "Mouse is in the house!"
|
11
|
+
@req = PennySMS::XMLRequest.new('api_key', @email, @phone,@message)
|
12
|
+
end
|
13
|
+
|
14
|
+
def fault_body
|
15
|
+
'<?xml version="1.0" ?><methodResponse><fault><value><struct><member><name>faultCode</name><value><i4>500</i4></value></member><member><name>faultString</name><value><string>Error: unsupported cell number</string></value></member></struct></value></fault></methodResponse>'
|
16
|
+
end
|
17
|
+
|
18
|
+
def success_body
|
19
|
+
'<?xml version="1.0" ?><methodResponse><params><param><value><string>OK</string></value></param></params></methodResponse>'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
describe "PennySMSMuncher::PennySms" do
|
25
|
+
include PennySMSHelper
|
26
|
+
|
27
|
+
describe 'creating' do
|
28
|
+
|
29
|
+
describe 'XMLRequest' do
|
30
|
+
it 'should set the url' do
|
31
|
+
req = PennySMS::XMLRequest.new('api_key', nil, nil,nil)
|
32
|
+
req.url.path.should match(/xml/)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe 'JSONRequest' do
|
37
|
+
it 'should set the url'
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe 'template' do
|
42
|
+
describe 'XMLRequest' do
|
43
|
+
before(:each) do
|
44
|
+
failing_sms
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'should include the phone_number' do
|
48
|
+
@req.template.should match(@phone)
|
49
|
+
end
|
50
|
+
it 'should include the email' do
|
51
|
+
@req.template.should match(@email)
|
52
|
+
end
|
53
|
+
it 'should include the message' do
|
54
|
+
@req.template.should match(@message)
|
55
|
+
end
|
56
|
+
it 'should include the api_key' do
|
57
|
+
@req.template.should match('api_key')
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
describe 'JSONRequest' do
|
62
|
+
it 'should include the phone_number'
|
63
|
+
it 'should include the email'
|
64
|
+
it 'should include the message'
|
65
|
+
it 'should include the api_key'
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe 'making the API call' do
|
70
|
+
describe 'fails' do
|
71
|
+
it 'should raise an error if the API call fails' do
|
72
|
+
failing_sms
|
73
|
+
Net::HTTP.any_instance.stubs(:start).returns "bogus"
|
74
|
+
lambda{@req.send_sms}.should raise_error(PennySMS::APIError)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe 'succeeds' do
|
79
|
+
describe 'with errors' do
|
80
|
+
before(:each) do
|
81
|
+
failing_sms
|
82
|
+
http_mock = mock('Net::HTTPSuccess')
|
83
|
+
http_mock.stubs( :code => '200',
|
84
|
+
:message => "OK",
|
85
|
+
:content_type => "text/xml",
|
86
|
+
:body => fault_body,
|
87
|
+
:is_a? => Net::HTTPSuccess)
|
88
|
+
Net::HTTP.any_instance.stubs(:start).returns http_mock
|
89
|
+
@response = @req.send_sms
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should return a response object" do
|
93
|
+
@response.class.should == PennySMS::Response
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'should set the status' do
|
97
|
+
@response.status.should == 'error'
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'should not be successful' do
|
101
|
+
@response.should_not be_success
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'should set the fault_code' do
|
105
|
+
@response.fault_code.should == '500'
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'should set the fault_name' do
|
109
|
+
@response.fault_name.should match(/unsupported cell/)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
describe 'with no errors' do
|
114
|
+
before(:each) do
|
115
|
+
failing_sms
|
116
|
+
http_mock = mock('Net::HTTPSuccess')
|
117
|
+
http_mock.stubs( :code => '200',
|
118
|
+
:message => "OK",
|
119
|
+
:content_type => "text/xml",
|
120
|
+
:body => success_body,
|
121
|
+
:is_a? => Net::HTTPSuccess)
|
122
|
+
Net::HTTP.any_instance.stubs(:start).returns http_mock
|
123
|
+
@response = @req.send_sms
|
124
|
+
end
|
125
|
+
|
126
|
+
it "should return a response object" do
|
127
|
+
@response.class.should == PennySMS::Response
|
128
|
+
end
|
129
|
+
|
130
|
+
it 'should set the status' do
|
131
|
+
@response.status.downcase.should == 'ok'
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'should be successful' do
|
135
|
+
@response.should be_success
|
136
|
+
end
|
137
|
+
|
138
|
+
it 'should not set the fault_code' do
|
139
|
+
@response.fault_code.should be_nil
|
140
|
+
end
|
141
|
+
|
142
|
+
it 'should not set the fault_name' do
|
143
|
+
@response.fault_name.should be_nil
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
data/spec/spec.opts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: penny_sms_muncher
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- chris A
|
8
|
+
- Matthew Shanley
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2010-01-12 00:00:00 -05:00
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: rspec
|
18
|
+
type: :development
|
19
|
+
version_requirement:
|
20
|
+
version_requirements: !ruby/object:Gem::Requirement
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 1.2.9
|
25
|
+
version:
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: addressable
|
28
|
+
type: :runtime
|
29
|
+
version_requirement:
|
30
|
+
version_requirements: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 2.1.1
|
35
|
+
version:
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: libxml-ruby
|
38
|
+
type: :runtime
|
39
|
+
version_requirement:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: 1.1.3
|
45
|
+
version:
|
46
|
+
description: A little bit of code to make PennySMS XML requests. But not JSON requests right now.
|
47
|
+
email: chris@whatbirdthings.com
|
48
|
+
executables: []
|
49
|
+
|
50
|
+
extensions: []
|
51
|
+
|
52
|
+
extra_rdoc_files:
|
53
|
+
- LICENSE
|
54
|
+
- README.textile
|
55
|
+
files:
|
56
|
+
- .document
|
57
|
+
- .gitignore
|
58
|
+
- API_RESPONSES.txt
|
59
|
+
- LICENSE
|
60
|
+
- Rakefile
|
61
|
+
- VERSION
|
62
|
+
- lib/penny_sms.rb
|
63
|
+
- penny_sms_muncher.gemspec
|
64
|
+
- spec/penny_sms_muncher_spec.rb
|
65
|
+
- spec/spec.opts
|
66
|
+
- spec/spec_helper.rb
|
67
|
+
- README.textile
|
68
|
+
has_rdoc: true
|
69
|
+
homepage: http://github.com/whatbird/penny_sms_muncher
|
70
|
+
licenses: []
|
71
|
+
|
72
|
+
post_install_message:
|
73
|
+
rdoc_options:
|
74
|
+
- --charset=UTF-8
|
75
|
+
require_paths:
|
76
|
+
- lib
|
77
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: "0"
|
82
|
+
version:
|
83
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - ">="
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: "0"
|
88
|
+
version:
|
89
|
+
requirements: []
|
90
|
+
|
91
|
+
rubyforge_project:
|
92
|
+
rubygems_version: 1.3.5
|
93
|
+
signing_key:
|
94
|
+
specification_version: 3
|
95
|
+
summary: A little bit of code to make PennySMS XML requests.
|
96
|
+
test_files:
|
97
|
+
- spec/penny_sms_muncher_spec.rb
|
98
|
+
- spec/spec_helper.rb
|