mfms 0.6.1 → 0.7.1

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.
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