niazpardaz_sms 1.0.2

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: e4793bbddd7bbaceef2d5959e0233c90292f5e11230cb4e94613bf0db9fb1c55
4
+ data.tar.gz: dbe84c58e2dc06902b28c422b4d12599c51d584499cf4b79b0ddd9cbb6ba6a28
5
+ SHA512:
6
+ metadata.gz: 80a7f4826ab2c93234005507de892437dc88f11161bdc000be3f55c2fa338d112de0e622ff3dca45aa0f85b693c87ef0d4cbba4156da09aaf86d6e26f512bed5
7
+ data.tar.gz: 56e777cbe89886f6d6dfc3ea1aa04da9b5faa653b23e9f65572b9281ae178ef5a83948c89a309cd1ce89488c6613933322bc2833c4c09582a3480ff7d7a1603d
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
data/.rubocop.yml ADDED
@@ -0,0 +1,35 @@
1
+ # .rubocop.yml
2
+ AllCops:
3
+ NewCops: enable
4
+ TargetRubyVersion: 2.6
5
+ SuggestExtensions: false
6
+ Exclude:
7
+ - 'bin/**/*'
8
+ - 'vendor/**/*'
9
+
10
+ Metrics/ClassLength:
11
+ Max: 200
12
+
13
+ Metrics/MethodLength:
14
+ Max: 25
15
+
16
+ Metrics/AbcSize:
17
+ Max: 35
18
+
19
+ Layout/LineLength:
20
+ Max: 250
21
+
22
+ Naming/AccessorMethodName:
23
+ Enabled: false
24
+
25
+ Style/HashSyntax:
26
+ EnforcedStyle: ruby19_no_mixed_keys
27
+
28
+ Style/RaiseArgs:
29
+ Enabled: false
30
+
31
+ Style/IfUnlessModifier:
32
+ Enabled: false
33
+
34
+ Gemspec/OrderedDependencies:
35
+ Enabled: false
data/CHANGELOG.md ADDED
@@ -0,0 +1,38 @@
1
+ # Changelog
2
+
3
+ تمام تغییرات قابل توجه این پروژه در این فایل مستند می‌شود.
4
+
5
+ فرمت بر اساس [Keep a Changelog](https://keepachangelog.com/fa/1.0.0/) است
6
+ و این پروژه از [Semantic Versioning](https://semver.org/lang/fa/) پیروی می‌کند.
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [1.0.2] - 2025-02-16
11
+
12
+ ### اضافه شده
13
+ - کلاینت اصلی `NiazpardazSms::Client` برای ارتباط با API
14
+ - ارسال پیامک تکی (`send_sms`)
15
+ - ارسال پیامک گروهی (`send_bulk_sms`)
16
+ - ارسال پیامک LikeToLike (`send_sms_like_to_like`)
17
+ - ارسال پیامک صوتی OTP (`send_voice_otp`)
18
+ - گزارش تحویل پیامک گروهی (`get_batch_delivery`)
19
+ - گزارش تحویل پیامک LikeToLike (`get_delivery_like_to_like`)
20
+ - دریافت اعتبار حساب (`get_credit`)
21
+ - دریافت شماره‌های فرستنده (`get_sender_numbers`)
22
+ - دریافت تعداد پیامک‌های دریافتی (`get_inbox_count`)
23
+ - دریافت پیامک‌ها (`get_messages`)
24
+ - دریافت پیامک‌ها بر اساس بازه زمانی (`get_messages_by_date_range`)
25
+ - استخراج شماره‌های لیست سیاه (`extract_telecom_blacklist_numbers`)
26
+ - بررسی شماره در لیست سیاه (`number_is_in_telecom_blacklist`)
27
+ - بررسی محتوای پیامک (`check_sms_content`)
28
+ - پشتیبانی از Rails با Railtie و Generator
29
+ - پشتیبانی از Sinatra
30
+ - پشتیبانی از Hanami
31
+ - پشتیبانی از سایر فریم‌ورک‌های Ruby
32
+ - مدل‌های کامل برای تمام پاسخ‌های API
33
+ - کدهای نتیجه با توضیحات فارسی
34
+ - مدیریت خطا با کلاس‌های اختصاصی
35
+ - مستندات کامل به زبان فارسی
36
+
37
+ [Unreleased]: https://github.com/NiazpardazSms/niazpardaz-sms-ruby/compare/v1.0.2...HEAD
38
+ [1.0.0]: https://github.com/NiazpardazSms/niazpardaz-sms-ruby/releases/tag/v1.0.2
data/Gemfile ADDED
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ # Specify your gem's dependencies in niazpardaz_sms.gemspec
6
+ gemspec
7
+
8
+ group :development, :test do
9
+ gem 'bundler', '>= 2.0', '< 5.0'
10
+ gem 'rake', '~> 13.0'
11
+ gem 'rspec', '~> 3.0'
12
+ gem 'rubocop', '~> 1.0'
13
+ gem 'vcr', '~> 6.0'
14
+ gem 'webmock', '~> 3.0'
15
+ end
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Niazpardaz
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,518 @@
1
+ # NiazpardazSms SDK for Ruby
2
+
3
+ کتابخانه رسمی Ruby برای کار با API پیامکی نیازپرداز
4
+
5
+ [![Gem Version](https://badge.fury.io/rb/niazpardaz_sms.svg)](https://badge.fury.io/rb/niazpardaz_sms)
6
+ [![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
7
+
8
+ ## نصب
9
+
10
+ ### Bundler (توصیه شده)
11
+
12
+ به فایل `Gemfile` اضافه کنید:
13
+
14
+ ```ruby
15
+ gem 'niazpardaz_sms'
16
+ ```
17
+
18
+ سپس اجرا کنید:
19
+
20
+ ```bash
21
+ bundle install
22
+ ```
23
+
24
+ ### نصب مستقیم
25
+
26
+ ```bash
27
+ gem install niazpardaz_sms
28
+ ```
29
+
30
+ ## پیکربندی
31
+
32
+ ### Ruby خالص
33
+
34
+ ```ruby
35
+ require 'niazpardaz_sms'
36
+
37
+ # روش 1: ایجاد مستقیم کلاینت
38
+ client = NiazpardazSms::Client.new('YOUR_API_KEY')
39
+
40
+ # روش 2: پیکربندی سراسری
41
+ NiazpardazSms.configure do |config|
42
+ config.default_api_key = 'YOUR_API_KEY'
43
+ config.default_timeout = 30
44
+ end
45
+
46
+ client = NiazpardazSms.client
47
+ ```
48
+
49
+ ### Rails
50
+
51
+ 1. اجرای generator:
52
+
53
+ ```bash
54
+ rails generate niazpardaz_sms:install
55
+ ```
56
+
57
+ 2. ویرایش فایل `config/initializers/niazpardaz_sms.rb`:
58
+
59
+ ```ruby
60
+ NiazpardazSms.configure do |config|
61
+ config.default_api_key = ENV.fetch('NIAZPARDAZ_API_KEY', nil)
62
+ end
63
+ ```
64
+
65
+ 3. یا استفاده از Rails credentials:
66
+
67
+ ```bash
68
+ rails credentials:edit
69
+ ```
70
+
71
+ ```yaml
72
+ niazpardaz_sms:
73
+ api_key: YOUR_API_KEY
74
+ ```
75
+
76
+ ### Sinatra
77
+
78
+ ```ruby
79
+ require 'sinatra'
80
+ require 'niazpardaz_sms'
81
+
82
+ configure do
83
+ NiazpardazSms.configure do |config|
84
+ config.default_api_key = ENV['NIAZPARDAZ_API_KEY']
85
+ end
86
+ end
87
+
88
+ post '/send_sms' do
89
+ client = NiazpardazSms.client
90
+ result = client.send_sms(
91
+ from_number: params[:from],
92
+ to_number: params[:to],
93
+ message: params[:message]
94
+ )
95
+
96
+ json result.success? ? { status: 'ok', id: result.batch_sms_id } : { status: 'error' }
97
+ end
98
+ ```
99
+
100
+ ### Hanami
101
+
102
+ ```ruby
103
+ # config/providers/niazpardaz_sms.rb
104
+ Hanami.app.register_provider :niazpardaz_sms do
105
+ start do
106
+ require 'niazpardaz_sms'
107
+
108
+ NiazpardazSms.configure do |config|
109
+ config.default_api_key = ENV['NIAZPARDAZ_API_KEY']
110
+ end
111
+
112
+ register 'niazpardaz_sms.client', NiazpardazSms.client
113
+ end
114
+ end
115
+ ```
116
+
117
+ ## شروع سریع
118
+
119
+ ```ruby
120
+ require 'niazpardaz_sms'
121
+
122
+ # ساخت کلاینت با API Key
123
+ client = NiazpardazSms::Client.new('YOUR_API_KEY')
124
+
125
+ # ارسال پیامک
126
+ result = client.send_sms(
127
+ from_number: '10001234',
128
+ to_number: '09123456789',
129
+ message: 'سلام از نیازپرداز!'
130
+ )
131
+
132
+ if result.success?
133
+ puts "شناسه ارسال: #{result.batch_sms_id}"
134
+ else
135
+ puts "خطا: #{result.result_description}"
136
+ end
137
+ ```
138
+
139
+ ## امکانات
140
+
141
+ ### ارسال پیامک تکی
142
+
143
+ ```ruby
144
+ result = client.send_sms(
145
+ from_number: '10001234',
146
+ to_number: '09123456789',
147
+ message: 'متن پیامک',
148
+ is_flash: false,
149
+ send_delay: nil
150
+ )
151
+
152
+ puts "شناسه ارسال: #{result.batch_sms_id}"
153
+ puts "وضعیت: #{result.result_description}"
154
+ ```
155
+
156
+ ### ارسال گروهی (یک متن به چند شماره)
157
+
158
+ ```ruby
159
+ result = client.send_bulk_sms(
160
+ from_number: '10001234',
161
+ to_numbers: ['09123456789', '09198765432'],
162
+ message: 'پیام گروهی',
163
+ is_flash: false
164
+ )
165
+
166
+ puts "شناسه ارسال: #{result.batch_sms_id}"
167
+ puts "وضعیت: #{result.result_description}"
168
+ ```
169
+
170
+ ### ارسال LikeToLike (هر شماره پیام مخصوص خودش)
171
+
172
+ ```ruby
173
+ result = client.send_sms_like_to_like(
174
+ from_number: '10001234',
175
+ to_numbers: ['09123456789', '09198765432'],
176
+ messages: ['سلام علی جان', 'سلام رضا جان']
177
+ )
178
+
179
+ puts "SmsId: #{result.sms_id}"
180
+ ```
181
+
182
+ ### ارسال پیامک صوتی OTP
183
+
184
+ ```ruby
185
+ result = client.send_voice_otp(
186
+ from_number: '10001234',
187
+ to_number: '09123456789',
188
+ otp: '12345'
189
+ )
190
+
191
+ puts "شناسه ارسال: #{result.batch_sms_id}"
192
+ puts "وضعیت: #{result.result_description}"
193
+ ```
194
+
195
+ ### گزارش تحویل ارسال گروهی
196
+
197
+ ```ruby
198
+ delivery = client.get_batch_delivery(
199
+ batch_sms_id: 123456,
200
+ page_index: 1,
201
+ page_size: 100
202
+ )
203
+
204
+ if delivery.success?
205
+ delivery.delivery_hash.each do |number, status|
206
+ puts "#{number}: #{NiazpardazSms::Models::SmsDeliveryStatus.description(status)}"
207
+ end
208
+ end
209
+ ```
210
+
211
+ ### گزارش تحویل ارسال LikeToLike
212
+
213
+ ```ruby
214
+ delivery = client.get_delivery_like_to_like(sms_id: 789)
215
+
216
+ if delivery.success?
217
+ delivery.numbers.each_with_index do |number, i|
218
+ puts "#{number}: #{delivery.delivery_status[i]}"
219
+ end
220
+ end
221
+ ```
222
+
223
+ ### اعتبار
224
+
225
+ ```ruby
226
+ credit = client.get_credit
227
+
228
+ if credit.success?
229
+ puts "اعتبار: #{credit.credit}"
230
+ end
231
+ ```
232
+
233
+ ### شماره‌های فرستنده
234
+
235
+ ```ruby
236
+ senders = client.get_sender_numbers
237
+
238
+ senders.senders.each do |sender|
239
+ puts sender
240
+ end
241
+ ```
242
+
243
+ ### تعداد پیامک‌های دریافتی
244
+
245
+ ```ruby
246
+ inbox_count = client.get_inbox_count(is_read: false)
247
+ puts "تعداد: #{inbox_count.inbox_count}"
248
+ ```
249
+
250
+ ### لیست پیامک‌ها
251
+
252
+ ```ruby
253
+ messages = client.get_messages(
254
+ message_type: 1,
255
+ from_numbers: '10001234',
256
+ page_index: 1,
257
+ page_size: 50
258
+ )
259
+
260
+ if messages.success?
261
+ messages.messages.each do |message|
262
+ puts "متن پیامک: #{message.content}"
263
+ end
264
+ end
265
+ ```
266
+
267
+ ### دریافت پیامک‌ها بر اساس بازه زمانی
268
+
269
+ ```ruby
270
+ messages = client.get_messages_by_date_range(
271
+ message_type: 1,
272
+ from_numbers: '10001234',
273
+ from_date: Time.now - 86400, # دیروز
274
+ to_date: Time.now
275
+ )
276
+
277
+ if messages.success?
278
+ messages.messages.each do |message|
279
+ puts "متن پیامک: #{message.content}"
280
+ end
281
+ end
282
+ ```
283
+
284
+ ### لیست سیاه مخابرات (بررسی یک شماره)
285
+
286
+ ```ruby
287
+ result = client.number_is_in_telecom_blacklist(number: '09123456789')
288
+ puts "در لیست سیاه: #{result.blacklisted?}"
289
+ ```
290
+
291
+ ### لیست سیاه مخابرات (استخراج شماره‌های لیست سیاه از یک لیست)
292
+
293
+ ```ruby
294
+ blacklist = client.extract_telecom_blacklist_numbers(
295
+ numbers: ['09123456789', '09198765432', '09351234567']
296
+ )
297
+
298
+ if blacklist.success?
299
+ blacklist.blacklist_numbers.each do |number|
300
+ puts number
301
+ end
302
+ end
303
+ ```
304
+
305
+ ### بررسی محتوای پیامک
306
+
307
+ ```ruby
308
+ check = client.check_sms_content(message: 'متن پیامک تست')
309
+ puts "متن معتبر است: #{check.valid?}"
310
+ ```
311
+
312
+ ---
313
+
314
+ ## کدهای نتیجه
315
+
316
+ ### کدهای نتیجه ارسال (SendResultCode)
317
+
318
+ | کد | مقدار | توضیحات |
319
+ |---:|-------|--------:|
320
+ | 0 | SEND_WAS_SUCCESSFUL | ارسال موفق ✅ |
321
+ | 1 | INVALID_USER_NAME_OR_PASSWORD | نام کاربر یا رمز نامعتبر |
322
+ | 2 | USER_BLOCKED | کاربر مسدود |
323
+ | 3 | INVALID_SENDER_NUMBER | شماره فرستنده نامعتبر |
324
+ | 4 | LIMITATION_IN_DAILY_SEND | محدودیت روزانه |
325
+ | 5 | LIMITATION_IN_RECEIVER_COUNT | حداکثر 1000 گیرنده |
326
+ | 6 | SENDER_LINE_IS_INACTIVE | خط غیرفعال |
327
+ | 7 | SMS_CONTENT_FILTERED_WORDS_IS_INCLUDED | کلمات فیلتر شده |
328
+ | 8 | NO_CREDIT | اعتبار ناکافی |
329
+ | 9 | SYSTEM_BEING_UPDATED | در حال بروزرسانی |
330
+ | 10 | WEB_SERVICE_NOT_ACTIVE | وب سرویس غیرفعال |
331
+ | 11 | NOT_IMPLEMENTED | پیاده سازی نشده |
332
+ | 12 | LIKE_TO_LIKE_RECEIVER_AND_MESSAGE_COUNT_SHOULD_EQUAL | تعداد پیام و شماره نابرابر |
333
+ | 13 | LIMITATION_IN_MESSAGE_CONTENT_COUNT | حداکثر 100 پیام |
334
+ | 14 | USER_TARIFF_NOT_DETERMINED | تعرفه تعریف نشده |
335
+ | 15 | DUPLICATE_SEND_SMS | ارسال تکراری |
336
+ | 16 | INVALID_NUMBER_EMPTY_OR_BLACKLIST | شماره نامعتبر یا بلاک لیست |
337
+ | 17 | TEXT_NOT_FOUND | متن خالی |
338
+ | 18 | NOT_VALID_TEMPLATE_FOUND | مغایرت با قالب |
339
+ | 19 | USER_EXPIRED | کاربر منقضی |
340
+ | 20 | USER_IS_NOT_ACTIVE | کاربر غیرفعال |
341
+ | 21 | INVALID_PARAMETERS | پارامتر نامعتبر |
342
+ | 22 | IP_BLOCKED | آی پی بلاک شده |
343
+ | 23 | ENQUEUE_FAILED | خطا در صف ارسال |
344
+ | 24 | DUPLICATE_REQUEST_THRESHOLD | درخواست تکراری |
345
+ | 25 | INVALID_API_KEY | ApiKey نامعتبر |
346
+ | 26 | ERROR_CREATE_VOICE_FILE | خطا در ساخت فایل صوتی |
347
+
348
+ ### کدهای نتیجه گزارش تحویل (DeliveryResultCode)
349
+
350
+ | کد | مقدار | توضیحات |
351
+ |---:|-------|--------:|
352
+ | 0 | SUCCESS | موفق ✅ |
353
+ | -1 | SERVICE_CONNECTION_ERROR | خطا در ارتباط با سرویس دهنده |
354
+ | -2 | INVALID_BATCH_SMS_ID | پیام با این کد وجود ندارد |
355
+ | -3 | REPORT_EXPIRED | مهلت یک هفته ای گزارش پایان یافته |
356
+ | -4 | MESSAGE_IN_QUEUE | پیام در صف ارسال مخابرات است |
357
+ | -5 | TOO_EARLY | حداقل یک دقیقه بعد از ارسال اقدام نمایید |
358
+ | -6 | IP_BLOCKED | آی پی بلاک شده |
359
+ | -7 | INVALID_API_KEY | ApiKey نامعتبر |
360
+
361
+ ### وضعیت تحویل پیامک (SmsDeliveryStatus)
362
+
363
+ | کد | مقدار | توضیحات |
364
+ |---:|-------|--------:|
365
+ | 0 | SENT_TO_TELECOM | ارسال شده به مخابرات |
366
+ | 1 | DELIVERED | رسیده به گوشی ✅ |
367
+ | 2 | NOT_DELIVERED | نرسیده به گوشی |
368
+ | 3 | SMS_FAILED | خطای مخابراتی |
369
+ | 4 | UNKNOWN_ERROR | خطای نامشخص |
370
+ | 5 | RECEIVED_BY_TELECOM | رسیده به مخابرات |
371
+ | 6 | NOT_RECEIVED_BY_TELECOM | نرسیده به مخابرات |
372
+ | 7 | BLACKLISTED | مسدود شده توسط مقصد |
373
+ | 8 | UNKNOWN | نامشخص |
374
+ | 9 | REJECTED_BY_TELECOM | مخابرات پیام را مردود اعلام کرد |
375
+ | 10 | CANCELED | کنسل شده توسط اپراتور |
376
+ | 11 | NOT_SENT | ارسال نشده |
377
+ | 12 | NO_TELEGRAM | تلگرام ندارد |
378
+ | 13 | IN_QUEUE | در صف ارسال |
379
+
380
+ ---
381
+
382
+ ## مدیریت خطا
383
+
384
+ ```ruby
385
+ begin
386
+ result = client.send_sms(
387
+ from_number: '10001234',
388
+ to_number: '09123456789',
389
+ message: 'تست'
390
+ )
391
+
392
+ unless result.success?
393
+ puts "خطا: #{result.result_description}"
394
+ end
395
+ rescue NiazpardazSms::Errors::ValidationError => e
396
+ puts "خطای اعتبارسنجی: #{e.message}"
397
+ rescue NiazpardazSms::Errors::ApiError => e
398
+ puts "خطای API: #{e.message}"
399
+ puts "کد خطا: #{e.error_code}"
400
+ puts "وضعیت HTTP: #{e.http_status}"
401
+ rescue NiazpardazSms::Errors::NetworkError => e
402
+ puts "خطای شبکه: #{e.message}"
403
+ end
404
+ ```
405
+
406
+ ---
407
+
408
+ ## تنظیمات پیشرفته
409
+
410
+ ### استفاده از Faraday سفارشی
411
+
412
+ ```ruby
413
+ require 'faraday'
414
+
415
+ connection = Faraday.new do |faraday|
416
+ faraday.request :json
417
+ faraday.response :json
418
+ faraday.adapter :net_http
419
+ faraday.options.timeout = 60
420
+ faraday.options.open_timeout = 10
421
+ end
422
+
423
+ client = NiazpardazSms::Client.new('YOUR_API_KEY', connection: connection)
424
+ ```
425
+
426
+ ### تنظیم Timeout
427
+
428
+ ```ruby
429
+ client = NiazpardazSms::Client.new('YOUR_API_KEY', timeout: 60)
430
+ ```
431
+
432
+ ### تغییر Base URL
433
+
434
+ ```ruby
435
+ client = NiazpardazSms::Client.new(
436
+ 'YOUR_API_KEY',
437
+ base_url: 'https://custom-url.example.com/api'
438
+ )
439
+ ```
440
+
441
+ ---
442
+
443
+ ## استفاده در Background Jobs
444
+
445
+ ### Sidekiq
446
+
447
+ ```ruby
448
+ class SendSmsJob
449
+ include Sidekiq::Job
450
+
451
+ def perform(to_number, message)
452
+ client = NiazpardazSms.client
453
+ result = client.send_sms(
454
+ from_number: ENV['SMS_FROM_NUMBER'],
455
+ to_number: to_number,
456
+ message: message
457
+ )
458
+
459
+ unless result.success?
460
+ raise "SMS failed: #{result.result_description}"
461
+ end
462
+ end
463
+ end
464
+
465
+ # استفاده
466
+ SendSmsJob.perform_async('09123456789', 'سلام!')
467
+ ```
468
+
469
+ ### ActiveJob (Rails)
470
+
471
+ ```ruby
472
+ class SendSmsJob < ApplicationJob
473
+ queue_as :default
474
+
475
+ def perform(to_number, message)
476
+ client = NiazpardazSms.client
477
+ result = client.send_sms(
478
+ from_number: ENV['SMS_FROM_NUMBER'],
479
+ to_number: to_number,
480
+ message: message
481
+ )
482
+
483
+ unless result.success?
484
+ raise "SMS failed: #{result.result_description}"
485
+ end
486
+ end
487
+ end
488
+
489
+ # استفاده
490
+ SendSmsJob.perform_later('09123456789', 'سلام!')
491
+ ```
492
+
493
+ ---
494
+
495
+ ## سازگاری
496
+
497
+ - Ruby 2.6+
498
+ - Ruby 3.0+
499
+ - Rails 5.2+
500
+ - Rails 6.x
501
+ - Rails 7.x
502
+ - Sinatra
503
+ - Hanami
504
+ - Grape
505
+ - و سایر فریم‌ورک‌های Ruby
506
+
507
+ ## وابستگی‌ها
508
+
509
+ - faraday (>= 1.0, < 3.0)
510
+
511
+ ## مجوز
512
+
513
+ MIT License
514
+
515
+ ## پشتیبانی
516
+
517
+ - 📚 مستندات: https://niazpardaz-sms.com/webservice
518
+ - 🐛 گزارش باگ: [GitHub Issues](https://github.com/NiazpardazSms/niazpardaz-sms-ruby/issues)
data/Rakefile ADDED
@@ -0,0 +1,35 @@
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 default: %i[spec rubocop]
11
+
12
+ desc 'Open an interactive console'
13
+ task :console do
14
+ require 'irb'
15
+ require 'niazpardaz_sms'
16
+ ARGV.clear
17
+ IRB.start
18
+ end
19
+
20
+ namespace :gem do
21
+ desc 'Build the gem'
22
+ task :build do
23
+ system 'gem build niazpardaz_sms.gemspec'
24
+ end
25
+
26
+ desc 'Install the gem locally'
27
+ task install: :build do
28
+ system 'gem install niazpardaz_sms-*.gem'
29
+ end
30
+
31
+ desc 'Push the gem to RubyGems'
32
+ task push: :build do
33
+ system 'gem push niazpardaz_sms-*.gem'
34
+ end
35
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails/generators/base'
4
+
5
+ module NiazpardazSms
6
+ module Generators
7
+ # Generator برای نصب و پیکربندی NiazpardazSms در Rails
8
+ #
9
+ # @example اجرای generator
10
+ # rails generate niazpardaz_sms:install
11
+ #
12
+ class InstallGenerator < Rails::Generators::Base
13
+ source_root File.expand_path('templates', __dir__)
14
+
15
+ desc 'ایجاد فایل پیکربندی NiazpardazSms برای Rails'
16
+
17
+ def create_initializer_file
18
+ template 'niazpardaz_sms.rb', 'config/initializers/niazpardaz_sms.rb'
19
+ end
20
+
21
+ def show_readme
22
+ readme 'README' if behavior == :invoke
23
+ end
24
+ end
25
+ end
26
+ end