didww-v3 2.0.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +22 -0
  3. data/README.md +3 -2
  4. data/lib/didww/callback/const.rb +14 -0
  5. data/lib/didww/callback/request_validator.rb +12 -3
  6. data/lib/didww/client.rb +44 -38
  7. data/lib/didww/complex_objects/base.rb +1 -3
  8. data/lib/didww/complex_objects/configurations/base.rb +142 -2
  9. data/lib/didww/complex_objects/configurations/sip_configuration.rb +33 -3
  10. data/lib/didww/complex_objects/export_filters.rb +26 -0
  11. data/lib/didww/{resources → resource}/address.rb +0 -0
  12. data/lib/didww/{resources → resource}/address_verification.rb +0 -0
  13. data/lib/didww/{resources → resource}/area.rb +0 -0
  14. data/lib/didww/{resources → resource}/available_did.rb +0 -0
  15. data/lib/didww/{resources → resource}/balance.rb +0 -0
  16. data/lib/didww/{resources → resource}/base.rb +0 -1
  17. data/lib/didww/{resources → resource}/capacity_pool.rb +0 -0
  18. data/lib/didww/{resources → resource}/city.rb +0 -0
  19. data/lib/didww/{resources → resource}/country.rb +0 -0
  20. data/lib/didww/{resources → resource}/did.rb +2 -2
  21. data/lib/didww/{resources → resource}/did_group.rb +12 -17
  22. data/lib/didww/{resources → resource}/did_group_type.rb +0 -0
  23. data/lib/didww/{resources → resource}/did_reservation.rb +0 -0
  24. data/lib/didww/{resources → resource}/encrypted_file.rb +0 -0
  25. data/lib/didww/{resources/cdr_export.rb → resource/export.rb} +12 -4
  26. data/lib/didww/{resources → resource}/identity.rb +0 -0
  27. data/lib/didww/{resources → resource}/order.rb +12 -13
  28. data/lib/didww/{resources → resource}/permanent_supporting_document.rb +0 -0
  29. data/lib/didww/{resources → resource}/pop.rb +0 -0
  30. data/lib/didww/{resources → resource}/proof.rb +0 -0
  31. data/lib/didww/{resources → resource}/proof_type.rb +0 -0
  32. data/lib/didww/{resources → resource}/public_key.rb +0 -0
  33. data/lib/didww/{resources → resource}/qty_based_pricing.rb +0 -0
  34. data/lib/didww/{resources → resource}/region.rb +0 -0
  35. data/lib/didww/{resources → resource}/requirement.rb +0 -0
  36. data/lib/didww/{resources → resource}/requirement_validation.rb +0 -0
  37. data/lib/didww/{resources → resource}/shared_capacity_group.rb +0 -0
  38. data/lib/didww/{resources → resource}/stock_keeping_unit.rb +0 -0
  39. data/lib/didww/{resources → resource}/supporting_document_template.rb +0 -0
  40. data/lib/didww/{resources/trunk.rb → resource/voice_in_trunk.rb} +39 -4
  41. data/lib/didww/{resources/trunk_group.rb → resource/voice_in_trunk_group.rb} +2 -2
  42. data/lib/didww/resource/voice_out_trunk.rb +75 -0
  43. data/lib/didww/resource/voice_out_trunk_regenerate_credential.rb +11 -0
  44. data/lib/didww/types/ip_addresses.rb +23 -0
  45. data/lib/didww/types/strings.rb +21 -0
  46. data/lib/didww/types.rb +12 -0
  47. data/lib/didww/version.rb +1 -1
  48. data/lib/didww.rb +1 -0
  49. metadata +40 -36
  50. data/lib/didww/complex_objects/cdr_export_filter.rb +0 -24
  51. data/lib/didww/complex_objects/configurations/const.rb +0 -150
  52. data/lib/didww/resources/trunk/const.rb +0 -47
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9d736e9893b21ef96ef76993d6bb3da3e47c1dbb760edcc6ea13d0cf86d5e847
4
- data.tar.gz: 9d641935ce36af938ea6641b7488835535ef4a01f6464b5c90f667dafac953c3
3
+ metadata.gz: 3033b22b339631f852f135fcc40650102feab555bcb153072f64d73d03092eac
4
+ data.tar.gz: c9f1c20a485a40539f8034bc8cc8ba160ee26538b7585ffe2ed3e9bd3c0137e6
5
5
  SHA512:
