mote_sms 1.3.16 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -0
  3. data/Gemfile +4 -0
  4. data/README.md +1 -1
  5. data/bin/console.rb +8 -0
  6. data/lib/mote_sms/delivery_job.rb +2 -0
  7. data/lib/mote_sms/message.rb +4 -1
  8. data/lib/mote_sms/number.rb +2 -0
  9. data/lib/mote_sms/number_list.rb +2 -0
  10. data/lib/mote_sms/transports/OBH_transport.rb +86 -0
  11. data/lib/mote_sms/transports/action_mailer_transport.rb +15 -1
  12. data/lib/mote_sms/transports/http_client.rb +2 -0
  13. data/lib/mote_sms/transports/mobile_technics_transport.rb +2 -0
  14. data/lib/mote_sms/transports/swisscom_transport.rb +2 -0
  15. data/lib/mote_sms/transports/test_transport.rb +2 -0
  16. data/lib/mote_sms/transports/twilio_transport.rb +2 -0
  17. data/lib/mote_sms/transports.rb +3 -0
  18. data/lib/mote_sms/version.rb +3 -1
  19. data/lib/mote_sms.rb +2 -0
  20. data/mote_sms.gemspec +19 -14
  21. data/spec/fixtures/cert_obh-fake.pem +30 -0
  22. data/spec/mote_sms/delivery_job_spec.rb +2 -0
  23. data/spec/mote_sms/message_spec.rb +3 -1
  24. data/spec/mote_sms/number_list_spec.rb +2 -0
  25. data/spec/mote_sms/number_spec.rb +2 -0
  26. data/spec/mote_sms/transports/action_mailer_transport_spec.rb +2 -0
  27. data/spec/mote_sms/transports/http_client_spec.rb +2 -0
  28. data/spec/mote_sms/transports/mobile_technics_transport_spec.rb +2 -0
  29. data/spec/mote_sms/transports/obh_transport_spec.rb +45 -0
  30. data/spec/mote_sms/transports/swisscom_transport_spec.rb +2 -0
  31. data/spec/mote_sms/transports/test_transport_spec.rb +2 -0
  32. data/spec/mote_sms/transports/twilio_transport_spec.rb +2 -7
  33. data/spec/mote_sms_spec.rb +2 -0
  34. data/spec/spec_helper.rb +5 -0
  35. data/spec/support/file_fixture_support.rb +48 -0
  36. metadata +44 -53
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: cb6aa6d34be426694919f0e9d0518e99a6756846
4
- data.tar.gz: 8ca19f7b4d972968e8db3c8eda3a6f7bf23985c6
2
+ SHA256:
3
+ metadata.gz: 3d1f95162a14f956bc6a9b403f123756b0492562537c03f41d59a53bff393242
4
+ data.tar.gz: d8e2f10dff5669046f0e3eb968c865b2ea6ca15eb8cebe7e49686402b8a02a88
5
5
  SHA512:
6
- metadata.gz: 0e62b96be5a772c42885a7c78750d72fef727d5539f2cd8a63db66f73620ce7a4df76565eeaa84f173fbb81187c3f3392a700bd6baf09f98800a9ba2c599c9dd
7
- data.tar.gz: a4cd48a862b0d1b46367be7be0fcaa5a2a808383af6fe8817a09bcabea7cc7d5ac394e59113250581f7598782f27e4209416126cee75596a4c4d02f3ddbcf425
6
+ metadata.gz: d4d3cc0d89021434a5e9a495cf5aaffa714f6c4c3e5af1fdb8070e369e5585a719ecaf28a6ec3b2845bba11409c0d72de980d62aecb86a9741963f78e6582afb
7
+ data.tar.gz: cd47cfda6aba3d8d990888d70eed4cbc6b7259cc4800e1455e34dadea500392cc5d8f01f01620c62f2aee44748e7c926c39b810f8366a9574ae915d1bc4b8d12
data/.gitignore CHANGED
@@ -17,3 +17,4 @@ spec/reports
17
17
  test/tmp
