gobl 0.1.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.
Files changed (98) hide show
  1. checksums.yaml +7 -0
  2. data/data/tax/ES.json +841 -0
  3. data/data/tax/FR.json +47 -0
  4. data/data/tax/GB.json +56 -0
  5. data/data/tax/NL.json +60 -0
  6. data/home/cavalle/workspace/invopop/gobl.ruby/gobl.gemspec +30 -0
  7. data/lib/extensions.rb +12 -0
  8. data/lib/gobl/bill/advances.rb +90 -0
  9. data/lib/gobl/bill/charge.rb +121 -0
  10. data/lib/gobl/bill/delivery.rb +79 -0
  11. data/lib/gobl/bill/discount.rb +121 -0
  12. data/lib/gobl/bill/exchange_rates.rb +90 -0
  13. data/lib/gobl/bill/invoice.rb +209 -0
  14. data/lib/gobl/bill/invoice_type.rb +163 -0
  15. data/lib/gobl/bill/line.rb +121 -0
  16. data/lib/gobl/bill/line_charge.rb +79 -0
  17. data/lib/gobl/bill/line_discount.rb +79 -0
  18. data/lib/gobl/bill/ordering.rb +58 -0
  19. data/lib/gobl/bill/outlay.rb +107 -0
  20. data/lib/gobl/bill/payment.rb +79 -0
  21. data/lib/gobl/bill/preceding.rb +114 -0
  22. data/lib/gobl/bill/scheme_keys.rb +90 -0
  23. data/lib/gobl/bill/tax.rb +72 -0
  24. data/lib/gobl/bill/totals.rb +135 -0
  25. data/lib/gobl/cal/date.rb +106 -0
  26. data/lib/gobl/cal/period.rb +63 -0
  27. data/lib/gobl/config.rb +14 -0
  28. data/lib/gobl/currency/code.rb +322 -0
  29. data/lib/gobl/currency/exchange_rate.rb +65 -0
  30. data/lib/gobl/document.rb +70 -0
  31. data/lib/gobl/dsig/digest.rb +65 -0
  32. data/lib/gobl/dsig/signature.rb +106 -0
  33. data/lib/gobl/envelope.rb +77 -0
  34. data/lib/gobl/header.rb +98 -0
  35. data/lib/gobl/i18n/string.rb +72 -0
  36. data/lib/gobl/id.rb +80 -0
  37. data/lib/gobl/l10n/code.rb +106 -0
  38. data/lib/gobl/l10n/country_code.rb +405 -0
  39. data/lib/gobl/note/message.rb +72 -0
  40. data/lib/gobl/num/amount.rb +248 -0
  41. data/lib/gobl/num/percentage.rb +84 -0
  42. data/lib/gobl/operations/service_error.rb +10 -0
  43. data/lib/gobl/operations/validation_result.rb +46 -0
  44. data/lib/gobl/operations.rb +170 -0
  45. data/lib/gobl/org/address.rb +156 -0
  46. data/lib/gobl/org/code.rb +106 -0
  47. data/lib/gobl/org/coordinates.rb +79 -0
  48. data/lib/gobl/org/email.rb +79 -0
  49. data/lib/gobl/org/inbox.rb +86 -0
  50. data/lib/gobl/org/item.rb +121 -0
  51. data/lib/gobl/org/item_code.rb +65 -0
  52. data/lib/gobl/org/key.rb +106 -0
  53. data/lib/gobl/org/meta.rb +72 -0
  54. data/lib/gobl/org/name.rb +114 -0
  55. data/lib/gobl/org/note.rb +79 -0
  56. data/lib/gobl/org/note_key.rb +181 -0
  57. data/lib/gobl/org/party.rb +135 -0
  58. data/lib/gobl/org/person.rb +100 -0
  59. data/lib/gobl/org/registration.rb +99 -0
  60. data/lib/gobl/org/source_key.rb +161 -0
  61. data/lib/gobl/org/tax_identity.rb +93 -0
  62. data/lib/gobl/org/telephone.rb +72 -0
  63. data/lib/gobl/org/unit.rb +204 -0
  64. data/lib/gobl/pay/advance.rb +107 -0
  65. data/lib/gobl/pay/card.rb +65 -0
  66. data/lib/gobl/pay/credit_transfer.rb +86 -0
  67. data/lib/gobl/pay/direct_debit.rb +72 -0
  68. data/lib/gobl/pay/due_date.rb +86 -0
  69. data/lib/gobl/pay/instructions.rb +114 -0
  70. data/lib/gobl/pay/method_key.rb +163 -0
  71. data/lib/gobl/pay/online.rb +65 -0
  72. data/lib/gobl/pay/term_key.rb +166 -0
  73. data/lib/gobl/pay/terms.rb +79 -0
  74. data/lib/gobl/stamp.rb +63 -0
  75. data/lib/gobl/struct.rb +48 -0
  76. data/lib/gobl/tax/category.rb +83 -0
  77. data/lib/gobl/tax/category_total.rb +87 -0
  78. data/lib/gobl/tax/combo.rb +79 -0
  79. data/lib/gobl/tax/localities.rb +90 -0
  80. data/lib/gobl/tax/locality.rb +72 -0
  81. data/lib/gobl/tax/rate.rb +77 -0
  82. data/lib/gobl/tax/rate_total.rb +82 -0
  83. data/lib/gobl/tax/rate_total_surcharge.rb +63 -0
  84. data/lib/gobl/tax/rate_value.rb +79 -0
  85. data/lib/gobl/tax/region.rb +100 -0
  86. data/lib/gobl/tax/scheme.rb +86 -0
  87. data/lib/gobl/tax/schemes.rb +90 -0
  88. data/lib/gobl/tax/set.rb +90 -0
  89. data/lib/gobl/tax/total.rb +65 -0
  90. data/lib/gobl/types.rb +17 -0
  91. data/lib/gobl/uuid/uuid.rb +106 -0
  92. data/lib/gobl/version.rb +5 -0
  93. data/lib/gobl.rb +41 -0
  94. data/lib/gobl_extensions/document_helper.rb +45 -0
  95. data/lib/gobl_extensions/envelope_helper.rb +15 -0
  96. data/lib/gobl_extensions/i18n/value_keys_helper.rb +27 -0
  97. data/lib/gobl_extensions/tax/region_helper.rb +41 -0
  98. metadata +225 -0
