sms_gateway 0.0.2 → 0.1.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/README.rdoc CHANGED
@@ -31,7 +31,7 @@ To deliver SMS asynchronously this gem makes use of resque, a
31
31
  popular queing system basd on the key-value data store redis. You need
32
32
  to have a working resque and redis setup if you want to use
33
33
  the aynchronous feature. For more information on resque visit
34
- https://github.com/defunkt/resque.
34
+ https://github.com/defunkt/resque .
35
35
 
36
36
 
37
37
  = Usage
@@ -64,10 +64,11 @@ resque documentation):
64
64
 
65
65
  So far the gem is pretty limited. Ideas for following version are:
66
66
 
67
- * unit tests
68
- * other sms gateway providers
67
+ * more and better unit tests
68
+ * more sms gateway apis
69
69
  * decoupling of resque
70
70
 
71
+
71
72
  = License
72
73
 
73
74
  GPLv3. Copyright 2011 Kai Rubarth.
data/Rakefile CHANGED
@@ -1,2 +1,24 @@
1
1
  require 'bundler'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+
2
5
  Bundler::GemHelper.install_tasks
6
+
7
+ desc 'Run unit tests'
8
+ Rake::TestTask.new(:test) do |test|
9
+ test.libs << 'lib' << 'test'
10
+ test.pattern = 'test/**/*_test.rb'
11
+ test.verbose = true
12
+ end
13
+
14
+ desc 'Generate Documentation'
15
+ Rake::RDocTask.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'SmsGateway'
18
+ rdoc.options << '--line-numbers' << '--inline_source'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+
24
+
@@ -6,8 +6,11 @@ module SmsGateway
6
6
  require 'httparty'
7
7
  include HTTParty
8
8
  base_uri 'http://www.smsglobal.com'
9
+
9
10
  def initialize(config={})
10
- @config = SmsGateway::Base.config
11
+ @config = {:user => SmsGateway::Base.user, :password => SmsGateway::Base.password,
12
+ :from => SmsGateway::Base.from}
13
+ @config.merge!(config)
11
14
  end
12
15
 
13
16
  def send_sms(sms)
@@ -0,0 +1,26 @@
1
+ module SmsGateway
2
+
3
+ module Adapters
4
+
5
+ class SmsTrade
6
+ require 'httparty'
7
+ include HTTParty
8
+ base_uri 'http://gateway.smstrade.de'
9
+
10
+ def initialize(config={})
11
+ @config = {:key => SmsGateway::Base.key, :from => SmsGateway::Base.from, :route => SmsGateway::Base.route}
12
+ @config.merge!(config)
13
+ end
14
+
15
+ def send_sms(sms)
16
+ options = @config.merge({:to => sms.to, :message => sms.text})
17
+ self.class.get('/', :query => options)
18
+ end
19
+
20
+ end
21
+
22
+ end
23
+
24
+ end
25
+
26
+
@@ -3,18 +3,34 @@ module SmsGateway
3
3
  class Base
4
4
 
5
5
  class << self
6
- attr_accessor :connection
7
- attr_reader :config
6
+ attr_accessor :from, :user, :password, :key, :route
7
+ attr_reader :adapter
8
+
9
+ def configure
10
+ yield(self)
11
+ end
12
+
13
+ def adapter=(underscore_name)
14
+ klassname = underscore_name.split("_").map(&:capitalize).join
15
+ klass = SmsGateway::Adapters.const_get(klassname)
16
+ @adapter = klass.new
17
+ end
18
+
19
+ def config
20
+ @config
21
+ end
8
22
 
9
23
  def config=(options)
10
24
  @config = options.symbolize_keys
11
- klassname = @config[:adapter].to_s.split("_").map(&:capitalize).join
12
- klass = SmsGateway::Adapters.const_get(klassname)
13
- self.connection = klass.new
25
+ adapter = @config.delete(:adapter)
26
+ @config.each do |k,v|
27
+ self.send "#{k}=", v
28
+ end
29
+ self.adapter = adapter
14
30
  end