6
- metadata.gz: b2cef4993cda70bd45a3a1efd960ab26d9ba603de9a10c246c537ccdbbb3506e923f1628643fabcefcc7be8ca1f9a6a93342b996e6233b9eadadc77818d766fe
7
- data.tar.gz: de556881b793c412ea2fb486bacd00f89a3c07ad3902e755f5a4140e2eb0fda10f1b748ea719ce9968e87e476797bed8b28ce3b032f1e107ed457946235f303f
6
+ metadata.gz: 4864de1d500e14be418849cfd3e9fb7d4ec3becbf2678972ff667afe587123893e12ad08e3030ad329f215ce70a9b902e31f422b87c883062c9c2f944d8a76d4
7
+ data.tar.gz: fd3651c1410f7d67148b79a5219d068a7c9304f6e497fd1455337229f8c5d0867d294932c35f5a63768c633e4ac5abc8d3cb80f74a3be724403a1ac3d574b9ae
data/CHANGELOG.md CHANGED
@@ -4,6 +4,28 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [3.0.0]
8
+ ### Breaking Changes
9
+ - /v3/trunks being moved to /v3/voice_in_trunks.
10
+ - /v3/trunk_groups being moved to /v3/voice_in_trunk_groups.
11
+ - /v3/cdr_exports being moved to /v3/exports. Endpoint now allows generating both inbound and outbound CDRs export.
12
+ - /v3/exports result file will be CSV archived in GZIP.
13
+ - Callbacks payload for exports being changed: value of type attribute is changed to exports.
14
+ - /v3/exports export_type required attribute being added to request and response with possible values: cdr_in, cdr_out.
15
+ - /v3/exports filters attribute being removed from response.
16
+ - /v3/did_groups filter features allowed values to be changed to sms_in, sms_out, voice_in, voice_out, t38.
17
+ - /v3/did_groups response value of features attribute to be changed to sms_in, sms_out, voice_in, voice_out, t38.
18
+ - /v3/available_dids filter did_group.features allowed values being changed to sms_in, sms_out, voice_in, voice_out, t38.
19
+ - /v3/dids rename trunk_group relationship to voice_in_trunk_group with type voice_in_trunk_groups.
20
+ - /v3/dids rename trunks relationship to voice_in_trunks with type voice_in_trunks.
21
+
22
+ ### Changes
23
+ - /v3/voice_out_trunks endpoints being added.
24
+ - /v3/voice_out_trunk_regenerate_credentials endpoint being added.
25
+ - /v3/voice_in_trunks SIP configuration additional attributes being added to request and response: media_encryption_mode, stir_shaken_mode, allowed_rtp_ips.
26
+ - /v3/dids filter add filter did_group.features with allowed values: sms_in, sms_out, voice_in, voice_out, t38.
27
+ - Callbacks allow receiving events about /v3/voice_out_trunks status change.
28
+
7
29
  ## [2.0.0] - 2021-10-26
8
30
  ### Breaking Changes
