didww-v3 1.2.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/tests.yml +27 -0
- data/.rubocop.yml +22 -19
- data/CHANGELOG.md +75 -0
- data/Gemfile +20 -0
- data/README.md +8 -1
- data/Rakefile +6 -1
- data/bin/console +1 -0
- data/didww-v3.gemspec +3 -18
- data/lib/didww/{middleware.rb → base_middleware.rb} +5 -4
- data/lib/didww/callback/const.rb +14 -0
- data/lib/didww/callback/request_validator.rb +77 -0
- data/lib/didww/client.rb +101 -26
- data/lib/didww/complex_objects/base.rb +6 -4
- data/lib/didww/complex_objects/capacity_order_item.rb +17 -0
- data/lib/didww/complex_objects/configurations/base.rb +143 -2
- data/lib/didww/complex_objects/configurations/h323_configuration.rb +1 -0
- data/lib/didww/complex_objects/configurations/iax2_configuration.rb +1 -0
- data/lib/didww/complex_objects/configurations/pstn_configuration.rb +1 -0
- data/lib/didww/complex_objects/configurations/sip_configuration.rb +34 -3
- data/lib/didww/complex_objects/configurations.rb +1 -0
- data/lib/didww/complex_objects/did_order_item.rb +14 -7
- data/lib/didww/complex_objects/export_filters.rb +26 -0
- data/lib/didww/encrypt.rb +101 -0
- data/lib/didww/jsonapi_middleware.rb +21 -0
- data/lib/didww/resource/address.rb +37 -0
- data/lib/didww/resource/address_verification.rb +56 -0
- data/lib/didww/resource/area.rb +12 -0
- data/lib/didww/{resources → resource}/available_did.rb +1 -0
- data/lib/didww/{resources → resource}/balance.rb +1 -0
- data/lib/didww/{resources → resource}/base.rb +2 -2
- data/lib/didww/resource/capacity_pool.rb +47 -0
- data/lib/didww/resource/city.rb +14 -0
- data/lib/didww/{resources → resource}/country.rb +1 -0
- data/lib/didww/{resources → resource}/did.rb +11 -3
- data/lib/didww/{resources → resource}/did_group.rb +13 -21
- data/lib/didww/{resources → resource}/did_group_type.rb +1 -0
- data/lib/didww/{resources → resource}/did_reservation.rb +1 -0
- data/lib/didww/resource/encrypted_file.rb +58 -0
- data/lib/didww/{resources/cdr_export.rb → resource/export.rb} +24 -5
- data/lib/didww/resource/identity.rb +78 -0
- data/lib/didww/{resources → resource}/order.rb +21 -12
- data/lib/didww/resource/permanent_supporting_document.rb +15 -0
- data/lib/didww/{resources → resource}/pop.rb +1 -0
- data/lib/didww/resource/proof.rb +19 -0
- data/lib/didww/resource/proof_type.rb +14 -0
- data/lib/didww/resource/public_key.rb +12 -0
- data/lib/didww/resource/qty_based_pricing.rb +20 -0
- data/lib/didww/{resources → resource}/region.rb +1 -0
- data/lib/didww/resource/requirement.rb +61 -0
- data/lib/didww/resource/requirement_validation.rb +10 -0
- data/lib/didww/resource/shared_capacity_group.rb +27 -0
- data/lib/didww/{resources → resource}/stock_keeping_unit.rb +1 -0
- data/lib/didww/resource/supporting_document_template.rb +14 -0
- data/lib/didww/{resources/trunk.rb → resource/voice_in_trunk.rb} +40 -4
- data/lib/didww/{resources/trunk_group.rb → resource/voice_in_trunk_group.rb} +3 -2
- data/lib/didww/resource/voice_out_trunk.rb +75 -0
- data/lib/didww/resource/voice_out_trunk_regenerate_credential.rb +11 -0
- data/lib/didww/types/ip_addresses.rb +23 -0
- data/lib/didww/types/strings.rb +21 -0
- data/lib/didww/types.rb +12 -0
- data/lib/didww/version.rb +2 -1
- data/lib/didww.rb +6 -1
- metadata +59 -176
- data/.travis.yml +0 -5
- data/lib/didww/complex_objects/cdr_export_filter.rb +0 -23
- data/lib/didww/complex_objects/configurations/const.rb +0 -149
- data/lib/didww/resources/city.rb +0 -9
- data/lib/didww/resources/trunk/const.rb +0 -46
@@ -1,8 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module DIDWW
|
2
3
|
module Resource
|
3
4
|
class Did < Base
|
4
|
-
has_one :
|
5
|
-
has_one :
|
5
|
+
has_one :voice_in_trunk
|
6
|
+
has_one :voice_in_trunk_group
|
7
|
+
has_one :capacity_pool
|
8
|
+
has_one :shared_capacity_group
|
9
|
+
has_one :address_verification
|
6
10
|
|
7
11
|
property :blocked, type: :boolean
|
8
12
|
# Type: Boolean
|
@@ -16,7 +20,7 @@ module DIDWW
|
|
16
20
|
# Type: Boolean
|
17
21
|
# Description: Identifier for terminated DIDs that will be removed from service at the end of the billing cycle.
|
18
22
|
|
19
|
-
property :
|
23
|
+
property :billing_cycles_count, type: :integer
|
20
24
|
# Type: Boolean
|
21
25
|
# Description: Identifier for DIDs that are pending removal from your account.
|
22
26
|
|
@@ -36,6 +40,10 @@ module DIDWW
|
|
36
40
|
# Type: Integer
|
37
41
|
# Description: The number of channels included with this DID.
|
38
42
|
|
43
|
+
property :dedicated_channels_count, type: :integer
|
44
|
+
# Type: Integer
|
45
|
+
# Description: The number of channels included with this DID.
|
46
|
+
|
39
47
|
property :expires_at, type: :time
|
40
48
|
# Type: DateTime
|
41
49
|
# Description: DateTime when the DID expired or will expire. DateTime is in the ISO 8601 format "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", where "SSS" are milliseconds and 'Z' denotes Zulu time (UTC).
|
@@ -1,23 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module DIDWW
|
2
3
|
module Resource
|
3
4
|
class DidGroup < Base
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
}.freeze
|
14
|
-
|
15
|
-
def features_human
|
16
|
-
Array.wrap(features).map { |f| FEATURES[f] }
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
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
|
21
14
|
|
22
15
|
has_one :country, class: Country
|
23
16
|
has_one :city, class: City
|
@@ -60,11 +53,10 @@ module DIDWW
|
|
60
53
|
# is_available
|
61
54
|
# Type: Boolean
|
62
55
|
# Description: Defines if numbers in this DID Group are currently in stock.
|
63
|
-
#
|
64
|
-
# restrictions
|
65
|
-
# Type: String
|
66
|
-
# Description: Describes possible restrictions for the DID Group, such as "End User Registration is Required".
|
67
56
|
|
57
|
+
def features_human
|
58
|
+
Array.wrap(features).map { |f| FEATURES[f] }
|
59
|
+
end
|
68
60
|
end
|
69
61
|
end
|
70
62
|
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module DIDWW
|
3
|
+
module Resource
|
4
|
+
class EncryptedFile < Base
|
5
|
+
class UploadError < StandardError
|
6
|
+
end
|
7
|
+
|
8
|
+
property :description, type: :string
|
9
|
+
# Type: String
|
10
|
+
# Description:
|
11
|
+
|
12
|
+
property :expire_at, type: :date
|
13
|
+
# Type: Date
|
14
|
+
# Description:
|
15
|
+
|
16
|
+
# @return [Faraday::Connection]
|
17
|
+
def self.upload_connection
|
18
|
+
Faraday.new(url: site) do |connection|
|
19
|
+
connection.request :multipart
|
20
|
+
connection.request :url_encoded
|
21
|
+
connection.adapter Faraday.default_adapter
|
22
|
+
connection.use DIDWW::BaseMiddleware
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# @param files [Rack::Multipart::UploadedFile,(#tempfile,#content_type,#original_filename)]
|
27
|
+
# @return [Array<String>]
|
28
|
+
# @raise [DIDWW::Resource::EncryptedFile::UploadError]
|
29
|
+
def self.upload_files(files, fingerprint)
|
30
|
+
items = files.map do |file|
|
31
|
+
{
|
32
|
+
file: Faraday::UploadIO.new(file.tempfile, file.content_type),
|
33
|
+
description: file.original_filename
|
34
|
+
}
|
35
|
+
end
|
36
|
+
payload = { encryption_fingerprint: fingerprint, items: items }
|
37
|
+
upload(payload)
|
38
|
+
end
|
39
|
+
|
40
|
+
# @param payload [Hash]
|
41
|
+
# encryption_fingerprint [String] DIDWW::Encrypt#encryption_fingerprint
|
42
|
+
# items [Array]
|
43
|
+
# file [Faraday::UploadIO] upload io
|
44
|
+
# description [String,nil] optional description
|
45
|
+
# @return [Array<String>]
|
46
|
+
# @raise [DIDWW::Resource::EncryptedFile::UploadError]
|
47
|
+
def self.upload(payload)
|
48
|
+
connection = upload_connection
|
49
|
+
response = connection.post('/v3/encrypted_files', encrypted_files: payload)
|
50
|
+
if response.status == 201
|
51
|
+
JSON.parse(response.body, symbolize_names: true)[:ids]
|
52
|
+
else
|
53
|
+
raise UploadError, "Code: #{response.status} #{response.body}"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -1,13 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'forwardable'
|
2
|
-
require 'didww/complex_objects/cdr_export_filter'
|
3
3
|
require 'down/http'
|
4
|
+
require 'didww/callback/const'
|
4
5
|
|
5
6
|
module DIDWW
|
6
7
|
module Resource
|
7
|
-
class
|
8
|
+
class Export < Base
|
9
|
+
include DIDWW::Callback::CONST
|
8
10
|
extend Forwardable
|
9
11
|
|
10
|
-
|
12
|
+
STATUS_COMPLETED = 'Completed'
|
13
|
+
|
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
|
11
22
|
# Type: CDR Export Filters Object
|
12
23
|
# Nullable: No
|
13
24
|
# Description: Filters
|
@@ -27,7 +38,15 @@ module DIDWW
|
|
27
38
|
# Nullable: true
|
28
39
|
# Description: url of csv file for downloading. available only when status is "Completed"
|
29
40
|
|
30
|
-
|
41
|
+
property :callback_url, type: :string
|
42
|
+
# Type: String
|
43
|
+
# Description: valid URI for callbacks
|
44
|
+
|
45
|
+
property :callback_method, type: :string
|
46
|
+
# Type: String
|
47
|
+
# Description: GET or POST
|
48
|
+
|
49
|
+
property :export_type, type: :string
|
31
50
|
|
32
51
|
def initialize(params = {})
|
33
52
|
super params.reverse_merge(filters: {})
|
@@ -39,7 +58,7 @@ module DIDWW
|
|
39
58
|
end
|
40
59
|
|
41
60
|
def complete?
|
42
|
-
status ==
|
61
|
+
status == STATUS_COMPLETED
|
43
62
|
end
|
44
63
|
alias_method :completed?, :complete?
|
45
64
|
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module DIDWW
|
3
|
+
module Resource
|
4
|
+
class Identity < Base
|
5
|
+
IDENTITY_TYPE_PERSONAL = 'Personal'
|
6
|
+
IDENTITY_TYPE_BUSINESS = 'Business'
|
7
|
+
|
8
|
+
has_one :country, class_name: 'Country'
|
9
|
+
has_many :proofs, class_name: 'Proof'
|
10
|
+
has_many :addresses, class_name: 'Address'
|
11
|
+
has_many :permanent_documents, class_name: 'PermanentSupportingDocument'
|
12
|
+
|
13
|
+
property :first_name, type: :string
|
14
|
+
# Type: String
|
15
|
+
# Description:
|
16
|
+
|
17
|
+
property :last_name, type: :string
|
18
|
+
# Type: String
|
19
|
+
# Description:
|
20
|
+
|
21
|
+
property :phone_number, type: :string
|
22
|
+
# Type: String
|
23
|
+
# Description:
|
24
|
+
|
25
|
+
property :id_number, type: :string
|
26
|
+
# Type: String
|
27
|
+
# Description:
|
28
|
+
|
29
|
+
property :birth_date, type: :date
|
30
|
+
# Type: Date
|
31
|
+
# Description:
|
32
|
+
|
33
|
+
property :company_name, type: :string
|
34
|
+
# Type: String
|
35
|
+
# Description:
|
36
|
+
|
37
|
+
property :company_reg_number, type: :string
|
38
|
+
# Type: String
|
39
|
+
# Description:
|
40
|
+
|
41
|
+
property :vat_id, type: :string
|
42
|
+
# Type: String
|
43
|
+
# Description:
|
44
|
+
|
45
|
+
property :description, type: :string
|
46
|
+
# Type: String
|
47
|
+
# Description:
|
48
|
+
|
49
|
+
property :personal_tax_id, type: :string
|
50
|
+
# Type: String
|
51
|
+
# Description:
|
52
|
+
|
53
|
+
property :identity_type, type: :string
|
54
|
+
# Type: String
|
55
|
+
# Description:
|
56
|
+
|
57
|
+
property :created_at, type: :date
|
58
|
+
# Type: Date
|
59
|
+
# Description:
|
60
|
+
|
61
|
+
property :external_reference_id, type: :string
|
62
|
+
# Type: String
|
63
|
+
# Description:
|
64
|
+
|
65
|
+
property :verified, type: :boolean
|
66
|
+
# Type: Boolean
|
67
|
+
# Description:
|
68
|
+
|
69
|
+
def personal?
|
70
|
+
identity_type == IDENTITY_TYPE_PERSONAL
|
71
|
+
end
|
72
|
+
|
73
|
+
def business?
|
74
|
+
identity_type == IDENTITY_TYPE_BUSINESS
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -1,21 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'didww/complex_objects/did_order_item'
|
3
|
+
require 'didww/complex_objects/capacity_order_item'
|
4
|
+
require 'didww/callback/const'
|
2
5
|
|
3
6
|
module DIDWW
|
4
7
|
module Resource
|
5
8
|
class Order < Base
|
6
|
-
|
7
|
-
# Possible values for order.status
|
8
|
-
STATUS_PENDING = 'Pending' .freeze
|
9
|
-
STATUS_COMPLETED = 'Completed' .freeze
|
10
|
-
STATUS_CANCELLED = 'Canceled' .freeze
|
11
|
-
STATUSES = [
|
12
|
-
STATUS_PENDING,
|
13
|
-
STATUS_COMPLETED,
|
14
|
-
STATUS_CANCELLED
|
15
|
-
].freeze
|
16
|
-
end
|
9
|
+
include DIDWW::Callback::CONST
|
17
10
|
|
18
|
-
|
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
|
19
20
|
|
20
21
|
property :reference, type: :string
|
21
22
|
# Type: String
|
@@ -45,6 +46,14 @@ module DIDWW
|
|
45
46
|
# Type: Boolean
|
46
47
|
# Description: Allowing back ordering
|
47
48
|
|
49
|
+
property :callback_url, type: :string
|
50
|
+
# Type: String
|
51
|
+
# Description: valid URI for callbacks
|
52
|
+
|
53
|
+
property :callback_method, type: :string
|
54
|
+
# Type: String
|
55
|
+
# Description: GET or POST
|
56
|
+
|
48
57
|
def initialize(*args)
|
49
58
|
super
|
50
59
|
self.items ||= []
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module DIDWW
|
3
|
+
module Resource
|
4
|
+
class PermanentSupportingDocument < Base
|
5
|
+
|
6
|
+
has_many :files, class_name: 'EncryptedFile'
|
7
|
+
has_one :template, class_name: 'SupportingDocumentTemplate'
|
8
|
+
has_one :identity, class_name: 'Identity'
|
9
|
+
|
10
|
+
property :created_at, type: :date
|
11
|
+
# Type: Date
|
12
|
+
# Description:
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module DIDWW
|
3
|
+
module Resource
|
4
|
+
class Proof < Base
|
5
|
+
|
6
|
+
has_many :files, class_name: 'EncryptedFile'
|
7
|
+
has_one :proof_type, class_name: 'ProofType'
|
8
|
+
has_one :entity, class_name: 'Entity', polymorphic: true
|
9
|
+
|
10
|
+
property :created_at, type: :date
|
11
|
+
# Type: Date
|
12
|
+
# Description:
|
13
|
+
|
14
|
+
property :is_expired, type: :boolean
|
15
|
+
# Type: Boolean
|
16
|
+
# Description:
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module DIDWW
|
3
|
+
module Resource
|
4
|
+
class QtyBasedPricing < Base
|
5
|
+
belongs_to :capacity_pool
|
6
|
+
|
7
|
+
property :qty, type: :integer
|
8
|
+
# Type: Integer
|
9
|
+
# Description: A treshold starting at which provided prices per channel apply
|
10
|
+
|
11
|
+
property :setup_price, type: :decimal
|
12
|
+
# Type: String
|
13
|
+
# Description: Non-recurring price per channel
|
14
|
+
|
15
|
+
property :monthly_price, type: :decimal
|
16
|
+
# Type: String
|
17
|
+
# Description: Monthly recurring price per channel
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module DIDWW
|
3
|
+
module Resource
|
4
|
+
class Requirement < Base
|
5
|
+
|
6
|
+
has_one :country, class_name: 'Country'
|
7
|
+
has_one :did_group_type, class_name: 'DidGroupType', relation_name: :group_type
|
8
|
+
has_one :personal_permanent_document, class_name: 'SupportingDocumentTemplate'
|
9
|
+
has_one :business_permanent_document, class_name: 'SupportingDocumentTemplate'
|
10
|
+
has_one :personal_onetime_document, class_name: 'SupportingDocumentTemplate'
|
11
|
+
has_one :business_onetime_document, class_name: 'SupportingDocumentTemplate'
|
12
|
+
has_many :personal_proof_types, class_name: 'ProofType'
|
13
|
+
has_many :business_proof_types, class_name: 'ProofType'
|
14
|
+
has_many :address_proof_types, class_name: 'ProofType'
|
15
|
+
|
16
|
+
property :identity_type, type: :integer
|
17
|
+
# Type: Integer
|
18
|
+
# Description:
|
19
|
+
|
20
|
+
property :personal_area_level, type: :string
|
21
|
+
# Type: String
|
22
|
+
# Description:
|
23
|
+
|
24
|
+
property :business_area_level, type: :string
|
25
|
+
# Type: String
|
26
|
+
# Description:
|
27
|
+
|
28
|
+
property :address_area_level, type: :string
|
29
|
+
# Type: String
|
30
|
+
# Description:
|
31
|
+
|
32
|
+
property :personal_proof_qty, type: :integer
|
33
|
+
# Type: Integer
|
34
|
+
# Description:
|
35
|
+
|
36
|
+
property :business_proof_qty, type: :integer
|
37
|
+
# Type: Integer
|
38
|
+
# Description:
|
39
|
+
|
40
|
+
property :address_proof_qty, type: :integer
|
41
|
+
# Type: Integer
|
42
|
+
# Description:
|
43
|
+
|
44
|
+
property :personal_mandatory_fields, type: :array
|
45
|
+
# Type: String[]
|
46
|
+
# Description:
|
47
|
+
|
48
|
+
property :business_mandatory_fields, type: :array
|
49
|
+
# Type: String[]
|
50
|
+
# Description:
|
51
|
+
|
52
|
+
property :service_description_required, type: :boolean
|
53
|
+
# Type: Boolean
|
54
|
+
# Description:
|
55
|
+
|
56
|
+
property :restriction_message, type: :string
|
57
|
+
# Type: String
|
58
|
+
# Description:
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module DIDWW
|
3
|
+
module Resource
|
4
|
+
class SharedCapacityGroup < Base
|
5
|
+
has_one :capacity_pool, class: 'CapacityPool'
|
6
|
+
|
7
|
+
has_many :dids, class: 'Did'
|
8
|
+
|
9
|
+
property :name, type: :string
|
10
|
+
# Type: String
|
11
|
+
# Description: Shared capacity group name
|
12
|
+
|
13
|
+
property :shared_channels_count, type: :integer
|
14
|
+
# Type: Integer
|
15
|
+
# Description: Channels count assigned to this Group and shared among its DIDs
|
16
|
+
|
17
|
+
property :metered_channels_count, type: :integer
|
18
|
+
# Type: Integer
|
19
|
+
# Description: Maximum amount of Metered channels used by this Group DIDs
|
20
|
+
|
21
|
+
property :created_at, type: :time
|
22
|
+
# Type: DateTime
|
23
|
+
# Description: Shared capacity group created at DateTime
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module DIDWW
|
3
|
+
module Resource
|
4
|
+
class SupportingDocumentTemplate < Base
|
5
|
+
property :name, type: :string
|
6
|
+
# Type: String
|
7
|
+
# Description:
|
8
|
+
|
9
|
+
property :url, type: :string
|
10
|
+
# Type: String
|
11
|
+
# Description:
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -1,13 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'didww/complex_objects/configurations'
|
2
|
-
require 'didww/resources/trunk/const'
|
3
3
|
|
4
4
|
module DIDWW
|
5
5
|
module Resource
|
6
|
-
class
|
7
|
-
|
6
|
+
class VoiceInTrunk < Base
|
7
|
+
# Allowed values for trunk.cli_format
|
8
|
+
CLI_FORMAT_RAW = 'raw'
|
9
|
+
CLI_FORMAT_E164 = 'e164'
|
10
|
+
CLI_FORMAT_LOCAL = 'local'
|
11
|
+
|
12
|
+
CLI_FORMATS = {
|
13
|
+
CLI_FORMAT_RAW => 'Raw',
|
14
|
+
CLI_FORMAT_E164 => 'E.164',
|
15
|
+
CLI_FORMAT_LOCAL => 'Local'
|
16
|
+
}.freeze
|
17
|
+
|
18
|
+
# Configuration types
|
19
|
+
CONF_TYPE_SIP = 'sip_configurations'
|
20
|
+
CONF_TYPE_H323 = 'h323_configurations'
|
21
|
+
CONF_TYPE_IAX2 = 'iax2_configurations'
|
22
|
+
CONF_TYPE_PSTN = 'pstn_configurations'
|
23
|
+
|
24
|
+
CONF_TYPES = {
|
25
|
+
CONF_TYPE_SIP => 'SIP',
|
26
|
+
CONF_TYPE_H323 => 'H323',
|
27
|
+
CONF_TYPE_IAX2 => 'IAX2',
|
28
|
+
CONF_TYPE_PSTN => 'PSTN'
|
29
|
+
}.freeze
|
30
|
+
|
31
|
+
CONF_TYPE_CLASSES = {
|
32
|
+
CONF_TYPE_SIP => DIDWW::ComplexObject::SipConfiguration,
|
33
|
+
CONF_TYPE_H323 => DIDWW::ComplexObject::H323Configuration,
|
34
|
+
CONF_TYPE_IAX2 => DIDWW::ComplexObject::Iax2Configuration,
|
35
|
+
CONF_TYPE_PSTN => DIDWW::ComplexObject::PstnConfiguration
|
36
|
+
}.freeze
|
8
37
|
|
9
38
|
has_one :pop
|
10
|
-
has_one :
|
39
|
+
has_one :voice_in_trunk_group
|
11
40
|
|
12
41
|
property :priority, type: :integer
|
13
42
|
# Type: Integer
|
@@ -62,6 +91,13 @@ module DIDWW
|
|
62
91
|
attribute_will_change!(:configuration) if configuration
|
63
92
|
end
|
64
93
|
|
94
|
+
def cli_format_human
|
95
|
+
CLI_FORMATS[cli_format]
|
96
|
+
end
|
97
|
+
|
98
|
+
def configuration_type_human
|
99
|
+
CONF_TYPES[configuration.type] if configuration
|
100
|
+
end
|
65
101
|
end
|
66
102
|
end
|
67
103
|
end
|