carddb 0.4.5 → 0.5.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/.rspec_status +145 -131
- data/CHANGELOG.md +6 -0
- data/lib/carddb/client.rb +7 -0
- data/lib/carddb/collection.rb +161 -0
- data/lib/carddb/query_builder.rb +369 -0
- data/lib/carddb/resources/datasets.rb +59 -0
- data/lib/carddb/resources/rulesets.rb +180 -0
- data/lib/carddb/version.rb +1 -1
- data/lib/carddb.rb +8 -0
- metadata +2 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ceef6d739c3216a5580fbdb226d56bb0e06f0ac383bf602338116f6373f3d6f8
|
|
4
|
+
data.tar.gz: 27d48679aa8a00933df584e9879e3edfa9d15f6e66c85657741a950fae7fb89a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 503f9bec588094aab1460dca8128f352108c60bd95ece2ab4316a6fc1989f0b5b96a935bbb210cac3b70e9148a847bd812646eaf5594ae055e0f203d5733ed06
|
|
7
|
+
data.tar.gz: 91f1ba2dcf4401a31c03b581fa756e5dc4a3fa039809bc40ea008651b04766f62f9df53cc5da2d8f24799f807d5b2e4f2ce244bd643ff0d57f8f67c55488f1d3
|
data/.rspec_status
CHANGED
|
@@ -1,189 +1,202 @@
|
|
|
1
1
|
example_id | status | run_time |
|
|
2
2
|
---------------------------------------------------------- | ------ | --------------- |
|
|
3
|
-
./spec/carddb/batch_spec.rb[1:1] | passed | 0.
|
|
3
|
+
./spec/carddb/batch_spec.rb[1:1] | passed | 0.00897 seconds |
|
|
4
4
|
./spec/carddb/client_spec.rb[1:1:1] | passed | 0.00005 seconds |
|
|
5
|
-
./spec/carddb/client_spec.rb[1:1:2] | passed | 0.
|
|
6
|
-
./spec/carddb/client_spec.rb[1:1:3] | passed | 0.
|
|
5
|
+
./spec/carddb/client_spec.rb[1:1:2] | passed | 0.00003 seconds |
|
|
6
|
+
./spec/carddb/client_spec.rb[1:1:3] | passed | 0.00003 seconds |
|
|
7
7
|
./spec/carddb/client_spec.rb[1:1:4] | passed | 0.00003 seconds |
|
|
8
|
-
./spec/carddb/client_spec.rb[1:2:1] | passed | 0.
|
|
9
|
-
./spec/carddb/client_spec.rb[1:2:2] | passed | 0.
|
|
10
|
-
./spec/carddb/client_spec.rb[1:3:1] | passed | 0.
|
|
11
|
-
./spec/carddb/client_spec.rb[1:4:1] | passed | 0.
|
|
8
|
+
./spec/carddb/client_spec.rb[1:2:1] | passed | 0.00013 seconds |
|
|
9
|
+
./spec/carddb/client_spec.rb[1:2:2] | passed | 0.00035 seconds |
|
|
10
|
+
./spec/carddb/client_spec.rb[1:3:1] | passed | 0.00003 seconds |
|
|
11
|
+
./spec/carddb/client_spec.rb[1:4:1] | passed | 0.00003 seconds |
|
|
12
12
|
./spec/carddb/client_spec.rb[1:5:1] | passed | 0.00004 seconds |
|
|
13
13
|
./spec/carddb/client_spec.rb[1:6:1] | passed | 0.00004 seconds |
|
|
14
14
|
./spec/carddb/client_spec.rb[1:7:1] | passed | 0.00003 seconds |
|
|
15
15
|
./spec/carddb/client_spec.rb[1:8:1] | passed | 0.00003 seconds |
|
|
16
|
-
./spec/carddb/client_spec.rb[1:9:1] | passed | 0.
|
|
16
|
+
./spec/carddb/client_spec.rb[1:9:1] | passed | 0.00003 seconds |
|
|
17
17
|
./spec/carddb/client_spec.rb[1:10:1] | passed | 0.00003 seconds |
|
|
18
|
-
./spec/carddb/client_spec.rb[1:11:1] | passed | 0.
|
|
19
|
-
./spec/carddb/client_spec.rb[1:12:1] | passed | 0.
|
|
20
|
-
./spec/carddb/client_spec.rb[1:13:1] | passed | 0.
|
|
21
|
-
./spec/carddb/client_spec.rb[1:
|
|
18
|
+
./spec/carddb/client_spec.rb[1:11:1] | passed | 0.00003 seconds |
|
|
19
|
+
./spec/carddb/client_spec.rb[1:12:1] | passed | 0.00004 seconds |
|
|
20
|
+
./spec/carddb/client_spec.rb[1:13:1] | passed | 0.00003 seconds |
|
|
21
|
+
./spec/carddb/client_spec.rb[1:14:1] | passed | 0.00041 seconds |
|
|
22
|
+
./spec/carddb/client_spec.rb[1:14:2] | passed | 0.0038 seconds |
|
|
22
23
|
./spec/carddb/collection_spec.rb[1:1:1] | passed | 0.00005 seconds |
|
|
23
|
-
./spec/carddb/collection_spec.rb[2:1:1] | passed | 0.
|
|
24
|
-
./spec/carddb/collection_spec.rb[3:1:1] | passed | 0.
|
|
25
|
-
./spec/carddb/collection_spec.rb[3:1:2] | passed | 0.
|
|
26
|
-
./spec/carddb/collection_spec.rb[3:1:3] | passed | 0.
|
|
27
|
-
./spec/carddb/collection_spec.rb[3:1:4] | passed | 0.
|
|
24
|
+
./spec/carddb/collection_spec.rb[2:1:1] | passed | 0.00003 seconds |
|
|
25
|
+
./spec/carddb/collection_spec.rb[3:1:1] | passed | 0.00266 seconds |
|
|
26
|
+
./spec/carddb/collection_spec.rb[3:1:2] | passed | 0.00014 seconds |
|
|
27
|
+
./spec/carddb/collection_spec.rb[3:1:3] | passed | 0.00038 seconds |
|
|
28
|
+
./spec/carddb/collection_spec.rb[3:1:4] | passed | 0.00048 seconds |
|
|
28
29
|
./spec/carddb/collection_spec.rb[3:1:5] | passed | 0.00004 seconds |
|
|
29
|
-
./spec/carddb/collection_spec.rb[4:1:1] | passed | 0.
|
|
30
|
-
./spec/carddb/collection_spec.rb[4:1:2] | passed | 0.
|
|
30
|
+
./spec/carddb/collection_spec.rb[4:1:1] | passed | 0.00014 seconds |
|
|
31
|
+
./spec/carddb/collection_spec.rb[4:1:2] | passed | 0.00014 seconds |
|
|
31
32
|
./spec/carddb/collection_spec.rb[4:1:3] | passed | 0.00014 seconds |
|
|
32
33
|
./spec/carddb/collection_spec.rb[4:1:4] | passed | 0.00004 seconds |
|
|
33
|
-
./spec/carddb/configuration_spec.rb[1:1:1] | passed | 0.
|
|
34
|
-
./spec/carddb/configuration_spec.rb[1:1:2] | passed | 0.
|
|
34
|
+
./spec/carddb/configuration_spec.rb[1:1:1] | passed | 0.00003 seconds |
|
|
35
|
+
./spec/carddb/configuration_spec.rb[1:1:2] | passed | 0.00003 seconds |
|
|
35
36
|
./spec/carddb/configuration_spec.rb[1:1:3] | passed | 0.00003 seconds |
|
|
36
|
-
./spec/carddb/configuration_spec.rb[1:1:4] | passed | 0.
|
|
37
|
+
./spec/carddb/configuration_spec.rb[1:1:4] | passed | 0.00004 seconds |
|
|
37
38
|
./spec/carddb/configuration_spec.rb[1:1:5] | passed | 0.00003 seconds |
|
|
38
39
|
./spec/carddb/configuration_spec.rb[1:1:6] | passed | 0.00003 seconds |
|
|
39
40
|
./spec/carddb/configuration_spec.rb[1:2:1:1] | passed | 0.00004 seconds |
|
|
40
41
|
./spec/carddb/configuration_spec.rb[1:2:2:1] | passed | 0.00003 seconds |
|
|
41
|
-
./spec/carddb/configuration_spec.rb[1:2:2:2] | passed | 0.
|
|
42
|
-
./spec/carddb/configuration_spec.rb[1:3:1:1] | passed | 0.
|
|
42
|
+
./spec/carddb/configuration_spec.rb[1:2:2:2] | passed | 0.00004 seconds |
|
|
43
|
+
./spec/carddb/configuration_spec.rb[1:3:1:1] | passed | 0.00003 seconds |
|
|
43
44
|
./spec/carddb/configuration_spec.rb[1:3:2:1] | passed | 0.00003 seconds |
|
|
44
|
-
./spec/carddb/configuration_spec.rb[1:3:2:2] | passed | 0.
|
|
45
|
+
./spec/carddb/configuration_spec.rb[1:3:2:2] | passed | 0.00005 seconds |
|
|
45
46
|
./spec/carddb/configuration_spec.rb[1:3:2:3] | passed | 0.00003 seconds |
|
|
46
47
|
./spec/carddb/configuration_spec.rb[1:4:1] | passed | 0.00003 seconds |
|
|
47
48
|
./spec/carddb/configuration_spec.rb[1:4:2] | passed | 0.00003 seconds |
|
|
48
49
|
./spec/carddb/configuration_spec.rb[1:5:1] | passed | 0.00003 seconds |
|
|
49
50
|
./spec/carddb/configuration_spec.rb[1:6:1] | passed | 0.00003 seconds |
|
|
50
|
-
./spec/carddb/configuration_spec.rb[1:6:2] | passed | 0.
|
|
51
|
+
./spec/carddb/configuration_spec.rb[1:6:2] | passed | 0.00003 seconds |
|
|
51
52
|
./spec/carddb/configuration_spec.rb[1:6:3] | passed | 0.00003 seconds |
|
|
52
53
|
./spec/carddb/configuration_spec.rb[1:7:1] | passed | 0.00003 seconds |
|
|
53
|
-
./spec/carddb/configuration_spec.rb[1:7:2] | passed | 0.
|
|
54
|
+
./spec/carddb/configuration_spec.rb[1:7:2] | passed | 0.00004 seconds |
|
|
54
55
|
./spec/carddb/configuration_spec.rb[1:7:3] | passed | 0.00004 seconds |
|
|
55
|
-
./spec/carddb/deck_tokens_spec.rb[1:1:1] | passed | 0.
|
|
56
|
-
./spec/carddb/deck_tokens_spec.rb[1:2:1] | passed | 0.
|
|
57
|
-
./spec/carddb/deck_tokens_spec.rb[1:2:2] | passed | 0.
|
|
58
|
-
./spec/carddb/deck_tokens_spec.rb[1:2:3] | passed | 0.
|
|
56
|
+
./spec/carddb/deck_tokens_spec.rb[1:1:1] | passed | 0.00085 seconds |
|
|
57
|
+
./spec/carddb/deck_tokens_spec.rb[1:2:1] | passed | 0.00073 seconds |
|
|
58
|
+
./spec/carddb/deck_tokens_spec.rb[1:2:2] | passed | 0.00024 seconds |
|
|
59
|
+
./spec/carddb/deck_tokens_spec.rb[1:2:3] | passed | 0.00006 seconds |
|
|
59
60
|
./spec/carddb/filter_builder_spec.rb[1:1:1] | passed | 0.00004 seconds |
|
|
60
61
|
./spec/carddb/filter_builder_spec.rb[1:1:2] | passed | 0.00003 seconds |
|
|
61
|
-
./spec/carddb/filter_builder_spec.rb[1:1:3] | passed | 0.
|
|
62
|
-
./spec/carddb/filter_builder_spec.rb[1:1:4] | passed | 0.
|
|
62
|
+
./spec/carddb/filter_builder_spec.rb[1:1:3] | passed | 0.00364 seconds |
|
|
63
|
+
./spec/carddb/filter_builder_spec.rb[1:1:4] | passed | 0.00004 seconds |
|
|
63
64
|
./spec/carddb/filter_builder_spec.rb[1:1:5] | passed | 0.00003 seconds |
|
|
64
|
-
./spec/carddb/filter_builder_spec.rb[1:1:6] | passed | 0.
|
|
65
|
-
./spec/carddb/filter_builder_spec.rb[1:1:7] | passed | 0.
|
|
65
|
+
./spec/carddb/filter_builder_spec.rb[1:1:6] | passed | 0.00003 seconds |
|
|
66
|
+
./spec/carddb/filter_builder_spec.rb[1:1:7] | passed | 0.00003 seconds |
|
|
66
67
|
./spec/carddb/filter_builder_spec.rb[1:1:8] | passed | 0.00003 seconds |
|
|
67
|
-
./spec/carddb/filter_builder_spec.rb[1:2:1] | passed | 0.
|
|
68
|
+
./spec/carddb/filter_builder_spec.rb[1:2:1] | passed | 0.00003 seconds |
|
|
68
69
|
./spec/carddb/filter_builder_spec.rb[1:2:2] | passed | 0.00003 seconds |
|
|
69
70
|
./spec/carddb/filter_builder_spec.rb[1:2:3] | passed | 0.00003 seconds |
|
|
70
|
-
./spec/carddb/filter_builder_spec.rb[1:2:4] | passed | 0.
|
|
71
|
+
./spec/carddb/filter_builder_spec.rb[1:2:4] | passed | 0.00003 seconds |
|
|
71
72
|
./spec/carddb/filter_builder_spec.rb[1:2:5] | passed | 0.00003 seconds |
|
|
72
|
-
./spec/carddb/filter_builder_spec.rb[1:2:6] | passed | 0.
|
|
73
|
+
./spec/carddb/filter_builder_spec.rb[1:2:6] | passed | 0.00003 seconds |
|
|
73
74
|
./spec/carddb/filter_builder_spec.rb[1:2:7] | passed | 0.00003 seconds |
|
|
74
75
|
./spec/carddb/filter_builder_spec.rb[1:2:8] | passed | 0.00003 seconds |
|
|
75
76
|
./spec/carddb/filter_builder_spec.rb[1:2:9] | passed | 0.00003 seconds |
|
|
76
77
|
./spec/carddb/filter_builder_spec.rb[1:2:10] | passed | 0.00003 seconds |
|
|
77
78
|
./spec/carddb/filter_builder_spec.rb[1:2:11] | passed | 0.00003 seconds |
|
|
78
|
-
./spec/carddb/filter_builder_spec.rb[1:2:12] | passed | 0.
|
|
79
|
+
./spec/carddb/filter_builder_spec.rb[1:2:12] | passed | 0.00003 seconds |
|
|
79
80
|
./spec/carddb/filter_builder_spec.rb[1:2:13] | passed | 0.00003 seconds |
|
|
80
|
-
./spec/carddb/query_builder_spec.rb[1:1:1] | passed | 0.
|
|
81
|
+
./spec/carddb/query_builder_spec.rb[1:1:1] | passed | 0.00005 seconds |
|
|
81
82
|
./spec/carddb/query_builder_spec.rb[1:1:2] | passed | 0.00004 seconds |
|
|
82
83
|
./spec/carddb/query_builder_spec.rb[1:1:3] | passed | 0.00004 seconds |
|
|
83
|
-
./spec/carddb/query_builder_spec.rb[1:2:1:1] | passed | 0.
|
|
84
|
+
./spec/carddb/query_builder_spec.rb[1:2:1:1] | passed | 0.00004 seconds |
|
|
84
85
|
./spec/carddb/query_builder_spec.rb[1:2:2:1] | passed | 0.00004 seconds |
|
|
85
86
|
./spec/carddb/query_builder_spec.rb[1:3:1] | passed | 0.00004 seconds |
|
|
86
87
|
./spec/carddb/query_builder_spec.rb[1:3:2] | passed | 0.00004 seconds |
|
|
87
88
|
./spec/carddb/query_builder_spec.rb[1:4:1] | passed | 0.00004 seconds |
|
|
88
89
|
./spec/carddb/query_builder_spec.rb[1:4:2] | passed | 0.00004 seconds |
|
|
89
90
|
./spec/carddb/query_builder_spec.rb[1:5:1] | passed | 0.00003 seconds |
|
|
90
|
-
./spec/carddb/query_builder_spec.rb[1:5:2] | passed | 0.
|
|
91
|
-
./spec/carddb/query_builder_spec.rb[1:5:3] | passed | 0.
|
|
92
|
-
./spec/carddb/query_builder_spec.rb[1:5:4] | passed | 0.
|
|
93
|
-
./spec/carddb/query_builder_spec.rb[1:5:5] | passed | 0.
|
|
94
|
-
./spec/carddb/query_builder_spec.rb[1:5:6] | passed | 0.
|
|
95
|
-
./spec/carddb/query_builder_spec.rb[1:5:7] | passed | 0.
|
|
91
|
+
./spec/carddb/query_builder_spec.rb[1:5:2] | passed | 0.00004 seconds |
|
|
92
|
+
./spec/carddb/query_builder_spec.rb[1:5:3] | passed | 0.00004 seconds |
|
|
93
|
+
./spec/carddb/query_builder_spec.rb[1:5:4] | passed | 0.00003 seconds |
|
|
94
|
+
./spec/carddb/query_builder_spec.rb[1:5:5] | passed | 0.00004 seconds |
|
|
95
|
+
./spec/carddb/query_builder_spec.rb[1:5:6] | passed | 0.00003 seconds |
|
|
96
|
+
./spec/carddb/query_builder_spec.rb[1:5:7] | passed | 0.00003 seconds |
|
|
96
97
|
./spec/carddb/query_builder_spec.rb[1:5:8] | passed | 0.00003 seconds |
|
|
97
98
|
./spec/carddb/query_builder_spec.rb[1:5:9] | passed | 0.00004 seconds |
|
|
98
|
-
./spec/carddb/query_builder_spec.rb[1:6:1] | passed | 0.
|
|
99
|
-
./spec/carddb/query_builder_spec.rb[1:6:2] | passed | 0.
|
|
100
|
-
./spec/carddb/query_builder_spec.rb[1:6:3] | passed | 0.
|
|
101
|
-
./spec/carddb/query_builder_spec.rb[1:6:4] | passed | 0.
|
|
102
|
-
./spec/carddb/query_builder_spec.rb[1:6:5] | passed | 0.
|
|
103
|
-
./spec/carddb/query_builder_spec.rb[1:6:6] | passed | 0.
|
|
104
|
-
./spec/carddb/
|
|
105
|
-
./spec/carddb/
|
|
106
|
-
./spec/carddb/
|
|
107
|
-
./spec/carddb/
|
|
108
|
-
./spec/carddb/resources/
|
|
109
|
-
./spec/carddb/resources/
|
|
110
|
-
./spec/carddb/resources/
|
|
111
|
-
./spec/carddb/resources/
|
|
112
|
-
./spec/carddb/resources/
|
|
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/decks_spec.rb[1:
|
|
126
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
127
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
128
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
129
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
130
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
131
|
-
./spec/carddb/resources/decks_spec.rb[1:
|
|
99
|
+
./spec/carddb/query_builder_spec.rb[1:6:1] | passed | 0.0001 seconds |
|
|
100
|
+
./spec/carddb/query_builder_spec.rb[1:6:2] | passed | 0.00003 seconds |
|
|
101
|
+
./spec/carddb/query_builder_spec.rb[1:6:3] | passed | 0.00004 seconds |
|
|
102
|
+
./spec/carddb/query_builder_spec.rb[1:6:4] | passed | 0.00003 seconds |
|
|
103
|
+
./spec/carddb/query_builder_spec.rb[1:6:5] | passed | 0.00005 seconds |
|
|
104
|
+
./spec/carddb/query_builder_spec.rb[1:6:6] | passed | 0.00005 seconds |
|
|
105
|
+
./spec/carddb/query_builder_spec.rb[1:6:7] | passed | 0.00005 seconds |
|
|
106
|
+
./spec/carddb/query_builder_spec.rb[1:6:8] | passed | 0.00003 seconds |
|
|
107
|
+
./spec/carddb/query_builder_spec.rb[1:6:9] | passed | 0.00003 seconds |
|
|
108
|
+
./spec/carddb/query_builder_spec.rb[1:6:10] | passed | 0.00003 seconds |
|
|
109
|
+
./spec/carddb/resources/datasets_spec.rb[1:1:1] | passed | 0.0043 seconds |
|
|
110
|
+
./spec/carddb/resources/datasets_spec.rb[1:1:2] | passed | 0.00394 seconds |
|
|
111
|
+
./spec/carddb/resources/datasets_spec.rb[1:2:1] | passed | 0.00387 seconds |
|
|
112
|
+
./spec/carddb/resources/datasets_spec.rb[1:3:1] | passed | 0.0042 seconds |
|
|
113
|
+
./spec/carddb/resources/datasets_spec.rb[1:3:2] | passed | 0.00388 seconds |
|
|
114
|
+
./spec/carddb/resources/decks_spec.rb[1:1:1] | passed | 0.00414 seconds |
|
|
115
|
+
./spec/carddb/resources/decks_spec.rb[1:1:2] | passed | 0.00394 seconds |
|
|
116
|
+
./spec/carddb/resources/decks_spec.rb[1:1:3] | passed | 0.00389 seconds |
|
|
117
|
+
./spec/carddb/resources/decks_spec.rb[1:1:4] | passed | 0.00396 seconds |
|
|
118
|
+
./spec/carddb/resources/decks_spec.rb[1:2:1] | passed | 0.00435 seconds |
|
|
119
|
+
./spec/carddb/resources/decks_spec.rb[1:2:2] | passed | 0.00785 seconds |
|
|
120
|
+
./spec/carddb/resources/decks_spec.rb[1:2:3] | passed | 0.00007 seconds |
|
|
121
|
+
./spec/carddb/resources/decks_spec.rb[1:3:1] | passed | 0.00387 seconds |
|
|
122
|
+
./spec/carddb/resources/decks_spec.rb[1:4:1] | passed | 0.00382 seconds |
|
|
123
|
+
./spec/carddb/resources/decks_spec.rb[1:5:1] | passed | 0.0038 seconds |
|
|
124
|
+
./spec/carddb/resources/decks_spec.rb[1:6:1] | passed | 0.00393 seconds |
|
|
125
|
+
./spec/carddb/resources/decks_spec.rb[1:6:2] | passed | 0.00383 seconds |
|
|
126
|
+
./spec/carddb/resources/decks_spec.rb[1:6:3] | passed | 0.00409 seconds |
|
|
127
|
+
./spec/carddb/resources/decks_spec.rb[1:6:4] | passed | 0.00009 seconds |
|
|
128
|
+
./spec/carddb/resources/decks_spec.rb[1:7:1] | passed | 0.00391 seconds |
|
|
129
|
+
./spec/carddb/resources/decks_spec.rb[1:8:1] | passed | 0.00383 seconds |
|
|
130
|
+
./spec/carddb/resources/decks_spec.rb[1:9:1] | passed | 0.00425 seconds |
|
|
131
|
+
./spec/carddb/resources/decks_spec.rb[1:10:1] | passed | 0.00384 seconds |
|
|
132
|
+
./spec/carddb/resources/decks_spec.rb[1:10:2] | passed | 0.00424 seconds |
|
|
133
|
+
./spec/carddb/resources/decks_spec.rb[1:10:3] | passed | 0.00471 seconds |
|
|
134
|
+
./spec/carddb/resources/decks_spec.rb[1:10:4] | passed | 0.00372 seconds |
|
|
135
|
+
./spec/carddb/resources/decks_spec.rb[1:11:1] | passed | 0.00411 seconds |
|
|
136
|
+
./spec/carddb/resources/decks_spec.rb[1:12:1] | passed | 0.00397 seconds |
|
|
137
|
+
./spec/carddb/resources/decks_spec.rb[1:12:2] | passed | 0.00377 seconds |
|
|
138
|
+
./spec/carddb/resources/decks_spec.rb[1:12:3] | passed | 0.00406 seconds |
|
|
132
139
|
./spec/carddb/resources/decks_spec.rb[1:12:4] | passed | 0.00006 seconds |
|
|
133
|
-
./spec/carddb/resources/decks_spec.rb[1:13:1] | passed | 0.
|
|
134
|
-
./spec/carddb/resources/decks_spec.rb[1:14:1] | passed | 0.
|
|
135
|
-
./spec/carddb/resources/decks_spec.rb[1:15:1] | passed | 0.
|
|
136
|
-
./spec/carddb/resources/decks_spec.rb[1:15:2] | passed | 0.
|
|
137
|
-
./spec/carddb/resources/decks_spec.rb[1:15:3] | passed | 0.
|
|
138
|
-
./spec/carddb/resources/decks_spec.rb[1:16:1] | passed | 0.
|
|
139
|
-
./spec/carddb/resources/decks_spec.rb[1:17:1] | passed | 0.
|
|
140
|
-
./spec/carddb/resources/decks_spec.rb[1:18:1] | passed | 0.
|
|
141
|
-
./spec/carddb/resources/decks_spec.rb[1:19:1] | passed | 0.
|
|
142
|
-
./spec/carddb/resources/decks_spec.rb[1:20:1] | passed | 0.
|
|
143
|
-
./spec/carddb/resources/decks_spec.rb[1:21:1] | passed | 0.
|
|
144
|
-
./spec/carddb/resources/games_spec.rb[1:1:1] | passed | 0.
|
|
140
|
+
./spec/carddb/resources/decks_spec.rb[1:13:1] | passed | 0.00398 seconds |
|
|
141
|
+
./spec/carddb/resources/decks_spec.rb[1:14:1] | passed | 0.00762 seconds |
|
|
142
|
+
./spec/carddb/resources/decks_spec.rb[1:15:1] | passed | 0.004 seconds |
|
|
143
|
+
./spec/carddb/resources/decks_spec.rb[1:15:2] | passed | 0.00526 seconds |
|
|
144
|
+
./spec/carddb/resources/decks_spec.rb[1:15:3] | passed | 0.00459 seconds |
|
|
145
|
+
./spec/carddb/resources/decks_spec.rb[1:16:1] | passed | 0.005 seconds |
|
|
146
|
+
./spec/carddb/resources/decks_spec.rb[1:17:1] | passed | 0.0048 seconds |
|
|
147
|
+
./spec/carddb/resources/decks_spec.rb[1:18:1] | passed | 0.00368 seconds |
|
|
148
|
+
./spec/carddb/resources/decks_spec.rb[1:19:1] | passed | 0.00485 seconds |
|
|
149
|
+
./spec/carddb/resources/decks_spec.rb[1:20:1] | passed | 0.00364 seconds |
|
|
150
|
+
./spec/carddb/resources/decks_spec.rb[1:21:1] | passed | 0.00383 seconds |
|
|
151
|
+
./spec/carddb/resources/games_spec.rb[1:1:1] | passed | 0.00459 seconds |
|
|
145
152
|
./spec/carddb/resources/games_spec.rb[1:1:2] | passed | 0.00006 seconds |
|
|
146
|
-
./spec/carddb/resources/games_spec.rb[1:2:1] | passed | 0.
|
|
147
|
-
./spec/carddb/resources/games_spec.rb[1:2:2] | passed | 0.
|
|
148
|
-
./spec/carddb/resources/publisher_workflows_spec.rb[1:1:1] | passed | 0.
|
|
149
|
-
./spec/carddb/resources/publisher_workflows_spec.rb[1:1:2] | passed | 0.
|
|
150
|
-
./spec/carddb/resources/publisher_workflows_spec.rb[1:1:3] | passed | 0.
|
|
151
|
-
./spec/carddb/resources/publisher_workflows_spec.rb[1:2:1] | passed | 0.
|
|
152
|
-
./spec/carddb/resources/publisher_workflows_spec.rb[1:2:2] | passed | 0.
|
|
153
|
-
./spec/carddb/resources/publisher_workflows_spec.rb[1:3:1] | passed | 0.
|
|
154
|
-
./spec/carddb/resources/publisher_workflows_spec.rb[1:3:2] | passed | 0.
|
|
155
|
-
./spec/carddb/resources/publisher_workflows_spec.rb[1:3:3] | passed | 0.
|
|
156
|
-
./spec/carddb/resources/publisher_workflows_spec.rb[1:4:1] | passed | 0.
|
|
157
|
-
./spec/carddb/resources/publisher_workflows_spec.rb[1:4:2] | passed | 0.
|
|
158
|
-
./spec/carddb/resources/publisher_workflows_spec.rb[1:4:3] | passed | 0.
|
|
159
|
-
./spec/carddb/resources/publisher_workflows_spec.rb[1:5:1] | passed | 0.
|
|
160
|
-
./spec/carddb/resources/publisher_workflows_spec.rb[1:5:2] | passed | 0.
|
|
161
|
-
./spec/carddb/resources/publishers_spec.rb[1:1:1] | passed | 0.
|
|
162
|
-
./spec/carddb/resources/publishers_spec.rb[1:2:1] | passed | 0.
|
|
163
|
-
./spec/carddb/resources/records_spec.rb[1:1:1] | passed | 0.
|
|
164
|
-
./spec/carddb/resources/records_spec.rb[1:1:2] | passed | 0.
|
|
165
|
-
./spec/carddb/resources/records_spec.rb[1:1:3] | passed | 0.
|
|
166
|
-
./spec/carddb/resources/records_spec.rb[1:1:4] | passed | 0.
|
|
167
|
-
./spec/carddb/resources/records_spec.rb[1:2:1] | passed | 0.
|
|
168
|
-
./spec/carddb/resources/records_spec.rb[1:2:2] | passed | 0.
|
|
169
|
-
./spec/carddb/resources/records_spec.rb[1:2:3] | passed | 0.
|
|
170
|
-
./spec/carddb/resources/records_spec.rb[1:3:1] | passed | 0.
|
|
171
|
-
./spec/carddb/resources/records_spec.rb[1:3:2] | passed | 0.
|
|
172
|
-
./spec/carddb/resources/records_spec.rb[1:4:1] | passed | 0.
|
|
153
|
+
./spec/carddb/resources/games_spec.rb[1:2:1] | passed | 0.00368 seconds |
|
|
154
|
+
./spec/carddb/resources/games_spec.rb[1:2:2] | passed | 0.00472 seconds |
|
|
155
|
+
./spec/carddb/resources/publisher_workflows_spec.rb[1:1:1] | passed | 0.00368 seconds |
|
|
156
|
+
./spec/carddb/resources/publisher_workflows_spec.rb[1:1:2] | passed | 0.00422 seconds |
|
|
157
|
+
./spec/carddb/resources/publisher_workflows_spec.rb[1:1:3] | passed | 0.00385 seconds |
|
|
158
|
+
./spec/carddb/resources/publisher_workflows_spec.rb[1:2:1] | passed | 0.00466 seconds |
|
|
159
|
+
./spec/carddb/resources/publisher_workflows_spec.rb[1:2:2] | passed | 0.00005 seconds |
|
|
160
|
+
./spec/carddb/resources/publisher_workflows_spec.rb[1:3:1] | passed | 0.00496 seconds |
|
|
161
|
+
./spec/carddb/resources/publisher_workflows_spec.rb[1:3:2] | passed | 0.00421 seconds |
|
|
162
|
+
./spec/carddb/resources/publisher_workflows_spec.rb[1:3:3] | passed | 0.00431 seconds |
|
|
163
|
+
./spec/carddb/resources/publisher_workflows_spec.rb[1:4:1] | passed | 0.00405 seconds |
|
|
164
|
+
./spec/carddb/resources/publisher_workflows_spec.rb[1:4:2] | passed | 0.00522 seconds |
|
|
165
|
+
./spec/carddb/resources/publisher_workflows_spec.rb[1:4:3] | passed | 0.005 seconds |
|
|
166
|
+
./spec/carddb/resources/publisher_workflows_spec.rb[1:5:1] | passed | 0.00488 seconds |
|
|
167
|
+
./spec/carddb/resources/publisher_workflows_spec.rb[1:5:2] | passed | 0.00414 seconds |
|
|
168
|
+
./spec/carddb/resources/publishers_spec.rb[1:1:1] | passed | 0.00418 seconds |
|
|
169
|
+
./spec/carddb/resources/publishers_spec.rb[1:2:1] | passed | 0.00443 seconds |
|
|
170
|
+
./spec/carddb/resources/records_spec.rb[1:1:1] | passed | 0.0045 seconds |
|
|
171
|
+
./spec/carddb/resources/records_spec.rb[1:1:2] | passed | 0.0038 seconds |
|
|
172
|
+
./spec/carddb/resources/records_spec.rb[1:1:3] | passed | 0.00008 seconds |
|
|
173
|
+
./spec/carddb/resources/records_spec.rb[1:1:4] | passed | 0.0001 seconds |
|
|
174
|
+
./spec/carddb/resources/records_spec.rb[1:2:1] | passed | 0.00426 seconds |
|
|
175
|
+
./spec/carddb/resources/records_spec.rb[1:2:2] | passed | 0.00376 seconds |
|
|
176
|
+
./spec/carddb/resources/records_spec.rb[1:2:3] | passed | 0.00454 seconds |
|
|
177
|
+
./spec/carddb/resources/records_spec.rb[1:3:1] | passed | 0.00363 seconds |
|
|
178
|
+
./spec/carddb/resources/records_spec.rb[1:3:2] | passed | 0.00046 seconds |
|
|
179
|
+
./spec/carddb/resources/records_spec.rb[1:4:1] | passed | 0.00366 seconds |
|
|
173
180
|
./spec/carddb/resources/records_spec.rb[1:4:2] | passed | 0.00004 seconds |
|
|
174
|
-
./spec/carddb/resources/records_spec.rb[1:4:3] | passed | 0.
|
|
175
|
-
./spec/carddb/resources/rules_spec.rb[1:1:1] | passed | 0.
|
|
181
|
+
./spec/carddb/resources/records_spec.rb[1:4:3] | passed | 0.00012 seconds |
|
|
182
|
+
./spec/carddb/resources/rules_spec.rb[1:1:1] | passed | 0.00381 seconds |
|
|
176
183
|
./spec/carddb/resources/rules_spec.rb[1:2:1] | passed | 0.00378 seconds |
|
|
177
|
-
./spec/carddb/resources/
|
|
178
|
-
./spec/carddb/resources/
|
|
179
|
-
./spec/carddb/resources/
|
|
180
|
-
./spec/carddb/resources/
|
|
181
|
-
./spec/carddb/resources/
|
|
182
|
-
./spec/carddb/resources/
|
|
183
|
-
./spec/carddb/resources/scans_spec.rb[1:
|
|
184
|
-
./spec/carddb/resources/scans_spec.rb[1:
|
|
184
|
+
./spec/carddb/resources/rulesets_spec.rb[1:1:1] | passed | 0.00372 seconds |
|
|
185
|
+
./spec/carddb/resources/rulesets_spec.rb[1:1:2] | passed | 0.00538 seconds |
|
|
186
|
+
./spec/carddb/resources/rulesets_spec.rb[1:2:1] | passed | 0.00444 seconds |
|
|
187
|
+
./spec/carddb/resources/rulesets_spec.rb[1:2:2] | passed | 0.00384 seconds |
|
|
188
|
+
./spec/carddb/resources/rulesets_spec.rb[1:3:1] | passed | 0.00493 seconds |
|
|
189
|
+
./spec/carddb/resources/rulesets_spec.rb[1:3:2] | passed | 0.00005 seconds |
|
|
190
|
+
./spec/carddb/resources/scans_spec.rb[1:1] | passed | 0.00447 seconds |
|
|
191
|
+
./spec/carddb/resources/scans_spec.rb[1:2] | passed | 0.00791 seconds |
|
|
192
|
+
./spec/carddb/resources/scans_spec.rb[1:3] | passed | 0.00388 seconds |
|
|
193
|
+
./spec/carddb/resources/scans_spec.rb[1:4] | passed | 0.00451 seconds |
|
|
194
|
+
./spec/carddb/resources/scans_spec.rb[1:5] | passed | 0.0047 seconds |
|
|
195
|
+
./spec/carddb/resources/scans_spec.rb[1:6] | passed | 0.00406 seconds |
|
|
196
|
+
./spec/carddb/resources/scans_spec.rb[1:7] | passed | 0.00361 seconds |
|
|
197
|
+
./spec/carddb/resources/scans_spec.rb[1:8] | passed | 0.00009 seconds |
|
|
185
198
|
./spec/carddb_spec.rb[1:1] | passed | 0.00003 seconds |
|
|
186
|
-
./spec/carddb_spec.rb[1:2:1] | passed | 0.
|
|
199
|
+
./spec/carddb_spec.rb[1:2:1] | passed | 0.00004 seconds |
|
|
187
200
|
./spec/carddb_spec.rb[1:3:1] | passed | 0.00003 seconds |
|
|
188
201
|
./spec/carddb_spec.rb[1:4:1] | passed | 0.00004 seconds |
|
|
189
202
|
./spec/carddb_spec.rb[1:5:1] | passed | 0.00003 seconds |
|
|
@@ -191,3 +204,4 @@ example_id | status | run_time
|
|
|
191
204
|
./spec/carddb_spec.rb[1:7:1] | passed | 0.00003 seconds |
|
|
192
205
|
./spec/carddb_spec.rb[1:8:1] | passed | 0.00003 seconds |
|
|
193
206
|
./spec/carddb_spec.rb[1:9:1] | passed | 0.00003 seconds |
|
|
207
|
+
./spec/carddb_spec.rb[1:10:1] | passed | 0.00003 seconds |
|
data/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.5.0] - 2026-07-06
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Dataset filter value lookup with paginated field facets and optional counts.
|
|
15
|
+
|
|
10
16
|
## [0.4.1] - 2026-06-22
|
|
11
17
|
|
|
12
18
|
### Added
|
data/lib/carddb/client.rb
CHANGED
|
@@ -154,6 +154,13 @@ module CardDB
|
|
|
154
154
|
@rules ||= Resources::Rules.new(self, connection, config)
|
|
155
155
|
end
|
|
156
156
|
|
|
157
|
+
# Access the Rulesets resource
|
|
158
|
+
#
|
|
159
|
+
# @return [Resources::Rulesets]
|
|
160
|
+
def rulesets
|
|
161
|
+
@rulesets ||= Resources::Rulesets.new(self, connection, config)
|
|
162
|
+
end
|
|
163
|
+
|
|
157
164
|
# Get information about the current API key
|
|
158
165
|
#
|
|
159
166
|
# @return [Hash, nil] API key info or nil if no API key
|
data/lib/carddb/collection.rb
CHANGED
|
@@ -656,6 +656,56 @@ module CardDB
|
|
|
656
656
|
end
|
|
657
657
|
end
|
|
658
658
|
|
|
659
|
+
# Wrapper for distinct values returned for a single filter field.
|
|
660
|
+
class DatasetFilterValueConnection
|
|
661
|
+
attr_reader :data
|
|
662
|
+
|
|
663
|
+
def initialize(data)
|
|
664
|
+
@data = data || {}
|
|
665
|
+
end
|
|
666
|
+
|
|
667
|
+
def field
|
|
668
|
+
data['field']
|
|
669
|
+
end
|
|
670
|
+
|
|
671
|
+
def edges
|
|
672
|
+
data['edges'] || []
|
|
673
|
+
end
|
|
674
|
+
|
|
675
|
+
def values
|
|
676
|
+
@values ||= edges.map { |edge| DatasetFilterValue.new(edge['node']) }
|
|
677
|
+
end
|
|
678
|
+
|
|
679
|
+
def page_info
|
|
680
|
+
data['pageInfo'] || {}
|
|
681
|
+
end
|
|
682
|
+
|
|
683
|
+
def has_next_page?
|
|
684
|
+
!!page_info['hasNextPage']
|
|
685
|
+
end
|
|
686
|
+
|
|
687
|
+
def end_cursor
|
|
688
|
+
page_info['endCursor']
|
|
689
|
+
end
|
|
690
|
+
end
|
|
691
|
+
|
|
692
|
+
# Wrapper for one distinct filter value.
|
|
693
|
+
class DatasetFilterValue
|
|
694
|
+
attr_reader :data
|
|
695
|
+
|
|
696
|
+
def initialize(data)
|
|
697
|
+
@data = data || {}
|
|
698
|
+
end
|
|
699
|
+
|
|
700
|
+
def value
|
|
701
|
+
data['value']
|
|
702
|
+
end
|
|
703
|
+
|
|
704
|
+
def count
|
|
705
|
+
data['count']
|
|
706
|
+
end
|
|
707
|
+
end
|
|
708
|
+
|
|
659
709
|
# Wrapper for FieldInfo
|
|
660
710
|
class FieldInfo
|
|
661
711
|
attr_reader :data
|
|
@@ -2001,6 +2051,117 @@ module CardDB
|
|
|
2001
2051
|
end
|
|
2002
2052
|
end
|
|
2003
2053
|
|
|
2054
|
+
class Ruleset < Resource
|
|
2055
|
+
def id = data['id']
|
|
2056
|
+
def game_id = data['gameId']
|
|
2057
|
+
def game = data['game']
|
|
2058
|
+
def key = data['key']
|
|
2059
|
+
def name = data['name']
|
|
2060
|
+
def description = data['description']
|
|
2061
|
+
def tags = data['tags'] || []
|
|
2062
|
+
def sort_order = data['sortOrder']
|
|
2063
|
+
def current_version_id = data['currentVersionId']
|
|
2064
|
+
def archived_at = parse_time(data['archivedAt'])
|
|
2065
|
+
def archived? = !!data['isArchived']
|
|
2066
|
+
def created_at = parse_time(data['createdAt'])
|
|
2067
|
+
def updated_at = parse_time(data['updatedAt'])
|
|
2068
|
+
|
|
2069
|
+
def current_version
|
|
2070
|
+
@current_version ||= data['currentVersion'] ? RulesetVersion.new(data['currentVersion'], client: client) : nil
|
|
2071
|
+
end
|
|
2072
|
+
end
|
|
2073
|
+
|
|
2074
|
+
class RulesetVersion < Resource
|
|
2075
|
+
def id = data['id']
|
|
2076
|
+
def ruleset_id = data['rulesetId']
|
|
2077
|
+
def version_label = data['versionLabel']
|
|
2078
|
+
def status = data['status']
|
|
2079
|
+
def rules = data['rules'] || {}
|
|
2080
|
+
def card_dataset_id = data['cardDatasetId']
|
|
2081
|
+
def card_dataset_version_id = data['cardDatasetVersionId']
|
|
2082
|
+
def source_dataset_id = data['sourceDatasetId']
|
|
2083
|
+
def source_dataset_version_id = data['sourceDatasetVersionId']
|
|
2084
|
+
def source_dataset_record_id = data['sourceDatasetRecordId']
|
|
2085
|
+
def source_record_identifier = data['sourceRecordIdentifier']
|
|
2086
|
+
def rules_fingerprint = data['rulesFingerprint']
|
|
2087
|
+
def effective_at = parse_time(data['effectiveAt'])
|
|
2088
|
+
def changelog = data['changelog']
|
|
2089
|
+
def created_by_account_id = data['createdByAccountId']
|
|
2090
|
+
def published_by_account_id = data['publishedByAccountId']
|
|
2091
|
+
def published_at = parse_time(data['publishedAt'])
|
|
2092
|
+
def superseded_at = parse_time(data['supersededAt'])
|
|
2093
|
+
def created_at = parse_time(data['createdAt'])
|
|
2094
|
+
def updated_at = parse_time(data['updatedAt'])
|
|
2095
|
+
def draft? = status == 'DRAFT'
|
|
2096
|
+
def active? = status == 'ACTIVE'
|
|
2097
|
+
|
|
2098
|
+
def section_definitions
|
|
2099
|
+
@section_definitions ||= (data['sectionDefinitions'] || []).map do |definition|
|
|
2100
|
+
DeckSectionDefinition.new(definition, client: client)
|
|
2101
|
+
end
|
|
2102
|
+
end
|
|
2103
|
+
end
|
|
2104
|
+
|
|
2105
|
+
class DeckValidationRules < Resource
|
|
2106
|
+
def ruleset_id = data['rulesetId']
|
|
2107
|
+
def ruleset_version_id = data['rulesetVersionId']
|
|
2108
|
+
def ruleset_key = data['rulesetKey']
|
|
2109
|
+
def ruleset_version_label = data['rulesetVersionLabel']
|
|
2110
|
+
def rules = data['rules'] || {}
|
|
2111
|
+
|
|
2112
|
+
def sections
|
|
2113
|
+
@sections ||= (data['sections'] || []).map { |section| DeckSectionDefinition.new(section, client: client) }
|
|
2114
|
+
end
|
|
2115
|
+
end
|
|
2116
|
+
|
|
2117
|
+
class RulesetValidationImpactDeck < Resource
|
|
2118
|
+
def deck_id = data['deckId']
|
|
2119
|
+
def title = data['title']
|
|
2120
|
+
def slug = data['slug']
|
|
2121
|
+
def state = data['state']
|
|
2122
|
+
def unpublished_changes? = !!data['hasUnpublishedChanges']
|
|
2123
|
+
def valid? = !!data['valid']
|
|
2124
|
+
def blocker_count = data['blockerCount']
|
|
2125
|
+
def warning_count = data['warningCount']
|
|
2126
|
+
def affected_entry_count = data['affectedEntryCount']
|
|
2127
|
+
|
|
2128
|
+
def issues
|
|
2129
|
+
@issues ||= (data['issues'] || []).map { |issue| DeckValidationIssue.new(issue, client: client) }
|
|
2130
|
+
end
|
|
2131
|
+
end
|
|
2132
|
+
|
|
2133
|
+
class RulesetValidationImpact < Resource
|
|
2134
|
+
def ruleset_id = data['rulesetId']
|
|
2135
|
+
def ruleset_version_id = data['rulesetVersionId']
|
|
2136
|
+
def checked_at = parse_time(data['checkedAt'])
|
|
2137
|
+
def affected_deck_count = data['affectedDeckCount']
|
|
2138
|
+
def invalid_deck_count = data['invalidDeckCount']
|
|
2139
|
+
def blocker_count = data['blockerCount']
|
|
2140
|
+
def warning_count = data['warningCount']
|
|
2141
|
+
|
|
2142
|
+
def results
|
|
2143
|
+
@results ||= (data['results'] || []).map { |deck| RulesetValidationImpactDeck.new(deck, client: client) }
|
|
2144
|
+
end
|
|
2145
|
+
end
|
|
2146
|
+
|
|
2147
|
+
class RulesetVersionDraftImportPreview < Resource
|
|
2148
|
+
def source_dataset_id = data['sourceDatasetId']
|
|
2149
|
+
def source_dataset_version_id = data['sourceDatasetVersionId']
|
|
2150
|
+
def source_dataset_record_id = data['sourceDatasetRecordId']
|
|
2151
|
+
def source_record_identifier = data['sourceRecordIdentifier']
|
|
2152
|
+
def rules = data['rules'] || {}
|
|
2153
|
+
def rules_fingerprint = data['rulesFingerprint']
|
|
2154
|
+
def summary = data['summary']
|
|
2155
|
+
def section_count = data['sectionCount']
|
|
2156
|
+
def copy_limit_count = data['copyLimitCount']
|
|
2157
|
+
|
|
2158
|
+
def section_definitions
|
|
2159
|
+
@section_definitions ||= (data['sectionDefinitions'] || []).map do |definition|
|
|
2160
|
+
DeckSectionDefinition.new(definition, client: client)
|
|
2161
|
+
end
|
|
2162
|
+
end
|
|
2163
|
+
end
|
|
2164
|
+
|
|
2004
2165
|
class DeckSectionDefinition < Resource
|
|
2005
2166
|
def key = data['key']
|
|
2006
2167
|
def label = data['label']
|
data/lib/carddb/query_builder.rb
CHANGED
|
@@ -219,6 +219,42 @@ module CardDB
|
|
|
219
219
|
GRAPHQL
|
|
220
220
|
end
|
|
221
221
|
|
|
222
|
+
def dataset_filter_values(
|
|
223
|
+
fields:,
|
|
224
|
+
id: nil,
|
|
225
|
+
publisher_slug: nil,
|
|
226
|
+
game_key: nil,
|
|
227
|
+
dataset_key: nil,
|
|
228
|
+
search: nil,
|
|
229
|
+
include_counts: nil,
|
|
230
|
+
first: nil,
|
|
231
|
+
after: nil
|
|
232
|
+
)
|
|
233
|
+
raise ArgumentError, 'fields must contain at least one field key' if fields.empty?
|
|
234
|
+
|
|
235
|
+
dataset_lookup = dataset_filter_values_lookup(
|
|
236
|
+
id: id,
|
|
237
|
+
publisher_slug: publisher_slug,
|
|
238
|
+
game_key: game_key,
|
|
239
|
+
dataset_key: dataset_key
|
|
240
|
+
)
|
|
241
|
+
filter_params = { fields: fields, search: search, includeCounts: include_counts, first: first, after: after }.compact
|
|
242
|
+
args = build_args(dataset_lookup.merge(filter_params), required: dataset_lookup.keys + [:fields])
|
|
243
|
+
|
|
244
|
+
dataset_args = graphql_variable_calls(dataset_lookup.keys)
|
|
245
|
+
filter_args = graphql_variable_calls(filter_params.keys)
|
|
246
|
+
|
|
247
|
+
<<~GRAPHQL
|
|
248
|
+
query FetchDatasetFilterValues#{args[:definition]} {
|
|
249
|
+
fetchDataset(#{dataset_args}) {
|
|
250
|
+
filterValues(#{filter_args}) {
|
|
251
|
+
#{dataset_filter_value_connection_fields}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
GRAPHQL
|
|
256
|
+
end
|
|
257
|
+
|
|
222
258
|
def list_datasets(
|
|
223
259
|
publisher_id:,
|
|
224
260
|
game_id: nil,
|
|
@@ -1121,6 +1157,182 @@ module CardDB
|
|
|
1121
1157
|
GRAPHQL
|
|
1122
1158
|
end
|
|
1123
1159
|
|
|
1160
|
+
def rulesets(game_id:, include_archived: nil, first: nil, after: nil)
|
|
1161
|
+
args = build_args(
|
|
1162
|
+
{ gameId: game_id, includeArchived: include_archived, first: first, after: after },
|
|
1163
|
+
required: [:gameId]
|
|
1164
|
+
)
|
|
1165
|
+
|
|
1166
|
+
<<~GRAPHQL
|
|
1167
|
+
query Rulesets#{args[:definition]} {
|
|
1168
|
+
rulesets#{args[:call]} {
|
|
1169
|
+
#{ruleset_connection_fields}
|
|
1170
|
+
}
|
|
1171
|
+
}
|
|
1172
|
+
GRAPHQL
|
|
1173
|
+
end
|
|
1174
|
+
|
|
1175
|
+
def public_rulesets(game_id:, first: nil, after: nil)
|
|
1176
|
+
args = build_args({ gameId: game_id, first: first, after: after }, required: [:gameId])
|
|
1177
|
+
|
|
1178
|
+
<<~GRAPHQL
|
|
1179
|
+
query PublicRulesets#{args[:definition]} {
|
|
1180
|
+
publicRulesets#{args[:call]} {
|
|
1181
|
+
#{ruleset_connection_fields}
|
|
1182
|
+
}
|
|
1183
|
+
}
|
|
1184
|
+
GRAPHQL
|
|
1185
|
+
end
|
|
1186
|
+
|
|
1187
|
+
def ruleset
|
|
1188
|
+
<<~GRAPHQL
|
|
1189
|
+
query Ruleset($id: UUID, $gameId: UUID, $key: String) {
|
|
1190
|
+
ruleset(id: $id, gameId: $gameId, key: $key) {
|
|
1191
|
+
#{ruleset_fields}
|
|
1192
|
+
}
|
|
1193
|
+
}
|
|
1194
|
+
GRAPHQL
|
|
1195
|
+
end
|
|
1196
|
+
|
|
1197
|
+
def ruleset_versions(ruleset_id:, status: nil, first: nil, after: nil)
|
|
1198
|
+
args = build_args(
|
|
1199
|
+
{ rulesetId: ruleset_id, status: status, first: first, after: after },
|
|
1200
|
+
required: [:rulesetId],
|
|
1201
|
+
type_overrides: { status: 'RulesetVersionStatus' }
|
|
1202
|
+
)
|
|
1203
|
+
|
|
1204
|
+
<<~GRAPHQL
|
|
1205
|
+
query RulesetVersions#{args[:definition]} {
|
|
1206
|
+
rulesetVersions#{args[:call]} {
|
|
1207
|
+
#{ruleset_version_connection_fields}
|
|
1208
|
+
}
|
|
1209
|
+
}
|
|
1210
|
+
GRAPHQL
|
|
1211
|
+
end
|
|
1212
|
+
|
|
1213
|
+
def ruleset_version
|
|
1214
|
+
<<~GRAPHQL
|
|
1215
|
+
query RulesetVersion($id: UUID!) {
|
|
1216
|
+
rulesetVersion(id: $id) {
|
|
1217
|
+
#{ruleset_version_fields}
|
|
1218
|
+
}
|
|
1219
|
+
}
|
|
1220
|
+
GRAPHQL
|
|
1221
|
+
end
|
|
1222
|
+
|
|
1223
|
+
def ruleset_validation_rules
|
|
1224
|
+
<<~GRAPHQL
|
|
1225
|
+
query RulesetValidationRules($gameId: UUID!, $rulesetKey: String!, $rulesetVersionId: UUID) {
|
|
1226
|
+
rulesetValidationRules(gameId: $gameId, rulesetKey: $rulesetKey, rulesetVersionId: $rulesetVersionId)
|
|
1227
|
+
}
|
|
1228
|
+
GRAPHQL
|
|
1229
|
+
end
|
|
1230
|
+
|
|
1231
|
+
def deck_validation_rules
|
|
1232
|
+
<<~GRAPHQL
|
|
1233
|
+
query DeckValidationRules($gameId: UUID!, $rulesetKey: String!, $rulesetVersionId: UUID) {
|
|
1234
|
+
deckValidationRules(gameId: $gameId, rulesetKey: $rulesetKey, rulesetVersionId: $rulesetVersionId) {
|
|
1235
|
+
#{deck_validation_rules_fields}
|
|
1236
|
+
}
|
|
1237
|
+
}
|
|
1238
|
+
GRAPHQL
|
|
1239
|
+
end
|
|
1240
|
+
|
|
1241
|
+
def ruleset_version_draft_import_preview
|
|
1242
|
+
<<~GRAPHQL
|
|
1243
|
+
query RulesetVersionDraftImportPreview($rulesetId: UUID!, $input: RulesetVersionDraftImportFromDatasetRecordInput!) {
|
|
1244
|
+
rulesetVersionDraftImportPreview(rulesetId: $rulesetId, input: $input) {
|
|
1245
|
+
#{ruleset_version_draft_import_preview_fields}
|
|
1246
|
+
}
|
|
1247
|
+
}
|
|
1248
|
+
GRAPHQL
|
|
1249
|
+
end
|
|
1250
|
+
|
|
1251
|
+
def ruleset_validation_impact(ruleset_version_id:, first: nil)
|
|
1252
|
+
args = build_args(
|
|
1253
|
+
{ rulesetVersionId: ruleset_version_id, first: first },
|
|
1254
|
+
required: [:rulesetVersionId]
|
|
1255
|
+
)
|
|
1256
|
+
|
|
1257
|
+
<<~GRAPHQL
|
|
1258
|
+
query RulesetValidationImpact#{args[:definition]} {
|
|
1259
|
+
rulesetValidationImpact#{args[:call]} {
|
|
1260
|
+
#{ruleset_validation_impact_fields}
|
|
1261
|
+
}
|
|
1262
|
+
}
|
|
1263
|
+
GRAPHQL
|
|
1264
|
+
end
|
|
1265
|
+
|
|
1266
|
+
def create_ruleset
|
|
1267
|
+
<<~GRAPHQL
|
|
1268
|
+
mutation RulesetCreate($input: RulesetCreateInput!) {
|
|
1269
|
+
rulesetCreate(input: $input) {
|
|
1270
|
+
#{ruleset_fields}
|
|
1271
|
+
}
|
|
1272
|
+
}
|
|
1273
|
+
GRAPHQL
|
|
1274
|
+
end
|
|
1275
|
+
|
|
1276
|
+
def update_ruleset
|
|
1277
|
+
<<~GRAPHQL
|
|
1278
|
+
mutation RulesetUpdate($id: UUID!, $input: RulesetUpdateInput!) {
|
|
1279
|
+
rulesetUpdate(id: $id, input: $input) {
|
|
1280
|
+
#{ruleset_fields}
|
|
1281
|
+
}
|
|
1282
|
+
}
|
|
1283
|
+
GRAPHQL
|
|
1284
|
+
end
|
|
1285
|
+
|
|
1286
|
+
def create_ruleset_version_draft
|
|
1287
|
+
<<~GRAPHQL
|
|
1288
|
+
mutation RulesetVersionDraftCreate($rulesetId: UUID!, $input: RulesetVersionDraftCreateInput!) {
|
|
1289
|
+
rulesetVersionDraftCreate(rulesetId: $rulesetId, input: $input) {
|
|
1290
|
+
#{ruleset_version_fields}
|
|
1291
|
+
}
|
|
1292
|
+
}
|
|
1293
|
+
GRAPHQL
|
|
1294
|
+
end
|
|
1295
|
+
|
|
1296
|
+
def import_ruleset_version_draft_from_dataset_record
|
|
1297
|
+
<<~GRAPHQL
|
|
1298
|
+
mutation RulesetVersionDraftImportFromDatasetRecord($rulesetId: UUID!, $input: RulesetVersionDraftImportFromDatasetRecordInput!) {
|
|
1299
|
+
rulesetVersionDraftImportFromDatasetRecord(rulesetId: $rulesetId, input: $input) {
|
|
1300
|
+
#{ruleset_version_fields}
|
|
1301
|
+
}
|
|
1302
|
+
}
|
|
1303
|
+
GRAPHQL
|
|
1304
|
+
end
|
|
1305
|
+
|
|
1306
|
+
def update_ruleset_version_draft
|
|
1307
|
+
<<~GRAPHQL
|
|
1308
|
+
mutation RulesetVersionDraftUpdate($id: UUID!, $input: RulesetVersionDraftUpdateInput!) {
|
|
1309
|
+
rulesetVersionDraftUpdate(id: $id, input: $input) {
|
|
1310
|
+
#{ruleset_version_fields}
|
|
1311
|
+
}
|
|
1312
|
+
}
|
|
1313
|
+
GRAPHQL
|
|
1314
|
+
end
|
|
1315
|
+
|
|
1316
|
+
def publish_ruleset_version
|
|
1317
|
+
<<~GRAPHQL
|
|
1318
|
+
mutation RulesetVersionPublish($id: UUID!, $input: RulesetVersionPublishInput) {
|
|
1319
|
+
rulesetVersionPublish(id: $id, input: $input) {
|
|
1320
|
+
#{ruleset_version_fields}
|
|
1321
|
+
}
|
|
1322
|
+
}
|
|
1323
|
+
GRAPHQL
|
|
1324
|
+
end
|
|
1325
|
+
|
|
1326
|
+
def activate_ruleset_version
|
|
1327
|
+
<<~GRAPHQL
|
|
1328
|
+
mutation RulesetVersionActivate($id: UUID!) {
|
|
1329
|
+
rulesetVersionActivate(id: $id) {
|
|
1330
|
+
#{ruleset_version_fields}
|
|
1331
|
+
}
|
|
1332
|
+
}
|
|
1333
|
+
GRAPHQL
|
|
1334
|
+
end
|
|
1335
|
+
|
|
1124
1336
|
# Builds a deckCollaborators query
|
|
1125
1337
|
def deck_collaborators
|
|
1126
1338
|
<<~GRAPHQL
|
|
@@ -1557,6 +1769,7 @@ module CardDB
|
|
|
1557
1769
|
externalRef: 'String',
|
|
1558
1770
|
deckId: 'UUID!',
|
|
1559
1771
|
gameId: 'UUID',
|
|
1772
|
+
rulesetId: 'UUID',
|
|
1560
1773
|
rulesetKey: 'String',
|
|
1561
1774
|
rulesetVersionId: 'UUID',
|
|
1562
1775
|
validateSchema: 'Boolean',
|
|
@@ -1564,6 +1777,8 @@ module CardDB
|
|
|
1564
1777
|
status: 'String',
|
|
1565
1778
|
level: 'String',
|
|
1566
1779
|
key: 'String',
|
|
1780
|
+
fields: '[String!]',
|
|
1781
|
+
includeCounts: 'Boolean',
|
|
1567
1782
|
id: 'UUID!',
|
|
1568
1783
|
ids: '[UUID!]!'
|
|
1569
1784
|
}
|
|
@@ -1583,6 +1798,18 @@ module CardDB
|
|
|
1583
1798
|
end
|
|
1584
1799
|
# rubocop:enable Metrics/MethodLength
|
|
1585
1800
|
|
|
1801
|
+
def dataset_filter_values_lookup(id:, publisher_slug:, game_key:, dataset_key:)
|
|
1802
|
+
return { id: id } if id
|
|
1803
|
+
|
|
1804
|
+
raise ArgumentError, 'provide either id or publisher_slug, game_key, and dataset_key' unless [publisher_slug, game_key, dataset_key].all?
|
|
1805
|
+
|
|
1806
|
+
{ publisherSlug: publisher_slug, gameKey: game_key, datasetKey: dataset_key }
|
|
1807
|
+
end
|
|
1808
|
+
|
|
1809
|
+
def graphql_variable_calls(keys)
|
|
1810
|
+
keys.map { |key| "#{key}: $#{key}" }.join(', ')
|
|
1811
|
+
end
|
|
1812
|
+
|
|
1586
1813
|
def file_fields
|
|
1587
1814
|
<<~FIELDS
|
|
1588
1815
|
id
|
|
@@ -1753,6 +1980,25 @@ module CardDB
|
|
|
1753
1980
|
FIELDS
|
|
1754
1981
|
end
|
|
1755
1982
|
|
|
1983
|
+
def dataset_filter_value_connection_fields
|
|
1984
|
+
<<~FIELDS
|
|
1985
|
+
field
|
|
1986
|
+
edges {
|
|
1987
|
+
cursor
|
|
1988
|
+
node {
|
|
1989
|
+
value
|
|
1990
|
+
count
|
|
1991
|
+
}
|
|
1992
|
+
}
|
|
1993
|
+
pageInfo {
|
|
1994
|
+
hasNextPage
|
|
1995
|
+
hasPreviousPage
|
|
1996
|
+
startCursor
|
|
1997
|
+
endCursor
|
|
1998
|
+
}
|
|
1999
|
+
FIELDS
|
|
2000
|
+
end
|
|
2001
|
+
|
|
1756
2002
|
# rubocop:disable Metrics/MethodLength
|
|
1757
2003
|
def field_info_fields(depth:)
|
|
1758
2004
|
nested_fields = if depth.positive?
|
|
@@ -2585,6 +2831,121 @@ module CardDB
|
|
|
2585
2831
|
FIELDS
|
|
2586
2832
|
end
|
|
2587
2833
|
|
|
2834
|
+
def ruleset_version_fields
|
|
2835
|
+
<<~FIELDS
|
|
2836
|
+
id
|
|
2837
|
+
rulesetId
|
|
2838
|
+
versionLabel
|
|
2839
|
+
status
|
|
2840
|
+
rules
|
|
2841
|
+
sectionDefinitions {
|
|
2842
|
+
#{deck_section_definition_fields}
|
|
2843
|
+
}
|
|
2844
|
+
cardDatasetId
|
|
2845
|
+
cardDatasetVersionId
|
|
2846
|
+
sourceDatasetId
|
|
2847
|
+
sourceDatasetVersionId
|
|
2848
|
+
sourceDatasetRecordId
|
|
2849
|
+
sourceRecordIdentifier
|
|
2850
|
+
rulesFingerprint
|
|
2851
|
+
effectiveAt
|
|
2852
|
+
changelog
|
|
2853
|
+
createdByAccountId
|
|
2854
|
+
publishedByAccountId
|
|
2855
|
+
publishedAt
|
|
2856
|
+
supersededAt
|
|
2857
|
+
createdAt
|
|
2858
|
+
updatedAt
|
|
2859
|
+
FIELDS
|
|
2860
|
+
end
|
|
2861
|
+
|
|
2862
|
+
def ruleset_fields
|
|
2863
|
+
<<~FIELDS
|
|
2864
|
+
id
|
|
2865
|
+
gameId
|
|
2866
|
+
game {
|
|
2867
|
+
id
|
|
2868
|
+
key
|
|
2869
|
+
name
|
|
2870
|
+
}
|
|
2871
|
+
key
|
|
2872
|
+
name
|
|
2873
|
+
description
|
|
2874
|
+
tags
|
|
2875
|
+
sortOrder
|
|
2876
|
+
currentVersionId
|
|
2877
|
+
currentVersion {
|
|
2878
|
+
#{ruleset_version_fields}
|
|
2879
|
+
}
|
|
2880
|
+
archivedAt
|
|
2881
|
+
isArchived
|
|
2882
|
+
createdAt
|
|
2883
|
+
updatedAt
|
|
2884
|
+
FIELDS
|
|
2885
|
+
end
|
|
2886
|
+
|
|
2887
|
+
def deck_validation_rules_fields
|
|
2888
|
+
<<~FIELDS
|
|
2889
|
+
rulesetId
|
|
2890
|
+
rulesetVersionId
|
|
2891
|
+
rulesetKey
|
|
2892
|
+
rulesetVersionLabel
|
|
2893
|
+
rules
|
|
2894
|
+
sections {
|
|
2895
|
+
#{deck_section_definition_fields}
|
|
2896
|
+
}
|
|
2897
|
+
FIELDS
|
|
2898
|
+
end
|
|
2899
|
+
|
|
2900
|
+
def ruleset_validation_impact_deck_fields
|
|
2901
|
+
<<~FIELDS
|
|
2902
|
+
deckId
|
|
2903
|
+
title
|
|
2904
|
+
slug
|
|
2905
|
+
state
|
|
2906
|
+
hasUnpublishedChanges
|
|
2907
|
+
valid
|
|
2908
|
+
blockerCount
|
|
2909
|
+
warningCount
|
|
2910
|
+
affectedEntryCount
|
|
2911
|
+
issues {
|
|
2912
|
+
#{deck_validation_issue_fields}
|
|
2913
|
+
}
|
|
2914
|
+
FIELDS
|
|
2915
|
+
end
|
|
2916
|
+
|
|
2917
|
+
def ruleset_validation_impact_fields
|
|
2918
|
+
<<~FIELDS
|
|
2919
|
+
rulesetId
|
|
2920
|
+
rulesetVersionId
|
|
2921
|
+
checkedAt
|
|
2922
|
+
affectedDeckCount
|
|
2923
|
+
invalidDeckCount
|
|
2924
|
+
blockerCount
|
|
2925
|
+
warningCount
|
|
2926
|
+
results {
|
|
2927
|
+
#{ruleset_validation_impact_deck_fields}
|
|
2928
|
+
}
|
|
2929
|
+
FIELDS
|
|
2930
|
+
end
|
|
2931
|
+
|
|
2932
|
+
def ruleset_version_draft_import_preview_fields
|
|
2933
|
+
<<~FIELDS
|
|
2934
|
+
sourceDatasetId
|
|
2935
|
+
sourceDatasetVersionId
|
|
2936
|
+
sourceDatasetRecordId
|
|
2937
|
+
sourceRecordIdentifier
|
|
2938
|
+
rules
|
|
2939
|
+
sectionDefinitions {
|
|
2940
|
+
#{deck_section_definition_fields}
|
|
2941
|
+
}
|
|
2942
|
+
rulesFingerprint
|
|
2943
|
+
summary
|
|
2944
|
+
sectionCount
|
|
2945
|
+
copyLimitCount
|
|
2946
|
+
FIELDS
|
|
2947
|
+
end
|
|
2948
|
+
|
|
2588
2949
|
def deck_diff_fields
|
|
2589
2950
|
<<~FIELDS
|
|
2590
2951
|
deckId
|
|
@@ -2796,6 +3157,14 @@ module CardDB
|
|
|
2796
3157
|
FIELDS
|
|
2797
3158
|
end
|
|
2798
3159
|
|
|
3160
|
+
def ruleset_connection_fields
|
|
3161
|
+
connection_fields(ruleset_fields)
|
|
3162
|
+
end
|
|
3163
|
+
|
|
3164
|
+
def ruleset_version_connection_fields
|
|
3165
|
+
connection_fields(ruleset_version_fields)
|
|
3166
|
+
end
|
|
3167
|
+
|
|
2799
3168
|
def deck_collaborator_fields
|
|
2800
3169
|
<<~FIELDS
|
|
2801
3170
|
id
|
|
@@ -186,6 +186,65 @@ module CardDB
|
|
|
186
186
|
(data['fetchDatasets'] || []).map { |d| Dataset.new(d, client: client) }
|
|
187
187
|
end
|
|
188
188
|
|
|
189
|
+
# Get distinct values for one or more filterable fields on a dataset.
|
|
190
|
+
#
|
|
191
|
+
# @param fields [Array<String, Symbol>] Field keys to fetch values for
|
|
192
|
+
# @param id [String, nil] Dataset UUID. Provide either id or dataset_key.
|
|
193
|
+
# @param dataset_key [String, nil] Dataset key when looking up by publisher/game keys
|
|
194
|
+
# @param publisher_slug [String, nil] Publisher slug (uses default if not provided)
|
|
195
|
+
# @param game_key [String, nil] Game key (uses default if not provided)
|
|
196
|
+
# @param search [String, nil] Optional case-insensitive search within values
|
|
197
|
+
# @param include_counts [Boolean, nil] Include per-value counts
|
|
198
|
+
# @param first [Integer, nil] Maximum values per field (max 500)
|
|
199
|
+
# @param after [String, nil] Cursor for pagination. Applies to each field.
|
|
200
|
+
# @return [Array<DatasetFilterValueConnection>]
|
|
201
|
+
def filter_values(
|
|
202
|
+
fields:,
|
|
203
|
+
id: nil,
|
|
204
|
+
dataset_key: nil,
|
|
205
|
+
publisher_slug: nil,
|
|
206
|
+
game_key: nil,
|
|
207
|
+
search: nil,
|
|
208
|
+
include_counts: nil,
|
|
209
|
+
first: nil,
|
|
210
|
+
after: nil,
|
|
211
|
+
cache: nil
|
|
212
|
+
)
|
|
213
|
+
field_keys = fields.map(&:to_s)
|
|
214
|
+
resolved_publisher = id ? nil : resolve_publisher(publisher_slug)
|
|
215
|
+
resolved_game = id ? nil : resolve_game(game_key)
|
|
216
|
+
|
|
217
|
+
validate_access!(resolved_publisher, resolved_game) unless id
|
|
218
|
+
|
|
219
|
+
query = QueryBuilder.dataset_filter_values(
|
|
220
|
+
id: id,
|
|
221
|
+
publisher_slug: resolved_publisher,
|
|
222
|
+
game_key: resolved_game,
|
|
223
|
+
dataset_key: dataset_key,
|
|
224
|
+
fields: field_keys,
|
|
225
|
+
search: search,
|
|
226
|
+
include_counts: include_counts,
|
|
227
|
+
first: first,
|
|
228
|
+
after: after
|
|
229
|
+
)
|
|
230
|
+
variables = build_variables(
|
|
231
|
+
id: id,
|
|
232
|
+
publisherSlug: resolved_publisher,
|
|
233
|
+
gameKey: resolved_game,
|
|
234
|
+
datasetKey: dataset_key,
|
|
235
|
+
fields: field_keys,
|
|
236
|
+
search: search,
|
|
237
|
+
includeCounts: include_counts,
|
|
238
|
+
first: first,
|
|
239
|
+
after: after
|
|
240
|
+
)
|
|
241
|
+
key = cache_key('datasets', 'filter_values', **variables)
|
|
242
|
+
|
|
243
|
+
data = with_cache(key, resource: :datasets, cache: cache) { connection.execute(query, variables) }
|
|
244
|
+
filter_values = data.dig('fetchDataset', 'filterValues') || []
|
|
245
|
+
filter_values.map { |value| DatasetFilterValueConnection.new(value) }
|
|
246
|
+
end
|
|
247
|
+
|
|
189
248
|
# Get the schema for a dataset
|
|
190
249
|
#
|
|
191
250
|
# @param dataset_key [String] Dataset key
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module CardDB
|
|
4
|
+
module Resources
|
|
5
|
+
# First-class rulesets resource for deck validation rules.
|
|
6
|
+
class Rulesets < Base
|
|
7
|
+
def list(game_id:, include_archived: nil, first: nil, after: nil, cache: nil)
|
|
8
|
+
query = QueryBuilder.rulesets(
|
|
9
|
+
game_id: game_id,
|
|
10
|
+
include_archived: include_archived,
|
|
11
|
+
first: first,
|
|
12
|
+
after: after
|
|
13
|
+
)
|
|
14
|
+
variables = build_variables(gameId: game_id, includeArchived: include_archived, first: first, after: after)
|
|
15
|
+
key = cache_key('rulesets', 'list', **variables)
|
|
16
|
+
|
|
17
|
+
data = with_cache(key, resource: :rulesets, cache: cache) do
|
|
18
|
+
connection.execute(query, variables)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
Collection.new(
|
|
22
|
+
data['rulesets'],
|
|
23
|
+
item_class: Ruleset,
|
|
24
|
+
next_page_loader: ->(cursor) { list(game_id: game_id, include_archived: include_archived, first: first, after: cursor, cache: cache) },
|
|
25
|
+
client: client
|
|
26
|
+
)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def list_public(game_id:, first: nil, after: nil, cache: nil)
|
|
30
|
+
query = QueryBuilder.public_rulesets(game_id: game_id, first: first, after: after)
|
|
31
|
+
variables = build_variables(gameId: game_id, first: first, after: after)
|
|
32
|
+
key = cache_key('rulesets', 'list_public', **variables)
|
|
33
|
+
|
|
34
|
+
data = with_cache(key, resource: :rulesets, cache: cache) do
|
|
35
|
+
connection.execute(query, variables)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
Collection.new(
|
|
39
|
+
data['publicRulesets'],
|
|
40
|
+
item_class: Ruleset,
|
|
41
|
+
next_page_loader: ->(cursor) { list_public(game_id: game_id, first: first, after: cursor, cache: cache) },
|
|
42
|
+
client: client
|
|
43
|
+
)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def get(id, cache: nil)
|
|
47
|
+
key = cache_key('rulesets', 'get', id: id)
|
|
48
|
+
with_cache(key, resource: :rulesets, cache: cache) do
|
|
49
|
+
data = connection.execute(QueryBuilder.ruleset, { id: id })
|
|
50
|
+
data['ruleset'] ? Ruleset.new(data['ruleset'], client: client) : nil
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def get_by_key(game_id:, key:, cache: nil)
|
|
55
|
+
cache_key_value = cache_key('rulesets', 'get_by_key', game_id: game_id, key: key)
|
|
56
|
+
with_cache(cache_key_value, resource: :rulesets, cache: cache) do
|
|
57
|
+
data = connection.execute(QueryBuilder.ruleset, { gameId: game_id, key: key })
|
|
58
|
+
data['ruleset'] ? Ruleset.new(data['ruleset'], client: client) : nil
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def versions(ruleset_id:, status: nil, first: nil, after: nil, cache: nil)
|
|
63
|
+
query = QueryBuilder.ruleset_versions(ruleset_id: ruleset_id, status: status, first: first, after: after)
|
|
64
|
+
variables = build_variables(rulesetId: ruleset_id, status: status, first: first, after: after)
|
|
65
|
+
key = cache_key('rulesets', 'versions', **variables)
|
|
66
|
+
|
|
67
|
+
data = with_cache(key, resource: :rulesets, cache: cache) do
|
|
68
|
+
connection.execute(query, variables)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
Collection.new(
|
|
72
|
+
data['rulesetVersions'],
|
|
73
|
+
item_class: RulesetVersion,
|
|
74
|
+
next_page_loader: ->(cursor) { versions(ruleset_id: ruleset_id, status: status, first: first, after: cursor, cache: cache) },
|
|
75
|
+
client: client
|
|
76
|
+
)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def get_version(id, cache: nil)
|
|
80
|
+
key = cache_key('rulesets', 'get_version', id: id)
|
|
81
|
+
with_cache(key, resource: :rulesets, cache: cache) do
|
|
82
|
+
data = connection.execute(QueryBuilder.ruleset_version, { id: id })
|
|
83
|
+
data['rulesetVersion'] ? RulesetVersion.new(data['rulesetVersion'], client: client) : nil
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def validation_rules(game_id:, ruleset_key:, ruleset_version_id: nil, cache: nil)
|
|
88
|
+
variables = build_variables(gameId: game_id, rulesetKey: ruleset_key, rulesetVersionId: ruleset_version_id)
|
|
89
|
+
key = cache_key('rulesets', 'validation_rules', **variables)
|
|
90
|
+
|
|
91
|
+
with_cache(key, resource: :rulesets, cache: cache) do
|
|
92
|
+
data = connection.execute(QueryBuilder.ruleset_validation_rules, variables)
|
|
93
|
+
data['rulesetValidationRules']
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def deck_validation_rules(game_id:, ruleset_key:, ruleset_version_id: nil, cache: nil)
|
|
98
|
+
variables = build_variables(gameId: game_id, rulesetKey: ruleset_key, rulesetVersionId: ruleset_version_id)
|
|
99
|
+
key = cache_key('rulesets', 'deck_validation_rules', **variables)
|
|
100
|
+
|
|
101
|
+
with_cache(key, resource: :rulesets, cache: cache) do
|
|
102
|
+
data = connection.execute(QueryBuilder.deck_validation_rules, variables)
|
|
103
|
+
data['deckValidationRules'] ? DeckValidationRules.new(data['deckValidationRules'], client: client) : nil
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def preview_import(ruleset_id:, input:)
|
|
108
|
+
data = connection.execute(
|
|
109
|
+
QueryBuilder.ruleset_version_draft_import_preview,
|
|
110
|
+
{ rulesetId: ruleset_id, input: input }
|
|
111
|
+
)
|
|
112
|
+
RulesetVersionDraftImportPreview.new(data['rulesetVersionDraftImportPreview'], client: client)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def validation_impact(ruleset_version_id:, first: nil, cache: nil)
|
|
116
|
+
query = QueryBuilder.ruleset_validation_impact(ruleset_version_id: ruleset_version_id, first: first)
|
|
117
|
+
variables = build_variables(rulesetVersionId: ruleset_version_id, first: first)
|
|
118
|
+
key = cache_key('rulesets', 'validation_impact', **variables)
|
|
119
|
+
|
|
120
|
+
with_cache(key, resource: :rulesets, cache: cache) do
|
|
121
|
+
data = connection.execute(query, variables)
|
|
122
|
+
RulesetValidationImpact.new(data['rulesetValidationImpact'], client: client)
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def create(input:)
|
|
127
|
+
config.require_secret_credential!('rulesets.create')
|
|
128
|
+
|
|
129
|
+
data = connection.execute(QueryBuilder.create_ruleset, { input: input })
|
|
130
|
+
Ruleset.new(data['rulesetCreate'], client: client)
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def update(id:, input:)
|
|
134
|
+
config.require_secret_credential!('rulesets.update')
|
|
135
|
+
|
|
136
|
+
data = connection.execute(QueryBuilder.update_ruleset, { id: id, input: input })
|
|
137
|
+
Ruleset.new(data['rulesetUpdate'], client: client)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def create_draft(ruleset_id:, input:)
|
|
141
|
+
config.require_secret_credential!('rulesets.create_draft')
|
|
142
|
+
|
|
143
|
+
data = connection.execute(QueryBuilder.create_ruleset_version_draft, { rulesetId: ruleset_id, input: input })
|
|
144
|
+
RulesetVersion.new(data['rulesetVersionDraftCreate'], client: client)
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def import_draft_from_dataset_record(ruleset_id:, input:)
|
|
148
|
+
config.require_secret_credential!('rulesets.import_draft_from_dataset_record')
|
|
149
|
+
|
|
150
|
+
data = connection.execute(
|
|
151
|
+
QueryBuilder.import_ruleset_version_draft_from_dataset_record,
|
|
152
|
+
{ rulesetId: ruleset_id, input: input }
|
|
153
|
+
)
|
|
154
|
+
RulesetVersion.new(data['rulesetVersionDraftImportFromDatasetRecord'], client: client)
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def update_draft(id:, input:)
|
|
158
|
+
config.require_secret_credential!('rulesets.update_draft')
|
|
159
|
+
|
|
160
|
+
data = connection.execute(QueryBuilder.update_ruleset_version_draft, { id: id, input: input })
|
|
161
|
+
RulesetVersion.new(data['rulesetVersionDraftUpdate'], client: client)
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def publish_version(id:, input: nil)
|
|
165
|
+
config.require_secret_credential!('rulesets.publish_version')
|
|
166
|
+
|
|
167
|
+
variables = input.nil? ? { id: id } : { id: id, input: input }
|
|
168
|
+
data = connection.execute(QueryBuilder.publish_ruleset_version, variables)
|
|
169
|
+
RulesetVersion.new(data['rulesetVersionPublish'], client: client)
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def activate_version(id:)
|
|
173
|
+
config.require_secret_credential!('rulesets.activate_version')
|
|
174
|
+
|
|
175
|
+
data = connection.execute(QueryBuilder.activate_ruleset_version, { id: id })
|
|
176
|
+
RulesetVersion.new(data['rulesetVersionActivate'], client: client)
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
end
|
data/lib/carddb/version.rb
CHANGED
data/lib/carddb.rb
CHANGED
|
@@ -22,6 +22,7 @@ require_relative 'carddb/resources/scans'
|
|
|
22
22
|
require_relative 'carddb/resources/scan_templates'
|
|
23
23
|
require_relative 'carddb/resources/decks'
|
|
24
24
|
require_relative 'carddb/resources/rules'
|
|
25
|
+
require_relative 'carddb/resources/rulesets'
|
|
25
26
|
require_relative 'carddb/batch'
|
|
26
27
|
require_relative 'carddb/client'
|
|
27
28
|
|
|
@@ -173,6 +174,13 @@ module CardDB
|
|
|
173
174
|
default_client.rules
|
|
174
175
|
end
|
|
175
176
|
|
|
177
|
+
# Access the Rulesets resource via the default client.
|
|
178
|
+
#
|
|
179
|
+
# @return [Resources::Rulesets]
|
|
180
|
+
def rulesets
|
|
181
|
+
default_client.rulesets
|
|
182
|
+
end
|
|
183
|
+
|
|
176
184
|
# Get information about the current API key.
|
|
177
185
|
#
|
|
178
186
|
# @return [Hash, nil]
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: carddb
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- CardDB Team
|
|
@@ -95,6 +95,7 @@ files:
|
|
|
95
95
|
- lib/carddb/resources/publishers.rb
|
|
96
96
|
- lib/carddb/resources/records.rb
|
|
97
97
|
- lib/carddb/resources/rules.rb
|
|
98
|
+
- lib/carddb/resources/rulesets.rb
|
|
98
99
|
- lib/carddb/resources/scan_templates.rb
|
|
99
100
|
- lib/carddb/resources/scans.rb
|
|
100
101
|
- lib/carddb/version.rb
|