cequens 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 8d320528d1ccc9968f18db63262162a17c148866ede6c9f23a10eee5f53d5e59
4
+ data.tar.gz: eae383c75b52d7539e150f874b015bae916f54feef79920da65eea4aa9f8a98e
5
+ SHA512:
6
+ metadata.gz: 57db20af3cabc9f24adde4c441628d356a1232c229b610d39748b6008355fa6c3c23e65348b89e2f1aaddf4f00e3ded37e57b53d60551706be23aa5690243410
7
+ data.tar.gz: d8ea8e20086f84ef937ccd2f01df4ec1935c7b1967a727e64f0148fceb4e97bb035f1c600bd6703536a8603dcfc3bf0ae3281589d73028f9a5f5065d5df1b2fd
@@ -0,0 +1,22 @@
1
+ name: Ruby
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ test:
7
+
8
+ runs-on: ubuntu-latest
9
+
10
+ steps:
11
+ - uses: actions/checkout@v2
12
+ - name: Set up Ruby
13
+ uses: ruby/setup-ruby@v1
14
+ with:
15
+ ruby-version: 2.6
16
+ - name: Install dependencies
17
+ run: bundle install
18
+ - name: Rubocop
19
+ run: rubocop
20
+ - name: Run tests
21
+ run: bundle exec rake spec
22
+
data/.gitignore ADDED
@@ -0,0 +1,13 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+
10
+ # rspec failure tracking
11
+ .rspec_status
12
+
13
+ .byebug_history
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
data/.rubocop.yml ADDED
@@ -0,0 +1,8 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.6
3
+ Metrics/LineLength:
4
+ Max: 120
5
+ Metrics/BlockLength:
6
+ ExcludedMethods: ['describe', 'context']
7
+ Style/Documentation:
8
+ Enabled: false
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.6.6
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ # Specify your gem's dependencies in fawry.gemspec
6
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,243 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ cequens (0.0.1)
5
+ dry-validation (~> 1.6)
6
+ faraday (~> 1.3)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ actioncable (6.1.2.1)
12
+ actionpack (= 6.1.2.1)
13
+ activesupport (= 6.1.2.1)
14
+ nio4r (~> 2.0)
15
+ websocket-driver (>= 0.6.1)
16
+ actionmailbox (6.1.2.1)
17
+ actionpack (= 6.1.2.1)
18
+ activejob (= 6.1.2.1)
19
+ activerecord (= 6.1.2.1)
20
+ activestorage (= 6.1.2.1)
21
+ activesupport (= 6.1.2.1)
22
+ mail (>= 2.7.1)
23
+ actionmailer (6.1.2.1)
24
+ actionpack (= 6.1.2.1)
25
+ actionview (= 6.1.2.1)
26
+ activejob (= 6.1.2.1)
27
+ activesupport (= 6.1.2.1)
28
+ mail (~> 2.5, >= 2.5.4)
29
+ rails-dom-testing (~> 2.0)
30
+ actionpack (6.1.2.1)
31
+ actionview (= 6.1.2.1)
32
+ activesupport (= 6.1.2.1)
33
+ rack (~> 2.0, >= 2.0.9)
34
+ rack-test (>= 0.6.3)
35
+ rails-dom-testing (~> 2.0)
36
+ rails-html-sanitizer (~> 1.0, >= 1.2.0)
37
+ actiontext (6.1.2.1)
38
+ actionpack (= 6.1.2.1)
39
+ activerecord (= 6.1.2.1)
40
+ activestorage (= 6.1.2.1)
41
+ activesupport (= 6.1.2.1)
42
+ nokogiri (>= 1.8.5)
43
+ actionview (6.1.2.1)
44
+ activesupport (= 6.1.2.1)
45
+ builder (~> 3.1)
46
+ erubi (~> 1.4)
47
+ rails-dom-testing (~> 2.0)
48
+ rails-html-sanitizer (~> 1.1, >= 1.2.0)
49
+ activejob (6.1.2.1)
50
+ activesupport (= 6.1.2.1)
51
+ globalid (>= 0.3.6)
52
+ activemodel (6.1.2.1)
53
+ activesupport (= 6.1.2.1)
54
+ activerecord (6.1.2.1)
55
+ activemodel (= 6.1.2.1)
56
+ activesupport (= 6.1.2.1)
57
+ activestorage (6.1.2.1)
58
+ actionpack (= 6.1.2.1)
59
+ activejob (= 6.1.2.1)
60
+ activerecord (= 6.1.2.1)
61
+ activesupport (= 6.1.2.1)
62
+ marcel (~> 0.3.1)
63
+ mimemagic (~> 0.3.2)
64
+ activesupport (6.1.2.1)
65
+ concurrent-ruby (~> 1.0, >= 1.0.2)
66
+ i18n (>= 1.6, < 2)
67
+ minitest (>= 5.1)
68
+ tzinfo (~> 2.0)
69
+ zeitwerk (~> 2.3)
70
+ addressable (2.7.0)
71
+ public_suffix (>= 2.0.2, < 5.0)
72
+ ast (2.4.2)
73
+ builder (3.2.4)
74
+ byebug (11.1.3)
75
+ concurrent-ruby (1.1.8)
76
+ crack (0.4.5)
77
+ rexml
78
+ crass (1.0.6)
79
+ diff-lcs (1.4.4)
80
+ dry-configurable (0.12.1)
81
+ concurrent-ruby (~> 1.0)
82
+ dry-core (~> 0.5, >= 0.5.0)
83
+ dry-container (0.7.2)
84
+ concurrent-ruby (~> 1.0)
85
+ dry-configurable (~> 0.1, >= 0.1.3)
86
+ dry-core (0.5.0)
87
+ concurrent-ruby (~> 1.0)
88
+ dry-equalizer (0.3.0)
89
+ dry-inflector (0.2.0)
90
+ dry-initializer (3.0.4)
91
+ dry-logic (1.1.0)
92
+ concurrent-ruby (~> 1.0)
93
+ dry-core (~> 0.5, >= 0.5)
94
+ dry-schema (1.6.1)
95
+ concurrent-ruby (~> 1.0)
96
+ dry-configurable (~> 0.8, >= 0.8.3)
97
+ dry-core (~> 0.5, >= 0.5)
98
+ dry-initializer (~> 3.0)
99
+ dry-logic (~> 1.0)
100
+ dry-types (~> 1.5)
101
+ dry-types (1.5.0)
102
+ concurrent-ruby (~> 1.0)
103
+ dry-container (~> 0.3)
104
+ dry-core (~> 0.5, >= 0.5)
105
+ dry-inflector (~> 0.1, >= 0.1.2)
106
+ dry-logic (~> 1.0, >= 1.0.2)
107
+ dry-validation (1.6.0)
108
+ concurrent-ruby (~> 1.0)
109
+ dry-container (~> 0.7, >= 0.7.1)
110
+ dry-core (~> 0.4)
111
+ dry-equalizer (~> 0.2)
112
+ dry-initializer (~> 3.0)
113
+ dry-schema (~> 1.5, >= 1.5.2)
114
+ erubi (1.10.0)
115
+ faraday (1.3.0)
116
+ faraday-net_http (~> 1.0)
117
+ multipart-post (>= 1.2, < 3)
118
+ ruby2_keywords
119
+ faraday-net_http (1.0.1)
120
+ globalid (0.4.2)
121
+ activesupport (>= 4.2.0)
122
+ hashdiff (1.0.1)
123
+ i18n (1.8.9)
124
+ concurrent-ruby (~> 1.0)
125
+ loofah (2.9.0)
126
+ crass (~> 1.0.2)
127
+ nokogiri (>= 1.5.9)
128
+ mail (2.7.1)
129
+ mini_mime (>= 0.1.1)
130
+ marcel (0.3.3)
131
+ mimemagic (~> 0.3.2)
132
+ method_source (1.0.0)
133
+ mimemagic (0.3.5)
134
+ mini_mime (1.0.2)
135
+ mini_portile2 (2.5.0)
136
+ minitest (5.14.3)
137
+ multipart-post (2.1.1)
138
+ nio4r (2.5.5)
139
+ nokogiri (1.11.1)
140
+ mini_portile2 (~> 2.5.0)
141
+ racc (~> 1.4)
142
+ parallel (1.20.1)
143
+ parser (3.0.0.0)
144
+ ast (~> 2.4.1)
145
+ public_suffix (4.0.6)
146
+ racc (1.5.2)
147
+ rack (2.2.3)
148
+ rack-test (1.1.0)
149
+ rack (>= 1.0, < 3)
150
+ rails (6.1.2.1)
151
+ actioncable (= 6.1.2.1)
152
+ actionmailbox (= 6.1.2.1)
153
+ actionmailer (= 6.1.2.1)
154
+ actionpack (= 6.1.2.1)
155
+ actiontext (= 6.1.2.1)
156
+ actionview (= 6.1.2.1)
157
+ activejob (= 6.1.2.1)
158
+ activemodel (= 6.1.2.1)
159
+ activerecord (= 6.1.2.1)
160
+ activestorage (= 6.1.2.1)
161
+ activesupport (= 6.1.2.1)
162
+ bundler (>= 1.15.0)
163
+ railties (= 6.1.2.1)
164
+ sprockets-rails (>= 2.0.0)
165
+ rails-dom-testing (2.0.3)
166
+ activesupport (>= 4.2.0)
167
+ nokogiri (>= 1.6)
168
+ rails-html-sanitizer (1.3.0)
169
+ loofah (~> 2.3)
170
+ railties (6.1.2.1)
171
+ actionpack (= 6.1.2.1)
172
+ activesupport (= 6.1.2.1)
173
+ method_source
174
+ rake (>= 0.8.7)
175
+ thor (~> 1.0)
176
+ rainbow (3.0.0)
177
+ rake (13.0.3)
178
+ regexp_parser (2.0.3)
179
+ rexml (3.2.4)
180
+ rspec (3.10.0)
181
+ rspec-core (~> 3.10.0)
182
+ rspec-expectations (~> 3.10.0)
183
+ rspec-mocks (~> 3.10.0)
184
+ rspec-core (3.10.1)
185
+ rspec-support (~> 3.10.0)
186
+ rspec-expectations (3.10.1)
187
+ diff-lcs (>= 1.2.0, < 2.0)
188
+ rspec-support (~> 3.10.0)
189
+ rspec-mocks (3.10.2)
190
+ diff-lcs (>= 1.2.0, < 2.0)
191
+ rspec-support (~> 3.10.0)
192
+ rspec-support (3.10.2)
193
+ rspec_junit_formatter (0.4.1)
194
+ rspec-core (>= 2, < 4, != 2.12.0)
195
+ rubocop (1.10.0)
196
+ parallel (~> 1.10)
197
+ parser (>= 3.0.0.0)
198
+ rainbow (>= 2.2.2, < 4.0)
199
+ regexp_parser (>= 1.8, < 3.0)
200
+ rexml
201
+ rubocop-ast (>= 1.2.0, < 2.0)
202
+ ruby-progressbar (~> 1.7)
203
+ unicode-display_width (>= 1.4.0, < 3.0)
204
+ rubocop-ast (1.4.1)
205
+ parser (>= 2.7.1.5)
206
+ ruby-progressbar (1.11.0)
207
+ ruby2_keywords (0.0.4)
208
+ sprockets (4.0.2)
209
+ concurrent-ruby (~> 1.0)
210
+ rack (> 1, < 3)
211
+ sprockets-rails (3.2.2)
212
+ actionpack (>= 4.0)
213
+ activesupport (>= 4.0)
214
+ sprockets (>= 3.0.0)
215
+ thor (1.1.0)
216
+ tzinfo (2.0.4)
217
+ concurrent-ruby (~> 1.0)
218
+ unicode-display_width (2.0.0)
219
+ webmock (3.11.2)
220
+ addressable (>= 2.3.6)
221
+ crack (>= 0.3.2)
222
+ hashdiff (>= 0.4.0, < 2.0.0)
223
+ websocket-driver (0.7.3)
224
+ websocket-extensions (>= 0.1.0)
225
+ websocket-extensions (0.1.5)
226
+ zeitwerk (2.4.2)
227
+
228
+ PLATFORMS
229
+ ruby
230
+
231
+ DEPENDENCIES
232
+ bundler (~> 2.0)
233
+ byebug (~> 11.1)
234
+ cequens!
235
+ rails (~> 6.1)
236
+ rake (~> 13.0)
237
+ rspec (~> 3.10)
238
+ rspec_junit_formatter (~> 0.4)
239
+ rubocop (~> 1.10)
240
+ webmock (~> 3.11)
241
+
242
+ BUNDLED WITH
243
+ 2.2.10
data/README.md ADDED
@@ -0,0 +1,40 @@
1
+ # Cequens
2
+
3
+ **Disclaimer:** we are not officially affilated with the Cequens company.
4
+
5
+ A plug-and-play library that make it easier to use with Cequens SMS APIs
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'cequens'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install cequens
22
+
23
+ ## Usage
24
+
25
+ ### Send SMS
26
+
27
+ ```ruby
28
+ params = {
29
+ "messageText": 'Test from Ahmed',
30
+ "senderName": 'Cequens',
31
+ "messageType": 'text',
32
+ "recipients": '2011111111'
33
+ }
34
+
35
+ res = Cequens.send_sms(params)
36
+ # => #<Cequens::Response:0x00007ffd672b29f8 @api_response={"replyCode"=>0, "replyMessage"=>"Request handled successfully", "requestId"=>"64035880-7044-11eb-9f04-11a5522e89a7", "clientRequestId"=>0, "requestTime"=>"2021-02-16T10:47:40.296", "data"=>{"SentSMSIDs"=>[{"SMSId"=>"056ef72a-1497-47be-a4c8-4a7835e071dc"}], "InvalidRecipients"=>""}}>
37
+
38
+ res.success? # => true
39
+ ```
40
+
data/Rakefile ADDED
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
5
+ require 'rubocop/rake_task'
6
+
7
+ RSpec::Core::RakeTask.new(:spec)
8
+ RuboCop::RakeTask.new
9
+
10
+ task :console do
11
+ require 'irb'
12
+ require 'irb/completion'
13
+ require 'cequens'
14
+
15
+ ARGV.clear
16
+ IRB.start
17
+ end
data/bin/console ADDED
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+ #!/usr/bin/env ruby
3
+
4
+ require 'bundler/setup'
5
+ require 'cequens'
6
+
7
+ # You can add fixtures and/or initialization code here to make experimenting
8
+ # with your gem easier. You can also use a different console, if you like.
9
+
10
+ # (If you use this, don't forget to add pry to your Gemfile!)
11
+ # require "pry"
12
+ # Pry.start
13
+
14
+ require 'irb'
15
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
data/cequens.gemspec ADDED
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'cequens/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'cequens'
9
+ spec.version = Cequens::VERSION
10
+ spec.authors = ['Ahmed Ali']
11
+ spec.email = ['ahmed.saraya90@gmail.com']
12
+
13
+ spec.summary = 'A library to interface with Cequens SMS gateway API.'
14
+ spec.license = 'MIT'
15
+
16
+ spec.metadata['homepage_uri'] = 'https://github.com/AhmedAIbrahim/cequens'
17
+ spec.metadata['source_code_uri'] = 'https://github.com/AhmedAIbrahim/cequens'
18
+
19
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
20
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
21
+ end
22
+ spec.bindir = 'exe'
23
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
+ spec.require_paths = ['lib']
25
+
26
+ spec.required_ruby_version = '~> 2.6'
27
+ spec.add_dependency 'dry-validation', '~> 1.6'
28
+ spec.add_dependency 'faraday', '~> 1.3'
29
+
30
+ spec.add_development_dependency 'bundler', '~> 2.0'
31
+ spec.add_development_dependency 'byebug', '~> 11.1'
32
+ spec.add_development_dependency 'rails', '~> 6.1'
33
+ spec.add_development_dependency 'rake', '~> 13.0'
34
+ spec.add_development_dependency 'rspec', '~> 3.10'
35
+ spec.add_development_dependency 'rspec_junit_formatter', '~> 0.4'
36
+ spec.add_development_dependency 'rubocop', '~> 1.10'
37
+ spec.add_development_dependency 'webmock', '~> 3.11'
38
+ end
data/lib/cequens.rb ADDED
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'cequens/version'
4
+ require 'cequens/connection'
5
+ require 'cequens/errors'
6
+ require 'cequens/request'
7
+ require 'cequens/response'
8
+ require 'cequens/requests/send_sms_request'
9
+ require 'cequens/contracts/send_sms_contract'
10
+ require 'byebug'
11
+ require 'rails'
12
+
13
+ module Cequens
14
+ class << self
15
+ attr_accessor :access_token
16
+
17
+ def config
18
+ yield self
19
+ end
20
+
21
+ def send_sms(params, opts = {})
22
+ Request.new('send_sms', params, opts).fire_request
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'faraday'
4
+ require 'json'
5
+
6
+ module Cequens
7
+ class Connection
8
+ CEQUENS_BASE_URL = 'https://apis.cequens.com/'
9
+
10
+ class << self
11
+ def post(path, params, body, _options)
12
+ conn = connection
13
+
14
+ conn.post(path) do |request|
15
+ request.params = params
16
+ request.body = body.to_json
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def connection
23
+ @connection ||= Faraday.new(url: CEQUENS_BASE_URL,
24
+ headers: { 'Content-Type': 'application/json',
25
+ 'Accept': 'application/json',
26
+ 'Authorization': "Bearer #{Cequens.access_token}" })
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'dry-validation'
4
+ KEYS = [0, 1].freeze
5
+ MESSAGE_TYPE = %w[text unicode].freeze
6
+
7
+ module Cequens
8
+ module Contracts
9
+ class SendSMSContract < Dry::Validation::Contract
10
+ params do
11
+ required(:recipients).value(:string)
12
+ required(:messageText).value(:string)
13
+ required(:senderName).value(:string)
14
+ required(:messageType).value(included_in?: MESSAGE_TYPE)
15
+ optional(:validityPeriod).value(:string)
16
+ optional(:clientMessageId).value(:integer)
17
+ optional(:acknowledgement).value(included_in?: KEYS)
18
+ optional(:deliveryTime).value(:string)
19
+ optional(:ip).value(:string)
20
+ optional(:dlrUrl).value(:string)
21
+ optional(:dateStamp).value(:integer)
22
+ optional(:udh).value(:string)
23
+ optional(:dataCoding).value(:integer)
24
+ optional(:flashing).value(included_in?: KEYS)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Cequens
4
+ class InvalidCequensRequestError < StandardError; end
5
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Cequens
4
+ class Request
5
+ DEFAULT_OPTIONS = {}.freeze
6
+
7
+ attr_reader :action, :params, :request, :options
8
+
9
+ def initialize(action, params, opts)
10
+ @action = action
11
+ @params = params
12
+ @options = DEFAULT_OPTIONS.merge(opts)
13
+
14
+ build_request
15
+ end
16
+
17
+ private
18
+
19
+ def build_request
20
+ case action
21
+ when 'send_sms'
22
+ self.class.include Requests::SendSMSRequest
23
+ validate_params!
24
+ @request = build_send_sms_request
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Cequens
4
+ module Requests
5
+ module SendSMSRequest
6
+ DEFAULTS = {}.freeze
7
+
8
+ def fire_request
9
+ cequens_api_response = Connection.post(request[:path], request[:params], request[:body], request[:options])
10
+ response_body = JSON.parse(cequens_api_response.body)
11
+
12
+ Response.new(response_body)
13
+ end
14
+
15
+ private
16
+
17
+ def build_send_sms_request
18
+ {
19
+ path: 'sms/v1/messages',
20
+ params: {},
21
+ body: request_transformed_params,
22
+ options: options
23
+ }
24
+ end
25
+
26
+ def request_params
27
+ @request_params ||= DEFAULTS.merge(params)
28
+ end
29
+
30
+ # rubocop:disable Metrics/AbcSize
31
+ # rubocop:disable Metrics/MethodLength
32
+ def request_transformed_params
33
+ {
34
+ messageText: request_params[:messageText],
35
+ senderName: request_params[:senderName],
36
+ messageType: request_params[:messageType],
37
+ recipients: request_params[:recipients],
38
+ clientMessageId: request_params[:clientMessageId],
39
+ acknowledgement: request_params[:acknowledgement],
40
+ deliveryTime: request_params[:deliveryTime],
41
+ validityPeriod: request_params[:validityPeriod],
42
+ ip: request_params[:ip],
43
+ dlrUrl: request_params[:dlrUrl],
44
+ dateStamp: request_params[:dateStamp],
45
+ udh: request_params[:udh],
46
+ dataCoding: request_params[:dataCoding],
47
+ flashing: request_params[:flashing]
48
+ }.compact
49
+ end
50
+
51
+ # rubocop:enable Metrics/AbcSize
52
+ # rubocop:enable Metrics/MethodLength
53
+
54
+ def validate_params!
55
+ contract = Contracts::SendSMSContract.new.call(request_params)
56
+ raise InvalidCequensRequestError, contract.errors.to_h if contract.failure?
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Cequens
4
+ class Response
5
+ attr_reader :api_response
6
+
7
+ def initialize(api_response)
8
+ @api_response = api_response
9
+ end
10
+
11
+ def success?
12
+ api_response_body['replyCode'].zero?
13
+ end
14
+
15
+ def failure?
16
+ !success?
17
+ end
18
+
19
+ def api_response_body
20
+ api_response
21
+ end
22
+
23
+ def message
24
+ api_response_body['replyMessage']
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Cequens
4
+ VERSION = '0.0.1'
5
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails/generators'
4
+
5
+ module Cequens
6
+ module Generators
7
+ # rails g Cequens:config
8
+ class ConfigGenerator < Rails::Generators::Base # :nodoc:
9
+ source_root File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
10
+
11
+ desc <<~DESC
12
+ Description:
13
+ Copies Cequens configuration file to your application's initializer directory.
14
+ DESC
15
+
16
+ def copy_config_file
17
+ template 'cequens_template.rb', 'config/initializers/cequens.rb'
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ Cequens.configure do |config|
4
+ # config.access_token = ''
5
+ end
metadata ADDED
@@ -0,0 +1,207 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cequens
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Ahmed Ali
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2021-02-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: dry-validation
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: faraday
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: byebug
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '11.1'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '11.1'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rails
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '6.1'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '6.1'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '13.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '13.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '3.10'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '3.10'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec_junit_formatter
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0.4'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.4'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '1.10'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '1.10'
139
+ - !ruby/object:Gem::Dependency
140
+ name: webmock
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '3.11'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '3.11'
153
+ description:
154
+ email:
155
+ - ahmed.saraya90@gmail.com
156
+ executables: []
157
+ extensions: []
158
+ extra_rdoc_files: []
159
+ files:
160
+ - ".github/workflows/ruby.yml"
161
+ - ".gitignore"
162
+ - ".rspec"
163
+ - ".rubocop.yml"
164
+ - ".ruby-version"
165
+ - Gemfile
166
+ - Gemfile.lock
167
+ - README.md
168
+ - Rakefile
169
+ - bin/console
170
+ - bin/setup
171
+ - cequens.gemspec
172
+ - lib/cequens.rb
173
+ - lib/cequens/connection.rb
174
+ - lib/cequens/contracts/send_sms_contract.rb
175
+ - lib/cequens/errors.rb
176
+ - lib/cequens/request.rb
177
+ - lib/cequens/requests/send_sms_request.rb
178
+ - lib/cequens/response.rb
179
+ - lib/cequens/version.rb
180
+ - lib/generators/cequens/config_generator.rb
181
+ - lib/generators/cequens/templates/cequens_template.rb
182
+ homepage:
183
+ licenses:
184
+ - MIT
185
+ metadata:
186
+ homepage_uri: https://github.com/AhmedAIbrahim/cequens
187
+ source_code_uri: https://github.com/AhmedAIbrahim/cequens
188
+ post_install_message:
189
+ rdoc_options: []
190
+ require_paths:
191
+ - lib
192
+ required_ruby_version: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - "~>"
195
+ - !ruby/object:Gem::Version
196
+ version: '2.6'
197
+ required_rubygems_version: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ requirements: []
203
+ rubygems_version: 3.0.3
204
+ signing_key:
205
+ specification_version: 4
206
+ summary: A library to interface with Cequens SMS gateway API.
207
+ test_files: []