mfms 0.6.1 → 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/mfms/sms.rb +60 -27
  3. data/lib/mfms/version.rb +1 -1
  4. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 921af6f94d0e9ff37ddcdd548893abaaf2f1e189
4
- data.tar.gz: e30063cfc7c15a7c6c1eba2833e20ec756148128
3
+ metadata.gz: a304a95be4ad312b2af17ad65f5743c26d2d729d
4
+ data.tar.gz: 748d3e4f8c6057f1df51557688bae7c77a747ce8
5
5
  SHA512:
6
- metadata.gz: 21f16aa3ee8457767f535dbd4bb3d244230b622fc3fd682408b6df4116dfddfad753744add70bd43fa6f08306b9dd47e0139b75c7ae673e3d27598e5291ea9d9
7
- data.tar.gz: 0558b48a0d527f84f9dfea1ba0c2f306731483e5a8706ca7d063b96ad1e08756143071054864df8a767de174e66ffea105eb58c92d4c2c15f1482b5541c2300c
6
+ metadata.gz: 3bd97ba74f429ee224f42b5cb73370a4489093b7f3577a4cfca98214ba3e218bc0e6715c6422146f7d670855db78f8aa273d59cefa74ebbca27660750895d5cd
7
+ data.tar.gz: 6b32d1e99bc74fa2d1d5b8daf0290f11f81b4cd4379e0ca377aef6d660330918f6a9a4b1249e7d768b6ebcf1cdb6a95ea9456d93f325fd36afb3b02009c01518
@@ -10,26 +10,33 @@ module Mfms
10
10
  attr_accessor :phone, :subject, :message, :account, :login, :password, :server, :cert, :port, :ssl_port, :ssl
11
11
  attr_reader :id, :status, :errors
12
12
 
13
- def initialize(phone, subject, message, translit = nil, account = nil)
14
- @phone = phone
15
- @subject = subject
16
- @message = message
13
+ def initialize(data)
14
+ @phone = data.fetch(:phone, nil)
15
+ @subject = data.fetch(:subject, nil)
16
+ @message = data.fetch(:message, nil)
17
17
  @status = 'not-sent'
18
- account = "@@#{account}".to_sym
19
- account_variable = if account.present? && self.class.class_variables.include?(account)
20
- account
18
+ account_name = data[:account]
19
+ account_variable = if account_name.present?
20
+ var_name = "@@#{account_name}".to_sym
21
+ if self.class.class_variables.include?(var_name)
22
+ var_name
23
+ else
24
+ raise ArgumentError, "Account with name '#{account_name}' is not defined"
25
+ end
21
26
  else
22
- self.class.class_variables.select{|sym| sym.to_s.include?('revoup0')}.first
27
+ self.class.default_account
23
28
  end
24
- account_settings = Mfms::SMS.class_variable_get(account_variable)
29
+ account_settings = self.class.class_variable_get(account_variable)
25
30
  @login = account_settings[:login]
31
+ @connector = account_settings[:connector]
26
32
  @password = account_settings[:password]
27
33
  @ssl = account_settings[:ssl]
28
34
  @ssl_port = account_settings[:ssl_port]
29
35
  @port = account_settings[:port]
30
36
  @cert = account_settings[:cert]
31
37
  @server = account_settings[:server]
32
- @translit = translit.nil? ? account_settings[:translit] : translit
38
+ @translit = data.fetch(:translit, account_settings[:translit])
39
+ @priority = data.fetch(:priority, account_settings[:priority])
33
40
  @errors = []
34
41
  validate!
35
42
  end
@@ -39,11 +46,25 @@ module Mfms
39
46
  account = setting.keys.first
40
47
  account_settings = setting[account]
41
48
  account_settings[:cert] = init_cert_store(account_settings[:cert])
42
- account_settings[:ssl] = account_settings[:ssl].presence || true
43
- account_settings[:translit] = account_settings[:translit].presence || false
44
- class_variable_set("@@#{account}", account_settings)
45
- validate_settings!(account_settings)
49
+ account_settings[:ssl] = account_settings.fetch(:ssl, true)
50
+ account_settings[:translit] = account_settings.fetch(:translit, false)
51
+ account_settings[:additional_args] = account_settings.fetch(:additional_args, nil)
52
+ account_settings[:priority] = account_settings.fetch(:priority, nil)
53
+ if settings_valid?(account_settings)
54
+ self.class_variable_set("@@#{account}", account_settings)
55
+ end
56
+ end
57
+ end
58
+
59
+ def self.default_account
60
+ default_account = nil
61
+ Array.wrap(class_variables).each do |account|
62
+ if class_variable_get(account.to_s).has_key?(:default)
63
+ default_account = account
64
+ break
65
+ end
46
66
  end
