smsc_manager 0.3.3 → 0.3.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.
@@ -7,31 +7,44 @@ module SmscManager
7
7
  # this class helps to broadcast sms to list
8
8
  class Broadcast
9
9
  @@MAX_THROUGHPUT =5 # in messages per second
10
- attr_accessor :text, :source, :list, :num_threads, :attempts, :sent
11
- def initialize(txt,lst,src='888')
12
- @guard = Mutex.new
13
- self.text=txt
14
- self.list=lst
10
+ # old attr_accessor :text, :source, :list, :num_threads, :attempts, :sent
11
+ attr_accessor :text, :source, :list, :num_threads, :attempts, :sent
12
+ def common_setup(src)
13
+ @guard = Mutex.new
15
14
  self.attempts=0
16
15
  self.sent=0
17
- # puts "lst.size is #{lst.size}"
18
- raise BadList.new("use send_sms for lists of size 1") if lst.class==String
19
16
  self.source=src
20
- self.calculate_threads
17
+ end
18
+ # initialize with list of destionations, texts eg different text for each destination
19
+ # initialize with common text and list of destinations
20
+ def initialize(src, lst, txt=nil)
21
+ common_setup(src)
22
+ self.list=lst
23
+ self.text=txt
24
+ # puts "lst.size is #{lst.size}"
25
+ raise BadList.new("use send_sms for lists of size 1") if lst.class==String
21
26
  @list_queue=Queue.new
22
- self.populate_queue(lst)
27
+ self.populate_queue(lst)
23
28
  self.send
24
29
  # raise InvalidPrefix.new("invalid prefix: valid prefix area:" + Sms.valid ) if !prefix_test
25
30
  end
31
+
26
32
  # populate thread safe queue
27
33
  def populate_queue(lst)
28
-
29
- # puts "list is #{lst}"
30
- lst.each {|dst| @list_queue << dst
34
+ puts "list is #{lst}"
35
+ lst.each {|key, val|
36
+ # txt=line[1] ||
37
+ # if value set then send it else send default text value
38
+ txt2 = val==nil ? self.text : val
39
+ dst = key
40
+ puts "text is #{txt2} dest is #{dst}"
41
+ sms=SmscManager::Sms.new(txt2,dst,self.source)
42
+ @list_queue << sms
31
43
  # puts " dst is #{dst}"
32
44
  }
33
45
  puts "populate queue list size #{@list_queue.size}"
34
46
  end
47
+
35
48
  #calculate number of threads
36
49
  def calculate_threads
37
50
  self.num_threads = @@MAX_THROUGHPUT +1 #sleep 1 after every message
@@ -40,6 +53,7 @@ class Broadcast
40
53
 
41
54
  # send using number of threads
42
55
  def send
56
+ self.calculate_threads
43
57
  smsc=SmscManager::SmscConnection.factory
44
58
  c=0
45
59
  thread_mgr=[]
@@ -49,9 +63,8 @@ class Broadcast
49
63
  thread_mgr << Thread.new(c+=1) { |ctmp|
50
64
  #puts " #{Time.now}Creating retry thread: #{ctmp}"
51
65
  begin
52
- dest = @list_queue.pop
53
- sms=SmscManager::Sms.new(self.text,dest,self.source)
54
- puts "Thread #{ctmp} destination: #{dest} text: #{self.text}"
66
+ sms = @list_queue.pop
67
+ puts "Thread #{ctmp} destination: #{sms.destination} text: #{sms.text}"
55
68
  self.send_sms(smsc,sms)
56
69
  end until @list_queue.empty?
57
70
  }
@@ -2,9 +2,10 @@
2
2
  module SmscManager
3
3
  class InvalidPrefix < RuntimeError
4
4
  end
5
- # this class defines setting up a sms
5
+ # this class defines creating a sms
6
+ # and strips out the unnecessary junk
6
7
  class Sms
7
- @@MAX_SIZE=1500 # 3*160 # max 3 sms
8
+ @@MAX_SIZE=1500 # 3*160 # max 1500 characters, change if your smsc suports less
8
9
  @@msisdn_valid_prefix= %w{ 63999 999 0999 1000 888 +63999 }
9
10
  attr_accessor :text, :source, :destination, :orig_txt
10
11
  def self.max_length
@@ -2,7 +2,7 @@ module SmscManager #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 3
5
- TINY = 3
5
+ TINY = 4
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -42,22 +42,27 @@ class SmscManagerTest < Test::Unit::TestCase
42
42
  end
43
43
  def test_broadcast_two
44
44
  list = %w(9991 9992)
45
- b=SmscManager::Broadcast.new("hello there",list)
45
+ b=SmscManager::Broadcast.new('888',list,"hello there")
46
46
  assert b.attempts ==2, "did not send two sms"
47
47
  end
48
48
  def test_broadcast_five
49
49
  list = %w(9991 9992 9993 9994 9995)
50
- b=SmscManager::Broadcast.new("hello there",list)
50
+ b=SmscManager::Broadcast.new('888',list,"hello there")
51
51
  assert b.attempts ==5, "did not send 5 sms"
52
52
  end
53
53
  def test_broadcast_12
54
54
  list = %w(9991 9992 9993 9994 9995 9996 99910 99920 99930 99940 99950 99960)
55
- b=SmscManager::Broadcast.new("hello there",list)
55
+ b=SmscManager::Broadcast.new('888',list,"hello there")
56
56
  assert b.attempts ==12, "did not send 12 sms"
57
57
  end
58
+ def test_broadcast_multi_text
59
+ list = {'9991' => 'text1', '9992' => 'text2', '9993' => 'text3'}
60
+ b=SmscManager::Broadcast.new('888',list)
61
+ assert b.attempts ==3, "did not send 3 sms"
62
+ end
58
63
  def test_broadcast_six
59
64
  list = %w(9991 9992 9993 9994 9995 9996)
60
- b=SmscManager::Broadcast.new("second hello there",list)
65
+ b=SmscManager::Broadcast.new('888',list,"second hello there")
61
66
  assert b.attempts ==6, "did not send 6 sms"
62
67
  end
63
68
  def test_find_google_mod
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.2
3
3
  specification_version: 1
4
4
  name: smsc_manager
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.3.3
7
- date: 2007-03-21 00:00:00 +08:00
6
+ version: 0.3.4
7
+ date: 2007-03-22 00:00:00 +08:00
8
8
  summary: connection to smsc via http using kannel
9
9
  require_paths:
10
10
  - lib