15
31
 
16
32
  def deliver(options)
17
- self.connection.send_sms(SmsGateway::Sms.new(options.symbolize_keys))
33
+ self.adapter.send_sms(SmsGateway::Sms.new(options.symbolize_keys))
18
34
  end
19
35
 
20
36
  def self.deliver_later(text, to, from=Base.config[:from])
@@ -4,7 +4,8 @@ module SmsGateway
4
4
  class Sms < Struct.new(:from, :to, :text)
5
5
 
6
6
  def initialize(params)
7
- self.from = params[:from]||SmsGateway::Base.config[:from]
7
+ #self.from = params[:from]||SmsGateway::Base.config[:from]
8
+ self.from = params[:from]||SmsGateway::Base.from
8
9
  self.to = params[:to]
9
10
  self.text = params[:text]
10
11
  end
@@ -1,3 +1,4 @@
1
1
  module SmsGateway
2
- VERSION = "0.0.2"
2
+ VERSION = "0.1.0"
3
3
  end
4
+
data/lib/sms_gateway.rb CHANGED
@@ -4,6 +4,7 @@ require 'rails/generators'
4
4
  require 'sms_gateway/base'
5
5
  require 'sms_gateway/sms'
6
6
  require 'sms_gateway/adapters/sms_global'
7
+ require 'sms_gateway/adapters/sms_trade'
7
8
  require 'sms_gateway/adapters/test'
8
9
  require 'sms_gateway/jobs/sms_job'
9
10
  require 'sms_gateway/generators/install/install_generator'
data/sms_gateway.gemspec CHANGED
@@ -22,6 +22,8 @@ Gem::Specification.new do |s|
22
22
  s.add_dependency('httparty')
23
23
  s.add_dependency('resque')
24
24
 
25
+ s.add_development_dependency('webmock')
26
+
25
27
  end
26
28
 
27
29
 