18
18
  test/version_tmp
19
19
  tmp
20
+ .idea
data/Gemfile CHANGED
@@ -2,3 +2,7 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in mote_sms.gemspec
4
4
  gemspec
5
+
6
+ source 'https://gem.fury.io/atpoint/' do
7
+ gem 'obh-client'
8
+ end
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Unofficial ruby adapter for MobileTechnics HTTP Bulk SMS API. Tries to mimick
4
4
  mail API, so users can switch e.g. ActionMailer with this SMS provider. Requires
5
- Ruby 1.9.
5
+ Ruby 3+.
6
6
 
7
7
  ## Installation
8
8
 
data/bin/console.rb ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'bundler/setup'
5
+ require 'mote_sms'
6
+
7
+ require 'irb'
8
+ IRB.start(__FILE__)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'active_job'
2
4
  require 'mote_sms/message'
3
5
 
@@ -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: Asign an instance of Number instead of the direct
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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'phony'
2
4
 
3
5
  module MoteSMS
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'mote_sms/number'
2
4
 
3
5
  module MoteSMS
@@ -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
+ end
52
+ @message_from = options[:message_from] || false
53
+ end
54
+
55
+ # Public: Delivers message using mobile technics HTTP/S API.
56
+ #
57
+ # @param message - The MoteSMS::Message instance to send.
58
+ # @param _options - The Hash with service specific options.
59
+ #
60
+ # @return [Array] Returns Array with sender ids.
61
+ #
62
+ def deliver(message, _options = {})
63
+ raise ArgumentError, "too many recipients, max. is #{MAX_RECIPIENT}" if message.to.length > MAX_RECIPIENT
64
+
65
+ # perform request
66
+ @obh_client.send_sms(post_params(message))
67
+ message.to
68
+ end
69
+
70
+ private
71
+
72
+ # Create the message post params
73
+ # @param [NoteSMS::Message] message
74
+ # @return [Hash]
75
+ def post_params(message)
76
+ params = { to: prepare_numbers(message.to), body: message.body }
77
+ params[:from] = message.from.to_s if @message_from
78
+ params
79
+ end
80
+
81
+ def prepare_numbers(number_list)
82
+ number_list.normalized_numbers.map { |n| Phony.formatted(n, format: :international_absolute, spaces: '') }.first
83
+ end
84
+
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[:subject].presence || "SMS to #{sms.to.map(&:to_s).join(', ')}"
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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'uri'
2
4
  require 'net/https'
3
5
  require 'digest/sha1'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'uri'
2
4
  require 'net/http'
3
5
  require 'phony'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'phony'
2
4
  require 'logger'
3
5
  require 'json'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module MoteSMS
2
4
  # Public: Provide access to global array of delivered
3
5
  # messages, this can be used in testing to assert sent
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'phony'
2
4
  require 'logger'
3
5
  require 'twilio-ruby'
@@ -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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module MoteSMS
2
- VERSION = '1.3.16'.freeze
4
+ VERSION = '2.0.0'
3
5
  end
data/lib/mote_sms.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'mote_sms/transports'
2
4
 
3
5
  module MoteSMS
data/mote_sms.gemspec CHANGED
@@ -1,10 +1,15 @@
1
- # -*- encoding: utf-8 -*-
2
- require File.expand_path('../lib/mote_sms/version', __FILE__)
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.authors = ['Lukas Westermann', 'Loris Gavillet']
7
- gem.email = ['lukas.westermann@at-point.ch', 'loris@at-point.ch']
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 = %w(lib)
19
- gem.version = MoteSMS::VERSION
23
+ gem.require_paths = ['lib']
20
24
 
21
- gem.required_ruby_version = '>= 2.0'
25
+ gem.required_ruby_version = '>= 3.1'
22
26
 
23
- gem.add_dependency 'phony', ['>= 1.7', '< 3.0']
24
- gem.add_dependency 'activesupport', ['>= 4.2', '< 6']
27
+ gem.add_dependency 'phony', '>= 2'
28
+ gem.add_dependency 'activesupport', '>= 5'
25
29
 
