carddb 0.3.0 → 0.3.10
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/.rspec_status +171 -151
- data/CHANGELOG.md +7 -0
- data/README.md +198 -1
- data/examples/publisher_content_pipeline.rb +80 -0
- data/lib/carddb/batch.rb +51 -2
- data/lib/carddb/client.rb +28 -0
- data/lib/carddb/collection.rb +540 -0
- data/lib/carddb/query_builder.rb +1048 -38
- data/lib/carddb/resources/datasets.rb +85 -0
- data/lib/carddb/resources/decks.rb +8 -0
- data/lib/carddb/resources/exports.rb +96 -0
- data/lib/carddb/resources/files.rb +43 -0
- data/lib/carddb/resources/games.rb +70 -0
- data/lib/carddb/resources/import_formats.rb +103 -0
- data/lib/carddb/resources/imports.rb +225 -0
- data/lib/carddb/resources/records.rb +157 -0
- data/lib/carddb/version.rb +1 -1
- data/lib/carddb.rb +32 -0
- metadata +6 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6c863ea4e71294af6d0772881b2e62014ac0d0557849909024e059abcec923cf
|
|
4
|
+
data.tar.gz: 74fb0042d233b5956b61089d0a6a04d423ec500e389aa2b1fd9b536e18360ced
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c7728fddf519b8890e3dec092720d31c8bda2bf4bcdf8ee44fff54f215f6256e53d56a7f7b73291767de563f2a42187d9dbf604514275d3a58a7a3d0172671a3
|
|
7
|
+
data.tar.gz: 6f59cf062792c4286cbc4c86f670f68706b7508876765b1c5b2a0e0c0e4aded17b7f99ed9d1988f63ff41845b6f1642a7dbde8b83bde79a9c988e9618a30e9f6
|
data/.rspec_status
CHANGED
|
@@ -1,151 +1,171 @@
|
|
|
1
|
-
example_id
|
|
2
|
-
|
|
3
|
-
./spec/carddb/client_spec.rb[1:1:1]
|
|
4
|
-
./spec/carddb/client_spec.rb[1:1:2]
|
|
5
|
-
./spec/carddb/client_spec.rb[1:1:3]
|
|
6
|
-
./spec/carddb/client_spec.rb[1:1:4]
|
|
7
|
-
./spec/carddb/client_spec.rb[1:2:1]
|
|
8
|
-
./spec/carddb/client_spec.rb[1:2:2]
|
|
9
|
-
./spec/carddb/client_spec.rb[1:3:1]
|
|
10
|
-
./spec/carddb/client_spec.rb[1:4:1]
|
|
11
|
-
./spec/carddb/client_spec.rb[1:5:1]
|
|
12
|
-
./spec/carddb/client_spec.rb[1:6:1]
|
|
13
|
-
./spec/carddb/client_spec.rb[1:7:1]
|
|
14
|
-
./spec/carddb/client_spec.rb[1:
|
|
15
|
-
./spec/carddb/
|
|
16
|
-
./spec/carddb/
|
|
17
|
-
./spec/carddb/
|
|
18
|
-
./spec/carddb/
|
|
19
|
-
./spec/carddb/collection_spec.rb[
|
|
20
|
-
./spec/carddb/collection_spec.rb[
|
|
21
|
-
./spec/carddb/collection_spec.rb[3:1:
|
|
22
|
-
./spec/carddb/collection_spec.rb[
|
|
23
|
-
./spec/carddb/collection_spec.rb[
|
|
24
|
-
./spec/carddb/collection_spec.rb[
|
|
25
|
-
./spec/carddb/collection_spec.rb[
|
|
26
|
-
./spec/carddb/
|
|
27
|
-
./spec/carddb/
|
|
28
|
-
./spec/carddb/
|
|
29
|
-
./spec/carddb/
|
|
30
|
-
./spec/carddb/configuration_spec.rb[1:1:
|
|
31
|
-
./spec/carddb/configuration_spec.rb[1:1:
|
|
32
|
-
./spec/carddb/configuration_spec.rb[1:
|
|
33
|
-
./spec/carddb/configuration_spec.rb[1:
|
|
34
|
-
./spec/carddb/configuration_spec.rb[1:
|
|
35
|
-
./spec/carddb/configuration_spec.rb[1:
|
|
36
|
-
./spec/carddb/configuration_spec.rb[1:
|
|
37
|
-
./spec/carddb/configuration_spec.rb[1:
|
|
38
|
-
./spec/carddb/configuration_spec.rb[1:
|
|
39
|
-
./spec/carddb/configuration_spec.rb[1:
|
|
40
|
-
./spec/carddb/configuration_spec.rb[1:
|
|
41
|
-
./spec/carddb/configuration_spec.rb[1:
|
|
42
|
-
./spec/carddb/configuration_spec.rb[1:
|
|
43
|
-
./spec/carddb/configuration_spec.rb[1:
|
|
44
|
-
./spec/carddb/configuration_spec.rb[1:
|
|
45
|
-
./spec/carddb/configuration_spec.rb[1:
|
|
46
|
-
./spec/carddb/configuration_spec.rb[1:
|
|
47
|
-
./spec/carddb/configuration_spec.rb[1:
|
|
48
|
-
./spec/carddb/
|
|
49
|
-
./spec/carddb/
|
|
50
|
-
./spec/carddb/
|
|
51
|
-
./spec/carddb/
|
|
52
|
-
./spec/carddb/filter_builder_spec.rb[1:1:
|
|
53
|
-
./spec/carddb/filter_builder_spec.rb[1:1:
|
|
54
|
-
./spec/carddb/filter_builder_spec.rb[1:1:
|
|
55
|
-
./spec/carddb/filter_builder_spec.rb[1:1:
|
|
56
|
-
./spec/carddb/filter_builder_spec.rb[1:
|
|
57
|
-
./spec/carddb/filter_builder_spec.rb[1:
|
|
58
|
-
./spec/carddb/filter_builder_spec.rb[1:
|
|
59
|
-
./spec/carddb/filter_builder_spec.rb[1:
|
|
60
|
-
./spec/carddb/filter_builder_spec.rb[1:2:
|
|
61
|
-
./spec/carddb/filter_builder_spec.rb[1:2:
|
|
62
|
-
./spec/carddb/filter_builder_spec.rb[1:2:
|
|
63
|
-
./spec/carddb/filter_builder_spec.rb[1:2:
|
|
64
|
-
./spec/carddb/filter_builder_spec.rb[1:2:
|
|
65
|
-
./spec/carddb/filter_builder_spec.rb[1:2:
|
|
66
|
-
./spec/carddb/filter_builder_spec.rb[1:2:
|
|
67
|
-
./spec/carddb/filter_builder_spec.rb[1:2:
|
|
68
|
-
./spec/carddb/filter_builder_spec.rb[1:2:
|
|
69
|
-
./spec/carddb/
|
|
70
|
-
./spec/carddb/
|
|
71
|
-
./spec/carddb/
|
|
72
|
-
./spec/carddb/
|
|
73
|
-
./spec/carddb/query_builder_spec.rb[1:
|
|
74
|
-
./spec/carddb/query_builder_spec.rb[1:
|
|
75
|
-
./spec/carddb/query_builder_spec.rb[1:3
|
|
76
|
-
./spec/carddb/query_builder_spec.rb[1:
|
|
77
|
-
./spec/carddb/query_builder_spec.rb[1:
|
|
78
|
-
./spec/carddb/query_builder_spec.rb[1:
|
|
79
|
-
./spec/carddb/query_builder_spec.rb[1:
|
|
80
|
-
./spec/carddb/query_builder_spec.rb[1:
|
|
81
|
-
./spec/carddb/query_builder_spec.rb[1:
|
|
82
|
-
./spec/carddb/query_builder_spec.rb[1:5:
|
|
83
|
-
./spec/carddb/query_builder_spec.rb[1:5:
|
|
84
|
-
./spec/carddb/query_builder_spec.rb[1:5:
|
|
85
|
-
./spec/carddb/
|
|
86
|
-
./spec/carddb/
|
|
87
|
-
./spec/carddb/
|
|
88
|
-
./spec/carddb/
|
|
89
|
-
./spec/carddb/
|
|
90
|
-
./spec/carddb/
|
|
91
|
-
./spec/carddb/
|
|
92
|
-
./spec/carddb/resources/
|
|
93
|
-
./spec/carddb/resources/
|
|
94
|
-
./spec/carddb/resources/
|
|
95
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
96
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
97
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
98
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
99
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
100
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
101
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
102
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
103
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
104
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
105
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
106
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
107
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
108
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
109
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
110
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
111
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
112
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
113
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
114
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
115
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
116
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
117
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
118
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
119
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
120
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
121
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
122
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
123
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
124
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
125
|
-
./spec/carddb/resources/
|
|
126
|
-
./spec/carddb/resources/
|
|
127
|
-
./spec/carddb/resources/
|
|
128
|
-
./spec/carddb/resources/
|
|
129
|
-
./spec/carddb/resources/
|
|
130
|
-
./spec/carddb/resources/
|
|
131
|
-
./spec/carddb/resources/
|
|
132
|
-
./spec/carddb/resources/
|
|
133
|
-
./spec/carddb/resources/
|
|
134
|
-
./spec/carddb/resources/
|
|
135
|
-
./spec/carddb/resources/
|
|
136
|
-
./spec/carddb/resources/
|
|
137
|
-
./spec/carddb/resources/
|
|
138
|
-
./spec/carddb/resources/
|
|
139
|
-
./spec/carddb/resources/
|
|
140
|
-
./spec/carddb/resources/
|
|
141
|
-
./spec/carddb/resources/
|
|
142
|
-
./spec/carddb/resources/
|
|
143
|
-
./spec/carddb/resources/
|
|
144
|
-
./spec/carddb/resources/
|
|
145
|
-
./spec/
|
|
146
|
-
./spec/
|
|
147
|
-
./spec/
|
|
148
|
-
./spec/
|
|
149
|
-
./spec/
|
|
150
|
-
./spec/
|
|
151
|
-
./spec/
|
|
1
|
+
example_id | status | run_time |
|
|
2
|
+
---------------------------------------------------------- | ------ | --------------- |
|
|
3
|
+
./spec/carddb/client_spec.rb[1:1:1] | passed | 0.00036 seconds |
|
|
4
|
+
./spec/carddb/client_spec.rb[1:1:2] | passed | 0.00005 seconds |
|
|
5
|
+
./spec/carddb/client_spec.rb[1:1:3] | passed | 0.00004 seconds |
|
|
6
|
+
./spec/carddb/client_spec.rb[1:1:4] | passed | 0.00004 seconds |
|
|
7
|
+
./spec/carddb/client_spec.rb[1:2:1] | passed | 0.00015 seconds |
|
|
8
|
+
./spec/carddb/client_spec.rb[1:2:2] | passed | 0.0003 seconds |
|
|
9
|
+
./spec/carddb/client_spec.rb[1:3:1] | passed | 0.00003 seconds |
|
|
10
|
+
./spec/carddb/client_spec.rb[1:4:1] | passed | 0.00003 seconds |
|
|
11
|
+
./spec/carddb/client_spec.rb[1:5:1] | passed | 0.00003 seconds |
|
|
12
|
+
./spec/carddb/client_spec.rb[1:6:1] | passed | 0.00003 seconds |
|
|
13
|
+
./spec/carddb/client_spec.rb[1:7:1] | passed | 0.00003 seconds |
|
|
14
|
+
./spec/carddb/client_spec.rb[1:8:1] | passed | 0.00003 seconds |
|
|
15
|
+
./spec/carddb/client_spec.rb[1:9:1] | passed | 0.00003 seconds |
|
|
16
|
+
./spec/carddb/client_spec.rb[1:10:1] | passed | 0.00004 seconds |
|
|
17
|
+
./spec/carddb/client_spec.rb[1:11:1] | passed | 0.00025 seconds |
|
|
18
|
+
./spec/carddb/client_spec.rb[1:11:2] | passed | 0.00838 seconds |
|
|
19
|
+
./spec/carddb/collection_spec.rb[1:1:1] | passed | 0.00007 seconds |
|
|
20
|
+
./spec/carddb/collection_spec.rb[2:1:1] | passed | 0.00004 seconds |
|
|
21
|
+
./spec/carddb/collection_spec.rb[3:1:1] | passed | 0.00206 seconds |
|
|
22
|
+
./spec/carddb/collection_spec.rb[3:1:2] | passed | 0.00014 seconds |
|
|
23
|
+
./spec/carddb/collection_spec.rb[3:1:3] | passed | 0.00053 seconds |
|
|
24
|
+
./spec/carddb/collection_spec.rb[3:1:4] | passed | 0.00034 seconds |
|
|
25
|
+
./spec/carddb/collection_spec.rb[3:1:5] | passed | 0.00005 seconds |
|
|
26
|
+
./spec/carddb/collection_spec.rb[4:1:1] | passed | 0.00013 seconds |
|
|
27
|
+
./spec/carddb/collection_spec.rb[4:1:2] | passed | 0.00027 seconds |
|
|
28
|
+
./spec/carddb/collection_spec.rb[4:1:3] | passed | 0.00014 seconds |
|
|
29
|
+
./spec/carddb/collection_spec.rb[4:1:4] | passed | 0.00004 seconds |
|
|
30
|
+
./spec/carddb/configuration_spec.rb[1:1:1] | passed | 0.00003 seconds |
|
|
31
|
+
./spec/carddb/configuration_spec.rb[1:1:2] | passed | 0.00003 seconds |
|
|
32
|
+
./spec/carddb/configuration_spec.rb[1:1:3] | passed | 0.00003 seconds |
|
|
33
|
+
./spec/carddb/configuration_spec.rb[1:1:4] | passed | 0.00003 seconds |
|
|
34
|
+
./spec/carddb/configuration_spec.rb[1:1:5] | passed | 0.00003 seconds |
|
|
35
|
+
./spec/carddb/configuration_spec.rb[1:1:6] | passed | 0.00003 seconds |
|
|
36
|
+
./spec/carddb/configuration_spec.rb[1:2:1:1] | passed | 0.00004 seconds |
|
|
37
|
+
./spec/carddb/configuration_spec.rb[1:2:2:1] | passed | 0.00003 seconds |
|
|
38
|
+
./spec/carddb/configuration_spec.rb[1:2:2:2] | passed | 0.00008 seconds |
|
|
39
|
+
./spec/carddb/configuration_spec.rb[1:3:1:1] | passed | 0.00003 seconds |
|
|
40
|
+
./spec/carddb/configuration_spec.rb[1:3:2:1] | passed | 0.00003 seconds |
|
|
41
|
+
./spec/carddb/configuration_spec.rb[1:3:2:2] | passed | 0.00004 seconds |
|
|
42
|
+
./spec/carddb/configuration_spec.rb[1:3:2:3] | passed | 0.00003 seconds |
|
|
43
|
+
./spec/carddb/configuration_spec.rb[1:4:1] | passed | 0.00003 seconds |
|
|
44
|
+
./spec/carddb/configuration_spec.rb[1:4:2] | passed | 0.00003 seconds |
|
|
45
|
+
./spec/carddb/configuration_spec.rb[1:5:1] | passed | 0.00004 seconds |
|
|
46
|
+
./spec/carddb/configuration_spec.rb[1:6:1] | passed | 0.00003 seconds |
|
|
47
|
+
./spec/carddb/configuration_spec.rb[1:6:2] | passed | 0.00003 seconds |
|
|
48
|
+
./spec/carddb/configuration_spec.rb[1:6:3] | passed | 0.00003 seconds |
|
|
49
|
+
./spec/carddb/configuration_spec.rb[1:7:1] | passed | 0.00003 seconds |
|
|
50
|
+
./spec/carddb/configuration_spec.rb[1:7:2] | passed | 0.00003 seconds |
|
|
51
|
+
./spec/carddb/configuration_spec.rb[1:7:3] | passed | 0.00004 seconds |
|
|
52
|
+
./spec/carddb/filter_builder_spec.rb[1:1:1] | passed | 0.00008 seconds |
|
|
53
|
+
./spec/carddb/filter_builder_spec.rb[1:1:2] | passed | 0.00003 seconds |
|
|
54
|
+
./spec/carddb/filter_builder_spec.rb[1:1:3] | passed | 0.00003 seconds |
|
|
55
|
+
./spec/carddb/filter_builder_spec.rb[1:1:4] | passed | 0.00003 seconds |
|
|
56
|
+
./spec/carddb/filter_builder_spec.rb[1:1:5] | passed | 0.00003 seconds |
|
|
57
|
+
./spec/carddb/filter_builder_spec.rb[1:1:6] | passed | 0.00003 seconds |
|
|
58
|
+
./spec/carddb/filter_builder_spec.rb[1:1:7] | passed | 0.00003 seconds |
|
|
59
|
+
./spec/carddb/filter_builder_spec.rb[1:1:8] | passed | 0.00003 seconds |
|
|
60
|
+
./spec/carddb/filter_builder_spec.rb[1:2:1] | passed | 0.00003 seconds |
|
|
61
|
+
./spec/carddb/filter_builder_spec.rb[1:2:2] | passed | 0.00003 seconds |
|
|
62
|
+
./spec/carddb/filter_builder_spec.rb[1:2:3] | passed | 0.00003 seconds |
|
|
63
|
+
./spec/carddb/filter_builder_spec.rb[1:2:4] | passed | 0.00003 seconds |
|
|
64
|
+
./spec/carddb/filter_builder_spec.rb[1:2:5] | passed | 0.00003 seconds |
|
|
65
|
+
./spec/carddb/filter_builder_spec.rb[1:2:6] | passed | 0.00003 seconds |
|
|
66
|
+
./spec/carddb/filter_builder_spec.rb[1:2:7] | passed | 0.00003 seconds |
|
|
67
|
+
./spec/carddb/filter_builder_spec.rb[1:2:8] | passed | 0.00002 seconds |
|
|
68
|
+
./spec/carddb/filter_builder_spec.rb[1:2:9] | passed | 0.00003 seconds |
|
|
69
|
+
./spec/carddb/filter_builder_spec.rb[1:2:10] | passed | 0.00009 seconds |
|
|
70
|
+
./spec/carddb/filter_builder_spec.rb[1:2:11] | passed | 0.00003 seconds |
|
|
71
|
+
./spec/carddb/filter_builder_spec.rb[1:2:12] | passed | 0.00003 seconds |
|
|
72
|
+
./spec/carddb/filter_builder_spec.rb[1:2:13] | passed | 0.00003 seconds |
|
|
73
|
+
./spec/carddb/query_builder_spec.rb[1:1:1] | passed | 0.00004 seconds |
|
|
74
|
+
./spec/carddb/query_builder_spec.rb[1:1:2] | passed | 0.00004 seconds |
|
|
75
|
+
./spec/carddb/query_builder_spec.rb[1:1:3] | passed | 0.00058 seconds |
|
|
76
|
+
./spec/carddb/query_builder_spec.rb[1:2:1:1] | passed | 0.00005 seconds |
|
|
77
|
+
./spec/carddb/query_builder_spec.rb[1:2:2:1] | passed | 0.00004 seconds |
|
|
78
|
+
./spec/carddb/query_builder_spec.rb[1:3:1] | passed | 0.00004 seconds |
|
|
79
|
+
./spec/carddb/query_builder_spec.rb[1:3:2] | passed | 0.00004 seconds |
|
|
80
|
+
./spec/carddb/query_builder_spec.rb[1:4:1] | passed | 0.00004 seconds |
|
|
81
|
+
./spec/carddb/query_builder_spec.rb[1:4:2] | passed | 0.00004 seconds |
|
|
82
|
+
./spec/carddb/query_builder_spec.rb[1:5:1] | passed | 0.00003 seconds |
|
|
83
|
+
./spec/carddb/query_builder_spec.rb[1:5:2] | passed | 0.00004 seconds |
|
|
84
|
+
./spec/carddb/query_builder_spec.rb[1:5:3] | passed | 0.00004 seconds |
|
|
85
|
+
./spec/carddb/query_builder_spec.rb[1:5:4] | passed | 0.00003 seconds |
|
|
86
|
+
./spec/carddb/query_builder_spec.rb[1:5:5] | passed | 0.00004 seconds |
|
|
87
|
+
./spec/carddb/query_builder_spec.rb[1:5:6] | passed | 0.00004 seconds |
|
|
88
|
+
./spec/carddb/query_builder_spec.rb[1:5:7] | passed | 0.00004 seconds |
|
|
89
|
+
./spec/carddb/query_builder_spec.rb[1:6:1] | passed | 0.00005 seconds |
|
|
90
|
+
./spec/carddb/query_builder_spec.rb[1:6:2] | passed | 0.00044 seconds |
|
|
91
|
+
./spec/carddb/query_builder_spec.rb[1:6:3] | passed | 0.00005 seconds |
|
|
92
|
+
./spec/carddb/resources/datasets_spec.rb[1:1:1] | passed | 0.0039 seconds |
|
|
93
|
+
./spec/carddb/resources/datasets_spec.rb[1:1:2] | passed | 0.004 seconds |
|
|
94
|
+
./spec/carddb/resources/datasets_spec.rb[1:2:1] | passed | 0.00379 seconds |
|
|
95
|
+
./spec/carddb/resources/decks_spec.rb[1:1:1] | passed | 0.00388 seconds |
|
|
96
|
+
./spec/carddb/resources/decks_spec.rb[1:1:2] | passed | 0.00468 seconds |
|
|
97
|
+
./spec/carddb/resources/decks_spec.rb[1:1:3] | passed | 0.00396 seconds |
|
|
98
|
+
./spec/carddb/resources/decks_spec.rb[1:1:4] | passed | 0.00405 seconds |
|
|
99
|
+
./spec/carddb/resources/decks_spec.rb[1:2:1] | passed | 0.00427 seconds |
|
|
100
|
+
./spec/carddb/resources/decks_spec.rb[1:2:2] | passed | 0.00802 seconds |
|
|
101
|
+
./spec/carddb/resources/decks_spec.rb[1:2:3] | passed | 0.00007 seconds |
|
|
102
|
+
./spec/carddb/resources/decks_spec.rb[1:3:1] | passed | 0.00407 seconds |
|
|
103
|
+
./spec/carddb/resources/decks_spec.rb[1:4:1] | passed | 0.0039 seconds |
|
|
104
|
+
./spec/carddb/resources/decks_spec.rb[1:5:1] | passed | 0.00395 seconds |
|
|
105
|
+
./spec/carddb/resources/decks_spec.rb[1:6:1] | passed | 0.00395 seconds |
|
|
106
|
+
./spec/carddb/resources/decks_spec.rb[1:7:1] | passed | 0.00386 seconds |
|
|
107
|
+
./spec/carddb/resources/decks_spec.rb[1:8:1] | passed | 0.00376 seconds |
|
|
108
|
+
./spec/carddb/resources/decks_spec.rb[1:9:1] | passed | 0.0041 seconds |
|
|
109
|
+
./spec/carddb/resources/decks_spec.rb[1:10:1] | passed | 0.00419 seconds |
|
|
110
|
+
./spec/carddb/resources/decks_spec.rb[1:11:1] | passed | 0.00401 seconds |
|
|
111
|
+
./spec/carddb/resources/decks_spec.rb[1:11:2] | passed | 0.00775 seconds |
|
|
112
|
+
./spec/carddb/resources/decks_spec.rb[1:11:3] | passed | 0.00436 seconds |
|
|
113
|
+
./spec/carddb/resources/decks_spec.rb[1:11:4] | passed | 0.00444 seconds |
|
|
114
|
+
./spec/carddb/resources/decks_spec.rb[1:12:1] | passed | 0.00373 seconds |
|
|
115
|
+
./spec/carddb/resources/decks_spec.rb[1:13:1] | passed | 0.00422 seconds |
|
|
116
|
+
./spec/carddb/resources/decks_spec.rb[1:14:1] | passed | 0.00396 seconds |
|
|
117
|
+
./spec/carddb/resources/decks_spec.rb[1:14:2] | passed | 0.00443 seconds |
|
|
118
|
+
./spec/carddb/resources/decks_spec.rb[1:14:3] | passed | 0.00416 seconds |
|
|
119
|
+
./spec/carddb/resources/decks_spec.rb[1:15:1] | passed | 0.00403 seconds |
|
|
120
|
+
./spec/carddb/resources/decks_spec.rb[1:16:1] | passed | 0.00382 seconds |
|
|
121
|
+
./spec/carddb/resources/decks_spec.rb[1:17:1] | passed | 0.00399 seconds |
|
|
122
|
+
./spec/carddb/resources/decks_spec.rb[1:17:2] | passed | 0.00541 seconds |
|
|
123
|
+
./spec/carddb/resources/decks_spec.rb[1:17:3] | passed | 0.00507 seconds |
|
|
124
|
+
./spec/carddb/resources/decks_spec.rb[1:18:1] | passed | 0.00453 seconds |
|
|
125
|
+
./spec/carddb/resources/decks_spec.rb[1:19:1] | passed | 0.0038 seconds |
|
|
126
|
+
./spec/carddb/resources/decks_spec.rb[1:20:1] | passed | 0.00385 seconds |
|
|
127
|
+
./spec/carddb/resources/decks_spec.rb[1:21:1] | passed | 0.0037 seconds |
|
|
128
|
+
./spec/carddb/resources/decks_spec.rb[1:22:1] | passed | 0.00364 seconds |
|
|
129
|
+
./spec/carddb/resources/decks_spec.rb[1:23:1] | passed | 0.00386 seconds |
|
|
130
|
+
./spec/carddb/resources/decks_spec.rb[1:24:1] | passed | 0.004 seconds |
|
|
131
|
+
./spec/carddb/resources/decks_spec.rb[1:25:1] | passed | 0.0038 seconds |
|
|
132
|
+
./spec/carddb/resources/games_spec.rb[1:1:1] | passed | 0.00383 seconds |
|
|
133
|
+
./spec/carddb/resources/games_spec.rb[1:1:2] | passed | 0.00007 seconds |
|
|
134
|
+
./spec/carddb/resources/games_spec.rb[1:2:1] | passed | 0.0038 seconds |
|
|
135
|
+
./spec/carddb/resources/games_spec.rb[1:2:2] | passed | 0.00375 seconds |
|
|
136
|
+
./spec/carddb/resources/publisher_workflows_spec.rb[1:1:1] | passed | 0.00359 seconds |
|
|
137
|
+
./spec/carddb/resources/publisher_workflows_spec.rb[1:1:2] | passed | 0.00369 seconds |
|
|
138
|
+
./spec/carddb/resources/publisher_workflows_spec.rb[1:1:3] | passed | 0.00382 seconds |
|
|
139
|
+
./spec/carddb/resources/publisher_workflows_spec.rb[1:2:1] | passed | 0.00401 seconds |
|
|
140
|
+
./spec/carddb/resources/publisher_workflows_spec.rb[1:2:2] | passed | 0.00006 seconds |
|
|
141
|
+
./spec/carddb/resources/publisher_workflows_spec.rb[1:3:1] | passed | 0.00404 seconds |
|
|
142
|
+
./spec/carddb/resources/publisher_workflows_spec.rb[1:3:2] | passed | 0.0036 seconds |
|
|
143
|
+
./spec/carddb/resources/publisher_workflows_spec.rb[1:3:3] | passed | 0.00361 seconds |
|
|
144
|
+
./spec/carddb/resources/publisher_workflows_spec.rb[1:4:1] | passed | 0.00371 seconds |
|
|
145
|
+
./spec/carddb/resources/publisher_workflows_spec.rb[1:4:2] | passed | 0.00421 seconds |
|
|
146
|
+
./spec/carddb/resources/publisher_workflows_spec.rb[1:4:3] | passed | 0.00394 seconds |
|
|
147
|
+
./spec/carddb/resources/publisher_workflows_spec.rb[1:5:1] | passed | 0.00725 seconds |
|
|
148
|
+
./spec/carddb/resources/publisher_workflows_spec.rb[1:5:2] | passed | 0.00427 seconds |
|
|
149
|
+
./spec/carddb/resources/publishers_spec.rb[1:1:1] | passed | 0.00354 seconds |
|
|
150
|
+
./spec/carddb/resources/publishers_spec.rb[1:2:1] | passed | 0.00426 seconds |
|
|
151
|
+
./spec/carddb/resources/records_spec.rb[1:1:1] | passed | 0.00368 seconds |
|
|
152
|
+
./spec/carddb/resources/records_spec.rb[1:1:2] | passed | 0.0046 seconds |
|
|
153
|
+
./spec/carddb/resources/records_spec.rb[1:1:3] | passed | 0.0001 seconds |
|
|
154
|
+
./spec/carddb/resources/records_spec.rb[1:1:4] | passed | 0.00005 seconds |
|
|
155
|
+
./spec/carddb/resources/records_spec.rb[1:2:1] | passed | 0.0036 seconds |
|
|
156
|
+
./spec/carddb/resources/records_spec.rb[1:2:2] | passed | 0.00358 seconds |
|
|
157
|
+
./spec/carddb/resources/records_spec.rb[1:2:3] | passed | 0.00456 seconds |
|
|
158
|
+
./spec/carddb/resources/records_spec.rb[1:3:1] | passed | 0.00377 seconds |
|
|
159
|
+
./spec/carddb/resources/records_spec.rb[1:3:2] | passed | 0.0001 seconds |
|
|
160
|
+
./spec/carddb/resources/records_spec.rb[1:4:1] | passed | 0.00363 seconds |
|
|
161
|
+
./spec/carddb/resources/records_spec.rb[1:4:2] | passed | 0.00004 seconds |
|
|
162
|
+
./spec/carddb/resources/records_spec.rb[1:4:3] | passed | 0.0001 seconds |
|
|
163
|
+
./spec/carddb/resources/rules_spec.rb[1:1:1] | passed | 0.00353 seconds |
|
|
164
|
+
./spec/carddb/resources/rules_spec.rb[1:2:1] | passed | 0.00358 seconds |
|
|
165
|
+
./spec/carddb_spec.rb[1:1] | passed | 0.00004 seconds |
|
|
166
|
+
./spec/carddb_spec.rb[1:2:1] | passed | 0.00003 seconds |
|
|
167
|
+
./spec/carddb_spec.rb[1:3:1] | passed | 0.00003 seconds |
|
|
168
|
+
./spec/carddb_spec.rb[1:4:1] | passed | 0.00003 seconds |
|
|
169
|
+
./spec/carddb_spec.rb[1:5:1] | passed | 0.00003 seconds |
|
|
170
|
+
./spec/carddb_spec.rb[1:6:1] | passed | 0.00003 seconds |
|
|
171
|
+
./spec/carddb_spec.rb[1:7:1] | passed | 0.00003 seconds |
|
data/CHANGELOG.md
CHANGED
|
@@ -9,10 +9,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
|
|
10
10
|
### Added
|
|
11
11
|
|
|
12
|
+
- Publisher workflow resources for game management, import-format management, import jobs, files, dataset exports, schema introspection, batch upsert, and bulk delete/reconciliation.
|
|
13
|
+
- Structured wrapper objects for import validation errors, import jobs/logs, delete job results, export jobs, files, and presigned uploads.
|
|
14
|
+
- Publisher content pipeline example and release-prep documentation.
|
|
12
15
|
- Deck import payloads now expose configured import format metadata and auto-detection details.
|
|
13
16
|
- Documentation now covers configured deck imports and `BAN` / `RESTRICTION` deck validation issue metadata.
|
|
14
17
|
- Deck clients now expose ownership-aware queries, claim/transfer/copy helpers, selected-deck app access management, configured import-format management, direct deck access token issuer fields, and `publishable_key` configuration.
|
|
15
18
|
|
|
19
|
+
### Security
|
|
20
|
+
|
|
21
|
+
- Publisher-management writes are guarded by secret-key-only checks and reject publishable-key or OAuth bearer-token configurations before making requests.
|
|
22
|
+
|
|
16
23
|
## [0.2.1] - 2026-05-01
|
|
17
24
|
|
|
18
25
|
### Fixed
|
data/README.md
CHANGED
|
@@ -102,7 +102,7 @@ Credential guidance:
|
|
|
102
102
|
|
|
103
103
|
- Use `publishable_key` for public reads and OAuth setup flows.
|
|
104
104
|
- Use `access_token` for user-authorized deck workflows.
|
|
105
|
-
- Use `secret_key` only in trusted server runtimes for app-owned deck sync and token exchange.
|
|
105
|
+
- Use `secret_key` only in trusted server runtimes for publisher management, app-owned deck sync, and token exchange.
|
|
106
106
|
- Secret-only helpers fail before making a request if `access_token` or `publishable_key` would be sent instead of a secret credential.
|
|
107
107
|
|
|
108
108
|
## Usage
|
|
@@ -192,6 +192,184 @@ dataset.searchable?(:name) # Check if field is searchable
|
|
|
192
192
|
dataset.field(:hp) # Get field info by key
|
|
193
193
|
```
|
|
194
194
|
|
|
195
|
+
### Publisher Workflows
|
|
196
|
+
|
|
197
|
+
Publisher-management writes require a trusted server-side `secret_key` or legacy `api_key`.
|
|
198
|
+
They fail before making a request if a `publishable_key` or OAuth `access_token` would be used.
|
|
199
|
+
|
|
200
|
+
```ruby
|
|
201
|
+
client = CardDB::Client.new(secret_key: ENV.fetch('CARDDB_SECRET_KEY'))
|
|
202
|
+
|
|
203
|
+
# Games and datasets
|
|
204
|
+
games = client.games.list(publisher_id: 'publisher_uuid')
|
|
205
|
+
game = client.games.get_by_key(publisher_id: 'publisher_uuid', game_key: 'pokemon-tcg')
|
|
206
|
+
game ||= client.games.create(
|
|
207
|
+
input: {
|
|
208
|
+
publisherId: 'publisher_uuid',
|
|
209
|
+
key: 'pokemon-tcg',
|
|
210
|
+
name: 'Pokemon TCG',
|
|
211
|
+
visibility: 'PRIVATE'
|
|
212
|
+
}
|
|
213
|
+
)
|
|
214
|
+
game = client.games.update(id: game.id, input: { description: 'Publisher-managed game' })
|
|
215
|
+
dataset = client.datasets.get_by_key(game_id: game.id, dataset_key: 'cards')
|
|
216
|
+
schema = client.datasets.get_schema(id: dataset.id)
|
|
217
|
+
|
|
218
|
+
# Import formats
|
|
219
|
+
formats = client.import_formats.list(game_id: game.id)
|
|
220
|
+
client.import_formats.create(
|
|
221
|
+
input: {
|
|
222
|
+
gameId: game.id,
|
|
223
|
+
key: 'pokemon-live',
|
|
224
|
+
name: 'Pokemon Live',
|
|
225
|
+
config: { schemaVersion: 1 }
|
|
226
|
+
}
|
|
227
|
+
)
|
|
228
|
+
|
|
229
|
+
# Files and imports
|
|
230
|
+
upload = client.files.request_upload(
|
|
231
|
+
input: {
|
|
232
|
+
filename: 'cards.json',
|
|
233
|
+
contentType: 'application/json',
|
|
234
|
+
size: 12_345,
|
|
235
|
+
isPublic: false,
|
|
236
|
+
publisherId: 'publisher_uuid'
|
|
237
|
+
}
|
|
238
|
+
)
|
|
239
|
+
|
|
240
|
+
job = client.imports.run(
|
|
241
|
+
input: {
|
|
242
|
+
datasetId: dataset.id,
|
|
243
|
+
fileId: upload.file.id,
|
|
244
|
+
format: 'JSON',
|
|
245
|
+
options: { mode: 'STRICT', onConflict: 'UPDATE' }
|
|
246
|
+
}
|
|
247
|
+
)
|
|
248
|
+
client.imports.wait_for_job(job.id)
|
|
249
|
+
|
|
250
|
+
# Batch upserts and explicit deletes
|
|
251
|
+
dry_run = client.records.upsert_batch(
|
|
252
|
+
input: {
|
|
253
|
+
datasetId: dataset.id,
|
|
254
|
+
records: [{ identifier: 'CARD-001', name: 'Pikachu' }],
|
|
255
|
+
options: { dryRun: true }
|
|
256
|
+
}
|
|
257
|
+
)
|
|
258
|
+
puts dry_run.dry_run_result.errors.map(&:index)
|
|
259
|
+
|
|
260
|
+
delete_job = client.records.delete_batch(
|
|
261
|
+
input: { datasetId: dataset.id, identifiers: ['CARD-001'], dryRun: true }
|
|
262
|
+
)
|
|
263
|
+
puts delete_job.results.map(&:status)
|
|
264
|
+
|
|
265
|
+
# Exports
|
|
266
|
+
export = client.exports.run(input: { datasetId: dataset.id, format: 'JSON' })
|
|
267
|
+
export = client.exports.wait_for_job(export.id)
|
|
268
|
+
puts export.download_url
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
Publisher import source modes:
|
|
272
|
+
|
|
273
|
+
- Direct payload: use `records`, `data`, or `imports.run(input: { data: ... })` for small CI payloads and tests.
|
|
274
|
+
- Uploaded file: use `files.request_upload`, PUT bytes to `upload_url`, `files.confirm_upload`, then pass `fileId` for larger JSON/CSV imports.
|
|
275
|
+
- Source URL: pass `sourceUrl` when CardDB should fetch and snapshot an HTTPS source before processing.
|
|
276
|
+
|
|
277
|
+
Existing-schema imports validate against the current dataset schema and reject unexpected fields:
|
|
278
|
+
|
|
279
|
+
```ruby
|
|
280
|
+
validation = client.imports.validate(
|
|
281
|
+
input: {
|
|
282
|
+
datasetId: dataset.id,
|
|
283
|
+
records: [{ identifier: 'CARD-001', name: 'Example Card' }],
|
|
284
|
+
options: { mode: 'STRICT', onConflict: 'UPDATE', dryRun: true }
|
|
285
|
+
}
|
|
286
|
+
)
|
|
287
|
+
|
|
288
|
+
validation.errors.each do |error|
|
|
289
|
+
puts "#{error.dataset_key}[#{error.index}]: #{error.errors.map(&:message).join(', ')}"
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
job = client.imports.run(
|
|
293
|
+
input: {
|
|
294
|
+
datasetId: dataset.id,
|
|
295
|
+
sourceUrl: 'https://publisher.example/cards.json',
|
|
296
|
+
format: 'JSON',
|
|
297
|
+
options: { mode: 'STRICT', onConflict: 'UPDATE' }
|
|
298
|
+
}
|
|
299
|
+
)
|
|
300
|
+
client.imports.wait_for_job(job.id)
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
Advanced game imports can create or update datasets and schemas in dependency order:
|
|
304
|
+
|
|
305
|
+
```ruby
|
|
306
|
+
advanced_data = {
|
|
307
|
+
datasets: [
|
|
308
|
+
{
|
|
309
|
+
name: 'sets',
|
|
310
|
+
schema: {
|
|
311
|
+
code: { type: 'STRING', isIdentifier: true },
|
|
312
|
+
name: { type: 'STRING', required: true }
|
|
313
|
+
},
|
|
314
|
+
records: [{ code: 'BASE', name: 'Base Set' }]
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
name: 'cards',
|
|
318
|
+
schema: {
|
|
319
|
+
identifier: { type: 'STRING', isIdentifier: true },
|
|
320
|
+
set_id: { type: 'LINK', linkDataset: '$sets', linkFieldKey: 'code' }
|
|
321
|
+
},
|
|
322
|
+
records: [{ identifier: 'BASE-001', set_id: 'BASE' }]
|
|
323
|
+
}
|
|
324
|
+
]
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
preview = client.imports.preview_game(input: { gameId: game.id, data: advanced_data })
|
|
328
|
+
raise preview.warnings.map(&:message).join(', ') unless preview.can_proceed?
|
|
329
|
+
|
|
330
|
+
game_import = client.imports.run_game(
|
|
331
|
+
input: {
|
|
332
|
+
gameId: game.id,
|
|
333
|
+
data: advanced_data,
|
|
334
|
+
options: { mode: 'CREATE', onConflict: 'UPDATE' }
|
|
335
|
+
}
|
|
336
|
+
)
|
|
337
|
+
client.imports.wait_for_game_job(game_import.id)
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
Schema introspection is useful before building import mappings or generated forms:
|
|
341
|
+
|
|
342
|
+
```ruby
|
|
343
|
+
schema = client.datasets.get_schema(game_id: game.id, dataset_key: 'cards')
|
|
344
|
+
identifier = schema.fields.find(&:identifier?)&.key
|
|
345
|
+
puts "Identifier field: #{identifier}"
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
Bulk delete is explicit. Preview first with `dryRun: true`, then execute by sending the same target set with `dryRun: false`.
|
|
349
|
+
|
|
350
|
+
```ruby
|
|
351
|
+
preview = client.records.delete_batch(
|
|
352
|
+
input: { datasetId: dataset.id, identifiers: ['CARD-001'], dryRun: true }
|
|
353
|
+
)
|
|
354
|
+
puts preview.results.map { |result| [result.target, result.status] }
|
|
355
|
+
|
|
356
|
+
delete_job = client.records.delete_batch(
|
|
357
|
+
input: { datasetId: dataset.id, identifiers: ['CARD-001'], dryRun: false }
|
|
358
|
+
)
|
|
359
|
+
client.records.wait_for_delete_job(delete_job.id)
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
Exports produce signed download URLs. Refresh a completed job when the URL is stale but the export file still exists.
|
|
363
|
+
|
|
364
|
+
```ruby
|
|
365
|
+
export_job = client.exports.run(input: { datasetId: dataset.id, format: 'CSV' })
|
|
366
|
+
completed = client.exports.wait_for_job(export_job.id)
|
|
367
|
+
fresh = client.exports.refresh_url(id: completed.id)
|
|
368
|
+
puts fresh.download_url
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
See [`examples/publisher_content_pipeline.rb`](examples/publisher_content_pipeline.rb) for a CI/CD-style content pipeline example.
|
|
372
|
+
|
|
195
373
|
### Rules and Formats
|
|
196
374
|
|
|
197
375
|
```ruby
|
|
@@ -406,6 +584,15 @@ access = client.decks.exchange_access_token(
|
|
|
406
584
|
|
|
407
585
|
deck = client.decks.access(token: access.token)
|
|
408
586
|
|
|
587
|
+
session = client.decks.exchange_session_token(
|
|
588
|
+
input: {
|
|
589
|
+
publisherSlug: "pokemon-company",
|
|
590
|
+
gameKey: "pokemon-tcg",
|
|
591
|
+
externalSubject: "user_123",
|
|
592
|
+
scopes: %w[DECKS_READ DECKS_WRITE DECKS_PUBLISH]
|
|
593
|
+
}
|
|
594
|
+
)
|
|
595
|
+
|
|
409
596
|
# Account sessions can also create trusted issuers for a selected API app.
|
|
410
597
|
client.decks.create_access_token_issuer(
|
|
411
598
|
input: {
|
|
@@ -939,8 +1126,18 @@ bundle exec rspec
|
|
|
939
1126
|
|
|
940
1127
|
# Run linter
|
|
941
1128
|
bundle exec rubocop
|
|
1129
|
+
|
|
1130
|
+
# Run full verification
|
|
1131
|
+
bundle exec rake
|
|
942
1132
|
```
|
|
943
1133
|
|
|
1134
|
+
Release prep checklist:
|
|
1135
|
+
|
|
1136
|
+
- Run `bundle exec rspec`, `bundle exec rubocop`, and `bundle exec rake`.
|
|
1137
|
+
- Review `CHANGELOG.md` and the gem version.
|
|
1138
|
+
- Build/publish only when explicitly approved; do not publish to RubyGems from docs-only prep.
|
|
1139
|
+
- Keep `secret_key` examples server-side only.
|
|
1140
|
+
|
|
944
1141
|
## License
|
|
945
1142
|
|
|
946
1143
|
MIT License. See [LICENSE.txt](LICENSE.txt).
|