@@ -0,0 +1,50 @@
1
+
2
+ require 'test_helper'
3
+
4
+ class SmsGateway::ConfigurationTest < Test::Unit::TestCase
5
+
6
+ def setup
7
+ SmsGateway::Base.configure do |config|
8
+ config.from = '123456789'
9
+ config.user = 'some_user'
10
+ config.password = 'secret'
11
+ config.adapter = 'test'
12
+ end
13
+ end
14
+
15
+ def test_parse_user
16
+ assert_equal 'some_user', SmsGateway::Base.user
17
+ end
18
+
19
+ def test_parse_password
20
+ assert_equal 'secret', SmsGateway::Base.password
21
+ end
22
+
23
+ def test_parse_from
24
+ sms = SmsGateway::Sms.new(:text => 'test')
25
+ assert_equal '123456789', sms.from
26
+ end
27
+
28
+ # def test_parse_adapter
29
+ # assert_equal SmsGateway::Adapters::Test, SmsGateway::Base.adapter
30
+ # end
31
+ #
32
+ # def test_work_config_hash
33
+ # SmsGateway::Base.config = {
34
+ # :from => 'new_from',
35
+ # :user => 'new_user',
36
+ # :password => 'new_password',
37
+ # :adapter => 'sms_global'}
38
+ #
39
+ # assert_equal 'new_from', SmsGateway::Base.from
40
+ # assert_equal 'new_user', SmsGateway::Base.user
41
+ # assert_equal 'new_password', SmsGateway::Base.password
42
+ # assert_equal SmsGateway::Adapters::SmsGlobal, SmsGateway::Base.adapter
43
+ # end
44
+
45
+ end
46
+
47
+
48
+
49
+
50
+
@@ -0,0 +1,55 @@
1
+
2
+ require 'test_helper'
3
+
4
+ class SmsGateway::Adapters::SmsGatewayTest < Test::Unit::TestCase
5
+ include SmsGateway
6
+
7
+ def setup
8
+ end
9
+
10
+ def test_sms_gateway
11
+
12
+ SmsGateway::Base.config = {
13
+ :from => '493011111111',
14
+ :user => 'userid',
15
+ :password => 'secret',
16
+ :adapter => 'sms_global'
17
+ }
18
+
19
+ stub_request(:post, "http://www.smsglobal.com/http-api.php?action=sendsms&from=493011111111&password=secret&text=hello&to=493088888888&user=userid").
20
+ to_return(:status => 200, :body => "OK: 0;", :headers => {})
21
+
22
+ sms = Sms.new(:to => '493088888888',
23
+ :text => "hello")
24
+
25
+ sms.deliver
26
+
27
+ assert_requested(:post, "http://www.smsglobal.com/http-api.php?action=sendsms&from=493011111111&password=secret&text=hello&to=493088888888&user=userid")
28
+ end
29
+
30
+
31
+ def test_sms_trade
32
+
33
+ SmsGateway::Base.config = {
34
+ :adapter => 'sms_trade',
35
+ :route => 'direct',
36
+ :key => 'KEY',
37
+ :from => 'SMSTRADE'
38
+ }
39
+
40
+ stub_request(:get, "http://gateway.smstrade.de/?from=SMSTRADE&key=KEY&message=Hello%20World&route=direct&to=491701234567").
41
+ to_return(:status => 200, :body => "", :headers => {})
42
+
43
+ sms = Sms.new(:to => '491701234567', :text => "Hello World")
44
+
45
+ sms.deliver
46
+
47
+ assert_requested(:get, "http://gateway.smstrade.de/?key=KEY&to=491701234567&message=Hello+World&route=direct&from=SMSTRADE")
48
+ end
49
+
50
+
51
+ end
52
+
53
+
54
+
55
+
@@ -0,0 +1,11 @@
1
+
2
+ require 'rubygems'
3
+ require 'test/unit'
4
+ require 'webmock/test_unit'
5
+
6
+ require 'sms_gateway'
7
+
8
+ class Test::Unit::TestCase
9
+ end
10
+
11
+
metadata CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
+ - 1
8
9
  - 0
9
- - 2
10
- version: 0.0.2
10
+ version: 0.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Kai Rubarth
@@ -15,8 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-06-20 00:00:00 -04:00
19
- default_executable:
18
+ date: 2012-01-04 00:00:00 Z
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
21
  name: httparty
@@ -46,6 +45,20 @@ dependencies:
46
45
  version: "0"
47
46
  type: :runtime
48
47
  version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: webmock
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 0
59
+ version: "0"
60
+ type: :development
61
+ version_requirements: *id003
49
62
  description: Provides an interface to SMS Gateways. So far it supports smsglobal.com.
50
63
  email:
51
64
  - kai@doxter.de
@@ -62,6 +75,7 @@ files:
62
75
  - Rakefile
63
76
  - lib/sms_gateway.rb
64
77
  - lib/sms_gateway/adapters/sms_global.rb
78
+ - lib/sms_gateway/adapters/sms_trade.rb
65
79
  - lib/sms_gateway/adapters/test.rb
66
80
  - lib/sms_gateway/base.rb
67
81
  - lib/sms_gateway/generators/install/install_generator.rb
@@ -71,7 +85,9 @@ files:
71
85
  - lib/sms_gateway/sms.rb
72
86
  - lib/sms_gateway/version.rb
73
87
  - sms_gateway.gemspec
74
- has_rdoc: true
88
+ - test/configuration_test.rb
89
+ - test/sms_gateway_test.rb
90
+ - test/test_helper.rb
75
91
  homepage: ""
76
92
  licenses: []
77
93
 
@@ -101,7 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
117
  requirements: []
102
118
 
103
119
  rubyforge_project: sms_gateway
104
- rubygems_version: 1.5.2
120
+ rubygems_version: 1.8.10
105
121
  signing_key:
106
122
  specification_version: 3
107
123
  summary: Simple and flexible interface to SMS Gateways