@@ -0,0 +1,100 @@
1
+ # frozen_string_literal: true
2
+
3
+ ##
4
+ ## DO NOT EDIT - This file was generated automatically.
5
+ ##
6
+ ## Generated with GOBL v0.30.4
7
+ ##
8
+
9
+ module GOBL
10
+ module Org
11
+ # Person represents a human, and how to contact them electronically.
12
+ class Person < GOBL::Struct
13
+ # The Schema ID of the GOBL Person structure
14
+ SCHEMA_ID = 'https://gobl.org/draft-0/org/person'
15
+
16
+ # @!attribute [r] id
17
+ # Internal ID used to identify the person inside a document.
18
+ # @return [String]
19
+ attribute? :id, GOBL::Types::String.optional
20
+
21
+ # @!attribute [r] uuid
22
+ # Unique identity code
23
+ # @return [GOBL::UUID::UUID]
24
+ attribute? :uuid, GOBL::UUID::UUID.optional
25
+
26
+ # @!attribute [r] name
27
+ # Complete details on the name of the person
28
+ # @return [GOBL::Org::Name]
29
+ attribute :name, GOBL::Org::Name
30
+
31
+ # @!attribute [r] role
32
+ # What they do within an organization
33
+ # @return [String]
34
+ attribute? :role, GOBL::Types::String.optional
35
+
36
+ # @!attribute [r] emails
37
+ # Electronic mail addresses that belong to the person.
38
+ # @return [Array<GOBL::Org::Email>]
39
+ attribute? :emails, GOBL::Types::Array.of(GOBL::Org::Email).optional
40
+
41
+ # @!attribute [r] telephones
42
+ # Regular phone or mobile numbers
43
+ # @return [Array<GOBL::Org::Telephone>]
44
+ attribute? :telephones, GOBL::Types::Array.of(GOBL::Org::Telephone).optional
45
+
46
+ # @!attribute [r] meta
47
+ # Data about the data.
48
+ # @return [GOBL::Org::Meta]
49
+ attribute? :meta, GOBL::Org::Meta.optional
50
+
51
+ # Creates a new object from a hash of GOBL data
52
+ #
53
+ # @param data [Hash] a hash of GOBL data
54
+ #
55
+ # @return [Person] the object created from the given data
56
+ def self.from_gobl!(data)
57
+ data = GOBL::Types::Hash[data]
58
+
59
+ new(
60
+ id: data['id'],
61
+ uuid: data['uuid'] ? GOBL::UUID::UUID.from_gobl!(data['uuid']) : nil,
62
+ name: GOBL::Org::Name.from_gobl!(data['name']),
63
+ role: data['role'],
64
+ emails: data['emails']&.map { |item| GOBL::Org::Email.from_gobl!(item) },
65
+ telephones: data['telephones']&.map { |item| GOBL::Org::Telephone.from_gobl!(item) },
66
+ meta: data['meta'] ? GOBL::Org::Meta.from_gobl!(data['meta']) : nil
67
+ )
68
+ end
69
+
70
+ # Returns a hash of GOBL data representing the current object
71
+ #
72
+ # @return [Hash] the array of GOBL data that represents the current object
73
+ def to_gobl
74
+ {
75
+ 'id' => attributes[:id],
76
+ 'uuid' => attributes[:uuid]&.to_gobl,
77
+ 'name' => attributes[:name]&.to_gobl,
78
+ 'role' => attributes[:role],
79
+ 'emails' => attributes[:emails]&.map { |item| item&.to_gobl },
80
+ 'telephones' => attributes[:telephones]&.map { |item| item&.to_gobl },
81
+ 'meta' => attributes[:meta]&.to_gobl
82
+ }.compact
83
+ end
84
+
85
+ # @!method self.new(attrs)
86
+ #
87
+ # Returns a {Person} object from a given hash of attributes. Nested
88
+ # attributes are supported: the constructor will instantiate the proper GOBL
89
+ # objects when nested hashes or arrays are given as part of the `attrs`
90
+ # parameter.
91
+ #
92
+ # The `new` method will only allow to create a new object if all attributes
93
+ # marked as mandatory and not calculated in the JSON schema are provided.
94
+ #
95
+ # @param attrs [Hash] the hash of attributes
96
+ #
97
+ # @return [Person] the object corresponding to the given input
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,99 @@
1
+ # frozen_string_literal: true
2
+
3
+ ##
4
+ ## DO NOT EDIT - This file was generated automatically.
5
+ ##
6
+ ## Generated with GOBL v0.30.4
7
+ ##
8
+
9
+ module GOBL
10
+ module Org
11
+ # Registration is used in countries that require additional information to be associated with a company usually related to a specific registration office.
12
+ class Registration < GOBL::Struct
13
+ # The Schema ID of the GOBL Registration structure
14
+ SCHEMA_ID = 'https://gobl.org/draft-0/org/registration'
15
+
16
+ # @!attribute [r] uuid
17
+ # @return [GOBL::UUID::UUID]
18
+ attribute? :uuid, GOBL::UUID::UUID.optional
19
+
20
+ # @!attribute [r] office
21
+ # @return [String]
22
+ attribute? :office, GOBL::Types::String.optional
23
+
24
+ # @!attribute [r] book
25
+ # @return [String]
26
+ attribute? :book, GOBL::Types::String.optional
27
+
28
+ # @!attribute [r] volume
29
+ # @return [String]
30
+ attribute? :volume, GOBL::Types::String.optional
31
+
32
+ # @!attribute [r] sheet
33
+ # @return [String]
34
+ attribute? :sheet, GOBL::Types::String.optional
35
+
36
+ # @!attribute [r] section
37
+ # @return [String]
38
+ attribute? :section, GOBL::Types::String.optional
39
+
40
+ # @!attribute [r] page
41
+ # @return [String]
42
+ attribute? :page, GOBL::Types::String.optional
43
+
44
+ # @!attribute [r] entry
45
+ # @return [String]
46
+ attribute? :entry, GOBL::Types::String.optional
47
+
48
+ # Creates a new object from a hash of GOBL data
49
+ #
50
+ # @param data [Hash] a hash of GOBL data
51
+ #
52
+ # @return [Registration] the object created from the given data
53
+ def self.from_gobl!(data)
54
+ data = GOBL::Types::Hash[data]
55
+
56
+ new(
57
+ uuid: data['uuid'] ? GOBL::UUID::UUID.from_gobl!(data['uuid']) : nil,
58
+ office: data['office'],
59
+ book: data['book'],
60
+ volume: data['volume'],
61
+ sheet: data['sheet'],
62
+ section: data['section'],
63
+ page: data['page'],
64
+ entry: data['entry']
65
+ )
66
+ end
67
+
68
+ # Returns a hash of GOBL data representing the current object
69
+ #
70
+ # @return [Hash] the array of GOBL data that represents the current object
71
+ def to_gobl
72
+ {
73
+ 'uuid' => attributes[:uuid]&.to_gobl,
74
+ 'office' => attributes[:office],
75
+ 'book' => attributes[:book],
76
+ 'volume' => attributes[:volume],
77
+ 'sheet' => attributes[:sheet],
78
+ 'section' => attributes[:section],
79
+ 'page' => attributes[:page],
80
+ 'entry' => attributes[:entry]
81
+ }.compact
82
+ end
83
+
84
+ # @!method self.new(attrs)
85
+ #
86
+ # Returns a {Registration} object from a given hash of attributes. Nested
87
+ # attributes are supported: the constructor will instantiate the proper GOBL
88
+ # objects when nested hashes or arrays are given as part of the `attrs`
89
+ # parameter.
90
+ #
91
+ # The `new` method will only allow to create a new object if all attributes
92
+ # marked as mandatory and not calculated in the JSON schema are provided.
93
+ #
94
+ # @param attrs [Hash] the hash of attributes
95
+ #
96
+ # @return [Registration] the object corresponding to the given input
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,161 @@
1
+ # frozen_string_literal: true
2
+
3
+ ##
4
+ ## DO NOT EDIT - This file was generated automatically.
5
+ ##
6
+ ## Generated with GOBL v0.30.4
7
+ ##
8
+
9
+ module GOBL
10
+ module Org
11
+ # SourceKey identifies the source of a tax identity
12
+ class SourceKey < GOBL::Struct
13
+ # The Schema ID of the GOBL SourceKey structure
14
+ SCHEMA_ID = 'https://gobl.org/draft-0/org/tax-identity#/$defs/SourceKey'
15
+
16
+ # The enumeration of values of the object and their descriptions (Values different to these are not allowed)
17
+ ENUM = {
18
+ 'tax-agency' => 'Sourced directly from a tax agency',
19
+ 'passport' => 'A passport document',
20
+ 'national' => 'National ID Card or similar',
21
+ 'permit' => 'Residential or similar permit',
22
+ 'other' => 'An other type of source not listed'
23
+ }.freeze
24
+
25
+ attribute :_value, GOBL::Types::String.enum(*ENUM.keys)
26
+ private :_value
27
+
28
+ # Creates a new object from a GOBL value
29
+ #
30
+ # @param data [String] the GOBL value
31
+ #
32
+ # @return [SourceKey] the object created from the given data
33
+ def self.from_gobl!(data)
34
+ new(_value: data)
35
+ end
36
+
37
+ # Returns a GOBL value representing the current object
38
+ #
39
+ # @return [String] the GOBL value that represents the current object
40
+ def to_gobl
41
+ _value
42
+ end
43
+
44
+ # Returns a {SourceKey} that corresponds to a given object. The object can be a
45
+ # `Symbol`, a `String` or anything coercible into one (via `#to_s`).
46
+ #
47
+ # @param object [Symbol, String, #to_s] the value of the object.
48
+ #
49
+ # @return [SourceKey] the object corresponding to the given value.
50
+ #
51
+ # @example Instantiating from a symbol
52
+ # source_key = GOBL::Org::SourceKey.new(:tax_agency)
53
+ #
54
+ # @example Instantiating from a string
55
+ # source_key = GOBL::Org::SourceKey.new('tax-agency')
56
+ def self.new(object)
57
+ case object
58
+ when Hash, self # internal use, not to be used in public calls
59
+ super
60
+ when Symbol
61
+ new find_by_sym(object)
62
+ else
63
+ super _value: object.to_s
64
+ end
65
+ end
66
+
67
+ # Returns the string representation of the current object
68
+ #
69
+ # @return [String] the string representation of the current object
70
+ def to_s
71
+ _value.to_s
72
+ end
73
+
74
+ # Returns the symbol representation of the current object
75
+ #
76
+ # @return [Symbol] the symbol representation of the current object
77
+ def to_sym
78
+ to_s.parameterize.underscore.to_sym
79
+ end
80
+
81
+ # Returns whether the current object is equivalent to a given one. In addition
82
+ # to {SourceKey} objects, the current object can be compared to a `Symbol`, a
83
+ # `String` or anything coercible into one (via `#to_s`)
84
+ #
85
+ # @param other [SourceKey, Symbol, String, #to_s] the other object to compare to
86
+ #
87
+ # @return [Boolean] `true` if the objects are equivalent, `false` otherwise
88
+ #
89
+ # @example Comparing to another {SourceKey} object
90
+ # source_key = GOBL::Org::SourceKey.new('tax-agency')
91
+ # source_key == GOBL::Org::SourceKey.new('tax-agency') #=> true
92
+ # source_key == GOBL::Org::SourceKey.new('passport') #=> false
93
+ #
94
+ # @example Comparing to a string
95
+ # source_key = GOBL::Org::SourceKey.new('tax-agency')
96
+ # source_key == 'tax-agency' #=> true
97
+ # source_key == 'passport' #=> false
98
+ #
99
+ # @example Comparing to a symbol
100
+ # source_key = GOBL::Org::SourceKey.new('tax-agency')
101
+ # source_key == :tax_agency #=> true
102
+ # source_key == :passport #=> false
103
+ def ==(other)
104
+ case other
105
+ when self.class
106
+ super
107
+ when Symbol
108
+ to_sym == other
109
+ else
110
+ to_s == other.to_s
111
+ end
112
+ end
113
+
114
+ # Returns an array with all the enumerated objects of this type
115
+ #
116
+ # @return [Array<SourceKey>] the array of enumerated objects
117
+ def self.all
118
+ ENUM.keys.map { |key| new(key) }
119
+ end
120
+
121
+ # @api private
122
+ def self.find_by_sym(sym)
123
+ all.find { |object| object.to_sym == sym }
124
+ end
125
+
126
+ # @api private
127
+ def self.find_by_inquirer(method_name)
128
+ method_name =~ /(.+)\?$/ && find_by_sym(Regexp.last_match(1).to_sym)
129
+ end
130
+
131
+ # Returns the description of the current object
132
+ #
133
+ # @return [String] the description of the current object
134
+ def description
135
+ ENUM.fetch(_value, _value)
136
+ end
137
+
138
+ # @api private
139
+ def respond_to_missing?(method_name, include_private = false)
140
+ self.class.find_by_inquirer(method_name) || super
141
+ end
142
+
143
+ # Enables dynamic value inquirers like `SourceKey#tax_agency?` for
144
+ # each of the declared enum values (see {ENUM}). Each inquirer returns a
145
+ # `Boolean` denoting whether the value equals the enquired value (`true`) or
146
+ # not (`false`)
147
+ #
148
+ # @example
149
+ # source_key = GOBL::Org::SourceKey.new('tax-agency')
150
+ # source_key.tax_agency? # => true
151
+ # source_key.passport? # => false
152
+ def method_missing(method_name, *args, &block)
153
+ if value = self.class.find_by_inquirer(method_name)
154
+ self == value
155
+ else
156
+ super
157
+ end
158
+ end
159
+ end
160
+ end
161
+ end
@@ -0,0 +1,93 @@
1
+ # frozen_string_literal: true
2
+
3
+ ##
4
+ ## DO NOT EDIT - This file was generated automatically.
5
+ ##
6
+ ## Generated with GOBL v0.30.4
7
+ ##
8
+
9
+ module GOBL
10
+ module Org
11
+ # TaxIdentity stores the details required to identify an entity for tax purposes.
12
+ class TaxIdentity < GOBL::Struct
13
+ # The Schema ID of the GOBL TaxIdentity structure
14
+ SCHEMA_ID = 'https://gobl.org/draft-0/org/tax-identity'
15
+
16
+ # @!attribute [r] uuid
17
+ # Unique universal identity code.
18
+ # @return [GOBL::UUID::UUID]
19
+ attribute? :uuid, GOBL::UUID::UUID.optional
20
+
21
+ # @!attribute [r] country
22
+ # ISO country code for Where the tax identity was issued.
23
+ # @return [GOBL::L10n::CountryCode]
24
+ attribute :country, GOBL::L10n::CountryCode
25
+
26
+ # @!attribute [r] locality
27
+ # Where inside a country the Tax ID was issued, if required.
28
+ # @return [GOBL::L10n::Code]
29
+ attribute? :locality, GOBL::L10n::Code.optional
30
+
31
+ # @!attribute [r] source
32
+ # What is the source document of this tax identity.
33
+ # @return [SourceKey]
34
+ attribute? :source, SourceKey.optional
35
+
36
+ # @!attribute [r] code
37
+ # Tax identity Code
38
+ # @return [String]
39
+ attribute? :code, GOBL::Types::String.optional
40
+
41
+ # @!attribute [r] meta
42
+ # Additional details that may be required.
43
+ # @return [GOBL::Org::Meta]
44
+ attribute? :meta, GOBL::Org::Meta.optional
45
+
46
+ # Creates a new object from a hash of GOBL data
47
+ #
48
+ # @param data [Hash] a hash of GOBL data
49
+ #
50
+ # @return [TaxIdentity] the object created from the given data
51
+ def self.from_gobl!(data)
52
+ data = GOBL::Types::Hash[data]
53
+
54
+ new(
55
+ uuid: data['uuid'] ? GOBL::UUID::UUID.from_gobl!(data['uuid']) : nil,
56
+ country: GOBL::L10n::CountryCode.from_gobl!(data['country']),
57
+ locality: data['locality'] ? GOBL::L10n::Code.from_gobl!(data['locality']) : nil,
58
+ source: data['source'] ? SourceKey.from_gobl!(data['source']) : nil,
59
+ code: data['code'],
60
+ meta: data['meta'] ? GOBL::Org::Meta.from_gobl!(data['meta']) : nil
61
+ )
62
+ end
63
+
64
+ # Returns a hash of GOBL data representing the current object
65
+ #
66
+ # @return [Hash] the array of GOBL data that represents the current object
67
+ def to_gobl
68
+ {
69
+ 'uuid' => attributes[:uuid]&.to_gobl,
70
+ 'country' => attributes[:country]&.to_gobl,
71
+ 'locality' => attributes[:locality]&.to_gobl,
72
+ 'source' => attributes[:source]&.to_gobl,
73
+ 'code' => attributes[:code],
74
+ 'meta' => attributes[:meta]&.to_gobl
75
+ }.compact
76
+ end
77
+
78
+ # @!method self.new(attrs)
79
+ #
80
+ # Returns a {TaxIdentity} object from a given hash of attributes. Nested
81
+ # attributes are supported: the constructor will instantiate the proper GOBL
82
+ # objects when nested hashes or arrays are given as part of the `attrs`
83
+ # parameter.
84
+ #
85
+ # The `new` method will only allow to create a new object if all attributes
86
+ # marked as mandatory and not calculated in the JSON schema are provided.
87
+ #
88
+ # @param attrs [Hash] the hash of attributes
89
+ #
90
+ # @return [TaxIdentity] the object corresponding to the given input
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ ##
4
+ ## DO NOT EDIT - This file was generated automatically.
5
+ ##
6
+ ## Generated with GOBL v0.30.4
7
+ ##
8
+
9
+ module GOBL
10
+ module Org
11
+ # Telephone describes what is expected for a telephone number.
12
+ class Telephone < GOBL::Struct
13
+ # The Schema ID of the GOBL Telephone structure
14
+ SCHEMA_ID = 'https://gobl.org/draft-0/org/telephone'
15
+
16
+ # @!attribute [r] uuid
17
+ # Unique identity code
18
+ # @return [GOBL::UUID::UUID]
19
+ attribute? :uuid, GOBL::UUID::UUID.optional
20
+
21
+ # @!attribute [r] label
22
+ # Identifier for this number.
23
+ # @return [String]
24
+ attribute? :label, GOBL::Types::String.optional
25
+
26
+ # @!attribute [r] num
27
+ # The number to be dialed in ITU E.164 international format.
28
+ # @return [String]
29
+ attribute :num, GOBL::Types::String
30
+
31
+ # Creates a new object from a hash of GOBL data
32
+ #
33
+ # @param data [Hash] a hash of GOBL data
34
+ #
35
+ # @return [Telephone] the object created from the given data
36
+ def self.from_gobl!(data)
37
+ data = GOBL::Types::Hash[data]
38
+
39
+ new(
40
+ uuid: data['uuid'] ? GOBL::UUID::UUID.from_gobl!(data['uuid']) : nil,
41
+ label: data['label'],
42
+ num: data['num']
43
+ )
44
+ end
45
+
46
+ # Returns a hash of GOBL data representing the current object
47
+ #
48
+ # @return [Hash] the array of GOBL data that represents the current object
49
+ def to_gobl
50
+ {
51
+ 'uuid' => attributes[:uuid]&.to_gobl,
52
+ 'label' => attributes[:label],
53
+ 'num' => attributes[:num]
54
+ }.compact
55
+ end
56
+
57
+ # @!method self.new(attrs)
58
+ #
59
+ # Returns a {Telephone} object from a given hash of attributes. Nested
60
+ # attributes are supported: the constructor will instantiate the proper GOBL
61
+ # objects when nested hashes or arrays are given as part of the `attrs`
62
+ # parameter.
63
+ #
64
+ # The `new` method will only allow to create a new object if all attributes
65
+ # marked as mandatory and not calculated in the JSON schema are provided.
66
+ #
67
+ # @param attrs [Hash] the hash of attributes
68
+ #
69
+ # @return [Telephone] the object corresponding to the given input
70
+ end
71
+ end
72
+ end