gobl 0.16.0 → 0.17.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/README.md +8 -6
- data/lib/generated/gobl/bill/correction_options.rb +2 -2
- data/lib/generated/gobl/bill/invoice.rb +5 -0
- data/lib/generated/gobl/bill/preceding.rb +2 -2
- data/lib/generated/gobl/cal/date_time.rb +18 -0
- data/lib/generated/gobl/envelope.rb +4 -4
- data/lib/generated/gobl/head/header.rb +54 -0
- data/lib/generated/gobl/{cbc → head}/stamp.rb +2 -2
- data/lib/generated/gobl/schema/object.rb +15 -0
- data/lib/generated/gobl/tax/category.rb +5 -0
- data/lib/generated/gobl/tax/source.rb +28 -0
- data/lib/gobl/extensions/envelope_helper.rb +1 -1
- data/lib/gobl/extensions/schema/object_helper.rb +49 -0
- data/lib/gobl/operations.rb +12 -12
- data/lib/gobl/struct.rb +1 -1
- data/lib/gobl/version.rb +1 -1
- data/lib/gobl.rb +2 -2
- metadata +8 -7
- data/lib/generated/gobl/cbc/code_set.rb +0 -15
- data/lib/generated/gobl/document.rb +0 -16
- data/lib/generated/gobl/header.rb +0 -52
- data/lib/gobl/extensions/document_helper.rb +0 -47
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a6c8e7f19ff84fd4088b793969af198ee03411e09265071ff3f9b7ec75ff78fc
|
4
|
+
data.tar.gz: 8154a6f7ffd4e2c94dfa5a8ff856fe21abb37b20f3ef651830bd53e8455f7b67
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 32c5009e9bc9e6bc6aae5f36e3c5f15147d634fad2b2bcbb8d22a4543b2f3cc9f8ef982ae4a48fb8188aa2cc4e509be5d64a32673cd36a4039605b438f77be9e
|
7
|
+
data.tar.gz: a6c1a18a2d275ee6fdfe0aa5677f0f7691271a03af51bdd63b0b397ae71013a2daad978babd1c1a6137aa6ebb69afbee283bc2e38ec2dc3daa354c452f0081df
|
data/README.md
CHANGED
@@ -81,12 +81,12 @@ GOBL is a JSON format. So, you'll probably need to read or produce valid GOBL JS
|
|
81
81
|
|
82
82
|
```ruby
|
83
83
|
json = '{"$schema":"https://gobl.org/draft-0/note/message", "content":"Hello World!"}'
|
84
|
-
document = GOBL::
|
84
|
+
document = GOBL::Schema::Object.from_json!(json) #=> #<GOBL::Schema::Object _value={"$schema"=>"https://gobl.org/draft-0/note/message", "content"=>"Hello World!"}>
|
85
85
|
message = document.extract #=> #<GOBL::Note::Message title=nil content="Hello World!" meta=nil>
|
86
86
|
message.content #=> "Hello World!"
|
87
87
|
```
|
88
88
|
|
89
|
-
Note that, in the previous example, we parsed the JSON fragment as a document. A [document](https://docs.gobl.org/core/documents) is one of the fundamental entities of GOBL, and it represents a business document in an abstract way. To get the specific document type instantiated –a message, in the example above–, we needed to call the [`#extract`](https://rubydoc.info/github/invopop/gobl.ruby/GOBL%2FExtensions%
|
89
|
+
Note that, in the previous example, we parsed the JSON fragment as a document. A [document](https://docs.gobl.org/core/documents) is one of the fundamental entities of GOBL, and it represents a business document in an abstract way. To get the specific document type instantiated –a message, in the example above–, we needed to call the [`#extract`](https://rubydoc.info/github/invopop/gobl.ruby/GOBL%2FExtensions%2FSchema%2FObjectHelper:extract) method of the document object.
|
90
90
|
|
91
91
|
The previous instantiation method is useful if you don't know the document type in advance. If you do, you could also instantiate the object in this more direct way:
|
92
92
|
|
@@ -103,15 +103,15 @@ message = GOBL::Note::Message.new(content: 'Hello World!')
|
|
103
103
|
message.to_json #=> "{\"content\":\"Hello World!\"}"
|
104
104
|
```
|
105
105
|
|
106
|
-
Note that, in the previous example, the generated JSON doesn't include a `$schema` attribute. This is because the GOBL schema doesn't require that attribute in a standalone message structure. If you want to use that structure as a document, you will need a `$schema` to be present. You can get that from your Ruby code by simply [_embedding_](https://rubydoc.info/github/invopop/gobl.ruby/GOBL%2FExtensions%
|
106
|
+
Note that, in the previous example, the generated JSON doesn't include a `$schema` attribute. This is because the GOBL schema doesn't require that attribute in a standalone message structure. If you want to use that structure as a document, you will need a `$schema` to be present. You can get that from your Ruby code by simply [_embedding_](https://rubydoc.info/github/invopop/gobl.ruby/GOBL%2FExtensions%2FSchema%2FObjectHelper%2FClassMethods:embed) the struct in a document:
|
107
107
|
|
108
108
|
```ruby
|
109
109
|
message = GOBL::Note::Message.new(content: 'Hello World!')
|
110
|
-
document = GOBL::
|
110
|
+
document = GOBL::Schema::Object.embed(message)
|
111
111
|
document.to_json #=> "{\"content\":\"Hello World!\",\"$schema\":\"https://gobl.org/draft-0/note/message\"}"
|
112
112
|
```
|
113
113
|
|
114
|
-
_See also [`GOBL::Struct.from_json!`](https://rubydoc.info/github/invopop/gobl.ruby/GOBL%2FStruct%2Efrom_json!), [`GOBL::Struct#to_json`](https://rubydoc.info/github/invopop/gobl.ruby/GOBL%2FStruct:to_json), [`GOBL::
|
114
|
+
_See also [`GOBL::Struct.from_json!`](https://rubydoc.info/github/invopop/gobl.ruby/GOBL%2FStruct%2Efrom_json!), [`GOBL::Struct#to_json`](https://rubydoc.info/github/invopop/gobl.ruby/GOBL%2FStruct:to_json), [`GOBL::Schema::Object#embed`](https://rubydoc.info/github/invopop/gobl.ruby/GOBL%2FExtensions%2FSchema%2FObjectHelper%2FClassMethods:embed), [`GOBL::Schema::Object.extract`](https://rubydoc.info/github/invopop/gobl.ruby/GOBL%2FExtensions%2FSchema%2FObjectHelper:extract)_
|
115
115
|
|
116
116
|
### Handling value objects and enumerations
|
117
117
|
|
@@ -179,7 +179,7 @@ invoice = GOBL::Bill::Invoice.new(
|
|
179
179
|
taxes: [ { cat: 'VAT', rate: :standard } ]
|
180
180
|
}]
|
181
181
|
)
|
182
|
-
document = GOBL::
|
182
|
+
document = GOBL::Schema::Object.embed(invoice)
|
183
183
|
calculated_document = GOBL.build(document)
|
184
184
|
calculated_invoice = calculated_document.extract
|
185
185
|
calculated_invoice.totals.total_with_tax #=> "2178.00"
|
@@ -213,6 +213,8 @@ You can avoid mage and the docker container if you prefer so. Take a look at the
|
|
213
213
|
|
214
214
|
The command `mage setup` fetches and installs all the required dependencies to use the gem.
|
215
215
|
|
216
|
+
If you run into any problems with dependencies, don't forget this is a library, so the Gemfile.lock is not included. Delete any local versions you may already have and re-run.
|
217
|
+
|
216
218
|
#### Code generation
|
217
219
|
|
218
220
|
Ensure all the GOBL JSON Schema and Regime files are available by manually copying the [base GOBL project](https://github.com/invopop/gobl)'s `build/` path to the `data/` path in this repository. For example, assuming you have GOBL at `../gobl/`, you can run this:
|
@@ -20,8 +20,8 @@ module GOBL
|
|
20
20
|
|
21
21
|
# @!attribute [r] stamps
|
22
22
|
# Stamps of the previous document to include in the preceding data.
|
23
|
-
# @return [Array<GOBL::
|
24
|
-
property :stamps, [GOBL::
|
23
|
+
# @return [Array<GOBL::Head::Stamp>]
|
24
|
+
property :stamps, [GOBL::Head::Stamp]
|
25
25
|
|
26
26
|
# @!attribute [r] credit
|
27
27
|
# Credit when true indicates that the corrective document should cancel the previous document.
|
@@ -135,6 +135,11 @@ module GOBL
|
|
135
135
|
# @return [Array<GOBL::CBC::Note>]
|
136
136
|
property :notes, [GOBL::CBC::Note]
|
137
137
|
|
138
|
+
# @!attribute [r] complements
|
139
|
+
# Additional complementary objects that add relevant information to the invoice.
|
140
|
+
# @return [Array<GOBL::Schema::Object>]
|
141
|
+
property :complements, [GOBL::Schema::Object]
|
142
|
+
|
138
143
|
# @!attribute [r] meta
|
139
144
|
# Additional semi-structured data that doesn't fit into the body of the invoice.
|
140
145
|
# @return [GOBL::CBC::Meta]
|
@@ -41,8 +41,8 @@ module GOBL
|
|
41
41
|
|
42
42
|
# @!attribute [r] stamps
|
43
43
|
# Seals of approval from other organisations that may need to be listed.
|
44
|
-
# @return [Array<GOBL::
|
45
|
-
property :stamps, [GOBL::
|
44
|
+
# @return [Array<GOBL::Head::Stamp>]
|
45
|
+
property :stamps, [GOBL::Head::Stamp]
|
46
46
|
|
47
47
|
# @!attribute [r] corrections
|
48
48
|
# Tax regime specific keys reflecting why the preceding invoice is being replaced.
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
##
|
4
|
+
## DO NOT EDIT - This file was generated automatically.
|
5
|
+
##
|
6
|
+
## Generated with GOBL v0.55.0
|
7
|
+
##
|
8
|
+
|
9
|
+
module GOBL
|
10
|
+
module Cal
|
11
|
+
# Civil date time in simplified ISO format with no time zone
|
12
|
+
# information, for example: 2021-05-26T13:45:00
|
13
|
+
class DateTime < String
|
14
|
+
# The Schema ID of the GOBL DateTime structure
|
15
|
+
SCHEMA_ID = 'https://gobl.org/draft-0/cal/date-time'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -20,14 +20,14 @@ module GOBL
|
|
20
20
|
|
21
21
|
# @!attribute [r] head
|
22
22
|
# Details on what the contents are
|
23
|
-
# @return [Header]
|
24
|
-
property :head, Header
|
23
|
+
# @return [GOBL::Head::Header]
|
24
|
+
property :head, GOBL::Head::Header
|
25
25
|
validates_presence_of :head
|
26
26
|
|
27
27
|
# @!attribute [r] doc
|
28
28
|
# The data inside the envelope
|
29
|
-
# @return [
|
30
|
-
property :doc,
|
29
|
+
# @return [GOBL::Schema::Object]
|
30
|
+
property :doc, GOBL::Schema::Object
|
31
31
|
validates_presence_of :doc
|
32
32
|
|
33
33
|
# @!attribute [r] sigs
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
##
|
4
|
+
## DO NOT EDIT - This file was generated automatically.
|
5
|
+
##
|
6
|
+
## Generated with GOBL v0.55.0
|
7
|
+
##
|
8
|
+
|
9
|
+
module GOBL
|
10
|
+
module Head
|
11
|
+
# Header defines the metadata of the body.
|
12
|
+
class Header < GOBL::Object
|
13
|
+
# The Schema ID of the GOBL Header structure
|
14
|
+
SCHEMA_ID = 'https://gobl.org/draft-0/head/header'
|
15
|
+
|
16
|
+
# @!attribute [r] uuid
|
17
|
+
# Unique UUIDv1 identifier for the envelope.
|
18
|
+
# @return [GOBL::UUID::UUID]
|
19
|
+
property :uuid, GOBL::UUID::UUID
|
20
|
+
validates_presence_of :uuid
|
21
|
+
|
22
|
+
# @!attribute [r] dig
|
23
|
+
# Digest of the canonical JSON body.
|
24
|
+
# @return [GOBL::DSig::Digest]
|
25
|
+
property :dig, GOBL::DSig::Digest
|
26
|
+
validates_presence_of :dig
|
27
|
+
|
28
|
+
# @!attribute [r] stamps
|
29
|
+
# Seals of approval from other organisations that can only be added to non-draft envelopes.
|
30
|
+
# @return [Array<GOBL::Head::Stamp>]
|
31
|
+
property :stamps, [GOBL::Head::Stamp]
|
32
|
+
|
33
|
+
# @!attribute [r] tags
|
34
|
+
# Set of labels that describe but have no influence on the data.
|
35
|
+
# @return [Array<String>]
|
36
|
+
property :tags, [String]
|
37
|
+
|
38
|
+
# @!attribute [r] meta
|
39
|
+
# Additional semi-structured information about this envelope.
|
40
|
+
# @return [GOBL::CBC::Meta]
|
41
|
+
property :meta, GOBL::CBC::Meta
|
42
|
+
|
43
|
+
# @!attribute [r] notes
|
44
|
+
# Any information that may be relevant to other humans about this envelope
|
45
|
+
# @return [String]
|
46
|
+
property :notes, String
|
47
|
+
|
48
|
+
# @!attribute [r] draft
|
49
|
+
# When true, implies that this document should not be considered final. Digital signatures are optional.
|
50
|
+
# @return [Boolean]
|
51
|
+
property :draft, Boolean
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -7,11 +7,11 @@
|
|
7
7
|
##
|
8
8
|
|
9
9
|
module GOBL
|
10
|
-
module
|
10
|
+
module Head
|
11
11
|
# Stamp defines an official seal of approval from a third party like a governmental agency or intermediary and should thus be included in any official envelopes.
|
12
12
|
class Stamp < GOBL::Object
|
13
13
|
# The Schema ID of the GOBL Stamp structure
|
14
|
-
SCHEMA_ID = 'https://gobl.org/draft-0/
|
14
|
+
SCHEMA_ID = 'https://gobl.org/draft-0/head/stamp'
|
15
15
|
|
16
16
|
# @!attribute [r] prv
|
17
17
|
# Identity of the agency used to create the stamp usually defined by each region.
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
##
|
4
|
+
## DO NOT EDIT - This file was generated automatically.
|
5
|
+
##
|
6
|
+
## Generated with GOBL v0.55.0
|
7
|
+
##
|
8
|
+
|
9
|
+
module GOBL
|
10
|
+
module Schema
|
11
|
+
# Data object whose type is determined from the <code>$schema</code> property.
|
12
|
+
class Object < GOBL::Map
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -52,6 +52,11 @@ module GOBL
|
|
52
52
|
# @return [GOBL::CBC::CodeMap]
|
53
53
|
property :map, GOBL::CBC::CodeMap
|
54
54
|
|
55
|
+
# @!attribute [r] sources
|
56
|
+
# List of sources for the information contained in this category.
|
57
|
+
# @return [Array<Source>]
|
58
|
+
property :sources, [Source]
|
59
|
+
|
55
60
|
# @!attribute [r] meta
|
56
61
|
# Meta contains additional information about the category that is relevant for local frequently used formats.
|
57
62
|
# @return [GOBL::CBC::Meta]
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
##
|
4
|
+
## DO NOT EDIT - This file was generated automatically.
|
5
|
+
##
|
6
|
+
## Generated with GOBL v0.55.0
|
7
|
+
##
|
8
|
+
|
9
|
+
module GOBL
|
10
|
+
module Tax
|
11
|
+
# Source describes where the information for the taxes comes from.
|
12
|
+
class Source < GOBL::Object
|
13
|
+
# The Schema ID of the GOBL Source structure
|
14
|
+
SCHEMA_ID = 'https://gobl.org/draft-0/tax/regime#/$defs/Source'
|
15
|
+
|
16
|
+
# @!attribute [r] title
|
17
|
+
# Title of the linked source to help distinguish between this and other links.
|
18
|
+
# @return [GOBL::I18n::String]
|
19
|
+
property :title, GOBL::I18n::String
|
20
|
+
|
21
|
+
# @!attribute [r] url
|
22
|
+
# URL for the website.
|
23
|
+
# @return [String]
|
24
|
+
property :url, String
|
25
|
+
validates_presence_of :url
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -11,7 +11,7 @@ module GOBL
|
|
11
11
|
|
12
12
|
# Extracts the GOBL struct embedded in the envelope's document
|
13
13
|
#
|
14
|
-
# @see GOBL::Extensions::
|
14
|
+
# @see GOBL::Extensions::Schema::ObjectHelper#extract
|
15
15
|
#
|
16
16
|
# @return [GOBL::Struct] the GOBL struct embedded in the envelope's document
|
17
17
|
def extract
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module GOBL
|
4
|
+
module Extensions
|
5
|
+
module Schema
|
6
|
+
# Additional methods for the generated {GOBL::Schema::Object} class
|
7
|
+
module ObjectHelper
|
8
|
+
# Returns the Schema ID of the current document
|
9
|
+
#
|
10
|
+
# @return [GOBL::ID] the Schema ID
|
11
|
+
def schema
|
12
|
+
@schema ||= GOBL::ID.new(_map['$schema'])
|
13
|
+
end
|
14
|
+
|
15
|
+
# Extracts the GOBL struct embedded in the document. It determines the type of document
|
16
|
+
# currently embedded by reading the schema and attemps to instantiate the detected
|
17
|
+
# class.
|
18
|
+
#
|
19
|
+
# @return [GOBL::Struct] the GOBL struct embedded in the document
|
20
|
+
def extract
|
21
|
+
raise 'unknown schema' unless schema.gobl?
|
22
|
+
|
23
|
+
typs = ['GOBL']
|
24
|
+
schema.modules.each do |mod|
|
25
|
+
typs << mod.underscore.camelize
|
26
|
+
end
|
27
|
+
typs << schema.name.underscore.camelize
|
28
|
+
klass = typs.join('::').constantize
|
29
|
+
|
30
|
+
# Sanity check
|
31
|
+
raise "#{klass.name}::SCHEMA_ID expected to be '#{schema}'" unless schema == klass::SCHEMA_ID
|
32
|
+
|
33
|
+
klass.new _map.except('$schema')
|
34
|
+
end
|
35
|
+
|
36
|
+
module ClassMethods
|
37
|
+
# Embeds the given GOBL struct in a new object injecting the proper Schema ID.
|
38
|
+
#
|
39
|
+
# @return [Object] the object embedding the given struct
|
40
|
+
def embed(struct)
|
41
|
+
new struct.as_json.merge(
|
42
|
+
'$schema' => struct.class::SCHEMA_ID
|
43
|
+
)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/gobl/operations.rb
CHANGED
@@ -10,7 +10,7 @@ module GOBL
|
|
10
10
|
# GOBL.config.service_host = 'localhost'
|
11
11
|
# GOBL.config.service_port = 8080
|
12
12
|
#
|
13
|
-
# doc = GOBL::
|
13
|
+
# doc = GOBL::Schema::Object.new(
|
14
14
|
# '$schema' => 'https://gobl.org/draft-0/bill/invoice',
|
15
15
|
# 'code' => 'SAMPLE-001',
|
16
16
|
# 'currency' => 'EUR',
|
@@ -27,31 +27,31 @@ module GOBL
|
|
27
27
|
module Operations
|
28
28
|
# @api private
|
29
29
|
VALIDATABLE_TYPES = SIGNABLE_TYPES = BUILDABLE_TYPES = [
|
30
|
-
GOBL::
|
31
|
-
GOBL::
|
30
|
+
GOBL::Envelope,
|
31
|
+
GOBL::Schema::Object
|
32
32
|
].freeze
|
33
33
|
|
34
34
|
# Calculates and validates an envelope or document, wrapping it in an envelope if
|
35
35
|
# requested.
|
36
36
|
#
|
37
|
-
# @param struct [GOBL::
|
37
|
+
# @param struct [GOBL::Schema::Object, GOBL::Envelope] the document or envelope to build.
|
38
38
|
# @param envelop [Boolean] whether the operation should envelop the document.
|
39
39
|
# @param draft [Boolean] whether the envelope should be flagged as a draft.
|
40
40
|
#
|
41
|
-
# @return [GOBL::Envelope, GOBL::
|
41
|
+
# @return [GOBL::Envelope, GOBL::Schema::Object] a built envelope or document.
|
42
42
|
#
|
43
43
|
# @raise [GOBL::Operations::ServiceError] if the service returns any errors.
|
44
44
|
#
|
45
45
|
# @example Build a document without enveloping it.
|
46
|
-
# invoice = GOBL::
|
47
|
-
# GOBL.build(invoice) #=> A new, calculated `GOBL::
|
46
|
+
# invoice = GOBL::Schema::Object.from_json!(File.read('invoice.json'))
|
47
|
+
# GOBL.build(invoice) #=> A new, calculated `GOBL::Schema::Object`
|
48
48
|
#
|
49
49
|
# @example Build a document and wrap in a draft envelope.
|
50
|
-
# invoice = GOBL::
|
50
|
+
# invoice = GOBL::Schema::Object.from_json!(File.read('invoice.json'))
|
51
51
|
# GOBL.build(invoice, envelop: true) #=> A calculated, draft `GOBL::Envelope`
|
52
52
|
#
|
53
53
|
# @example Build a document and wrap in a non-draft envelope.
|
54
|
-
# invoice = GOBL::
|
54
|
+
# invoice = GOBL::Schema::Object.from_json!(File.read('invoice.json'))
|
55
55
|
# GOBL.build(invoice, envelop: true, draft: false) #=> A calculated, non-draft `GOBL::Envelope`
|
56
56
|
#
|
57
57
|
# @example Build an envelope.
|
@@ -75,13 +75,13 @@ module GOBL
|
|
75
75
|
# Checks whether or not a document or envelope is valid according to the GOBL schema
|
76
76
|
# and rules.
|
77
77
|
#
|
78
|
-
# @param struct [GOBL::
|
78
|
+
# @param struct [GOBL::Schema::Object, GOBL::Envelope] the document or the envelope to
|
79
79
|
# validate.
|
80
80
|
#
|
81
81
|
# @return [GOBL::ValidationResult] the result of the validations.
|
82
82
|
#
|
83
83
|
# @example Validate an invalid document.
|
84
|
-
# document = GOBL::
|
84
|
+
# document = GOBL::Schema::Object.from_json!(File.read('invalid_invoice.json'))
|
85
85
|
# result = GOBL.validate(document)
|
86
86
|
# result.valid? #=> false
|
87
87
|
# result.errors #=> ['code: cannot be blank', 'totals: cannot be blank']
|
@@ -108,7 +108,7 @@ module GOBL
|
|
108
108
|
# Signs a document or envelope, calculating, enveloping and validating it first if
|
109
109
|
# needed. The signing key will be the one configured in the server.
|
110
110
|
#
|
111
|
-
# @param struct [GOBL::
|
111
|
+
# @param struct [GOBL::Schema::Object, GOBL::Envelope] the envelop or document to sign.
|
112
112
|
#
|
113
113
|
# @return [GOBL::Envelope] a signed envelope.
|
114
114
|
#
|
data/lib/gobl/struct.rb
CHANGED
data/lib/gobl/version.rb
CHANGED
data/lib/gobl.rb
CHANGED
@@ -46,8 +46,8 @@ end
|
|
46
46
|
# to get YARD parsing them properly.
|
47
47
|
|
48
48
|
GOBL::I18n::String.include GOBL::Extensions::I18n::ValueKeysHelper
|
49
|
-
GOBL::
|
50
|
-
GOBL::
|
49
|
+
GOBL::Schema::Object.include GOBL::Extensions::Schema::ObjectHelper
|
50
|
+
GOBL::Schema::Object.extend GOBL::Extensions::Schema::ObjectHelper::ClassMethods
|
51
51
|
GOBL::Envelope.include GOBL::Extensions::EnvelopeHelper
|
52
52
|
GOBL::Tax::Regime.extend GOBL::Extensions::Tax::RegimeHelper::ClassMethods
|
53
53
|
GOBL::Bill::Invoice.include GOBL::Extensions::Bill::InvoiceHelper
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gobl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luismi Cavalle
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2023-
|
14
|
+
date: 2023-10-10 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: activesupport
|
@@ -87,21 +87,20 @@ files:
|
|
87
87
|
- lib/generated/gobl/bill/tax.rb
|
88
88
|
- lib/generated/gobl/bill/totals.rb
|
89
89
|
- lib/generated/gobl/cal/date.rb
|
90
|
+
- lib/generated/gobl/cal/date_time.rb
|
90
91
|
- lib/generated/gobl/cal/period.rb
|
91
92
|
- lib/generated/gobl/cbc/code.rb
|
92
93
|
- lib/generated/gobl/cbc/code_map.rb
|
93
|
-
- lib/generated/gobl/cbc/code_set.rb
|
94
94
|
- lib/generated/gobl/cbc/key.rb
|
95
95
|
- lib/generated/gobl/cbc/meta.rb
|
96
96
|
- lib/generated/gobl/cbc/note.rb
|
97
|
-
- lib/generated/gobl/cbc/stamp.rb
|
98
97
|
- lib/generated/gobl/currency/code.rb
|
99
98
|
- lib/generated/gobl/currency/exchange_rate.rb
|
100
|
-
- lib/generated/gobl/document.rb
|
101
99
|
- lib/generated/gobl/dsig/digest.rb
|
102
100
|
- lib/generated/gobl/dsig/signature.rb
|
103
101
|
- lib/generated/gobl/envelope.rb
|
104
|
-
- lib/generated/gobl/header.rb
|
102
|
+
- lib/generated/gobl/head/header.rb
|
103
|
+
- lib/generated/gobl/head/stamp.rb
|
105
104
|
- lib/generated/gobl/i18n/string.rb
|
106
105
|
- lib/generated/gobl/l10n/code.rb
|
107
106
|
- lib/generated/gobl/l10n/country_code.rb
|
@@ -128,6 +127,7 @@ files:
|
|
128
127
|
- lib/generated/gobl/pay/instructions.rb
|
129
128
|
- lib/generated/gobl/pay/online.rb
|
130
129
|
- lib/generated/gobl/pay/terms.rb
|
130
|
+
- lib/generated/gobl/schema/object.rb
|
131
131
|
- lib/generated/gobl/tax/category.rb
|
132
132
|
- lib/generated/gobl/tax/category_total.rb
|
133
133
|
- lib/generated/gobl/tax/code_definition.rb
|
@@ -143,6 +143,7 @@ files:
|
|
143
143
|
- lib/generated/gobl/tax/scenario.rb
|
144
144
|
- lib/generated/gobl/tax/scenario_set.rb
|
145
145
|
- lib/generated/gobl/tax/set.rb
|
146
|
+
- lib/generated/gobl/tax/source.rb
|
146
147
|
- lib/generated/gobl/tax/total.rb
|
147
148
|
- lib/generated/gobl/tax/zone.rb
|
148
149
|
- lib/generated/gobl/uuid/uuid.rb
|
@@ -151,9 +152,9 @@ files:
|
|
151
152
|
- lib/gobl/enum.rb
|
152
153
|
- lib/gobl/extensions/bill/invoice_helper.rb
|
153
154
|
- lib/gobl/extensions/bill/scenario_summary.rb
|
154
|
-
- lib/gobl/extensions/document_helper.rb
|
155
155
|
- lib/gobl/extensions/envelope_helper.rb
|
156
156
|
- lib/gobl/extensions/i18n/value_keys_helper.rb
|
157
|
+
- lib/gobl/extensions/schema/object_helper.rb
|
157
158
|
- lib/gobl/extensions/tax/regime_helper.rb
|
158
159
|
- lib/gobl/id.rb
|
159
160
|
- lib/gobl/map.rb
|
@@ -1,15 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
##
|
4
|
-
## DO NOT EDIT - This file was generated automatically.
|
5
|
-
##
|
6
|
-
## Generated with GOBL v0.50.5
|
7
|
-
##
|
8
|
-
|
9
|
-
module GOBL
|
10
|
-
module CBC
|
11
|
-
# CodeSet is a map of keys to specific codes, useful to determine regime specific codes from their key counterparts.
|
12
|
-
class CodeSet < GOBL::Map
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
##
|
4
|
-
## DO NOT EDIT - This file was generated automatically.
|
5
|
-
##
|
6
|
-
## Generated with GOBL v0.55.0
|
7
|
-
##
|
8
|
-
|
9
|
-
module GOBL
|
10
|
-
# Contains the document payload to be included inside an Envelope.
|
11
|
-
#
|
12
|
-
# The document must contain a `$schema` property that identifies
|
13
|
-
# the data's structure otherwise it will be rejected.
|
14
|
-
class Document < GOBL::Map
|
15
|
-
end
|
16
|
-
end
|
@@ -1,52 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
##
|
4
|
-
## DO NOT EDIT - This file was generated automatically.
|
5
|
-
##
|
6
|
-
## Generated with GOBL v0.55.0
|
7
|
-
##
|
8
|
-
|
9
|
-
module GOBL
|
10
|
-
# Header defines the metadata of the body.
|
11
|
-
class Header < GOBL::Object
|
12
|
-
# The Schema ID of the GOBL Header structure
|
13
|
-
SCHEMA_ID = 'https://gobl.org/draft-0/envelope#/$defs/Header'
|
14
|
-
|
15
|
-
# @!attribute [r] uuid
|
16
|
-
# Unique UUIDv1 identifier for the envelope.
|
17
|
-
# @return [GOBL::UUID::UUID]
|
18
|
-
property :uuid, GOBL::UUID::UUID
|
19
|
-
validates_presence_of :uuid
|
20
|
-
|
21
|
-
# @!attribute [r] dig
|
22
|
-
# Digest of the canonical JSON body.
|
23
|
-
# @return [GOBL::DSig::Digest]
|
24
|
-
property :dig, GOBL::DSig::Digest
|
25
|
-
validates_presence_of :dig
|
26
|
-
|
27
|
-
# @!attribute [r] stamps
|
28
|
-
# Seals of approval from other organisations that can only be added to non-draft envelopes.
|
29
|
-
# @return [Array<GOBL::CBC::Stamp>]
|
30
|
-
property :stamps, [GOBL::CBC::Stamp]
|
31
|
-
|
32
|
-
# @!attribute [r] tags
|
33
|
-
# Set of labels that describe but have no influence on the data.
|
34
|
-
# @return [Array<String>]
|
35
|
-
property :tags, [String]
|
36
|
-
|
37
|
-
# @!attribute [r] meta
|
38
|
-
# Additional semi-structured information about this envelope.
|
39
|
-
# @return [GOBL::CBC::Meta]
|
40
|
-
property :meta, GOBL::CBC::Meta
|
41
|
-
|
42
|
-
# @!attribute [r] notes
|
43
|
-
# Any information that may be relevant to other humans about this envelope
|
44
|
-
# @return [String]
|
45
|
-
property :notes, String
|
46
|
-
|
47
|
-
# @!attribute [r] draft
|
48
|
-
# When true, implies that this document should not be considered final. Digital signatures are optional.
|
49
|
-
# @return [Boolean]
|
50
|
-
property :draft, Boolean
|
51
|
-
end
|
52
|
-
end
|
@@ -1,47 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module GOBL
|
4
|
-
module Extensions
|
5
|
-
# Additional methods for the generated {GOBL::Document} class
|
6
|
-
module DocumentHelper
|
7
|
-
# Returns the Schema ID of the current document
|
8
|
-
#
|
9
|
-
# @return [GOBL::ID] the Schema ID
|
10
|
-
def schema
|
11
|
-
@schema ||= GOBL::ID.new(_map['$schema'])
|
12
|
-
end
|
13
|
-
|
14
|
-
# Extracts the GOBL struct embedded in the document. It determines the type of document
|
15
|
-
# currently embedded by reading the schema and attemps to instantiate the detected
|
16
|
-
# class.
|
17
|
-
#
|
18
|
-
# @return [GOBL::Struct] the GOBL struct embedded in the document
|
19
|
-
def extract
|
20
|
-
raise 'unknown schema' unless schema.gobl?
|
21
|
-
|
22
|
-
typs = ['GOBL']
|
23
|
-
schema.modules.each do |mod|
|
24
|
-
typs << mod.underscore.camelize
|
25
|
-
end
|
26
|
-
typs << schema.name.underscore.camelize
|
27
|
-
klass = typs.join('::').constantize
|
28
|
-
|
29
|
-
# Sanity check
|
30
|
-
raise "#{klass.name}::SCHEMA_ID expected to be '#{schema}'" unless schema == klass::SCHEMA_ID
|
31
|
-
|
32
|
-
klass.new _map.except('$schema')
|
33
|
-
end
|
34
|
-
|
35
|
-
module ClassMethods
|
36
|
-
# Embeds the given GOBL struct in a new document injecting the proper Schema ID.
|
37
|
-
#
|
38
|
-
# @return [Document] the document embedding the given struct
|
39
|
-
def embed(struct)
|
40
|
-
new struct.as_json.merge(
|
41
|
-
'$schema' => struct.class::SCHEMA_ID
|
42
|
-
)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|