mote_sms 1.3.16 → 2.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.
- checksums.yaml +5 -5
- data/.gitignore +1 -0
- data/Gemfile +4 -0
- data/README.md +1 -1
- data/bin/console.rb +8 -0
- data/lib/mote_sms/delivery_job.rb +2 -0
- data/lib/mote_sms/message.rb +4 -1
- data/lib/mote_sms/number.rb +2 -0
- data/lib/mote_sms/number_list.rb +2 -0
- data/lib/mote_sms/transports/OBH_transport.rb +86 -0
- data/lib/mote_sms/transports/action_mailer_transport.rb +15 -1
- data/lib/mote_sms/transports/http_client.rb +2 -0
- data/lib/mote_sms/transports/mobile_technics_transport.rb +2 -0
- data/lib/mote_sms/transports/swisscom_transport.rb +2 -0
- data/lib/mote_sms/transports/test_transport.rb +2 -0
- data/lib/mote_sms/transports/twilio_transport.rb +2 -0
- data/lib/mote_sms/transports.rb +3 -0
- data/lib/mote_sms/version.rb +3 -1
- data/lib/mote_sms.rb +2 -0
- data/mote_sms.gemspec +19 -14
- data/spec/fixtures/cert_obh-fake.pem +30 -0
- data/spec/mote_sms/delivery_job_spec.rb +2 -0
- data/spec/mote_sms/message_spec.rb +3 -1
- data/spec/mote_sms/number_list_spec.rb +2 -0
- data/spec/mote_sms/number_spec.rb +2 -0
- data/spec/mote_sms/transports/action_mailer_transport_spec.rb +2 -0
- data/spec/mote_sms/transports/http_client_spec.rb +2 -0
- data/spec/mote_sms/transports/mobile_technics_transport_spec.rb +2 -0
- data/spec/mote_sms/transports/obh_transport_spec.rb +45 -0
- data/spec/mote_sms/transports/swisscom_transport_spec.rb +2 -0
- data/spec/mote_sms/transports/test_transport_spec.rb +2 -0
- data/spec/mote_sms/transports/twilio_transport_spec.rb +3 -8
- data/spec/mote_sms_spec.rb +2 -0
- data/spec/spec_helper.rb +5 -0
- data/spec/support/file_fixture_support.rb +48 -0
- metadata +41 -50
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: c55719459561e174971e8549e20de6e53f45d91a50a0a45455db02180f1dde43
|
|
4
|
+
data.tar.gz: 7202fd5e4c5a100e58c579f619ac112a64797be920253b39e2349740c62a9959
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e5a161bb3a1075bb68424eba0518eeaa2a65302b2a47004fce2bdd6ac813a4418f208e67a60a79ce6bbdcb792078bdc5e117b82ab1a36be2d02571d1aa3f662d
|
|
7
|
+
data.tar.gz: 646a1954db378909dfd17a3e9e37896e51cb6d19b2ff9a31102130da9f6905dcfda8ec00f8f2211002a300c6ae16e194f3525141a8e495595fdf6720aa5591c0
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
data/bin/console.rb
ADDED
data/lib/mote_sms/message.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'mote_sms/number'
|
|
2
4
|
require 'mote_sms/number_list'
|
|
3
5
|
|
|
@@ -37,6 +39,7 @@ module MoteSMS
|
|
|
37
39
|
#
|
|
38
40
|
# Returns value of body.
|
|
39
41
|
attr_writer :body
|
|
42
|
+
|
|
40
43
|
def body(val = nil)
|
|
41
44
|
@body = val if val
|
|
42
45
|
@body
|
|
@@ -56,7 +59,7 @@ module MoteSMS
|
|
|
56
59
|
@from
|
|
57
60
|
end
|
|
58
61
|
|
|
59
|
-
# Public:
|
|
62
|
+
# Public: Assign an instance of Number instead of the direct
|
|
60
63
|
# string, so only vanity numbers are allowed.
|
|
61
64
|
def from=(val)
|
|
62
65
|
@from = val ? Number.new(val, vanity: true) : nil
|
data/lib/mote_sms/number.rb
CHANGED
data/lib/mote_sms/number_list.rb
CHANGED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
require 'phony'
|
|
2
|
+
require 'logger'
|
|
3
|
+
# frozen_string_literal: true
|
|
4
|
+
|
|
5
|
+
require 'OBH/client'
|
|
6
|
+
|
|
7
|
+
module MoteSMS
|
|
8
|
+
# MoteSMS::OBHTransport provides the implementation to OBH
|
|
9
|
+
#
|
|
10
|
+
# Examples:
|
|
11
|
+
#
|
|
12
|
+
# MoteSMS.transport = MoteSMS::OBHTransport.new 'obh.key', '/cert_obh.pem', 'YouAPIKEy', 'https://test.comapi/v1'
|
|
13
|
+
# sms = MoteSMS::Message.new do
|
|
14
|
+
# to 'to_number'
|
|
15
|
+
# body 'my cool text'
|
|
16
|
+
# end
|
|
17
|
+
# sms.deliver_now
|
|
18
|
+
#
|
|
19
|
+
class OBHTransport
|
|
20
|
+
Credentials = Struct.new(:client_key_path, :client_cert_path, :api_key)
|
|
21
|
+
# Maximum recipients allowed by API
|
|
22
|
+
MAX_RECIPIENT = 1
|
|
23
|
+
|
|
24
|
+
# Custom exception subclass.
|
|
25
|
+
ServiceError = Class.new(::Exception)
|
|
26
|
+
|
|
27
|
+
# attr_reader :api_endpoint, :proxy_host, :proxy_port, :locale, :logger, :credentials
|
|
28
|
+
attr_accessor :message_from
|
|
29
|
+
attr_reader :obh_client
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
# Public: Create a new instance using specified endpoint end credentials
|
|
33
|
+
#
|
|
34
|
+
# @param [string] client_key_path the path to the key file
|
|
35
|
+
# @param [string] client_cert_path the path to the certificate
|
|
36
|
+
# @param [string] api_key the api_key
|
|
37
|
+
# @param [string] api_endpoint the api_endpoint
|
|
38
|
+
# @param [Hash] options you can pass other client options like proxy_host, proxy_port, locale and logger.
|
|
39
|
+
# Another additional options is :message_from to set if teh transporter have to use or not the `from` parameters
|
|
40
|
+
# for the message, by default is false
|
|
41
|
+
#
|
|
42
|
+
# Returns a new instance.
|
|
43
|
+
def initialize(client_key_path, client_cert_path, api_key, api_endpoint, options = {})
|
|
44
|
+
@obh_client = OBH::Client.new do |conf|
|
|
45
|
+
conf.credentials(client_key_path: client_key_path, client_cert_path: client_cert_path, api_key: api_key)
|
|
46
|
+
conf.api_endpoint = api_endpoint
|
|
47
|
+
conf.proxy_host = options[:proxy_host]
|
|
48
|
+
conf.proxy_port = options[:proxy_port]
|
|
49
|
+
conf.locale = options[:locale]
|
|
50
|
+
conf.logger = options[:logger]
|
|
51
|
+
conf.ca_file = options[:ca_file]
|
|
52
|
+
end
|
|
53
|
+
@message_from = options[:message_from] || false
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Public: Delivers message using mobile technics HTTP/S API.
|
|
57
|
+
#
|
|
58
|
+
# @param message - The MoteSMS::Message instance to send.
|
|
59
|
+
# @param _options - The Hash with service specific options.
|
|
60
|
+
#
|
|
61
|
+
# @return [Array] Returns Array with sender ids.
|
|
62
|
+
#
|
|
63
|
+
def deliver(message, _options = {})
|
|
64
|
+
raise ArgumentError, "too many recipients, max. is #{MAX_RECIPIENT}" if message.to.length > MAX_RECIPIENT
|
|
65
|
+
|
|
66
|
+
# perform request
|
|
67
|
+
@obh_client.send_sms(post_params(message))
|
|
68
|
+
message.to
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
private
|
|
72
|
+
|
|
73
|
+
# Create the message post params
|
|
74
|
+
# @param [NoteSMS::Message] message
|
|
75
|
+
# @return [Hash]
|
|
76
|
+
def post_params(message)
|
|
77
|
+
params = { to: prepare_numbers(message.to), body: message.body }
|
|
78
|
+
params[:from] = message.from.to_s if @message_from
|
|
79
|
+
params
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def prepare_numbers(number_list)
|
|
83
|
+
number_list.normalized_numbers.map { |n| Phony.formatted(n, format: :international_absolute, spaces: '') }.first
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
@@ -1,13 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'action_mailer'
|
|
2
4
|
|
|
3
5
|
module MoteSMS
|
|
4
6
|
# Internal: ActionMailer class to forward SMS to recipient.
|
|
5
7
|
class ActionMailerSMSMailer < ::ActionMailer::Base
|
|
6
8
|
def forward_sms(recipient, sms, options = {})
|
|
7
|
-
subject = options[:
|
|
9
|
+
subject = if options[:allow_empty_subject].present?
|
|
10
|
+
options[:subject].presence
|
|
11
|
+
else
|
|
12
|
+
options[:subject].presence || "SMS to #{sms.to.map(&:to_s).join(', ')}"
|
|
13
|
+
end
|
|
8
14
|
from = options[:from].presence || "#{sms.from} <#{recipient}>"
|
|
9
15
|
mail options.merge(to: recipient, from: from, subject: subject, body: sms.body)
|
|
10
16
|
end
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
|
|
20
|
+
# override behaviour of actionmailer to get an empty subject
|
|
21
|
+
# https://api.rubyonrails.org/v6.0.3.4/classes/ActionMailer/Base.html#method-i-default_i18n_subject
|
|
22
|
+
def default_i18n_subject(interpolations = {})
|
|
23
|
+
''
|
|
24
|
+
end
|
|
11
25
|
end
|
|
12
26
|
|
|
13
27
|
# MoteSMS::ActionMailerTransport provides a transport implementation which
|
data/lib/mote_sms/transports.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module MoteSMS
|
|
2
4
|
# All transports live within mote_sms/transports, though should be
|
|
3
5
|
# available in ruby as `MoteSMS::<Some>Transport`.
|
|
@@ -7,4 +9,5 @@ module MoteSMS
|
|
|
7
9
|
autoload :ActionMailerTransport, 'mote_sms/transports/action_mailer_transport'
|
|
8
10
|
autoload :SwisscomTransport, 'mote_sms/transports/swisscom_transport'
|
|
9
11
|
autoload :TwilioTransport, 'mote_sms/transports/twilio_transport'
|
|
12
|
+
autoload :OBHTransport, 'mote_sms/transports/OBH_transport'
|
|
10
13
|
end
|
data/lib/mote_sms/version.rb
CHANGED
data/lib/mote_sms.rb
CHANGED
data/mote_sms.gemspec
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
|
+
|
|
6
|
+
require 'mote_sms/version'
|
|
3
7
|
|
|
4
8
|
Gem::Specification.new do |gem|
|
|
5
9
|
gem.name = 'mote_sms'
|
|
6
|
-
gem.
|
|
7
|
-
gem.
|
|
10
|
+
gem.version = MoteSMS::VERSION
|
|
11
|
+
gem.authors = ['Lukas Westermann', 'Loris Gavillet', 'Simon Schmid']
|
|
12
|
+
gem.email = ['info@at-point.ch']
|
|
8
13
|
gem.summary = 'Deliver SMS using Swisscom / MobileTechnics REST API.'
|
|
9
14
|
gem.description = 'Unofficial ruby adapter for Swisscom and MobileTechnics Bulk SMS APIs.
|
|
10
15
|
Tries to mimick mail API, so users can switch e.g. ActionMailer
|
|
@@ -15,18 +20,18 @@ Gem::Specification.new do |gem|
|
|
|
15
20
|
gem.bindir = 'exe'
|
|
16
21
|
gem.executables = gem.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
17
22
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
|
18
|
-
gem.require_paths =
|
|
19
|
-
gem.version = MoteSMS::VERSION
|
|
23
|
+
gem.require_paths = ['lib']
|
|
20
24
|
|
|
21
|
-
gem.required_ruby_version = '>= 2
|
|
25
|
+
gem.required_ruby_version = '>= 3.2'
|
|
22
26
|
|
|
23
|
-
gem.add_dependency 'phony',
|
|
24
|
-
gem.add_dependency 'activesupport',
|
|
27
|
+
gem.add_dependency 'phony', '>= 2'
|
|
28
|
+
gem.add_dependency 'activesupport', '>= 7.1'
|
|
25
29
|
|
|
26
30
|
gem.add_development_dependency 'rake'
|
|
27
|
-
gem.add_development_dependency 'rspec',
|
|
28
|
-
gem.add_development_dependency 'webmock',
|
|
29
|
-
gem.add_development_dependency 'actionmailer',
|
|
30
|
-
gem.add_development_dependency 'activejob',
|
|
31
|
-
gem.add_development_dependency 'twilio-ruby',
|
|
31
|
+
gem.add_development_dependency 'rspec', '~> 3.6'
|
|
32
|
+
gem.add_development_dependency 'webmock', '~> 3.14'
|
|
33
|
+
gem.add_development_dependency 'actionmailer', '>= 7.1'
|
|
34
|
+
gem.add_development_dependency 'activejob', '>= 7.1'
|
|
35
|
+
gem.add_development_dependency 'twilio-ruby', '~> 7'
|
|
36
|
+
gem.add_development_dependency 'obh-client', '~> 0.3'
|
|
32
37
|
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIFJDCCAwwCCQCXnYkF9sduTDANBgkqhkiG9w0BAQsFADBUMREwDwYDVQQDDAhv
|
|
3
|
+
YmgtdGVzdDEQMA4GA1UECgwHYXRwb2ludDEPMA0GA1UEBwwGenVyaWNoMQ8wDQYD
|
|
4
|
+
VQQIDAZ6dXJpY2gxCzAJBgNVBAYTAkNIMB4XDTIxMTIyODEwNTA0OFoXDTIyMTIy
|
|
5
|
+
ODEwNTA0OFowVDERMA8GA1UEAwwIb2JoLXRlc3QxEDAOBgNVBAoMB2F0cG9pbnQx
|
|
6
|
+
DzANBgNVBAcMBnp1cmljaDEPMA0GA1UECAwGenVyaWNoMQswCQYDVQQGEwJDSDCC
|
|
7
|
+
AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQ3hVdTG3vf5Qu9okeL3/O8
|
|
8
|
+
enjjbjDz6GsD4csOnsl3L0Ch8gMf6K8NSpZ04KrLXy0JNadADzyJg79EDnVSwXO6
|
|
9
|
+
CLmyLlPzmsrvxy2mfcAWzACApqw3t4Q0KNGu/Nhhae+RMnfkFxPE+m3M52T0Ifyj
|
|
10
|
+
5r85oWcWLHeWNCzpYqyd+FCwDMKfsxPLomfE8W8EvzXkntvpKvUZ1ADNU2yj/4KX
|
|
11
|
+
uWNhyp0/8MvwTq9dS5v8fGpfqZ4uzR1tTgbceTXRzNqDXIFDmjtNpc9mQOwUiysS
|
|
12
|
+
lhYDisejNxRAFMY/Z36+W2cuGMJMK73Usxu0VxTvM2F6bHWh/P0Yy3KV4HHXwWht
|
|
13
|
+
R+sPqwS8Yod89EJyMj3/47LovGUxirGBTM2yon8m1GXsQtPiR/LKCv2ujSVdLnsJ
|
|
14
|
+
HkBZPRZ/a4wL3ZCI0glfrV+/L0QjXPt6LmRg6jQWCEJ0YefU52SLwQ078oFzHVPh
|
|
15
|
+
VwIpJsCr/ebAgR8F9mrpnj0jESgq8Ap0OfrJ5ay4y13+aUyY3dbgNS8fOE8e2sE2
|
|
16
|
+
xb08BZ4MPk6M0mA30oi4rjfZOhE3UOwrb8b6Ytq4whunQ9z98k34vQhm3yMMP1e7
|
|
17
|
+
OPp4Hg1i9JXrAPQurVTRcLQRyPZkaPtzM0H6Hj2MVCFCLdyOOIXYTLCpyydtG4kz
|
|
18
|
+
+GNnjXEUGYFK/UtCQWlhAgMBAAEwDQYJKoZIhvcNAQELBQADggIBAGbV00MYmZBz
|
|
19
|
+
eEjOBsVyXs/kE6Znkr8q/9IeIMpYgfTWoldpWo2f8TShrR+N2LFG2DxzU5z0tVFe
|
|
20
|
+
T6HP04lzrgkNw12dOIFhzxMrzGxKqT7M4pTcBR5gPE2XPstebdDxxPJfTzNpkv8A
|
|
21
|
+
zCwVgWorLimsHrcxcjb+axkxJoOKCcI+xU7DkGRU4XQSdt7TYKXFUJqHkabfgY+x
|
|
22
|
+
a5ay6Ul4gEB3slnvUC1moQQQP8qT2wbnwze6FkVHC+9TwosTJxsRNWuhy7RBn2Gk
|
|
23
|
+
nAFQV4nsT0HyAyJGDPzVjzabOQQgoA4sTaMQdsX67017o5UnHY7lPjkJNXrG8E6O
|
|
24
|
+
Cp7f+KLf+4V7cr2EfAkikN7QfE0vLVmI5yckL4XkYG8P+n+hWuBdMR/Bskb///h1
|
|
25
|
+
18AHWmOMn9777MgN/gs7arS0CVIYuLDrpl8Qz+oAekLvRgRwHpHCSv9nbdvqSmXx
|
|
26
|
+
0cOUljdu2o+0T+yWQT3PGyqD1PxVnm3LSn+w6aImd1yk/e4SuB9itQIWrcxsBtop
|
|
27
|
+
Jj5SgG1bgaUTE/FNf1nETpL00E2OyErk00LSNbQYSa++LDGDvQT4tbDPODMklKP6
|
|
28
|
+
AHxDtB9NpdB6Ty9dy1AO6lFHnINlU2AqZ++bwdbGiEsd5j70Iun/y3mVPQ4lqW3v
|
|
29
|
+
NLlZI8iwQBcPIDeSLm2GSRTz2Hw1rWLR
|
|
30
|
+
-----END CERTIFICATE-----
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'spec_helper'
|
|
2
4
|
require 'mote_sms'
|
|
3
5
|
require 'active_job'
|
|
@@ -55,7 +57,7 @@ describe MoteSMS::Message do
|
|
|
55
57
|
end
|
|
56
58
|
|
|
57
59
|
it 'can pass additional attributes to transport' do
|
|
58
|
-
expect(transport).to receive(:deliver).with(subject, serviceid: 'myapplication')
|
|
60
|
+
expect(transport).to receive(:deliver).with(subject, { serviceid: 'myapplication' })
|
|
59
61
|
subject.deliver_now serviceid: 'myapplication'
|
|
60
62
|
end
|
|
61
63
|
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
require 'twilio-ruby'
|
|
5
|
+
require 'mote_sms/transports/twilio_transport'
|
|
6
|
+
require 'mote_sms/message'
|
|
7
|
+
|
|
8
|
+
describe MoteSMS::OBHTransport do
|
|
9
|
+
subject do
|
|
10
|
+
described_class.new(file_fixture('obh-fake.key'), file_fixture('cert_obh-fake.pem'), 'yourAPIKey', endpoint)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
let(:endpoint) { 'https://test.api' }
|
|
14
|
+
|
|
15
|
+
let(:message) do
|
|
16
|
+
MoteSMS::Message.new do
|
|
17
|
+
to '+41790001122'
|
|
18
|
+
body 'Hello World'
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
context '#deliver' do
|
|
23
|
+
|
|
24
|
+
it 'send message' do
|
|
25
|
+
expect_any_instance_of(OBH::Client).to receive_message_chain(:send_sms).with(
|
|
26
|
+
{ to: '+41790001122',
|
|
27
|
+
body: 'Hello World' }
|
|
28
|
+
)
|
|
29
|
+
stub_request(:post, "https://test.api/sms").to_return(status: 200, body: '', headers: {})
|
|
30
|
+
expect(subject.deliver(message).normalized_numbers).to eq(['41790001122'])
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it 'send message with from number' do
|
|
34
|
+
message.from = '+41790002233'
|
|
35
|
+
subject.message_from = true
|
|
36
|
+
expect_any_instance_of(OBH::Client).to receive_message_chain(:send_sms).with(
|
|
37
|
+
{ from: '41790002233',
|
|
38
|
+
to: '+41790001122',
|
|
39
|
+
body: 'Hello World' }
|
|
40
|
+
)
|
|
41
|
+
stub_request(:post, "https://test.api/sms").to_return(status: 200, body: '', headers: {})
|
|
42
|
+
expect(subject.deliver(message).normalized_numbers).to eq(['41790001122'])
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'spec_helper'
|
|
2
4
|
require 'twilio-ruby'
|
|
3
5
|
require 'mote_sms/transports/twilio_transport'
|
|
@@ -15,17 +17,10 @@ describe MoteSMS::TwilioTransport do
|
|
|
15
17
|
end
|
|
16
18
|
end
|
|
17
19
|
|
|
18
|
-
let(:message) do
|
|
19
|
-
MoteSMS::Message.new do
|
|
20
|
-
to '+41790001122'
|
|
21
|
-
body 'Hello World'
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
20
|
context '#deliver' do
|
|
26
21
|
before do
|
|
27
22
|
allow_any_instance_of(Twilio::REST::Client).to receive_message_chain(:messages, :create) do |params|
|
|
28
|
-
|
|
23
|
+
Struct.new(:to).new(params[:to])
|
|
29
24
|
end
|
|
30
25
|
end
|
|
31
26
|
|
data/spec/mote_sms_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'rubygems'
|
|
2
4
|
require 'bundler/setup'
|
|
3
5
|
|
|
4
6
|
require 'rspec'
|
|
5
7
|
require 'webmock/rspec'
|
|
6
8
|
require 'active_job'
|
|
9
|
+
require_relative 'support/file_fixture_support'
|
|
7
10
|
|
|
8
11
|
ActiveJob::Base.queue_adapter = :test
|
|
9
12
|
|
|
10
13
|
# Disable should syntax
|
|
11
14
|
RSpec.configure do |config|
|
|
15
|
+
config.add_setting :file_fixture_path, default: 'spec/fixtures'
|
|
16
|
+
config.include FileFixtureSupport
|
|
12
17
|
config.raise_errors_for_deprecations!
|
|
13
18
|
config.expect_with :rspec do |c|
|
|
14
19
|
c.syntax = :expect
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'pathname'
|
|
4
|
+
|
|
5
|
+
module FileFixtureSupport
|
|
6
|
+
# Adds simple access to sample files called file fixtures.
|
|
7
|
+
#
|
|
8
|
+
# File fixtures are represented as +Pathname+ objects.
|
|
9
|
+
# This makes it easy to extract specific information:
|
|
10
|
+
#
|
|
11
|
+
# file_fixture("example.txt").read # get the file's content
|
|
12
|
+
# file_fixture("example.mp3").size # get the file size
|
|
13
|
+
|
|
14
|
+
def self.included(base)
|
|
15
|
+
base.extend(ClassMethods)
|
|
16
|
+
base.file_fixture_path = RSpec.configuration.file_fixture_path
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
module ClassMethods
|
|
20
|
+
def inherited(subclass)
|
|
21
|
+
super
|
|
22
|
+
subclass.file_fixture_path = RSpec.configuration.file_fixture_path
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def file_fixture_path=(value)
|
|
26
|
+
@file_fixture_path = value
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def file_fixture_path
|
|
30
|
+
@file_fixture_path
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def file_fixture_path
|
|
35
|
+
self.class.file_fixture_path
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def file_fixture(fixture_name)
|
|
39
|
+
path = Pathname.new(File.join(file_fixture_path, fixture_name))
|
|
40
|
+
|
|
41
|
+
if path.exist?
|
|
42
|
+
path
|
|
43
|
+
else
|
|
44
|
+
msg = "the directory '%<dir_name>s' does not contain a file named '%<file_name>s'"
|
|
45
|
+
raise ArgumentError, format(msg, dir_name: file_fixture_path, file_name: fixture_name)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
metadata
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: mote_sms
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 2.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Lukas Westermann
|
|
8
8
|
- Loris Gavillet
|
|
9
|
+
- Simon Schmid
|
|
9
10
|
autorequire:
|
|
10
11
|
bindir: exe
|
|
11
12
|
cert_chain: []
|
|
12
|
-
date:
|
|
13
|
+
date: 2026-01-16 00:00:00.000000000 Z
|
|
13
14
|
dependencies:
|
|
14
15
|
- !ruby/object:Gem::Dependency
|
|
15
16
|
name: phony
|
|
@@ -17,40 +18,28 @@ dependencies:
|
|
|
17
18
|
requirements:
|
|
18
19
|
- - ">="
|
|
19
20
|
- !ruby/object:Gem::Version
|
|
20
|
-
version: '
|
|
21
|
-
- - "<"
|
|
22
|
-
- !ruby/object:Gem::Version
|
|
23
|
-
version: '3.0'
|
|
21
|
+
version: '2'
|
|
24
22
|
type: :runtime
|
|
25
23
|
prerelease: false
|
|
26
24
|
version_requirements: !ruby/object:Gem::Requirement
|
|
27
25
|
requirements:
|
|
28
26
|
- - ">="
|
|
29
27
|
- !ruby/object:Gem::Version
|
|
30
|
-
version: '
|
|
31
|
-
- - "<"
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: '3.0'
|
|
28
|
+
version: '2'
|
|
34
29
|
- !ruby/object:Gem::Dependency
|
|
35
30
|
name: activesupport
|
|
36
31
|
requirement: !ruby/object:Gem::Requirement
|
|
37
32
|
requirements:
|
|
38
33
|
- - ">="
|
|
39
34
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '
|
|
41
|
-
- - "<"
|
|
42
|
-
- !ruby/object:Gem::Version
|
|
43
|
-
version: '6'
|
|
35
|
+
version: '7.1'
|
|
44
36
|
type: :runtime
|
|
45
37
|
prerelease: false
|
|
46
38
|
version_requirements: !ruby/object:Gem::Requirement
|
|
47
39
|
requirements:
|
|
48
40
|
- - ">="
|
|
49
41
|
- !ruby/object:Gem::Version
|
|
50
|
-
version: '
|
|
51
|
-
- - "<"
|
|
52
|
-
- !ruby/object:Gem::Version
|
|
53
|
-
version: '6'
|
|
42
|
+
version: '7.1'
|
|
54
43
|
- !ruby/object:Gem::Dependency
|
|
55
44
|
name: rake
|
|
56
45
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -85,81 +74,76 @@ dependencies:
|
|
|
85
74
|
requirements:
|
|
86
75
|
- - "~>"
|
|
87
76
|
- !ruby/object:Gem::Version
|
|
88
|
-
version:
|
|
77
|
+
version: '3.14'
|
|
89
78
|
type: :development
|
|
90
79
|
prerelease: false
|
|
91
80
|
version_requirements: !ruby/object:Gem::Requirement
|
|
92
81
|
requirements:
|
|
93
82
|
- - "~>"
|
|
94
83
|
- !ruby/object:Gem::Version
|
|
95
|
-
version:
|
|
84
|
+
version: '3.14'
|
|
96
85
|
- !ruby/object:Gem::Dependency
|
|
97
86
|
name: actionmailer
|
|
98
87
|
requirement: !ruby/object:Gem::Requirement
|
|
99
88
|
requirements:
|
|
100
89
|
- - ">="
|
|
101
90
|
- !ruby/object:Gem::Version
|
|
102
|
-
version: '
|
|
103
|
-
- - "<"
|
|
104
|
-
- !ruby/object:Gem::Version
|
|
105
|
-
version: '6'
|
|
91
|
+
version: '7.1'
|
|
106
92
|
type: :development
|
|
107
93
|
prerelease: false
|
|
108
94
|
version_requirements: !ruby/object:Gem::Requirement
|
|
109
95
|
requirements:
|
|
110
96
|
- - ">="
|
|
111
97
|
- !ruby/object:Gem::Version
|
|
112
|
-
version: '
|
|
113
|
-
- - "<"
|
|
114
|
-
- !ruby/object:Gem::Version
|
|
115
|
-
version: '6'
|
|
98
|
+
version: '7.1'
|
|
116
99
|
- !ruby/object:Gem::Dependency
|
|
117
100
|
name: activejob
|
|
118
101
|
requirement: !ruby/object:Gem::Requirement
|
|
119
102
|
requirements:
|
|
120
103
|
- - ">="
|
|
121
104
|
- !ruby/object:Gem::Version
|
|
122
|
-
version: '
|
|
123
|
-
- - "<"
|
|
124
|
-
- !ruby/object:Gem::Version
|
|
125
|
-
version: '6'
|
|
105
|
+
version: '7.1'
|
|
126
106
|
type: :development
|
|
127
107
|
prerelease: false
|
|
128
108
|
version_requirements: !ruby/object:Gem::Requirement
|
|
129
109
|
requirements:
|
|
130
110
|
- - ">="
|
|
131
111
|
- !ruby/object:Gem::Version
|
|
132
|
-
version: '
|
|
133
|
-
- - "<"
|
|
134
|
-
- !ruby/object:Gem::Version
|
|
135
|
-
version: '6'
|
|
112
|
+
version: '7.1'
|
|
136
113
|
- !ruby/object:Gem::Dependency
|
|
137
114
|
name: twilio-ruby
|
|
138
115
|
requirement: !ruby/object:Gem::Requirement
|
|
139
116
|
requirements:
|
|
140
|
-
- - "
|
|
141
|
-
- !ruby/object:Gem::Version
|
|
142
|
-
version: 4.11.0
|
|
143
|
-
- - "<"
|
|
117
|
+
- - "~>"
|
|
144
118
|
- !ruby/object:Gem::Version
|
|
145
|
-
version: '
|
|
119
|
+
version: '7'
|
|
146
120
|
type: :development
|
|
147
121
|
prerelease: false
|
|
148
122
|
version_requirements: !ruby/object:Gem::Requirement
|
|
149
123
|
requirements:
|
|
150
|
-
- - "
|
|
124
|
+
- - "~>"
|
|
125
|
+
- !ruby/object:Gem::Version
|
|
126
|
+
version: '7'
|
|
127
|
+
- !ruby/object:Gem::Dependency
|
|
128
|
+
name: obh-client
|
|
129
|
+
requirement: !ruby/object:Gem::Requirement
|
|
130
|
+
requirements:
|
|
131
|
+
- - "~>"
|
|
151
132
|
- !ruby/object:Gem::Version
|
|
152
|
-
version:
|
|
153
|
-
|
|
133
|
+
version: '0.3'
|
|
134
|
+
type: :development
|
|
135
|
+
prerelease: false
|
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
137
|
+
requirements:
|
|
138
|
+
- - "~>"
|
|
154
139
|
- !ruby/object:Gem::Version
|
|
155
|
-
version: '
|
|
140
|
+
version: '0.3'
|
|
156
141
|
description: |-
|
|
157
142
|
Unofficial ruby adapter for Swisscom and MobileTechnics Bulk SMS APIs.
|
|
158
143
|
Tries to mimick mail API, so users can switch e.g. ActionMailer
|
|
159
144
|
with this SMS provider.
|
|
160
145
|
email:
|
|
161
|
-
-
|
|
162
|
-
- loris@at-point.ch
|
|
146
|
+
- info@at-point.ch
|
|
163
147
|
executables: []
|
|
164
148
|
extensions: []
|
|
165
149
|
extra_rdoc_files: []
|
|
@@ -168,12 +152,14 @@ files:
|
|
|
168
152
|
- Gemfile
|
|
169
153
|
- README.md
|
|
170
154
|
- Rakefile
|
|
155
|
+
- bin/console.rb
|
|
171
156
|
- lib/mote_sms.rb
|
|
172
157
|
- lib/mote_sms/delivery_job.rb
|
|
173
158
|
- lib/mote_sms/message.rb
|
|
174
159
|
- lib/mote_sms/number.rb
|
|
175
160
|
- lib/mote_sms/number_list.rb
|
|
176
161
|
- lib/mote_sms/transports.rb
|
|
162
|
+
- lib/mote_sms/transports/OBH_transport.rb
|
|
177
163
|
- lib/mote_sms/transports/action_mailer_transport.rb
|
|
178
164
|
- lib/mote_sms/transports/http_client.rb
|
|
179
165
|
- lib/mote_sms/transports/mobile_technics_transport.rb
|
|
@@ -182,6 +168,7 @@ files:
|
|
|
182
168
|
- lib/mote_sms/transports/twilio_transport.rb
|
|
183
169
|
- lib/mote_sms/version.rb
|
|
184
170
|
- mote_sms.gemspec
|
|
171
|
+
- spec/fixtures/cert_obh-fake.pem
|
|
185
172
|
- spec/mote_sms/delivery_job_spec.rb
|
|
186
173
|
- spec/mote_sms/message_spec.rb
|
|
187
174
|
- spec/mote_sms/number_list_spec.rb
|
|
@@ -189,11 +176,13 @@ files:
|
|
|
189
176
|
- spec/mote_sms/transports/action_mailer_transport_spec.rb
|
|
190
177
|
- spec/mote_sms/transports/http_client_spec.rb
|
|
191
178
|
- spec/mote_sms/transports/mobile_technics_transport_spec.rb
|
|
179
|
+
- spec/mote_sms/transports/obh_transport_spec.rb
|
|
192
180
|
- spec/mote_sms/transports/swisscom_transport_spec.rb
|
|
193
181
|
- spec/mote_sms/transports/test_transport_spec.rb
|
|
194
182
|
- spec/mote_sms/transports/twilio_transport_spec.rb
|
|
195
183
|
- spec/mote_sms_spec.rb
|
|
196
184
|
- spec/spec_helper.rb
|
|
185
|
+
- spec/support/file_fixture_support.rb
|
|
197
186
|
homepage: https://github.com/at-point/mote_sms
|
|
198
187
|
licenses: []
|
|
199
188
|
metadata: {}
|
|
@@ -205,19 +194,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
205
194
|
requirements:
|
|
206
195
|
- - ">="
|
|
207
196
|
- !ruby/object:Gem::Version
|
|
208
|
-
version: '2
|
|
197
|
+
version: '3.2'
|
|
209
198
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
210
199
|
requirements:
|
|
211
200
|
- - ">="
|
|
212
201
|
- !ruby/object:Gem::Version
|
|
213
202
|
version: '0'
|
|
214
203
|
requirements: []
|
|
215
|
-
|
|
216
|
-
rubygems_version: 2.6.14
|
|
204
|
+
rubygems_version: 3.4.19
|
|
217
205
|
signing_key:
|
|
218
206
|
specification_version: 4
|
|
219
207
|
summary: Deliver SMS using Swisscom / MobileTechnics REST API.
|
|
220
208
|
test_files:
|
|
209
|
+
- spec/fixtures/cert_obh-fake.pem
|
|
221
210
|
- spec/mote_sms/delivery_job_spec.rb
|
|
222
211
|
- spec/mote_sms/message_spec.rb
|
|
223
212
|
- spec/mote_sms/number_list_spec.rb
|
|
@@ -225,8 +214,10 @@ test_files:
|
|
|
225
214
|
- spec/mote_sms/transports/action_mailer_transport_spec.rb
|
|
226
215
|
- spec/mote_sms/transports/http_client_spec.rb
|
|
227
216
|
- spec/mote_sms/transports/mobile_technics_transport_spec.rb
|
|
217
|
+
- spec/mote_sms/transports/obh_transport_spec.rb
|
|
228
218
|
- spec/mote_sms/transports/swisscom_transport_spec.rb
|
|
229
219
|
- spec/mote_sms/transports/test_transport_spec.rb
|
|
230
220
|
- spec/mote_sms/transports/twilio_transport_spec.rb
|
|
231
221
|
- spec/mote_sms_spec.rb
|
|
232
222
|
- spec/spec_helper.rb
|
|
223
|
+
- spec/support/file_fixture_support.rb
|