gobl 0.1.3 → 0.3.0
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 +4 -4
- data/data/tax/CO.json +420 -0
- data/data/tax/ES.json +61 -0
- data/lib/ext/hashme.rb +28 -0
- data/lib/gobl/bill/advances.rb +1 -77
- data/lib/gobl/bill/charge.rb +11 -65
- data/lib/gobl/bill/delivery.rb +5 -47
- data/lib/gobl/bill/discount.rb +11 -65
- data/lib/gobl/bill/exchange_rates.rb +1 -77
- data/lib/gobl/bill/invoice.rb +28 -104
- data/lib/gobl/bill/invoice_type.rb +3 -134
- data/lib/gobl/bill/line.rb +13 -65
- data/lib/gobl/bill/line_charge.rb +5 -47
- data/lib/gobl/bill/line_discount.rb +5 -47
- data/lib/gobl/bill/ordering.rb +2 -38
- data/lib/gobl/bill/outlay.rb +11 -59
- data/lib/gobl/bill/payment.rb +5 -47
- data/lib/gobl/bill/preceding.rb +12 -62
- data/lib/gobl/bill/scheme_keys.rb +1 -77
- data/lib/gobl/bill/tax.rb +4 -44
- data/lib/gobl/bill/totals.rb +17 -71
- data/lib/gobl/cal/date.rb +1 -90
- data/lib/gobl/cal/period.rb +5 -41
- data/lib/gobl/currency/code.rb +3 -134
- data/lib/gobl/currency/exchange_rate.rb +5 -41
- data/lib/gobl/document.rb +1 -58
- data/lib/gobl/dsig/digest.rb +5 -41
- data/lib/gobl/dsig/signature.rb +1 -90
- data/lib/gobl/enum.rb +81 -0
- data/lib/gobl/envelope.rb +9 -48
- data/lib/gobl/header.rb +10 -56
- data/lib/gobl/i18n/string.rb +1 -58
- data/lib/gobl/l10n/code.rb +1 -90
- data/lib/gobl/l10n/country_code.rb +3 -134
- data/lib/gobl/map.rb +62 -0
- data/lib/gobl/note/message.rb +5 -44
- data/lib/gobl/num/amount.rb +6 -35
- data/lib/gobl/object.rb +21 -0
- data/lib/gobl/operations.rb +3 -3
- data/lib/gobl/org/address.rb +18 -80
- data/lib/gobl/org/code.rb +1 -90
- data/lib/gobl/org/coordinates.rb +5 -47
- data/lib/gobl/org/email.rb +6 -47
- data/lib/gobl/org/inbox.rb +8 -50
- data/lib/gobl/org/item.rb +13 -65
- data/lib/gobl/org/item_code.rb +4 -41
- data/lib/gobl/org/key.rb +1 -90
- data/lib/gobl/org/meta.rb +1 -58
- data/lib/gobl/org/name.rb +12 -62
- data/lib/gobl/org/note.rb +6 -47
- data/lib/gobl/org/note_key.rb +3 -134
- data/lib/gobl/org/party.rb +14 -71
- data/lib/gobl/org/person.rb +9 -56
- data/lib/gobl/org/registration.rb +9 -59
- data/lib/gobl/org/source_key.rb +3 -134
- data/lib/gobl/org/tax_identity.rb +8 -53
- data/lib/gobl/org/telephone.rb +5 -44
- data/lib/gobl/org/unit.rb +1 -136
- data/lib/gobl/pay/advance.rb +11 -59
- data/lib/gobl/pay/card.rb +5 -41
- data/lib/gobl/pay/credit_transfer.rb +6 -50
- data/lib/gobl/pay/direct_debit.rb +4 -44
- data/lib/gobl/pay/due_date.rb +8 -50
- data/lib/gobl/pay/instructions.rb +11 -62
- data/lib/gobl/pay/method_key.rb +3 -134
- data/lib/gobl/pay/online.rb +4 -41
- data/lib/gobl/pay/term_key.rb +3 -134
- data/lib/gobl/pay/terms.rb +6 -47
- data/lib/gobl/stamp.rb +5 -41
- data/lib/gobl/struct.rb +15 -15
- data/lib/gobl/tax/category.rb +9 -50
- data/lib/gobl/tax/category_total.rb +11 -53
- data/lib/gobl/tax/combo.rb +6 -47
- data/lib/gobl/tax/localities.rb +1 -77
- data/lib/gobl/tax/locality.rb +6 -44
- data/lib/gobl/tax/rate.rb +8 -47
- data/lib/gobl/tax/rate_total.rb +9 -50
- data/lib/gobl/tax/rate_total_surcharge.rb +5 -41
- data/lib/gobl/tax/rate_value.rb +6 -47
- data/lib/gobl/tax/region.rb +12 -56
- data/lib/gobl/tax/scheme.rb +8 -50
- data/lib/gobl/tax/schemes.rb +1 -77
- data/lib/gobl/tax/set.rb +1 -77
- data/lib/gobl/tax/total.rb +4 -41
- data/lib/gobl/uuid/uuid.rb +1 -90
- data/lib/gobl/value.rb +58 -0
- data/lib/gobl/version.rb +1 -1
- data/lib/gobl.rb +3 -1
- data/lib/gobl_extensions/document_helper.rb +3 -3
- data/lib/gobl_extensions/envelope_helper.rb +5 -0
- data/lib/gobl_extensions/i18n/value_keys_helper.rb +3 -3
- data/lib/gobl_extensions/tax/region_helper.rb +3 -9
- metadata +12 -35
- data/lib/gobl/types.rb +0 -17
data/lib/gobl/org/party.rb
CHANGED
@@ -9,127 +9,70 @@
|
|
9
9
|
module GOBL
|
10
10
|
module Org
|
11
11
|
# Party represents a person or business entity.
|
12
|
-
class Party < GOBL::
|
12
|
+
class Party < GOBL::Object
|
13
13
|
# The Schema ID of the GOBL Party structure
|
14
14
|
SCHEMA_ID = 'https://gobl.org/draft-0/org/party'
|
15
15
|
|
16
16
|
# @!attribute [r] id
|
17
17
|
# Internal ID used to identify the party inside a document.
|
18
18
|
# @return [String]
|
19
|
-
|
19
|
+
property :id, String
|
20
20
|
|
21
21
|
# @!attribute [r] uuid
|
22
22
|
# Unique identity code
|
23
23
|
# @return [GOBL::UUID::UUID]
|
24
|
-
|
24
|
+
property :uuid, GOBL::UUID::UUID
|
25
25
|
|
26
26
|
# @!attribute [r] tax_id
|
27
27
|
# The entity's legal ID code used for tax purposes. They may have other numbers, but we're only interested in those valid for tax purposes.
|
28
28
|
# @return [GOBL::Org::TaxIdentity]
|
29
|
-
|
29
|
+
property :tax_id, GOBL::Org::TaxIdentity
|
30
30
|
|
31
31
|
# @!attribute [r] name
|
32
32
|
# Legal name or representation of the organization.
|
33
33
|
# @return [String]
|
34
|
-
|
34
|
+
property :name, String
|
35
|
+
validates :name, presence: true
|
35
36
|
|
36
37
|
# @!attribute [r] alias
|
37
38
|
# Alternate short name.
|
38
39
|
# @return [String]
|
39
|
-
|
40
|
+
property :alias, String
|
40
41
|
|
41
42
|
# @!attribute [r] people
|
42
43
|
# Details of physical people who represent the party.
|
43
44
|
# @return [Array<GOBL::Org::Person>]
|
44
|
-
|
45
|
+
property :people, [GOBL::Org::Person]
|
45
46
|
|
46
47
|
# @!attribute [r] inboxes
|
47
48
|
# Digital inboxes used for forwarding electronic versions of documents
|
48
49
|
# @return [Array<GOBL::Org::Inbox>]
|
49
|
-
|
50
|
+
property :inboxes, [GOBL::Org::Inbox]
|
50
51
|
|
51
52
|
# @!attribute [r] addresses
|
52
53
|
# Regular post addresses for where information should be sent if needed.
|
53
54
|
# @return [Array<GOBL::Org::Address>]
|
54
|
-
|
55
|
+
property :addresses, [GOBL::Org::Address]
|
55
56
|
|
56
57
|
# @!attribute [r] emails
|
57
58
|
# Electronic mail addresses
|
58
59
|
# @return [Array<GOBL::Org::Email>]
|
59
|
-
|
60
|
+
property :emails, [GOBL::Org::Email]
|
60
61
|
|
61
62
|
# @!attribute [r] telephones
|
62
63
|
# Regular telephone numbers
|
63
64
|
# @return [Array<GOBL::Org::Telephone>]
|
64
|
-
|
65
|
+
property :telephones, [GOBL::Org::Telephone]
|
65
66
|
|
66
67
|
# @!attribute [r] registration
|
67
68
|
# Additional registration details about the company that may need to be included in a document.
|
68
69
|
# @return [GOBL::Org::Registration]
|
69
|
-
|
70
|
+
property :registration, GOBL::Org::Registration
|
70
71
|
|
71
72
|
# @!attribute [r] meta
|
72
73
|
# Any additional semi-structured information that does not fit into the rest of the party.
|
73
74
|
# @return [GOBL::Org::Meta]
|
74
|
-
|
75
|
-
|
76
|
-
# Creates a new object from a hash of GOBL data
|
77
|
-
#
|
78
|
-
# @param data [Hash] a hash of GOBL data
|
79
|
-
#
|
80
|
-
# @return [Party] the object created from the given data
|
81
|
-
def self.from_gobl!(data)
|
82
|
-
data = GOBL::Types::Hash[data]
|
83
|
-
|
84
|
-
new(
|
85
|
-
id: data['id'],
|
86
|
-
uuid: data['uuid'] ? GOBL::UUID::UUID.from_gobl!(data['uuid']) : nil,
|
87
|
-
tax_id: data['tax_id'] ? GOBL::Org::TaxIdentity.from_gobl!(data['tax_id']) : nil,
|
88
|
-
name: data['name'],
|
89
|
-
alias: data['alias'],
|
90
|
-
people: data['people']&.map { |item| GOBL::Org::Person.from_gobl!(item) },
|
91
|
-
inboxes: data['inboxes']&.map { |item| GOBL::Org::Inbox.from_gobl!(item) },
|
92
|
-
addresses: data['addresses']&.map { |item| GOBL::Org::Address.from_gobl!(item) },
|
93
|
-
emails: data['emails']&.map { |item| GOBL::Org::Email.from_gobl!(item) },
|
94
|
-
telephones: data['telephones']&.map { |item| GOBL::Org::Telephone.from_gobl!(item) },
|
95
|
-
registration: data['registration'] ? GOBL::Org::Registration.from_gobl!(data['registration']) : nil,
|
96
|
-
meta: data['meta'] ? GOBL::Org::Meta.from_gobl!(data['meta']) : nil
|
97
|
-
)
|
98
|
-
end
|
99
|
-
|
100
|
-
# Returns a hash of GOBL data representing the current object
|
101
|
-
#
|
102
|
-
# @return [Hash] the array of GOBL data that represents the current object
|
103
|
-
def to_gobl
|
104
|
-
{
|
105
|
-
'id' => attributes[:id],
|
106
|
-
'uuid' => attributes[:uuid]&.to_gobl,
|
107
|
-
'tax_id' => attributes[:tax_id]&.to_gobl,
|
108
|
-
'name' => attributes[:name],
|
109
|
-
'alias' => attributes[:alias],
|
110
|
-
'people' => attributes[:people]&.map { |item| item&.to_gobl },
|
111
|
-
'inboxes' => attributes[:inboxes]&.map { |item| item&.to_gobl },
|
112
|
-
'addresses' => attributes[:addresses]&.map { |item| item&.to_gobl },
|
113
|
-
'emails' => attributes[:emails]&.map { |item| item&.to_gobl },
|
114
|
-
'telephones' => attributes[:telephones]&.map { |item| item&.to_gobl },
|
115
|
-
'registration' => attributes[:registration]&.to_gobl,
|
116
|
-
'meta' => attributes[:meta]&.to_gobl
|
117
|
-
}.compact
|
118
|
-
end
|
119
|
-
|
120
|
-
# @!method self.new(attrs)
|
121
|
-
#
|
122
|
-
# Returns a {Party} object from a given hash of attributes. Nested
|
123
|
-
# attributes are supported: the constructor will instantiate the proper GOBL
|
124
|
-
# objects when nested hashes or arrays are given as part of the `attrs`
|
125
|
-
# parameter.
|
126
|
-
#
|
127
|
-
# The `new` method will only allow to create a new object if all attributes
|
128
|
-
# marked as mandatory and not calculated in the JSON schema are provided.
|
129
|
-
#
|
130
|
-
# @param attrs [Hash] the hash of attributes
|
131
|
-
#
|
132
|
-
# @return [Party] the object corresponding to the given input
|
75
|
+
property :meta, GOBL::Org::Meta
|
133
76
|
end
|
134
77
|
end
|
135
78
|
end
|
data/lib/gobl/org/person.rb
CHANGED
@@ -9,92 +9,45 @@
|
|
9
9
|
module GOBL
|
10
10
|
module Org
|
11
11
|
# Person represents a human, and how to contact them electronically.
|
12
|
-
class Person < GOBL::
|
12
|
+
class Person < GOBL::Object
|
13
13
|
# The Schema ID of the GOBL Person structure
|
14
14
|
SCHEMA_ID = 'https://gobl.org/draft-0/org/person'
|
15
15
|
|
16
16
|
# @!attribute [r] id
|
17
17
|
# Internal ID used to identify the person inside a document.
|
18
18
|
# @return [String]
|
19
|
-
|
19
|
+
property :id, String
|
20
20
|
|
21
21
|
# @!attribute [r] uuid
|
22
22
|
# Unique identity code
|
23
23
|
# @return [GOBL::UUID::UUID]
|
24
|
-
|
24
|
+
property :uuid, GOBL::UUID::UUID
|
25
25
|
|
26
26
|
# @!attribute [r] name
|
27
27
|
# Complete details on the name of the person
|
28
28
|
# @return [GOBL::Org::Name]
|
29
|
-
|
29
|
+
property :name, GOBL::Org::Name
|
30
|
+
validates :name, presence: true
|
30
31
|
|
31
32
|
# @!attribute [r] role
|
32
33
|
# What they do within an organization
|
33
34
|
# @return [String]
|
34
|
-
|
35
|
+
property :role, String
|
35
36
|
|
36
37
|
# @!attribute [r] emails
|
37
38
|
# Electronic mail addresses that belong to the person.
|
38
39
|
# @return [Array<GOBL::Org::Email>]
|
39
|
-
|
40
|
+
property :emails, [GOBL::Org::Email]
|
40
41
|
|
41
42
|
# @!attribute [r] telephones
|
42
43
|
# Regular phone or mobile numbers
|
43
44
|
# @return [Array<GOBL::Org::Telephone>]
|
44
|
-
|
45
|
+
property :telephones, [GOBL::Org::Telephone]
|
45
46
|
|
46
47
|
# @!attribute [r] meta
|
47
48
|
# Data about the data.
|
48
49
|
# @return [GOBL::Org::Meta]
|
49
|
-
|
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
|
50
|
+
property :meta, GOBL::Org::Meta
|
98
51
|
end
|
99
52
|
end
|
100
53
|
end
|
@@ -9,91 +9,41 @@
|
|
9
9
|
module GOBL
|
10
10
|
module Org
|
11
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::
|
12
|
+
class Registration < GOBL::Object
|
13
13
|
# The Schema ID of the GOBL Registration structure
|
14
14
|
SCHEMA_ID = 'https://gobl.org/draft-0/org/registration'
|
15
15
|
|
16
16
|
# @!attribute [r] uuid
|
17
17
|
# @return [GOBL::UUID::UUID]
|
18
|
-
|
18
|
+
property :uuid, GOBL::UUID::UUID
|
19
19
|
|
20
20
|
# @!attribute [r] office
|
21
21
|
# @return [String]
|
22
|
-
|
22
|
+
property :office, String
|
23
23
|
|
24
24
|
# @!attribute [r] book
|
25
25
|
# @return [String]
|
26
|
-
|
26
|
+
property :book, String
|
27
27
|
|
28
28
|
# @!attribute [r] volume
|
29
29
|
# @return [String]
|
30
|
-
|
30
|
+
property :volume, String
|
31
31
|
|
32
32
|
# @!attribute [r] sheet
|
33
33
|
# @return [String]
|
34
|
-
|
34
|
+
property :sheet, String
|
35
35
|
|
36
36
|
# @!attribute [r] section
|
37
37
|
# @return [String]
|
38
|
-
|
38
|
+
property :section, String
|
39
39
|
|
40
40
|
# @!attribute [r] page
|
41
41
|
# @return [String]
|
42
|
-
|
42
|
+
property :page, String
|
43
43
|
|
44
44
|
# @!attribute [r] entry
|
45
45
|
# @return [String]
|
46
|
-
|
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
|
46
|
+
property :entry, String
|
97
47
|
end
|
98
48
|
end
|
99
49
|
end
|
data/lib/gobl/org/source_key.rb
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
module GOBL
|
10
10
|
module Org
|
11
11
|
# SourceKey identifies the source of a tax identity
|
12
|
-
class SourceKey < GOBL::
|
12
|
+
class SourceKey < GOBL::Enum
|
13
13
|
# The Schema ID of the GOBL SourceKey structure
|
14
14
|
SCHEMA_ID = 'https://gobl.org/draft-0/org/tax-identity#/$defs/SourceKey'
|
15
15
|
|
@@ -22,139 +22,8 @@ module GOBL
|
|
22
22
|
'other' => 'An other type of source not listed'
|
23
23
|
}.freeze
|
24
24
|
|
25
|
-
|
26
|
-
|
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
|
25
|
+
def strict_enum?
|
26
|
+
true
|
158
27
|
end
|
159
28
|
end
|
160
29
|
end
|
@@ -9,85 +9,40 @@
|
|
9
9
|
module GOBL
|
10
10
|
module Org
|
11
11
|
# TaxIdentity stores the details required to identify an entity for tax purposes.
|
12
|
-
class TaxIdentity < GOBL::
|
12
|
+
class TaxIdentity < GOBL::Object
|
13
13
|
# The Schema ID of the GOBL TaxIdentity structure
|
14
14
|
SCHEMA_ID = 'https://gobl.org/draft-0/org/tax-identity'
|
15
15
|
|
16
16
|
# @!attribute [r] uuid
|
17
17
|
# Unique universal identity code.
|
18
18
|
# @return [GOBL::UUID::UUID]
|
19
|
-
|
19
|
+
property :uuid, GOBL::UUID::UUID
|
20
20
|
|
21
21
|
# @!attribute [r] country
|
22
22
|
# ISO country code for Where the tax identity was issued.
|
23
23
|
# @return [GOBL::L10n::CountryCode]
|
24
|
-
|
24
|
+
property :country, GOBL::L10n::CountryCode
|
25
|
+
validates :country, presence: true
|
25
26
|
|
26
27
|
# @!attribute [r] locality
|
27
28
|
# Where inside a country the Tax ID was issued, if required.
|
28
29
|
# @return [GOBL::L10n::Code]
|
29
|
-
|
30
|
+
property :locality, GOBL::L10n::Code
|
30
31
|
|
31
32
|
# @!attribute [r] source
|
32
33
|
# What is the source document of this tax identity.
|
33
34
|
# @return [SourceKey]
|
34
|
-
|
35
|
+
property :source, SourceKey
|
35
36
|
|
36
37
|
# @!attribute [r] code
|
37
38
|
# Tax identity Code
|
38
39
|
# @return [String]
|
39
|
-
|
40
|
+
property :code, String
|
40
41
|
|
41
42
|
# @!attribute [r] meta
|
42
43
|
# Additional details that may be required.
|
43
44
|
# @return [GOBL::Org::Meta]
|
44
|
-
|
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
|
45
|
+
property :meta, GOBL::Org::Meta
|
91
46
|
end
|
92
47
|
end
|
93
48
|
end
|
data/lib/gobl/org/telephone.rb
CHANGED
@@ -9,64 +9,25 @@
|
|
9
9
|
module GOBL
|
10
10
|
module Org
|
11
11
|
# Telephone describes what is expected for a telephone number.
|
12
|
-
class Telephone < GOBL::
|
12
|
+
class Telephone < GOBL::Object
|
13
13
|
# The Schema ID of the GOBL Telephone structure
|
14
14
|
SCHEMA_ID = 'https://gobl.org/draft-0/org/telephone'
|
15
15
|
|
16
16
|
# @!attribute [r] uuid
|
17
17
|
# Unique identity code
|
18
18
|
# @return [GOBL::UUID::UUID]
|
19
|
-
|
19
|
+
property :uuid, GOBL::UUID::UUID
|
20
20
|
|
21
21
|
# @!attribute [r] label
|
22
22
|
# Identifier for this number.
|
23
23
|
# @return [String]
|
24
|
-
|
24
|
+
property :label, String
|
25
25
|
|
26
26
|
# @!attribute [r] num
|
27
27
|
# The number to be dialed in ITU E.164 international format.
|
28
28
|
# @return [String]
|
29
|
-
|
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
|
29
|
+
property :num, String
|
30
|
+
validates :num, presence: true
|
70
31
|
end
|
71
32
|
end
|
72
33
|
end
|