67
+ default_account || raise(ArgumentError, 'One of the accounts should be specified by default')
47
68
  end
48
69
 
49
70
  # => SMS send status codes:
@@ -103,9 +124,15 @@ module Mfms
103
124
 
104
125
  def validate!
105
126
  raise ArgumentError, "Phone should be assigned to #{self.class}." if @phone.nil?
106
- raise ArgumentError, "Phone number should contain only numbers. Minimum length is 10. #{@phone.inspect} is given." unless @phone =~ /^[0-9]{10,}$/
127
+ unless @phone =~ /^[0-9]{10,}$/
128
+ raise ArgumentError, 'Phone number should contain only numbers. Minimum'+
129
+ "length is 10. #{@phone.inspect} is given."
130
+ end
107
131
  raise ArgumentError, "Subject should be assigned to #{self.class}." if @subject.nil?
108
132
  raise ArgumentError, "Message should be assigned to #{self.class}." if @message.nil?
133
+ if @priority && !%w(low normal high realtime).include?(@priority)
134
+ raise ArgumentError, 'Priority is not valid.'
135
+ end
109
136
  end
110
137
 
111
138
  private
@@ -126,25 +153,31 @@ module Mfms
126
153
  cert_store
127
154
  end
128
155
 
129
- def self.validate_settings!(settings)
130
- raise ArgumentError, "Login should be defined for #{self}." if settings[:login].nil?
131
- raise ArgumentError, "Password should be defined for #{self}." if settings[:password].nil?
132
- raise ArgumentError, "Server should be defined for #{self}." if settings[:server].nil?
133
- raise ArgumentError, "Port should be defined for #{self}." if settings[:port].nil?
134
- raise ArgumentError, "Port for ssl should be defined for #{self}." if settings[:ssl_port].nil?
135
- raise ArgumentError, "Port should contain only numbers. #{settings[:port].inspect} is given." unless settings[:port].instance_of?(Fixnum)
136
- raise ArgumentError, "Port for ssl should contain only numbers. #{settings[:ssl_port].inspect} is given." unless settings[:ssl_port].instance_of?(Fixnum)
156
+ def self.settings_valid?(settings)
157
+ [:login, :password, :server, :port, :ssl_port].each do |attr|
158
+ if settings[attr].nil?
159
+ raise ArgumentError, "#{attr.to_s.gsub(/_/,' ').capitalize} should be defined for #{self}."
160
+ end
161
+ end
162
+ [:port, :ssl_port].each do |attr|
163
+ unless settings[attr].instance_of?(Fixnum)
164
+ raise ArgumentError,
165
+ "#{attr.to_s.gsub(/_/,' ').capitalize} should contain only numbers. #{settings[attr].inspect} is given."
166
+ end
167
+ end
168
+ true
137
169
  end
138
170
 
139
171
  def send_url
140
172
  message = @translit ? Russian.translit(@message) : @message
141
- "/revoup/connector0/send?login=#{@login}&password=#{@password}&" +
173
+ url = "/revoup/#{@connector}/send?login=#{@login}&password=#{@password}&" +
142
174
  "subject[0]=#{@subject}&address[0]=#{@phone}&text[0]=#{URI.encode(message)}"
175
+ url += "&priority=#{@priority}" if @priority
176
+ url
143
177
  end
144
178
 
145
- def self.status_url(msg_id)
146
- "/revoup/connector0/status?login=#{@login}&password=#{@password}&" +
147
- "providerId[0]=#{msg_id}"
179
+ def status_url(msg_id)
180
+ "/revoup/#{@connector}/status?login=#{@login}&password=#{@password}&providerId[0]=#{msg_id}"
148
181
  end
149
182
 
150
183
  end
@@ -1,7 +1,7 @@
1
1
  module Mfms
2
2
  class Version
3
3
  MAJOR = 0
4
- MINOR = 6
4
+ MINOR = 7
5
5
  PATCH = 1
6
6
 
7
7
  def self.to_s
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mfms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fokin Eugene