9
31
  - upgrade `json_api_client` version to `1.18.0` [#9](https://github.com/didww/didww-v3-ruby/pull/9)
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  Ruby client for DIDWW API v3.
2
2
 
3
3
  ![Tests](https://github.com/didww/didww-v3-ruby/workflows/Tests/badge.svg)
4
+ [![Gem Version](https://badge.fury.io/rb/didww-v3.svg)](https://badge.fury.io/rb/didww-v3)
4
5
 
5
6
  About DIDWW API v3
6
7
  -----
@@ -11,9 +12,9 @@ The DIDWW API v3 is a fully compliant implementation of the [JSON API specificat
11
12
 
12
13
  Read more https://doc.didww.com/api
13
14
 
14
- Gem Versions **2.X.X** are intended to use with DIDWW API 3 version [2021-04-19](https://doc.didww.com/api3/2021-04-19/index.html).
15
+ Gem Versions **2.X.X** and branch [master](https://github.com/didww/didww-v3-ruby) are intended to use with DIDWW API 3 version [2021-04-19](https://doc.didww.com/api3/2021-04-19/index.html).
15
16
 
16
- Gem Versions **1.X.X** are intended to use with DIDWW API 3 version [2017-09-18](https://doc.didww.com/api3/2017-09-18/index.html).
17
+ Gem Versions **1.X.X** and branch [release-1](https://github.com/didww/didww-v3-ruby/tree/release-1) are intended to use with DIDWW API 3 version [2017-09-18](https://doc.didww.com/api3/2017-09-18/index.html).
17
18
 
18
19
  ## Installation
19
20
 
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DIDWW
4
+ module Callback
5
+ module CONST
6
+ CALLBACK_METHOD_POST = 'POST'
7
+ CALLBACK_METHOD_GET = 'GET'
8
+ CALLBACK_METHODS = [
9
+ CALLBACK_METHOD_GET,
10
+ CALLBACK_METHOD_POST
11
+ ].freeze
12
+ end
13
+ end
14
+ end
@@ -37,14 +37,23 @@ module DIDWW
37
37
  private
38
38
 
39
39
  # @param url [String]
40
- # @param payload [Hash]
40
+ # @param payload [Hash,Array]
41
41
  # @return [String] generated signature in URL safe format.
42
42
  def valid_signature(url, payload)
43
- normalized_url = normalize_url(url)
44
- data = normalized_url + payload.sort.join
43
+ data = normalize_url(url) + normalize_payload(payload)
45
44
  OpenSSL::HMAC.hexdigest(DIGEST_ALGO, @api_key, data)
46
45
  end
47
46
 
47
+ # @param payload [Hash,Array]
48
+ # @return [String] normalized payload.
49
+ def normalize_payload(payload)
50
+ if payload.is_a?(Hash)
51
+ payload.sort.join
52
+ else
53
+ payload.map { |item| item.sort.join }.join
54
+ end
55
+ end
56
+
48
57
  # @return [String] normalized URL.
49
58
  def normalize_url(url)
50
59
  parsed_url = URI ensure_protocol_url(url)
data/lib/didww/client.rb CHANGED
@@ -3,13 +3,13 @@ require 'active_support/core_ext/module/attribute_accessors'
3
3
  require 'active_support/core_ext/object/blank'
4
4
  require 'json_api_client'
5
5
 
6
- require 'didww/resources/base'
6
+ require 'didww/resource/base'
7
7
 
8
8
  module DIDWW
9
9
  module Client
10
10
  BASE_URLS = {
11
11
  sandbox: 'https://sandbox-api.didww.com/v3/' .freeze,
12
- production: 'https://api.didww.com/v3/' .freeze
12
+ production: 'https://sandbox-api.didww.com/v3/' .freeze
13
13
  }.freeze
14
14
  DEFAULT_MODE = :sandbox
15
15
 
@@ -55,8 +55,8 @@ module DIDWW
55
55
  Resource::CapacityPool
56
56
  end
57
57
 
58
- def cdr_exports
59
- Resource::CdrExport
58
+ def exports
59
+ Resource::Export
60
60
  end
61
61
 
62
62
  def shared_capacity_groups
@@ -95,12 +95,16 @@ module DIDWW
95
95
  Resource::Region
96
96
  end
97
97
 
98
- def trunk_groups
99
- Resource::TrunkGroup
98
+ def voice_in_trunk_groups
99
+ Resource::VoiceInTrunkGroup
100
100
  end
101
101
 
102
- def trunks
103
- Resource::Trunk
102
+ def voice_in_trunks
103
+ Resource::VoiceInTrunk
104
+ end
105
+
106
+ def voice_out_trunks
107
+ Resource::VoiceOutTrunk
104
108
  end
105
109
 
106
110
  def available_dids
@@ -167,36 +171,38 @@ module DIDWW
167
171
  end
168
172
 
169
173
  def require_didww_resources
170
- require 'didww/resources/balance'
171
- require 'didww/resources/capacity_pool'
172
- require 'didww/resources/cdr_export'
173
- require 'didww/resources/shared_capacity_group'
174
- require 'didww/resources/city'
175
- require 'didww/resources/country'
176
- require 'didww/resources/did_group_type'
177
- require 'didww/resources/did_group'
178
- require 'didww/resources/did'
179
- require 'didww/resources/order'
180
- require 'didww/resources/pop'
181
- require 'didww/resources/qty_based_pricing'
182
- require 'didww/resources/region'
183
- require 'didww/resources/stock_keeping_unit'
184
- require 'didww/resources/trunk_group'
185
- require 'didww/resources/trunk'
186
- require 'didww/resources/available_did'
187
- require 'didww/resources/did_reservation'
188
- require 'didww/resources/requirement'
189
- require 'didww/resources/proof_type'
190
- require 'didww/resources/supporting_document_template'
191
- require 'didww/resources/identity'
192
- require 'didww/resources/proof'
193
- require 'didww/resources/address'
194
- require 'didww/resources/permanent_supporting_document'
195
- require 'didww/resources/encrypted_file'
196
- require 'didww/resources/address_verification'
197
- require 'didww/resources/requirement_validation'
198
- require 'didww/resources/public_key'
199
- require 'didww/resources/area'
174
+ require 'didww/resource/balance'
175
+ require 'didww/resource/capacity_pool'
176
+ require 'didww/resource/export'
177
+ require 'didww/resource/shared_capacity_group'
178
+ require 'didww/resource/city'
179
+ require 'didww/resource/country'
180
+ require 'didww/resource/did_group_type'
181
+ require 'didww/resource/did_group'
182
+ require 'didww/resource/did'
183
+ require 'didww/resource/order'
184
+ require 'didww/resource/pop'
185
+ require 'didww/resource/qty_based_pricing'
186
+ require 'didww/resource/region'
187
+ require 'didww/resource/stock_keeping_unit'
188
+ require 'didww/resource/voice_in_trunk_group'
189
+ require 'didww/resource/voice_in_trunk'
190
+ require 'didww/resource/available_did'
191
+ require 'didww/resource/did_reservation'
192
+ require 'didww/resource/requirement'
193
+ require 'didww/resource/proof_type'
194
+ require 'didww/resource/supporting_document_template'
195
+ require 'didww/resource/identity'
196
+ require 'didww/resource/proof'
197
+ require 'didww/resource/address'
198
+ require 'didww/resource/permanent_supporting_document'
199
+ require 'didww/resource/encrypted_file'
200
+ require 'didww/resource/address_verification'
201
+ require 'didww/resource/requirement_validation'
202
+ require 'didww/resource/public_key'
203
+ require 'didww/resource/area'
204
+ require 'didww/resource/voice_out_trunk'
205
+ require 'didww/resource/voice_out_trunk_regenerate_credential'
200
206
  end
201
207
 
202
208
  end
@@ -12,7 +12,7 @@ module DIDWW
12
12
  end
13
13
 
14
14
  def property(name, options = {})
15
- property = schema.add(name, options)
15
+ schema.add(name, options)
16
16
  define_method(name.to_sym) { self[name] }
17
17
  define_method("#{name}=".to_sym) { |val| self[name] = val }
18
18
  end
@@ -88,5 +88,3 @@ module DIDWW
88
88
  end
89
89
  end
90
90
  end
91
-
92
- JsonApiClient::Schema.register complex_object: DIDWW::ComplexObject::Base
@@ -1,11 +1,151 @@
1
1
  # frozen_string_literal: true
2
- require 'didww/complex_objects/configurations/const'
3
2
 
4
3
  module DIDWW
5
4
  module ComplexObject
6
5
  module Configuration
7
6
  class Base < ComplexObject::Base
8
- include CONST
7
+ RX_DTMF_FORMATS = {
8
+ 1 => 'RFC 2833',
9
+ 2 => 'SIP INFO application/dtmf-relay OR application/dtmf',
10
+ 3 => 'RFC 2833 OR SIP INFO'
11
+ }.freeze
12
+
13
+ TX_DTMF_FORMATS = {
14
+ 0 => 'Disable sending',
15
+ 1 => 'RFC 2833',
16
+ 2 => 'SIP INFO application/dtmf-relay',
17
+ 4 => 'SIP INFO application/dtmf'
18
+ }.freeze
19
+
20
+ SST_REFRESH_METHODS = {
21
+ 1 => 'Invite',
22
+ 2 => 'Update',
23
+ 3 => 'Update fallback Invite'
24
+ }.freeze
25
+
26
+ TRANSPORT_PROTOCOLS = {
27
+ 1 => 'UDP',
28
+ 2 => 'TCP',
29
+ 3 => 'TLS'
30
+ }.freeze
31
+
32
+ REROUTING_DISCONNECT_CODES = {
33
+ 56 => '400 | Bad Request',
34
+ 57 => '401 | Unauthorized',
35
+ 58 => '402 | Payment Required',
36
+ 59 => '403 | Forbidden',
37
+ 60 => '404 | Not Found',
38
+ 64 => '408 | Request Timeout',
39
+ 65 => '409 | Conflict',
40
+ 66 => '410 | Gone',
41
+ 67 => '412 | Conditional Request Failed',
42
+ 68 => '413 | Request Entity Too Large',
43
+ 69 => '414 | Request-URI Too Long',
44
+ 70 => '415 | Unsupported Media Type',
45
+ 71 => '416 | Unsupported URI Scheme',
46
+ 72 => '417 | Unknown Resource-Priority',
47
+ 73 => '420 | Bad Extension',
48
+ 74 => '421 | Extension Required',
49
+ 75 => '422 | Session Interval Too Small',
50
+ 76 => '423 | Interval Too Brief',
51
+ 77 => '424 | Bad Location Information',
52
+ 78 => '428 | Use Identity Header',
53
+ 79 => '429 | Provide Referrer Identity',
54
+ 80 => '433 | Anonymity Disallowed',
55
+ 81 => '436 | Bad Identity-Info',
56
+ 82 => '437 | Unsupported Certificate',
57
+ 83 => '438 | Invalid Identity Header',
58
+ 84 => '480 | Temporarily Unavailable',
59
+ 86 => '482 | Loop Detected',
60
+ 87 => '483 | Too Many Hops',
61
+ 88 => '484 | Address Incomplete',
62
+ 89 => '485 | Ambiguous',
63
+ 90 => '486 | Busy Here',
64
+ 91 => '487 | Request Terminated',
65
+ 92 => '488 | Not Acceptable Here',
66
+ 96 => '494 | Security Agreement Required',
67
+ 97 => '500 | Server Internal Error',
68
+ 98 => '501 | Not Implemented',
69
+ 99 => '502 | Bad Gateway',
70
+ 100 => '503 | Service Unavailable',
71
+ 101 => '504 | Server Time-out',
72
+ 102 => '505 | Version Not Supported',
73
+ 103 => '513 | Message Too Large',
74
+ 104 => '580 | Precondition Failure',
75
+ 105 => '600 | Busy Everywhere',
76
+ 106 => '603 | Decline',
77
+ 107 => '604 | Does Not Exist Anywhere',
78
+ 108 => '606 | Not Acceptable',
79
+ 1505 => 'Ringing timeout'
80
+ }.freeze
81
+
82
+ CODECS = {
83
+ 6 => 'telephone-event',
84
+ 7 => 'G723',
85
+ 8 => 'G729',
86
+ 9 => 'PCMU',
87
+ 10 => 'PCMA',
88
+ 12 => 'speex',
89
+ 13 => 'GSM',
90
+ 14 => 'G726-32',
91
+ 15 => 'G721',
92
+ 16 => 'G726-24',
93
+ 17 => 'G726-40',
94
+ 18 => 'G726-16',
95
+ 19 => 'L16'
96
+ }.freeze
97
+
98
+ DEFAULT_REROUTING_DISCONNECT_CODE_IDS = [
99
+ 56,
100
+ 58,
101
+ 59,
102
+ 60,
103
+ 64,
104
+ 65,
105
+ 66,
106
+ 67,
107
+ 68,
108
+ 69,
109
+ 70,
110
+ 71,
111
+ 72,
112
+ 73,
113
+ 74,
114
+ 75,
115
+ 76,
116
+ 77,
117
+ 78,
118
+ 79,
119
+ 80,
120
+ 81,
121
+ 82,
122
+ 83,
123
+ 84,
124
+ 86,
125
+ 87,
126
+ 88,
127
+ 89,
128
+ 90,
129
+ 91,
130
+ 92,
131
+ 96,
132
+ 97,
133
+ 98,
134
+ 99,
135
+ 101,
136
+ 102,
137
+ 103,
138
+ 104,
139
+ 105,
140
+ 106,
141
+ 107,
142
+ 108,
143
+ 1505
144
+ ].freeze
145
+
146
+ DEFAULT_CODEC_IDS = [9, 10, 8, 7, 6].freeze
147
+
148
+ DID_PLACEHOLDER = '{DID}'
9
149
  end
10
150
  end
11
151
  end
@@ -148,7 +148,7 @@ module DIDWW
148
148
  property :transport_protocol_id, type: :integer
149
149
  # Type: Integer
150
150
  # Nullable: No
151
- # Description: The transport layer that will be responsible for the actual transmission of SIP requests and responses (1 - UDP, 2 - TCP)
151
+ # Description: The transport layer that will be responsible for the actual transmission of SIP requests and responses. See TRANSPORT_PROTOCOLS for available values.
152
152
 
153
153
  property :max_transfers, type: :integer
154
154
  # Nullable: No
@@ -158,6 +158,36 @@ module DIDWW
158
158
  # Nullable: No
159
159
  # Description: Max count of 301/302 redirects
160
160
 
161
+ property :media_encryption_mode, type: :string
162
+ # Type: String
163
+ # Nullable: No
164
+ # Description: The Media encryption mode for RTP traffic. See MEDIA_ENCRYPTION_MODES for available values.
165
+
166
+ property :stir_shaken_mode, type: :string
167
+ # Type: String
168
+ # Nullable: No
169
+ # Description: The STIR/SHAKEN mode for sending identity via SIP. See STIR_SHAKEN_MODES for available values.
170
+
171
+ property :allowed_rtp_ips, type: :ip_addresses
172
+ # Type: Array of strings
173
+ # Nullable: Yes
174
+ # Description: Allowed IP addresses for RTP connection.
175
+
176
+ MEDIA_ENCRYPTION_MODES = [
177
+ 'disabled',
178
+ 'srtp_sdes',
179
+ 'srtp_dtls',
180
+ 'zrtp'
181
+ ].freeze
182
+
183
+ STIR_SHAKEN_MODES = [
184
+ 'disabled',
185
+ 'original',
186
+ 'pai',
187
+ 'original_pai',
188
+ 'verstat'
189
+ ].freeze
190
+
161
191
  DEFAULTS = {
162
192
  username: DID_PLACEHOLDER,
163
193
  port: '5060',
@@ -177,7 +207,7 @@ module DIDWW
177
207
  transport_protocol_id: 1
178
208
  }.freeze
179
209
 
180
- RECOMMENDED = DEFAULTS.merge({
210
+ RECOMMENDED = DEFAULTS.merge(
181
211
  #-- Authentication
182
212
  auth_user: '',
183
213
  auth_password: '',
@@ -191,7 +221,7 @@ module DIDWW
191
221
  #-- Advanced Signalling Settings
192
222
  sst_enabled: false,
193
223
  sst_session_expires: '',
194
- }).freeze
224
+ ).freeze
195
225
 
196
226
  def sst_refresh_method
197
227
  SST_REFRESH_METHODS[sst_refresh_method_id]
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+ require 'json_api_client/schema'
3
+
4
+ module DIDWW
5
+ module ComplexObject
6
+ class ExportFilters < Base
7
+ # Type casting for JsonApiClient parser/setters
8
+ def self.cast_single_object(hash)
9
+ new(hash)
10
+ end
11
+
12
+ property :year, type: :integer
13
+ property :month, type: :integer
14
+ property :day, type: :integer # only for CDR Out
15
+ property :did_number, type: :string # only for CDR in
16
+ property :voice_out_trunk_id, type: :string # only for CDR Out
17
+
18
+ def as_json(*)
19
+ result = attributes.as_json.with_indifferent_access
20
+ result[:'voice_out_trunk.id'] = result.delete(:voice_out_trunk_id) if result.key?(:voice_out_trunk_id)
21
+ result
22
+ end
23
+
24
+ end
25
+ end
26
+ end
File without changes
File without changes
File without changes
File without changes
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
  require 'didww/jsonapi_middleware'
3
- require 'didww/complex_objects/base'
4
3
 
5
4
  module DIDWW
6
5
  module Resource
File without changes
File without changes
File without changes
@@ -2,8 +2,8 @@
2
2
  module DIDWW
3
3
  module Resource
4
4
  class Did < Base
5
- has_one :trunk
6
- has_one :trunk_group
5
+ has_one :voice_in_trunk
6
+ has_one :voice_in_trunk_group
7
7
  has_one :capacity_pool
8
8
  has_one :shared_capacity_group
9
9
  has_one :address_verification
@@ -2,23 +2,15 @@
2
2
  module DIDWW
3
3
  module Resource
4
4
  class DidGroup < Base
5
- module CONST
6
- # Possible values for did_group.features array
7
- FEATURE_VOICE = 'voice' .freeze
8
- FEATURE_T38 = 't38' .freeze
9
- FEATURE_SMS = 'sms' .freeze
10
- FEATURES = {
11
- FEATURE_VOICE => 'Voice' .freeze,
12
- FEATURE_T38 => 'T.38 Fax' .freeze,
13
- FEATURE_SMS => 'SMS' .freeze
14
- }.freeze
15
-
16
- def features_human
17
- Array.wrap(features).map { |f| FEATURES[f] }
18
- end
19
- end
20
-
21
- include CONST
5
+ # Possible values for did_group.features array
6
+ FEATURE_VOICE = 'voice' .freeze
7
+ FEATURE_T38 = 't38' .freeze
8
+ FEATURE_SMS = 'sms' .freeze
9
+ FEATURES = {
10
+ FEATURE_VOICE => 'Voice' .freeze,
11
+ FEATURE_T38 => 'T.38 Fax' .freeze,
12
+ FEATURE_SMS => 'SMS' .freeze
13
+ }.freeze
22
14
 
23
15
  has_one :country, class: Country
24
16
  has_one :city, class: City
@@ -62,6 +54,9 @@ module DIDWW
62
54
  # Type: Boolean
63
55
  # Description: Defines if numbers in this DID Group are currently in stock.
64
56
 
57
+ def features_human
58
+ Array.wrap(features).map { |f| FEATURES[f] }
59
+ end
65
60
  end
66
61
  end
67
62
  end
File without changes
File without changes
@@ -1,16 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
  require 'forwardable'
3
- require 'didww/complex_objects/cdr_export_filter'
4
3
  require 'down/http'
4
+ require 'didww/callback/const'
5
5
 
6
6
  module DIDWW
7
7
  module Resource
8
- class CdrExport < Base
8
+ class Export < Base
9
+ include DIDWW::Callback::CONST
9
10
  extend Forwardable
10
11
 
11
12
  STATUS_COMPLETED = 'Completed'
12
13
 
13
- property :filters, type: :cdr_export_filter
14
+ EXPORT_TYPE_CDR_IN = 'cdr_in'
15
+ EXPORT_TYPE_CDR_OUT = 'cdr_out'
16
+ EXPORT_TYPES = [
17
+ EXPORT_TYPE_CDR_IN,
18
+ EXPORT_TYPE_CDR_OUT
19
+ ].freeze
20
+
21
+ property :filters, type: :export_filters
14
22
  # Type: CDR Export Filters Object
15
23
  # Nullable: No
16
24
  # Description: Filters
@@ -38,7 +46,7 @@ module DIDWW
38
46
  # Type: String
39
47
  # Description: GET or POST
40
48
 
41
- def_delegators :filters, :year, :month, :did_number, :year=, :month=, :did_number=
49
+ property :export_type, type: :string
42
50
 
43
51
  def initialize(params = {})
44
52
  super params.reverse_merge(filters: {})
File without changes
@@ -1,23 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
  require 'didww/complex_objects/did_order_item'
3
3
  require 'didww/complex_objects/capacity_order_item'
4
+ require 'didww/callback/const'
4
5
 
5
6
  module DIDWW
6
7
  module Resource
7
8
  class Order < Base
8
- module CONST
9
- # Possible values for order.status
10
- STATUS_PENDING = 'Pending' .freeze
11
- STATUS_COMPLETED = 'Completed' .freeze
12
- STATUS_CANCELLED = 'Canceled' .freeze
13
- STATUSES = [
14
- STATUS_PENDING,
15
- STATUS_COMPLETED,
16
- STATUS_CANCELLED
17
- ].freeze
18
- end
19
-
20
- include CONST
9
+ include DIDWW::Callback::CONST
10
+
11
+ # Possible values for order.status
12
+ STATUS_PENDING = 'Pending'
13
+ STATUS_COMPLETED = 'Completed'
14
+ STATUS_CANCELLED = 'Canceled'
15
+ STATUSES = [
16
+ STATUS_PENDING,
17
+ STATUS_COMPLETED,
18
+ STATUS_CANCELLED
19
+ ].freeze
21
20
 
22
21
  property :reference, type: :string
23
22
  # Type: String