smsinabox 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,40 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe Smsinabox::SentMessage do
4
+ before(:each) do
5
+ xml = <<-EOF
6
+ <api_result>
7
+ <data>
8
+ <changeid>26053853</changeid>
9
+ <sentid>339611089</sentid>
10
+ <eventid>33369735</eventid>
11
+ <smstype>SMS</smstype>
12
+ <numto>27123456789</numto>
13
+ <data>Foo</data>
14
+ <flash>false</flash>
15
+ <customerid/>
16
+ <status>DELIVRD</status>
17
+ <statusdate>07/Aug/2009 14:13:44</statusdate>
18
+ </data>
19
+ </api_result>
20
+ EOF
21
+
22
+ @xml_response = Nokogiri::XML( xml )
23
+ end
24
+
25
+ it "should parse the sent message from the response" do
26
+ sent = Smsinabox::SentMessage.from_response( @xml_response.xpath('/api_result/data').first )
27
+
28
+ sent.id.should == 339611089
29
+ sent.change_id.should == 26053853
30
+ sent.event_id.should == 33369735
31
+ sent.type.should == 'SMS'
32
+ sent.to.should == '27123456789'
33
+ sent.message.should == 'Foo'
34
+ sent.flash.should be_false
35
+ sent.customer_id.should == ''
36
+ sent.status.should == 'DELIVRD'
37
+ sent.should be_delivered
38
+ sent.status_date.should == '07/Aug/2009 14:13:44'
39
+ end
40
+ end
@@ -0,0 +1,80 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ describe Smsinabox, "configuration" do
4
+
5
+ it "should have a default base URI" do
6
+ Smsinabox.uri.to_s.should == "http://www.mymobileapi.com/api5/http5.aspx"
7
+ end
8
+
9
+ it "should accept a username" do
10
+ Smsinabox.username = 'test'
11
+ Smsinabox.username.should eql('test')
12
+ end
13
+
14
+ it "should accept a password" do
15
+ Smsinabox.password = 'test'
16
+ Smsinabox.password.should eql('test')
17
+ end
18
+
19
+ end
20
+
21
+ describe Smsinabox do
22
+ before do
23
+ Smsinabox.username = 'test'
24
+ Smsinabox.password = 'test'
25
+ end
26
+
27
+ it "should know how much credit is available" do
28
+ #response = Object.new
29
+ #response.expects(:body).returns("<api_result><data><credits>0</credits></data><call_result><result>True</result><error /></call_result></api_result>")
30
+ #Net::HTTP.expects(:post_form).with( Smsinabox.uri, { :Type => 'credits', :Username => 'test', :Password => 'test'} ).returns( response )
31
+ mock_request(
32
+ {'Type' => 'credits', 'Username' => 'test', 'Password' => 'test'},
33
+ "<api_result><data><credits>0</credits></data><call_result><result>True</result><error /></call_result></api_result>"
34
+ )
35
+
36
+ Smsinabox.credit_remaining.should be(0)
37
+ end
38
+
39
+ it "should be able to deliver SMS-type messages" do
40
+ mock_request(
41
+ has_entries({ 'Type' => 'sendparam', 'Username' => 'test', 'Password' => 'test', 'numto' => '0123456789', 'data1' => 'Foo' }),
42
+ "<api_result><send_info><eventid>1</eventid><credits>1</credits><msgs_success>1</msgs_success></send_info><entries_success><numto>0123456789</numto></entries_success></api_result>"
43
+ )
44
+
45
+ sms = Smsinabox::SMS.new( :recipient => '0123456789', :body => 'Foo')
46
+ res = Smsinabox.deliver( sms )
47
+
48
+ res.should be_a( Smsinabox::DeliveryReport )
49
+ res.success_count.should be(1)
50
+ end
51
+
52
+ it "should be able to retrieve replies" do
53
+ mock_request(
54
+ has_entries({'Type' => 'replies', 'Username' => 'test', 'Password' => 'test', 'XMLData' => "<reply><settings><id>0</id><max_recs>100</max_recs><cols_returned>eventid,numfrom,receiveddata,received,sentid,sentdata,sentdatetime,sentcustomerid</cols_returned></settings></reply>"}),
55
+ "<api_result><data><replyid></replyid><eventid></eventid><numfrom>0123456789</numfrom><receiveddata>Bar</receiveddata><sentid></sentid><sentdata>Foo</sentdata><sentcustomerid/><received></received><senddatetime></senddatetime></data></api_result>"
56
+ )
57
+
58
+ Smsinabox.replies do |reply|
59
+ reply.should be_a( Smsinabox::Reply )
60
+ reply.from.should == '0123456789'
61
+ reply.message.should == 'Bar'
62
+ reply.original.should == 'Foo'
63
+ end
64
+ end
65
+
66
+ it "should be able to retrieve sent data" do
67
+ mock_request(
68
+ has_entries({'Type' => 'sent', 'Username' => 'test', 'Password' => 'test', 'XMLData' => "<sent><settings><id>0</id><max_recs>100</max_recs><cols_returned>sentid,eventid,smstype,numto,data,flash,customerid,status,statusdate</cols_returned></settings></sent>"}),
69
+ "<api_result><data><changeid></changeid><sentid></sentid><eventid></eventid><smstype>SMS</smstype><numto>0123456789</numto><data>Foo</data><flash>false</flash><customerid/><status>DELIVRD</status><statusdate></statusdate></data></api_result>"
70
+ )
71
+
72
+ results = Smsinabox.sent
73
+ results.size.should == 1
74
+
75
+ item = results.first
76
+ item.to.should == '0123456789'
77
+ item.message.should == 'Foo'
78
+ item.type.should == 'SMS'
79
+ end
80
+ end
@@ -0,0 +1 @@
1
+ --colour
@@ -0,0 +1,40 @@
1
+ begin
2
+ require 'spec'
3
+ rescue LoadError
4
+ require 'rubygems' unless ENV['NO_RUBYGEMS']
5
+ gem 'rspec'
6
+ require 'spec'
7
+ end
8
+
9
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
10
+ require 'smsinabox'
11
+
12
+ Spec::Runner.configure do |config|
13
+ # == Mock Framework
14
+ #
15
+ # RSpec uses it's own mocking framework by default. If you prefer to
16
+ # use mocha, flexmock or RR, uncomment the appropriate line:
17
+ #
18
+ config.mock_with :mocha
19
+ # config.mock_with :flexmock
20
+ # config.mock_with :rr
21
+ end
22
+
23
+ # Horrible tactics to mock Net::HTTP
24
+ def mock_request( params, response_body )
25
+ mock_post = {}
26
+ mock_post.expects(:set_form_data).with(params)
27
+ #mock.expects(:[]=).with('user-agent', anything)
28
+
29
+ url = Smsinabox.uri
30
+ Net::HTTP::Post.expects(:new).with( url.path ).returns(mock_post)
31
+
32
+ response = Net::HTTPSuccess.new('1.1', 200, 'OK')
33
+ response.instance_variable_set :@body, response_body
34
+ response.instance_variable_set :@read, true
35
+
36
+ mock_http = Object.new
37
+ mock_http.expects(:start).returns(response)
38
+
39
+ Net::HTTP.expects(:new).with( url.host, url.port ).returns(mock_http)
40
+ end
@@ -0,0 +1,34 @@
1
+ desc 'Release the website and new gem version'
2
+ task :deploy => [:check_version, :website, :release] do
3
+ puts "Remember to create SVN tag:"
4
+ puts "svn copy svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/trunk " +
5
+ "svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/tags/REL-#{VERS} "
6
+ puts "Suggested comment:"
7
+ puts "Tagging release #{CHANGES}"
8
+ end
9
+
10
+ desc 'Runs tasks website_generate and install_gem as a local deployment of the gem'
11
+ task :local_deploy => [:website_generate, :install_gem]
12
+
13
+ task :check_version do
14
+ unless ENV['VERSION']
15
+ puts 'Must pass a VERSION=x.y.z release version'
16
+ exit
17
+ end
18
+ unless ENV['VERSION'] == VERS
19
+ puts "Please update your version.rb to match the release version, currently #{VERS}"
20
+ exit
21
+ end
22
+ end
23
+
24
+ desc 'Install the package as a gem, without generating documentation(ri/rdoc)'
25
+ task :install_gem_no_doc => [:clean, :package] do
26
+ sh "#{'sudo ' unless Hoe::WINDOZE }gem install pkg/*.gem --no-rdoc --no-ri"
27
+ end
28
+
29
+ namespace :manifest do
30
+ desc 'Recreate Manifest.txt to include ALL files'
31
+ task :refresh do
32
+ `rake check_manifest | patch -p0 > Manifest.txt`
33
+ end
34
+ end
@@ -0,0 +1,7 @@
1
+ task :ruby_env do
2
+ RUBY_APP = if RUBY_PLATFORM =~ /java/
3
+ "jruby"
4
+ else
5
+ "ruby"
6
+ end unless defined? RUBY_APP
7
+ end
@@ -0,0 +1,21 @@
1
+ begin
2
+ require 'spec'
3
+ rescue LoadError
4
+ require 'rubygems' unless ENV['NO_RUBYGEMS']
5
+ require 'spec'
6
+ end
7
+ begin
8
+ require 'spec/rake/spectask'
9
+ rescue LoadError
10
+ puts <<-EOS
11
+ To use rspec for testing you must install rspec gem:
12
+ gem install rspec
13
+ EOS
14
+ exit(0)
15
+ end
16
+
17
+ desc "Run the specs under spec/models"
18
+ Spec::Rake::SpecTask.new do |t|
19
+ t.spec_opts = ['--options', "spec/spec.opts"]
20
+ t.spec_files = FileList['spec/**/*_spec.rb']
21
+ end
@@ -0,0 +1,9 @@
1
+ # stubs for the website generation
2
+ # To install the website framework:
3
+ # script/generate website
4
+
5
+ task :website_generate
6
+
7
+ task :website_upload
8
+
9
+ task :website => :publish_docs
metadata ADDED
@@ -0,0 +1,137 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: smsinabox
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - kenneth.kalmer@gmail.com
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2010-06-18 00:00:00 +02:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: nokogiri
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 1.3.3
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: cucumber
37
+ type: :development
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "0"
44
+ version:
45
+ description: Ruby API for sending text messages via http://www.smsinabox.co.za
46
+ email: kenneth.kalmer@gmail.com
47
+ executables:
48
+ - sms-credit
49
+ - sms-send
50
+ - sms-setup
51
+ extensions: []
52
+
53
+ extra_rdoc_files:
54
+ - History.txt
55
+ - PostInstall.txt
56
+ - README.rdoc
57
+ - TODO.txt
58
+ files:
59
+ - .gitignore
60
+ - History.txt
61
+ - PostInstall.txt
62
+ - README.rdoc
63
+ - Rakefile
64
+ - TODO.txt
65
+ - bin/sms-credit
66
+ - bin/sms-send
67
+ - bin/sms-setup
68
+ - lib/smsinabox.rb
69
+ - lib/smsinabox/configuration.rb
70
+ - lib/smsinabox/delivery_report.rb
71
+ - lib/smsinabox/exceptions.rb
72
+ - lib/smsinabox/message.rb
73
+ - lib/smsinabox/reply.rb
74
+ - lib/smsinabox/sent_message.rb
75
+ - lib/smsinabox/sms.rb
76
+ - script/console
77
+ - script/destroy
78
+ - script/generate
79
+ - smsinabox.gemspec
80
+ - spec/delivery_report_spec.rb
81
+ - spec/fixtures/sendparam_response.xml
82
+ - spec/message_spec.rb
83
+ - spec/reply_spec.rb
84
+ - spec/sent_message_spec.rb
85
+ - spec/smsinabox_spec.rb
86
+ - spec/spec.opts
87
+ - spec/spec_helper.rb
88
+ - tasks/deployment.rake
89
+ - tasks/environment.rake
90
+ - tasks/rspec.rake
91
+ - tasks/website.rake
92
+ has_rdoc: true
93
+ homepage: http://github.com/kennethkalmer/smsinabox
94
+ licenses: []
95
+
96
+ post_install_message: |
97
+
98
+ For more information on smsinabox, see http://www.opensourcery.co.za/smsinabox
99
+
100
+ Setup your account by running sms-setup now. You can then use the following
101
+ commands to interact with SMS in a Box:
102
+
103
+ sms-send: Send SMS messages
104
+ sms-credit: Quick overview of the credit available
105
+ sms-replies: Quick access to your replies
106
+ sms-setup: To change the account details
107
+
108
+ rdoc_options:
109
+ - --charset=UTF-8
110
+ require_paths:
111
+ - lib
112
+ required_ruby_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: "0"
117
+ version:
118
+ required_rubygems_version: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: "0"
123
+ version:
124
+ requirements: []
125
+
126
+ rubyforge_project:
127
+ rubygems_version: 1.3.5
128
+ signing_key:
129
+ specification_version: 3
130
+ summary: Ruby API for sending text messages via http://www.smsinabox.co.za
131
+ test_files:
132
+ - spec/delivery_report_spec.rb
133
+ - spec/message_spec.rb
134
+ - spec/reply_spec.rb
135
+ - spec/sent_message_spec.rb
136
+ - spec/smsinabox_spec.rb
137
+ - spec/spec_helper.rb