26
30
  gem.add_development_dependency 'rake'
27
- gem.add_development_dependency 'rspec', ['~> 3.6']
28
- gem.add_development_dependency 'webmock', ['~> 1.8.0']
29
- gem.add_development_dependency 'actionmailer', ['>= 4.2', '< 6']
30
- gem.add_development_dependency 'activejob', ['>= 4.2', '< 6']
31
- gem.add_development_dependency 'twilio-ruby', ['>= 4.11.0', '< 5']
31
+ gem.add_development_dependency 'rspec', '~> 3.6'
32
+ gem.add_development_dependency 'webmock', '~> 3.14'
33
+ gem.add_development_dependency 'actionmailer', '>= 6.1'
34
+ gem.add_development_dependency 'activejob', '>= 6.1'
35
+ gem.add_development_dependency 'twilio-ruby', '~> 6'
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
 
@@ -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
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'mote_sms/number_list'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'mote_sms/number'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'mote_sms/message'
3
5
  require 'mote_sms/transports/action_mailer_transport'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'mote_sms/version'
3
5
  require 'mote_sms/transports/http_client'
@@ -1,4 +1,6 @@
1
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
3
+
2
4
  require 'spec_helper'
3
5
  require 'cgi'
4
6
  require 'mote_sms/message'
@@ -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,4 +1,6 @@
1
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
3
+
2
4
  require 'spec_helper'
3
5
  require 'cgi'
4
6
  require 'mote_sms/message'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'mote_sms/transports/test_transport'
3
5
 
@@ -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,13 +17,6 @@ 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|
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'mote_sms'
3
5
 
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.3.16
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lukas Westermann
8
8
  - Loris Gavillet
9
- autorequire:
9
+ - Simon Schmid
10
+ autorequire:
10
11
  bindir: exe
11
12
  cert_chain: []
12
- date: 2021-01-15 00:00:00.000000000 Z
13
+ date: 2023-12-04 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: '1.7'
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: '1.7'
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: '4.2'
41
- - - "<"
42
- - !ruby/object:Gem::Version
43
- version: '6'
35
+ version: '5'
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: '4.2'
51
- - - "<"
52
- - !ruby/object:Gem::Version
53
- version: '6'
42
+ version: '5'
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: 1.8.0
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: 1.8.0
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: '4.2'
103
- - - "<"
104
- - !ruby/object:Gem::Version
105
- version: '6'
91
+ version: '6.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: '4.2'
113
- - - "<"
114
- - !ruby/object:Gem::Version
115
- version: '6'
98
+ version: '6.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: '4.2'
123
- - - "<"
124
- - !ruby/object:Gem::Version
125
- version: '6'
105
+ version: '6.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: '4.2'
133
- - - "<"
134
- - !ruby/object:Gem::Version
135
- version: '6'
112
+ version: '6.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: '5'
119
+ version: '6'
146
120
  type: :development
147
121
  prerelease: false
148
122
  version_requirements: !ruby/object:Gem::Requirement
149
123
  requirements:
150
- - - ">="
124
+ - - "~>"
151
125
  - !ruby/object:Gem::Version
152
- version: 4.11.0
153
- - - "<"
126
+ version: '6'
127
+ - !ruby/object:Gem::Dependency
128
+ name: obh-client
129
+ requirement: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - "~>"
154
132
  - !ruby/object:Gem::Version
155
- version: '5'
133
+ version: '0.3'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - "~>"
139
+ - !ruby/object:Gem::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
- - lukas.westermann@at-point.ch
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,15 +176,17 @@ 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: {}
200
- post_install_message:
189
+ post_install_message:
201
190
  rdoc_options: []
202
191
  require_paths:
203
192
  - lib
@@ -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.0'
197
+ version: '3.1'
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
- rubyforge_project:
216
- rubygems_version: 2.6.14
217
- signing_key:
204
+ rubygems_version: 3.3.26
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