appwrite 11.0.2 → 13.0.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.
Potentially problematic release.
This version of appwrite might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/lib/appwrite/client.rb +54 -76
- data/lib/appwrite/enums/image_format.rb +1 -0
- data/lib/appwrite/enums/name.rb +1 -2
- data/lib/appwrite/enums/runtime.rb +4 -0
- data/lib/appwrite/models/attribute_boolean.rb +10 -0
- data/lib/appwrite/models/attribute_datetime.rb +10 -0
- data/lib/appwrite/models/attribute_email.rb +10 -0
- data/lib/appwrite/models/attribute_enum.rb +10 -0
- data/lib/appwrite/models/attribute_float.rb +10 -0
- data/lib/appwrite/models/attribute_integer.rb +10 -0
- data/lib/appwrite/models/attribute_ip.rb +10 -0
- data/lib/appwrite/models/attribute_relationship.rb +10 -0
- data/lib/appwrite/models/attribute_string.rb +10 -0
- data/lib/appwrite/models/attribute_url.rb +10 -0
- data/lib/appwrite/models/build.rb +67 -0
- data/lib/appwrite/models/deployment.rb +5 -0
- data/lib/appwrite/models/document.rb +4 -9
- data/lib/appwrite/models/document_list.rb +1 -2
- data/lib/appwrite/models/execution.rb +8 -3
- data/lib/appwrite/models/function.rb +13 -3
- data/lib/appwrite/models/index.rb +13 -3
- data/lib/appwrite/models/preferences.rb +4 -9
- data/lib/appwrite/models/runtime.rb +5 -0
- data/lib/appwrite/models/specification.rb +42 -0
- data/lib/appwrite/models/specification_list.rb +32 -0
- data/lib/appwrite/multipart.rb +127 -0
- data/lib/appwrite/payload.rb +94 -0
- data/lib/appwrite/services/account.rb +52 -58
- data/lib/appwrite/services/avatars.rb +23 -21
- data/lib/appwrite/services/databases.rb +136 -114
- data/lib/appwrite/services/functions.rb +174 -72
- data/lib/appwrite/services/graphql.rb +2 -2
- data/lib/appwrite/services/health.rb +15 -15
- data/lib/appwrite/services/messaging.rb +225 -225
- data/lib/appwrite/services/storage.rb +40 -40
- data/lib/appwrite/services/teams.rb +19 -19
- data/lib/appwrite/services/users.rb +104 -68
- data/lib/appwrite.rb +5 -1
- metadata +7 -3
- data/lib/appwrite/input_file.rb +0 -33
@@ -9,6 +9,8 @@ module Appwrite
|
|
9
9
|
attr_reader :error
|
10
10
|
attr_reader :required
|
11
11
|
attr_reader :array
|
12
|
+
attr_reader :created_at
|
13
|
+
attr_reader :updated_at
|
12
14
|
attr_reader :size
|
13
15
|
attr_reader :default
|
14
16
|
|
@@ -19,6 +21,8 @@ module Appwrite
|
|
19
21
|
error:,
|
20
22
|
required:,
|
21
23
|
array: ,
|
24
|
+
created_at:,
|
25
|
+
updated_at:,
|
22
26
|
size:,
|
23
27
|
default:
|
24
28
|
)
|
@@ -28,6 +32,8 @@ module Appwrite
|
|
28
32
|
@error = error
|
29
33
|
@required = required
|
30
34
|
@array = array
|
35
|
+
@created_at = created_at
|
36
|
+
@updated_at = updated_at
|
31
37
|
@size = size
|
32
38
|
@default = default
|
33
39
|
end
|
@@ -40,6 +46,8 @@ module Appwrite
|
|
40
46
|
error: map["error"],
|
41
47
|
required: map["required"],
|
42
48
|
array: map["array"],
|
49
|
+
created_at: map["$createdAt"],
|
50
|
+
updated_at: map["$updatedAt"],
|
43
51
|
size: map["size"],
|
44
52
|
default: map["default"]
|
45
53
|
)
|
@@ -53,6 +61,8 @@ module Appwrite
|
|
53
61
|
"error": @error,
|
54
62
|
"required": @required,
|
55
63
|
"array": @array,
|
64
|
+
"$createdAt": @created_at,
|
65
|
+
"$updatedAt": @updated_at,
|
56
66
|
"size": @size,
|
57
67
|
"default": @default
|
58
68
|
}
|
@@ -9,6 +9,8 @@ module Appwrite
|
|
9
9
|
attr_reader :error
|
10
10
|
attr_reader :required
|
11
11
|
attr_reader :array
|
12
|
+
attr_reader :created_at
|
13
|
+
attr_reader :updated_at
|
12
14
|
attr_reader :format
|
13
15
|
attr_reader :default
|
14
16
|
|
@@ -19,6 +21,8 @@ module Appwrite
|
|
19
21
|
error:,
|
20
22
|
required:,
|
21
23
|
array: ,
|
24
|
+
created_at:,
|
25
|
+
updated_at:,
|
22
26
|
format:,
|
23
27
|
default:
|
24
28
|
)
|
@@ -28,6 +32,8 @@ module Appwrite
|
|
28
32
|
@error = error
|
29
33
|
@required = required
|
30
34
|
@array = array
|
35
|
+
@created_at = created_at
|
36
|
+
@updated_at = updated_at
|
31
37
|
@format = format
|
32
38
|
@default = default
|
33
39
|
end
|
@@ -40,6 +46,8 @@ module Appwrite
|
|
40
46
|
error: map["error"],
|
41
47
|
required: map["required"],
|
42
48
|
array: map["array"],
|
49
|
+
created_at: map["$createdAt"],
|
50
|
+
updated_at: map["$updatedAt"],
|
43
51
|
format: map["format"],
|
44
52
|
default: map["default"]
|
45
53
|
)
|
@@ -53,6 +61,8 @@ module Appwrite
|
|
53
61
|
"error": @error,
|
54
62
|
"required": @required,
|
55
63
|
"array": @array,
|
64
|
+
"$createdAt": @created_at,
|
65
|
+
"$updatedAt": @updated_at,
|
56
66
|
"format": @format,
|
57
67
|
"default": @default
|
58
68
|
}
|
@@ -0,0 +1,67 @@
|
|
1
|
+
#frozen_string_literal: true
|
2
|
+
|
3
|
+
module Appwrite
|
4
|
+
module Models
|
5
|
+
class Build
|
6
|
+
attr_reader :id
|
7
|
+
attr_reader :deployment_id
|
8
|
+
attr_reader :status
|
9
|
+
attr_reader :stdout
|
10
|
+
attr_reader :stderr
|
11
|
+
attr_reader :start_time
|
12
|
+
attr_reader :end_time
|
13
|
+
attr_reader :duration
|
14
|
+
attr_reader :size
|
15
|
+
|
16
|
+
def initialize(
|
17
|
+
id:,
|
18
|
+
deployment_id:,
|
19
|
+
status:,
|
20
|
+
stdout:,
|
21
|
+
stderr:,
|
22
|
+
start_time:,
|
23
|
+
end_time:,
|
24
|
+
duration:,
|
25
|
+
size:
|
26
|
+
)
|
27
|
+
@id = id
|
28
|
+
@deployment_id = deployment_id
|
29
|
+
@status = status
|
30
|
+
@stdout = stdout
|
31
|
+
@stderr = stderr
|
32
|
+
@start_time = start_time
|
33
|
+
@end_time = end_time
|
34
|
+
@duration = duration
|
35
|
+
@size = size
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.from(map:)
|
39
|
+
Build.new(
|
40
|
+
id: map["$id"],
|
41
|
+
deployment_id: map["deploymentId"],
|
42
|
+
status: map["status"],
|
43
|
+
stdout: map["stdout"],
|
44
|
+
stderr: map["stderr"],
|
45
|
+
start_time: map["startTime"],
|
46
|
+
end_time: map["endTime"],
|
47
|
+
duration: map["duration"],
|
48
|
+
size: map["size"]
|
49
|
+
)
|
50
|
+
end
|
51
|
+
|
52
|
+
def to_map
|
53
|
+
{
|
54
|
+
"$id": @id,
|
55
|
+
"deploymentId": @deployment_id,
|
56
|
+
"status": @status,
|
57
|
+
"stdout": @stdout,
|
58
|
+
"stderr": @stderr,
|
59
|
+
"startTime": @start_time,
|
60
|
+
"endTime": @end_time,
|
61
|
+
"duration": @duration,
|
62
|
+
"size": @size
|
63
|
+
}
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -11,6 +11,7 @@ module Appwrite
|
|
11
11
|
attr_reader :resource_type
|
12
12
|
attr_reader :entrypoint
|
13
13
|
attr_reader :size
|
14
|
+
attr_reader :build_size
|
14
15
|
attr_reader :build_id
|
15
16
|
attr_reader :activate
|
16
17
|
attr_reader :status
|
@@ -36,6 +37,7 @@ module Appwrite
|
|
36
37
|
resource_type:,
|
37
38
|
entrypoint:,
|
38
39
|
size:,
|
40
|
+
build_size:,
|
39
41
|
build_id:,
|
40
42
|
activate:,
|
41
43
|
status:,
|
@@ -60,6 +62,7 @@ module Appwrite
|
|
60
62
|
@resource_type = resource_type
|
61
63
|
@entrypoint = entrypoint
|
62
64
|
@size = size
|
65
|
+
@build_size = build_size
|
63
66
|
@build_id = build_id
|
64
67
|
@activate = activate
|
65
68
|
@status = status
|
@@ -87,6 +90,7 @@ module Appwrite
|
|
87
90
|
resource_type: map["resourceType"],
|
88
91
|
entrypoint: map["entrypoint"],
|
89
92
|
size: map["size"],
|
93
|
+
build_size: map["buildSize"],
|
90
94
|
build_id: map["buildId"],
|
91
95
|
activate: map["activate"],
|
92
96
|
status: map["status"],
|
@@ -115,6 +119,7 @@ module Appwrite
|
|
115
119
|
"resourceType": @resource_type,
|
116
120
|
"entrypoint": @entrypoint,
|
117
121
|
"size": @size,
|
122
|
+
"buildSize": @build_size,
|
118
123
|
"buildId": @build_id,
|
119
124
|
"activate": @activate,
|
120
125
|
"status": @status,
|
@@ -10,7 +10,6 @@ module Appwrite
|
|
10
10
|
attr_reader :updated_at
|
11
11
|
attr_reader :permissions
|
12
12
|
attr_reader :data
|
13
|
-
|
14
13
|
def initialize(
|
15
14
|
id:,
|
16
15
|
collection_id:,
|
@@ -18,16 +17,14 @@ module Appwrite
|
|
18
17
|
created_at:,
|
19
18
|
updated_at:,
|
20
19
|
permissions:,
|
21
|
-
data:
|
22
|
-
)
|
20
|
+
data: )
|
23
21
|
@id = id
|
24
22
|
@collection_id = collection_id
|
25
23
|
@database_id = database_id
|
26
24
|
@created_at = created_at
|
27
25
|
@updated_at = updated_at
|
28
26
|
@permissions = permissions
|
29
|
-
@data = data
|
30
|
-
end
|
27
|
+
@data = data end
|
31
28
|
|
32
29
|
def self.from(map:)
|
33
30
|
Document.new(
|
@@ -37,8 +34,7 @@ module Appwrite
|
|
37
34
|
created_at: map["$createdAt"],
|
38
35
|
updated_at: map["$updatedAt"],
|
39
36
|
permissions: map["$permissions"],
|
40
|
-
data: map
|
41
|
-
)
|
37
|
+
data: map )
|
42
38
|
end
|
43
39
|
|
44
40
|
def to_map
|
@@ -49,8 +45,7 @@ module Appwrite
|
|
49
45
|
"$createdAt": @created_at,
|
50
46
|
"$updatedAt": @updated_at,
|
51
47
|
"$permissions": @permissions,
|
52
|
-
"data": @data
|
53
|
-
}
|
48
|
+
"data": @data }
|
54
49
|
end
|
55
50
|
|
56
51
|
def convert_to(from_json)
|
@@ -19,6 +19,7 @@ module Appwrite
|
|
19
19
|
attr_reader :logs
|
20
20
|
attr_reader :errors
|
21
21
|
attr_reader :duration
|
22
|
+
attr_reader :scheduled_at
|
22
23
|
|
23
24
|
def initialize(
|
24
25
|
id:,
|
@@ -36,7 +37,8 @@ module Appwrite
|
|
36
37
|
response_headers:,
|
37
38
|
logs:,
|
38
39
|
errors:,
|
39
|
-
duration
|
40
|
+
duration:,
|
41
|
+
scheduled_at:
|
40
42
|
)
|
41
43
|
@id = id
|
42
44
|
@created_at = created_at
|
@@ -54,6 +56,7 @@ module Appwrite
|
|
54
56
|
@logs = logs
|
55
57
|
@errors = errors
|
56
58
|
@duration = duration
|
59
|
+
@scheduled_at = scheduled_at
|
57
60
|
end
|
58
61
|
|
59
62
|
def self.from(map:)
|
@@ -73,7 +76,8 @@ module Appwrite
|
|
73
76
|
response_headers: map["responseHeaders"].map { |it| Headers.from(map: it) },
|
74
77
|
logs: map["logs"],
|
75
78
|
errors: map["errors"],
|
76
|
-
duration: map["duration"]
|
79
|
+
duration: map["duration"],
|
80
|
+
scheduled_at: map["scheduledAt"]
|
77
81
|
)
|
78
82
|
end
|
79
83
|
|
@@ -94,7 +98,8 @@ module Appwrite
|
|
94
98
|
"responseHeaders": @response_headers.map { |it| it.to_map },
|
95
99
|
"logs": @logs,
|
96
100
|
"errors": @errors,
|
97
|
-
"duration": @duration
|
101
|
+
"duration": @duration,
|
102
|
+
"scheduledAt": @scheduled_at
|
98
103
|
}
|
99
104
|
end
|
100
105
|
end
|
@@ -13,6 +13,7 @@ module Appwrite
|
|
13
13
|
attr_reader :logging
|
14
14
|
attr_reader :runtime
|
15
15
|
attr_reader :deployment
|
16
|
+
attr_reader :scopes
|
16
17
|
attr_reader :vars
|
17
18
|
attr_reader :events
|
18
19
|
attr_reader :schedule
|
@@ -25,6 +26,7 @@ module Appwrite
|
|
25
26
|
attr_reader :provider_branch
|
26
27
|
attr_reader :provider_root_directory
|
27
28
|
attr_reader :provider_silent_mode
|
29
|
+
attr_reader :specification
|
28
30
|
|
29
31
|
def initialize(
|
30
32
|
id:,
|
@@ -37,6 +39,7 @@ module Appwrite
|
|
37
39
|
logging:,
|
38
40
|
runtime:,
|
39
41
|
deployment:,
|
42
|
+
scopes:,
|
40
43
|
vars:,
|
41
44
|
events:,
|
42
45
|
schedule:,
|
@@ -48,7 +51,8 @@ module Appwrite
|
|
48
51
|
provider_repository_id:,
|
49
52
|
provider_branch:,
|
50
53
|
provider_root_directory:,
|
51
|
-
provider_silent_mode
|
54
|
+
provider_silent_mode:,
|
55
|
+
specification:
|
52
56
|
)
|
53
57
|
@id = id
|
54
58
|
@created_at = created_at
|
@@ -60,6 +64,7 @@ module Appwrite
|
|
60
64
|
@logging = logging
|
61
65
|
@runtime = runtime
|
62
66
|
@deployment = deployment
|
67
|
+
@scopes = scopes
|
63
68
|
@vars = vars
|
64
69
|
@events = events
|
65
70
|
@schedule = schedule
|
@@ -72,6 +77,7 @@ module Appwrite
|
|
72
77
|
@provider_branch = provider_branch
|
73
78
|
@provider_root_directory = provider_root_directory
|
74
79
|
@provider_silent_mode = provider_silent_mode
|
80
|
+
@specification = specification
|
75
81
|
end
|
76
82
|
|
77
83
|
def self.from(map:)
|
@@ -86,6 +92,7 @@ module Appwrite
|
|
86
92
|
logging: map["logging"],
|
87
93
|
runtime: map["runtime"],
|
88
94
|
deployment: map["deployment"],
|
95
|
+
scopes: map["scopes"],
|
89
96
|
vars: map["vars"].map { |it| Variable.from(map: it) },
|
90
97
|
events: map["events"],
|
91
98
|
schedule: map["schedule"],
|
@@ -97,7 +104,8 @@ module Appwrite
|
|
97
104
|
provider_repository_id: map["providerRepositoryId"],
|
98
105
|
provider_branch: map["providerBranch"],
|
99
106
|
provider_root_directory: map["providerRootDirectory"],
|
100
|
-
provider_silent_mode: map["providerSilentMode"]
|
107
|
+
provider_silent_mode: map["providerSilentMode"],
|
108
|
+
specification: map["specification"]
|
101
109
|
)
|
102
110
|
end
|
103
111
|
|
@@ -113,6 +121,7 @@ module Appwrite
|
|
113
121
|
"logging": @logging,
|
114
122
|
"runtime": @runtime,
|
115
123
|
"deployment": @deployment,
|
124
|
+
"scopes": @scopes,
|
116
125
|
"vars": @vars.map { |it| it.to_map },
|
117
126
|
"events": @events,
|
118
127
|
"schedule": @schedule,
|
@@ -124,7 +133,8 @@ module Appwrite
|
|
124
133
|
"providerRepositoryId": @provider_repository_id,
|
125
134
|
"providerBranch": @provider_branch,
|
126
135
|
"providerRootDirectory": @provider_root_directory,
|
127
|
-
"providerSilentMode": @provider_silent_mode
|
136
|
+
"providerSilentMode": @provider_silent_mode,
|
137
|
+
"specification": @specification
|
128
138
|
}
|
129
139
|
end
|
130
140
|
end
|
@@ -9,6 +9,8 @@ module Appwrite
|
|
9
9
|
attr_reader :error
|
10
10
|
attr_reader :attributes
|
11
11
|
attr_reader :orders
|
12
|
+
attr_reader :created_at
|
13
|
+
attr_reader :updated_at
|
12
14
|
|
13
15
|
def initialize(
|
14
16
|
key:,
|
@@ -16,7 +18,9 @@ module Appwrite
|
|
16
18
|
status:,
|
17
19
|
error:,
|
18
20
|
attributes:,
|
19
|
-
orders:
|
21
|
+
orders: ,
|
22
|
+
created_at:,
|
23
|
+
updated_at:
|
20
24
|
)
|
21
25
|
@key = key
|
22
26
|
@type = type
|
@@ -24,6 +28,8 @@ module Appwrite
|
|
24
28
|
@error = error
|
25
29
|
@attributes = attributes
|
26
30
|
@orders = orders
|
31
|
+
@created_at = created_at
|
32
|
+
@updated_at = updated_at
|
27
33
|
end
|
28
34
|
|
29
35
|
def self.from(map:)
|
@@ -33,7 +39,9 @@ module Appwrite
|
|
33
39
|
status: map["status"],
|
34
40
|
error: map["error"],
|
35
41
|
attributes: map["attributes"],
|
36
|
-
orders: map["orders"]
|
42
|
+
orders: map["orders"],
|
43
|
+
created_at: map["$createdAt"],
|
44
|
+
updated_at: map["$updatedAt"]
|
37
45
|
)
|
38
46
|
end
|
39
47
|
|
@@ -44,7 +52,9 @@ module Appwrite
|
|
44
52
|
"status": @status,
|
45
53
|
"error": @error,
|
46
54
|
"attributes": @attributes,
|
47
|
-
"orders": @orders
|
55
|
+
"orders": @orders,
|
56
|
+
"$createdAt": @created_at,
|
57
|
+
"$updatedAt": @updated_at
|
48
58
|
}
|
49
59
|
end
|
50
60
|
end
|
@@ -4,23 +4,18 @@ module Appwrite
|
|
4
4
|
module Models
|
5
5
|
class Preferences
|
6
6
|
attr_reader :data
|
7
|
-
|
8
7
|
def initialize(
|
9
|
-
data:
|
10
|
-
|
11
|
-
@data = data
|
12
|
-
end
|
8
|
+
data: )
|
9
|
+
@data = data end
|
13
10
|
|
14
11
|
def self.from(map:)
|
15
12
|
Preferences.new(
|
16
|
-
data: map
|
17
|
-
)
|
13
|
+
data: map )
|
18
14
|
end
|
19
15
|
|
20
16
|
def to_map
|
21
17
|
{
|
22
|
-
"data": @data
|
23
|
-
}
|
18
|
+
"data": @data }
|
24
19
|
end
|
25
20
|
|
26
21
|
def convert_to(from_json)
|
@@ -4,6 +4,7 @@ module Appwrite
|
|
4
4
|
module Models
|
5
5
|
class Runtime
|
6
6
|
attr_reader :id
|
7
|
+
attr_reader :key
|
7
8
|
attr_reader :name
|
8
9
|
attr_reader :version
|
9
10
|
attr_reader :base
|
@@ -13,6 +14,7 @@ module Appwrite
|
|
13
14
|
|
14
15
|
def initialize(
|
15
16
|
id:,
|
17
|
+
key:,
|
16
18
|
name:,
|
17
19
|
version:,
|
18
20
|
base:,
|
@@ -21,6 +23,7 @@ module Appwrite
|
|
21
23
|
supports:
|
22
24
|
)
|
23
25
|
@id = id
|
26
|
+
@key = key
|
24
27
|
@name = name
|
25
28
|
@version = version
|
26
29
|
@base = base
|
@@ -32,6 +35,7 @@ module Appwrite
|
|
32
35
|
def self.from(map:)
|
33
36
|
Runtime.new(
|
34
37
|
id: map["$id"],
|
38
|
+
key: map["key"],
|
35
39
|
name: map["name"],
|
36
40
|
version: map["version"],
|
37
41
|
base: map["base"],
|
@@ -44,6 +48,7 @@ module Appwrite
|
|
44
48
|
def to_map
|
45
49
|
{
|
46
50
|
"$id": @id,
|
51
|
+
"key": @key,
|
47
52
|
"name": @name,
|
48
53
|
"version": @version,
|
49
54
|
"base": @base,
|
@@ -0,0 +1,42 @@
|
|
1
|
+
#frozen_string_literal: true
|
2
|
+
|
3
|
+
module Appwrite
|
4
|
+
module Models
|
5
|
+
class Specification
|
6
|
+
attr_reader :memory
|
7
|
+
attr_reader :cpus
|
8
|
+
attr_reader :enabled
|
9
|
+
attr_reader :slug
|
10
|
+
|
11
|
+
def initialize(
|
12
|
+
memory:,
|
13
|
+
cpus:,
|
14
|
+
enabled:,
|
15
|
+
slug:
|
16
|
+
)
|
17
|
+
@memory = memory
|
18
|
+
@cpus = cpus
|
19
|
+
@enabled = enabled
|
20
|
+
@slug = slug
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.from(map:)
|
24
|
+
Specification.new(
|
25
|
+
memory: map["memory"],
|
26
|
+
cpus: map["cpus"],
|
27
|
+
enabled: map["enabled"],
|
28
|
+
slug: map["slug"]
|
29
|
+
)
|
30
|
+
end
|
31
|
+
|
32
|
+
def to_map
|
33
|
+
{
|
34
|
+
"memory": @memory,
|
35
|
+
"cpus": @cpus,
|
36
|
+
"enabled": @enabled,
|
37
|
+
"slug": @slug
|
38
|
+
}
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#frozen_string_literal: true
|
2
|
+
|
3
|
+
module Appwrite
|
4
|
+
module Models
|
5
|
+
class SpecificationList
|
6
|
+
attr_reader :total
|
7
|
+
attr_reader :specifications
|
8
|
+
|
9
|
+
def initialize(
|
10
|
+
total:,
|
11
|
+
specifications:
|
12
|
+
)
|
13
|
+
@total = total
|
14
|
+
@specifications = specifications
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.from(map:)
|
18
|
+
SpecificationList.new(
|
19
|
+
total: map["total"],
|
20
|
+
specifications: map["specifications"].map { |it| Specification.from(map: it) }
|
21
|
+
)
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_map
|
25
|
+
{
|
26
|
+
"total": @total,
|
27
|
+
"specifications": @specifications.map { |it| it.to_map }
|
28
|
+
}
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|