smsRuby 1.0.0-x86-linux

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,182 @@
1
+ require 'smsruby/adm_connection'
2
+ require 'rubygems'
3
+ require 'sqlite3'
4
+ require 'yaml'
5
+
6
+ #
7
+ # The Sender class represent the send layer. Reference a set of strategys wich
8
+ # will perform the same function but in a diferent way, that is, gather all the
9
+ # information required and comunicate with the Admconnection layer. This class
10
+ # it's called the context class, an acts as the user of the strategys.
11
+ #
12
+ class Sender
13
+
14
+ # Reference an instance for the Connection Administrator
15
+ attr_reader :adm
16
+ # Specify the destination number(s) to deliver the sms
17
+ attr_reader :dst
18
+ # Specify the messaje that will be deliver to destiny
19
+ attr_reader :msj
20
+ # Specify whether a delivered report will be generated or not (1: yes, 0: no)
21
+ attr_reader :report
22
+ # Specify a particular number for the smsc. If not specifyed default number will be used
23
+ attr_reader :smsc
24
+ # Specify the time of validity in minutos of the delivered sms
25
+ attr_reader :validity
26
+ # Specify the location of the file used to read send configuration
27
+ attr_reader :location
28
+ # Reference the type of send that will be used to set the parameters and deliver the message
29
+ attr_accessor :sendtype
30
+
31
+
32
+ #
33
+ # Set methods for the options of a message. Including validations.
34
+ #
35
+ def report=(report)
36
+ report = report.to_i unless report.class == Fixnum
37
+ unless report == 0 or report == 1
38
+ raise ArgumentError.new('Report only could be 0 or 1')
39
+ end
40
+ @report = report
41
+ end
42
+
43
+ def smsc=(smsc)
44
+
45
+ @smsc = smsc
46
+ end
47
+
48
+ def validity=(validity)
49
+ validity = validity.to_s unless validity.class == String
50
+ @validity = validity
51
+ end
52
+
53
+ def dst=(dst)
54
+ unless dst.class == Array
55
+ raise 'The destinatary must be an Array'
56
+ end
57
+ @dst = dst
58
+ end
59
+
60
+ #
61
+ # Obtains an instance of the Connection Administrator to control all existing
62
+ # connections. Due to the use of a singleton in the administrator, the same
63
+ # created instance will be obtain, or will be created if an instance doesn't
64
+ # exist. It also establish the strategy to be use acording to the specified by
65
+ # the user. An Exception is thrown if the instance of Admconnection fail
66
+ #
67
+ def initialize(sendtype,location= 'config_sms.yml')
68
+ begin
69
+ @adm = AdmConnection.instance
70
+ @location=location
71
+ @sendtype=sendtype
72
+ @report = 0
73
+ @smsc = nil
74
+ @validity = '0'
75
+ @dst =[]
76
+ end
77
+ end
78
+
79
+ #
80
+ # Establish the option values to be use for sending the SMS message
81
+ #
82
+ def setconfig(dst,smsc,report,validity)
83
+ @dst=dst
84
+ @smsc=smsc
85
+ @report=report
86
+ @validity=validity
87
+ end
88
+
89
+ #
90
+ # Combine all option values into a hash to relate them
91
+ #
92
+ def to_hash
93
+ { :type => 'send',
94
+ :dst => self.dst,
95
+ :msj => self.msj,
96
+ :smsc => self.smsc,
97
+ :report => self.report,
98
+ :validity => self.validity}
99
+ end
100
+
101
+ #
102
+ # Represent the send method for the Send class. The message to be send is passed
103
+ # as the only parameter and depending on the choosen strategy the other option
104
+ # values will be obtain diferently. The instance of the context class will be
105
+ # passed to the strategy, and the send function will be executed only if an
106
+ # instance of the Connection Administrator exist.
107
+ #
108
+ def send(msj)
109
+ begin
110
+ @msj = msj
111
+ !@adm.avlconn ? (raise "There are no active connections") : t=Thread.new{@sendtype.send(self){|e| yield e if block_given?}}
112
+ t[:type]='sp'
113
+ rescue Exception => e
114
+ @adm.log.error "Error sending message :: #{e.message}" unless @adm.log.nil?
115
+ raise e.message
116
+ end
117
+ end
118
+
119
+ end
120
+
121
+ #
122
+ # The Plainsend class represent one of the strategys and will use the recieve
123
+ # instance of the context class to invoke the send function of the Connection
124
+ # Administrator and also for getting all option values previosly set in the
125
+ # context class
126
+ #
127
+ class Plainsend
128
+
129
+ def send(context)
130
+ context.adm.send(context.to_hash){|e| yield e if block_given?}
131
+ end
132
+
133
+ end
134
+
135
+ #
136
+ # The Configsend class represent a strategy wich will use the received context
137
+ # class to invoke the send function of the Connection Administrator. With this
138
+ # strategy the option values will be obtain from a configuration file previosly
139
+ # created by user.
140
+ #
141
+ class Configsend
142
+ def send(context)
143
+ begin
144
+ parse = YAML::parse(File.open(context.location))
145
+ config = parse.transform
146
+ dst = config['parameters']['dst'].split(',')
147
+ context.dst=dst
148
+ context.validity=(config['parameters']['validity']).to_s if !(config['parameters']['validity']=~/[0-9]*/)
149
+ context.report=config['parameters']['report'] if !(config['parameters']['report']== 0 or config['parameters']['report'] == 1)
150
+ context.smsc=config['parameters']['smsc'] if !(config['parameters']['smsc']=~/[0-9]*/)
151
+ context.adm.send(context.to_hash){|e| yield e if block_given?}
152
+ rescue Exception=> e
153
+ context.adm.log.error "Configsend Exception: #{e.message}"
154
+ raise e.message
155
+ end
156
+ end
157
+ end
158
+
159
+ #
160
+ # The BDsend class represent a strategy wich will use the context class to invoke
161
+ # the send function of the Connection Administrator. With this strategy the
162
+ # destination option value will be taken from a database specified in the configuration
163
+ # file, and the other option values will be taken from the context class
164
+ #
165
+ class BDsend
166
+
167
+ def send(context)
168
+ begin
169
+ parse = YAML::parse(File.open(context.location))
170
+ config = parse.transform
171
+ db = SQLite3::Database.new(config['database']['db']+'.s3db')
172
+ sql = "Select " + config['database']['field'] + " from " + config['database']['table']
173
+ a = db.execute(sql)
174
+ context.dst=a
175
+ context.adm.send(context.to_hash){|e| yield e if block_given?}
176
+ rescue Exception=> e
177
+ context.adm.log.error "BDsend Exception: #{e.message}"
178
+ raise e.message
179
+ end
180
+ end
181
+
182
+ end
@@ -0,0 +1,182 @@
1
+ require 'adm_connection'
2
+ require 'rubygems'
3
+ require 'sqlite3'
4
+ require 'yaml'
5
+
6
+ #
7
+ # The Sender class represent the send layer. Reference a set of strategys wich
8
+ # will perform the same function but in a diferent way, that is, gather all the
9
+ # information required and comunicate with the Admconnection layer. This class
10
+ # it's called the context class, an acts as the user of the strategys.
11
+ #
12
+ class Sender
13
+
14
+ # Reference an instance for the Connection Administrator
15
+ attr_reader :adm
16
+ # Specify the destination number(s) to deliver the sms
17
+ attr_reader :dst
18
+ # Specify the messaje that will be deliver to destiny
19
+ attr_reader :msj
20
+ # Specify whether a delivered report will be generated or not (1: yes, 0: no)
21
+ attr_reader :report
22
+ # Specify a particular number for the smsc. If not specifyed default number will be used
23
+ attr_reader :smsc
24
+ # Specify the time of validity in minutos of the delivered sms
25
+ attr_reader :validity
26
+ # Specify the location of the file used to read send configuration
27
+ attr_reader :location
28
+ # Reference the type of send that will be used to set the parameters and deliver the message
29
+ attr_accessor :sendtype
30
+
31
+
32
+ #
33
+ # Set methods for the options of a message. Including validations.
34
+ #
35
+ def report=(report)
36
+ report = report.to_i unless report.class == Fixnum
37
+ unless report == 0 or report == 1
38
+ raise ArgumentError.new('Report only could be 0 or 1')
39
+ end
40
+ @report = report
41
+ end
42
+
43
+ def smsc=(smsc)
44
+
45
+ @smsc = smsc
46
+ end
47
+
48
+ def validity=(validity)
49
+ validity = validity.to_s unless validity.class == String
50
+ @validity = validity
51
+ end
52
+
53
+ def dst=(dst)
54
+ unless dst.class == Array
55
+ raise 'The destinatary must be an Array'
56
+ end
57
+ @dst = dst
58
+ end
59
+
60
+ #
61
+ # Obtains an instance of the Connection Administrator to control all existing
62
+ # connections. Due to the use of a singleton in the administrator, the same
63
+ # created instance will be obtain, or will be created if an instance doesn't
64
+ # exist. It also establish the strategy to be use acording to the specified by
65
+ # the user. An Exception is thrown if the instance of Admconnection fail
66
+ #
67
+ def initialize(sendtype,location= 'config_sms.yml')
68
+ begin
69
+ @adm = AdmConnection.instance
70
+ @location=location
71
+ @sendtype=sendtype
72
+ @report = 0
73
+ @smsc = nil
74
+ @validity = '0'
75
+ @dst =[]
76
+ end
77
+ end
78
+
79
+ #
80
+ # Establish the option values to be use for sending the SMS message
81
+ #
82
+ def setconfig(dst,smsc,report,validity)
83
+ @dst=dst
84
+ @smsc=smsc
85
+ @report=report
86
+ @validity=validity
87
+ end
88
+
89
+ #
90
+ # Combine all option values into a hash to relate them
91
+ #
92
+ def to_hash
93
+ { :type => 'send',
94
+ :dst => self.dst,
95
+ :msj => self.msj,
96
+ :smsc => self.smsc,
97
+ :report => self.report,
98
+ :validity => self.validity}
99
+ end
100
+
101
+ #
102
+ # Represent the send method for the Send class. The message to be send is passed
103
+ # as the only parameter and depending on the choosen strategy the other option
104
+ # values will be obtain diferently. The instance of the context class will be
105
+ # passed to the strategy, and the send function will be executed only if an
106
+ # instance of the Connection Administrator exist.
107
+ #
108
+ def send(msj)
109
+ begin
110
+ @msj = msj
111
+ !@adm.avlconn ? (raise "There are no active connections") : t=Thread.new{@sendtype.send(self){|e| yield e if block_given?}}
112
+ t[:type]='sp'
113
+ rescue Exception => e
114
+ @adm.log.error "Error sending message :: #{e.message}" unless @adm.log.nil?
115
+ raise e.message
116
+ end
117
+ end
118
+
119
+ end
120
+
121
+ #
122
+ # The Plainsend class represent one of the strategys and will use the recieve
123
+ # instance of the context class to invoke the send function of the Connection
124
+ # Administrator and also for getting all option values previosly set in the
125
+ # context class
126
+ #
127
+ class Plainsend
128
+
129
+ def send(context)
130
+ context.adm.send(context.to_hash){|e| yield e if block_given?}
131
+ end
132
+
133
+ end
134
+
135
+ #
136
+ # The Configsend class represent a strategy wich will use the received context
137
+ # class to invoke the send function of the Connection Administrator. With this
138
+ # strategy the option values will be obtain from a configuration file previosly
139
+ # created by user.
140
+ #
141
+ class Configsend
142
+ def send(context)
143
+ begin
144
+ parse = YAML::parse(File.open(context.location))
145
+ config = parse.transform
146
+ dst = config['parameters']['dst'].split(',')
147
+ context.dst=dst
148
+ context.validity=(config['parameters']['validity']).to_s if !(config['parameters']['validity']=~/[0-9]*/)
149
+ context.report=config['parameters']['report'] if !(config['parameters']['report']== 0 or config['parameters']['report'] == 1)
150
+ context.smsc=config['parameters']['smsc'] if !(config['parameters']['smsc']=~/[0-9]*/)
151
+ context.adm.send(context.to_hash){|e| yield e if block_given?}
152
+ rescue Exception=> e
153
+ context.adm.log.error "Configsend Exception: #{e.message}"
154
+ raise e.message
155
+ end
156
+ end
157
+ end
158
+
159
+ #
160
+ # The BDsend class represent a strategy wich will use the context class to invoke
161
+ # the send function of the Connection Administrator. With this strategy the
162
+ # destination option value will be taken from a database specified in the configuration
163
+ # file, and the other option values will be taken from the context class
164
+ #
165
+ class BDsend
166
+
167
+ def send(context)
168
+ begin
169
+ parse = YAML::parse(File.open(context.location))
170
+ config = parse.transform
171
+ db = SQLite3::Database.new(config['database']['db']+'.s3db')
172
+ sql = "Select " + config['database']['field'] + " from " + config['database']['table']
173
+ a = db.execute(sql)
174
+ context.dst=a
175
+ context.adm.send(context.to_hash){|e| yield e if block_given?}
176
+ rescue Exception=> e
177
+ context.adm.log.error "BDsend Exception: #{e.message}"
178
+ raise e.message
179
+ end
180
+ end
181
+
182
+ end
metadata ADDED
@@ -0,0 +1,84 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: smsRuby
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: x86-linux
6
+ authors:
7
+ - Alejandro Garcia Tome, Yennifer Chacon
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-09-07 00:00:00 -04:30
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: sqlite3-ruby
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 1.2.4
24
+ version:
25
+ description:
26
+ email: hewital@gmail.com, ychacon@gmail.com
27
+ executables: []
28
+
29
+ extensions:
30
+ - ext/extconf.rb
31
+ extra_rdoc_files:
32
+ - README.rdoc
33
+ files:
34
+ - ext/sms_wrap.c
35
+ - ext/RecieveSMS.o
36
+ - ext/extconf.rb
37
+ - ext/sms_wrap.o
38
+ - ext/SendSMS.o
39
+ - ext/sms.i
40
+ - ext/sms.o
41
+ - ext/Makefile
42
+ - ext/sms.so
43
+ - lib/smsruby.rb
44
+ - lib/smsruby.rb~
45
+ - lib/smsruby
46
+ - lib/smsruby/send.rb~
47
+ - lib/smsruby/adm_connection.rb
48
+ - lib/smsruby/receive.rb
49
+ - lib/smsruby/receive.rb~
50
+ - lib/smsruby/connection.rb
51
+ - lib/smsruby/adm_connection.rb~
52
+ - lib/smsruby/connection.rb~
53
+ - lib/smsruby/error.rb
54
+ - lib/smsruby/send.rb
55
+ - lib/sms.so
56
+ - README.rdoc
57
+ has_rdoc: true
58
+ homepage:
59
+ post_install_message:
60
+ rdoc_options: []
61
+
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: "0"
69
+ version:
70
+ required_rubygems_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: "0"
75
+ version:
76
+ requirements: []
77
+
78
+ rubyforge_project:
79
+ rubygems_version: 1.3.1
80
+ signing_key:
81
+ specification_version: 2
82
+ summary: An easy way to send and receive SMS message.
83
+ test_files: []
84
+