carddb 0.3.10 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6c863ea4e71294af6d0772881b2e62014ac0d0557849909024e059abcec923cf
4
- data.tar.gz: 74fb0042d233b5956b61089d0a6a04d423ec500e389aa2b1fd9b536e18360ced
3
+ metadata.gz: 0f5108551bc583cc7ea3ca56cc842683dc8a3f83313c7b236d8269521d1bc725
4
+ data.tar.gz: b6e0ec28519dd9b78c4e4b863be089994fd0974f2cf2b440ccf209341c9ee81a
5
5
  SHA512:
6
- metadata.gz: c7728fddf519b8890e3dec092720d31c8bda2bf4bcdf8ee44fff54f215f6256e53d56a7f7b73291767de563f2a42187d9dbf604514275d3a58a7a3d0172671a3
7
- data.tar.gz: 6f59cf062792c4286cbc4c86f670f68706b7508876765b1c5b2a0e0c0e4aded17b7f99ed9d1988f63ff41845b6f1642a7dbde8b83bde79a9c988e9618a30e9f6
6
+ metadata.gz: 9f8fb9b7f0bce34e14dc47fb0459f6ea30138a3928dc6b66b6c4a7d747814f01cde6d4326aad2b7e3d30222b047ccb02d8a4eb9b321ec4f7cee5591141ac49a5
7
+ data.tar.gz: c9bddb09ebc1db4670d0ed39e668b7600e9da0ef890ef3fdccbf3b88619bc4448b5a523161260da579a7ad75f473d6d3a60d54949315d40c976e85661f325cc4
data/.rspec_status CHANGED
@@ -1,171 +1,188 @@
1
1
  example_id | status | run_time |
2
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 |
3
+ ./spec/carddb/client_spec.rb[1:1:1] | passed | 0.00026 seconds |
4
+ ./spec/carddb/client_spec.rb[1:1:2] | passed | 0.00004 seconds |
5
5
  ./spec/carddb/client_spec.rb[1:1:3] | passed | 0.00004 seconds |
6
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 |
7
+ ./spec/carddb/client_spec.rb[1:2:1] | passed | 0.00013 seconds |
8
+ ./spec/carddb/client_spec.rb[1:2:2] | passed | 0.00016 seconds |
9
9
  ./spec/carddb/client_spec.rb[1:3:1] | passed | 0.00003 seconds |
10
10
  ./spec/carddb/client_spec.rb[1:4:1] | passed | 0.00003 seconds |
11
11
  ./spec/carddb/client_spec.rb[1:5:1] | passed | 0.00003 seconds |
12
12
  ./spec/carddb/client_spec.rb[1:6:1] | passed | 0.00003 seconds |
13
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 |
14
+ ./spec/carddb/client_spec.rb[1:8:1] | passed | 0.00004 seconds |
15
15
  ./spec/carddb/client_spec.rb[1:9:1] | passed | 0.00003 seconds |
16
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 |
17
+ ./spec/carddb/client_spec.rb[1:11:1] | passed | 0.00003 seconds |
18
+ ./spec/carddb/client_spec.rb[1:12:1] | passed | 0.00004 seconds |
19
+ ./spec/carddb/client_spec.rb[1:13:1] | passed | 0.00025 seconds |
20
+ ./spec/carddb/client_spec.rb[1:13:2] | passed | 0.00832 seconds |
21
+ ./spec/carddb/collection_spec.rb[1:1:1] | passed | 0.00005 seconds |
22
+ ./spec/carddb/collection_spec.rb[2:1:1] | passed | 0.00003 seconds |
23
+ ./spec/carddb/collection_spec.rb[3:1:1] | passed | 0.00176 seconds |
22
24
  ./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 |
25
+ ./spec/carddb/collection_spec.rb[3:1:3] | passed | 0.00048 seconds |
24
26
  ./spec/carddb/collection_spec.rb[3:1:4] | passed | 0.00034 seconds |
25
27
  ./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 |
28
+ ./spec/carddb/collection_spec.rb[4:1:1] | passed | 0.00016 seconds |
29
+ ./spec/carddb/collection_spec.rb[4:1:2] | passed | 0.00014 seconds |
30
+ ./spec/carddb/collection_spec.rb[4:1:3] | passed | 0.00016 seconds |
29
31
  ./spec/carddb/collection_spec.rb[4:1:4] | passed | 0.00004 seconds |
30
32
  ./spec/carddb/configuration_spec.rb[1:1:1] | passed | 0.00003 seconds |
31
33
  ./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:3] | passed | 0.00004 seconds |
35
+ ./spec/carddb/configuration_spec.rb[1:1:4] | passed | 0.00004 seconds |
34
36
  ./spec/carddb/configuration_spec.rb[1:1:5] | passed | 0.00003 seconds |
35
37
  ./spec/carddb/configuration_spec.rb[1:1:6] | passed | 0.00003 seconds |
36
38
  ./spec/carddb/configuration_spec.rb[1:2:1:1] | passed | 0.00004 seconds |
37
39
  ./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 |
40
+ ./spec/carddb/configuration_spec.rb[1:2:2:2] | passed | 0.00005 seconds |
39
41
  ./spec/carddb/configuration_spec.rb[1:3:1:1] | passed | 0.00003 seconds |
40
42
  ./spec/carddb/configuration_spec.rb[1:3:2:1] | passed | 0.00003 seconds |
41
43
  ./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 |
44
+ ./spec/carddb/configuration_spec.rb[1:3:2:3] | passed | 0.00004 seconds |
43
45
  ./spec/carddb/configuration_spec.rb[1:4:1] | passed | 0.00003 seconds |
44
46
  ./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:5:1] | passed | 0.00003 seconds |
48
+ ./spec/carddb/configuration_spec.rb[1:6:1] | passed | 0.00004 seconds |
47
49
  ./spec/carddb/configuration_spec.rb[1:6:2] | passed | 0.00003 seconds |
48
50
  ./spec/carddb/configuration_spec.rb[1:6:3] | passed | 0.00003 seconds |
49
51
  ./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 |
52
+ ./spec/carddb/configuration_spec.rb[1:7:2] | passed | 0.00004 seconds |
51
53
  ./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 |
54
+ ./spec/carddb/deck_tokens_spec.rb[1:1:1] | passed | 0.00063 seconds |
55
+ ./spec/carddb/deck_tokens_spec.rb[1:2:1] | passed | 0.00068 seconds |
56
+ ./spec/carddb/deck_tokens_spec.rb[1:2:2] | passed | 0.00022 seconds |
57
+ ./spec/carddb/deck_tokens_spec.rb[1:2:3] | passed | 0.00006 seconds |
58
+ ./spec/carddb/filter_builder_spec.rb[1:1:1] | passed | 0.00003 seconds |
59
+ ./spec/carddb/filter_builder_spec.rb[1:1:2] | passed | 0.00004 seconds |
60
+ ./spec/carddb/filter_builder_spec.rb[1:1:3] | passed | 0.00004 seconds |
55
61
  ./spec/carddb/filter_builder_spec.rb[1:1:4] | passed | 0.00003 seconds |
56
62
  ./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 |
63
+ ./spec/carddb/filter_builder_spec.rb[1:1:6] | passed | 0.00004 seconds |
58
64
  ./spec/carddb/filter_builder_spec.rb[1:1:7] | passed | 0.00003 seconds |
59
65
  ./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 |
66
+ ./spec/carddb/filter_builder_spec.rb[1:2:1] | passed | 0.00004 seconds |
61
67
  ./spec/carddb/filter_builder_spec.rb[1:2:2] | passed | 0.00003 seconds |
62
68
  ./spec/carddb/filter_builder_spec.rb[1:2:3] | passed | 0.00003 seconds |
63
69
  ./spec/carddb/filter_builder_spec.rb[1:2:4] | passed | 0.00003 seconds |
64
70
  ./spec/carddb/filter_builder_spec.rb[1:2:5] | passed | 0.00003 seconds |
65
71
  ./spec/carddb/filter_builder_spec.rb[1:2:6] | passed | 0.00003 seconds |
66
72
  ./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 |
73
+ ./spec/carddb/filter_builder_spec.rb[1:2:8] | passed | 0.00004 seconds |
74
+ ./spec/carddb/filter_builder_spec.rb[1:2:9] | passed | 0.00002 seconds |
75
+ ./spec/carddb/filter_builder_spec.rb[1:2:10] | passed | 0.00003 seconds |
70
76
  ./spec/carddb/filter_builder_spec.rb[1:2:11] | passed | 0.00003 seconds |
71
77
  ./spec/carddb/filter_builder_spec.rb[1:2:12] | passed | 0.00003 seconds |
72
78
  ./spec/carddb/filter_builder_spec.rb[1:2:13] | passed | 0.00003 seconds |
73
79
  ./spec/carddb/query_builder_spec.rb[1:1:1] | passed | 0.00004 seconds |
74
80
  ./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 |
81
+ ./spec/carddb/query_builder_spec.rb[1:1:3] | passed | 0.00003 seconds |
82
+ ./spec/carddb/query_builder_spec.rb[1:2:1:1] | passed | 0.00004 seconds |
77
83
  ./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 |
84
+ ./spec/carddb/query_builder_spec.rb[1:3:1] | passed | 0.00022 seconds |
85
+ ./spec/carddb/query_builder_spec.rb[1:3:2] | passed | 0.00006 seconds |
80
86
  ./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 |
87
+ ./spec/carddb/query_builder_spec.rb[1:4:2] | passed | 0.00003 seconds |
82
88
  ./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 |
89
+ ./spec/carddb/query_builder_spec.rb[1:5:2] | passed | 0.00005 seconds |
84
90
  ./spec/carddb/query_builder_spec.rb[1:5:3] | passed | 0.00004 seconds |
85
91
  ./spec/carddb/query_builder_spec.rb[1:5:4] | passed | 0.00003 seconds |
86
92
  ./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 |
93
+ ./spec/carddb/query_builder_spec.rb[1:5:6] | passed | 0.00003 seconds |
88
94
  ./spec/carddb/query_builder_spec.rb[1:5:7] | passed | 0.00004 seconds |
89
95
  ./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 |
96
+ ./spec/carddb/query_builder_spec.rb[1:6:2] | passed | 0.00005 seconds |
97
+ ./spec/carddb/query_builder_spec.rb[1:6:3] | passed | 0.00004 seconds |
98
+ ./spec/carddb/query_builder_spec.rb[1:6:4] | passed | 0.00003 seconds |
99
+ ./spec/carddb/query_builder_spec.rb[1:6:5] | passed | 0.00003 seconds |
100
+ ./spec/carddb/resources/datasets_spec.rb[1:1:1] | passed | 0.00427 seconds |
101
+ ./spec/carddb/resources/datasets_spec.rb[1:1:2] | passed | 0.00417 seconds |
102
+ ./spec/carddb/resources/datasets_spec.rb[1:2:1] | passed | 0.00404 seconds |
103
+ ./spec/carddb/resources/decks_spec.rb[1:1:1] | passed | 0.00371 seconds |
104
+ ./spec/carddb/resources/decks_spec.rb[1:1:2] | passed | 0.00397 seconds |
105
+ ./spec/carddb/resources/decks_spec.rb[1:1:3] | passed | 0.00385 seconds |
106
+ ./spec/carddb/resources/decks_spec.rb[1:1:4] | passed | 0.00362 seconds |
107
+ ./spec/carddb/resources/decks_spec.rb[1:2:1] | passed | 0.00417 seconds |
108
+ ./spec/carddb/resources/decks_spec.rb[1:2:2] | passed | 0.00768 seconds |
101
109
  ./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 |
110
+ ./spec/carddb/resources/decks_spec.rb[1:3:1] | passed | 0.00373 seconds |
111
+ ./spec/carddb/resources/decks_spec.rb[1:4:1] | passed | 0.00361 seconds |
112
+ ./spec/carddb/resources/decks_spec.rb[1:5:1] | passed | 0.0038 seconds |
113
+ ./spec/carddb/resources/decks_spec.rb[1:6:1] | passed | 0.00369 seconds |
114
+ ./spec/carddb/resources/decks_spec.rb[1:7:1] | passed | 0.00369 seconds |
115
+ ./spec/carddb/resources/decks_spec.rb[1:8:1] | passed | 0.00421 seconds |
116
+ ./spec/carddb/resources/decks_spec.rb[1:9:1] | passed | 0.0037 seconds |
117
+ ./spec/carddb/resources/decks_spec.rb[1:10:1] | passed | 0.00392 seconds |
118
+ ./spec/carddb/resources/decks_spec.rb[1:11:1] | passed | 0.00391 seconds |
119
+ ./spec/carddb/resources/decks_spec.rb[1:11:2] | passed | 0.00364 seconds |
120
+ ./spec/carddb/resources/decks_spec.rb[1:11:3] | passed | 0.00465 seconds |
121
+ ./spec/carddb/resources/decks_spec.rb[1:11:4] | passed | 0.00812 seconds |
122
+ ./spec/carddb/resources/decks_spec.rb[1:12:1] | passed | 0.00379 seconds |
123
+ ./spec/carddb/resources/decks_spec.rb[1:13:1] | passed | 0.00405 seconds |
124
+ ./spec/carddb/resources/decks_spec.rb[1:14:1] | passed | 0.00374 seconds |
125
+ ./spec/carddb/resources/decks_spec.rb[1:14:2] | passed | 0.00404 seconds |
126
+ ./spec/carddb/resources/decks_spec.rb[1:14:3] | passed | 0.00377 seconds |
127
+ ./spec/carddb/resources/decks_spec.rb[1:15:1] | passed | 0.00375 seconds |
128
+ ./spec/carddb/resources/decks_spec.rb[1:16:1] | passed | 0.00369 seconds |
129
+ ./spec/carddb/resources/decks_spec.rb[1:17:1] | passed | 0.00372 seconds |
130
+ ./spec/carddb/resources/decks_spec.rb[1:17:2] | passed | 0.00435 seconds |
131
+ ./spec/carddb/resources/decks_spec.rb[1:17:3] | passed | 0.00418 seconds |
132
+ ./spec/carddb/resources/decks_spec.rb[1:18:1] | passed | 0.00503 seconds |
133
+ ./spec/carddb/resources/decks_spec.rb[1:19:1] | passed | 0.00366 seconds |
134
+ ./spec/carddb/resources/decks_spec.rb[1:20:1] | passed | 0.00392 seconds |
135
+ ./spec/carddb/resources/decks_spec.rb[1:21:1] | passed | 0.00433 seconds |
136
+ ./spec/carddb/resources/decks_spec.rb[1:22:1] | passed | 0.00363 seconds |
137
+ ./spec/carddb/resources/decks_spec.rb[1:23:1] | passed | 0.00359 seconds |
138
+ ./spec/carddb/resources/decks_spec.rb[1:24:1] | passed | 0.00459 seconds |
139
+ ./spec/carddb/resources/decks_spec.rb[1:25:1] | passed | 0.00363 seconds |
140
+ ./spec/carddb/resources/games_spec.rb[1:1:1] | passed | 0.00349 seconds |
133
141
  ./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 |
142
+ ./spec/carddb/resources/games_spec.rb[1:2:1] | passed | 0.00462 seconds |
143
+ ./spec/carddb/resources/games_spec.rb[1:2:2] | passed | 0.00465 seconds |
144
+ ./spec/carddb/resources/publisher_workflows_spec.rb[1:1:1] | passed | 0.00408 seconds |
145
+ ./spec/carddb/resources/publisher_workflows_spec.rb[1:1:2] | passed | 0.0036 seconds |
146
+ ./spec/carddb/resources/publisher_workflows_spec.rb[1:1:3] | passed | 0.0046 seconds |
147
+ ./spec/carddb/resources/publisher_workflows_spec.rb[1:2:1] | passed | 0.00499 seconds |
140
148
  ./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 |
149
+ ./spec/carddb/resources/publisher_workflows_spec.rb[1:3:1] | passed | 0.00415 seconds |
150
+ ./spec/carddb/resources/publisher_workflows_spec.rb[1:3:2] | passed | 0.00401 seconds |
151
+ ./spec/carddb/resources/publisher_workflows_spec.rb[1:3:3] | passed | 0.00375 seconds |
152
+ ./spec/carddb/resources/publisher_workflows_spec.rb[1:4:1] | passed | 0.00402 seconds |
153
+ ./spec/carddb/resources/publisher_workflows_spec.rb[1:4:2] | passed | 0.00536 seconds |
154
+ ./spec/carddb/resources/publisher_workflows_spec.rb[1:4:3] | passed | 0.00484 seconds |
155
+ ./spec/carddb/resources/publisher_workflows_spec.rb[1:5:1] | passed | 0.00445 seconds |
156
+ ./spec/carddb/resources/publisher_workflows_spec.rb[1:5:2] | passed | 0.00367 seconds |
157
+ ./spec/carddb/resources/publishers_spec.rb[1:1:1] | passed | 0.0041 seconds |
158
+ ./spec/carddb/resources/publishers_spec.rb[1:2:1] | passed | 0.00473 seconds |
159
+ ./spec/carddb/resources/records_spec.rb[1:1:1] | passed | 0.00355 seconds |
160
+ ./spec/carddb/resources/records_spec.rb[1:1:2] | passed | 0.00436 seconds |
153
161
  ./spec/carddb/resources/records_spec.rb[1:1:3] | passed | 0.0001 seconds |
154
162
  ./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 |
163
+ ./spec/carddb/resources/records_spec.rb[1:2:1] | passed | 0.00364 seconds |
164
+ ./spec/carddb/resources/records_spec.rb[1:2:2] | passed | 0.00386 seconds |
165
+ ./spec/carddb/resources/records_spec.rb[1:2:3] | passed | 0.00389 seconds |
166
+ ./spec/carddb/resources/records_spec.rb[1:3:1] | passed | 0.00417 seconds |
167
+ ./spec/carddb/resources/records_spec.rb[1:3:2] | passed | 0.00011 seconds |
168
+ ./spec/carddb/resources/records_spec.rb[1:4:1] | passed | 0.00371 seconds |
161
169
  ./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 |
170
+ ./spec/carddb/resources/records_spec.rb[1:4:3] | passed | 0.0007 seconds |
171
+ ./spec/carddb/resources/rules_spec.rb[1:1:1] | passed | 0.00377 seconds |
172
+ ./spec/carddb/resources/rules_spec.rb[1:2:1] | passed | 0.00364 seconds |
173
+ ./spec/carddb/resources/scans_spec.rb[1:1] | passed | 0.00756 seconds |
174
+ ./spec/carddb/resources/scans_spec.rb[1:2] | passed | 0.00403 seconds |
175
+ ./spec/carddb/resources/scans_spec.rb[1:3] | passed | 0.00443 seconds |
176
+ ./spec/carddb/resources/scans_spec.rb[1:4] | passed | 0.00381 seconds |
177
+ ./spec/carddb/resources/scans_spec.rb[1:5] | passed | 0.00477 seconds |
178
+ ./spec/carddb/resources/scans_spec.rb[1:6] | passed | 0.00343 seconds |
179
+ ./spec/carddb/resources/scans_spec.rb[1:7] | passed | 0.00089 seconds |
180
+ ./spec/carddb_spec.rb[1:1] | passed | 0.00003 seconds |
181
+ ./spec/carddb_spec.rb[1:2:1] | passed | 0.00004 seconds |
167
182
  ./spec/carddb_spec.rb[1:3:1] | passed | 0.00003 seconds |
168
- ./spec/carddb_spec.rb[1:4:1] | passed | 0.00003 seconds |
183
+ ./spec/carddb_spec.rb[1:4:1] | passed | 0.00004 seconds |
169
184
  ./spec/carddb_spec.rb[1:5:1] | passed | 0.00003 seconds |
170
185
  ./spec/carddb_spec.rb[1:6:1] | passed | 0.00003 seconds |
171
186
  ./spec/carddb_spec.rb[1:7:1] | passed | 0.00003 seconds |
187
+ ./spec/carddb_spec.rb[1:8:1] | passed | 0.00003 seconds |
188
+ ./spec/carddb_spec.rb[1:9:1] | passed | 0.00003 seconds |
data/.rubocop.yml CHANGED
@@ -2,7 +2,7 @@ plugins:
2
2
  - rubocop-rspec
3
3
 
4
4
  AllCops:
5
- TargetRubyVersion: 3.0
5
+ TargetRubyVersion: 3.2
6
6
  NewCops: enable
7
7
  SuggestExtensions: false
8
8
  Exclude:
data/CHANGELOG.md CHANGED
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.4.0] - 2026-06-22
11
+
10
12
  ### Added
11
13
 
12
14
  - Publisher workflow resources for game management, import-format management, import jobs, files, dataset exports, schema introspection, batch upsert, and bulk delete/reconciliation.
@@ -15,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
15
17
  - Deck import payloads now expose configured import format metadata and auto-detection details.
16
18
  - Documentation now covers configured deck imports and `BAN` / `RESTRICTION` deck validation issue metadata.
17
19
  - 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.
20
+ - GraphQL scan workflow helpers for image upload, job creation/polling, feedback, metrics, scan templates, game scan regions, and webhook signature verification.
18
21
 
19
22
  ### Security
20
23
 
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # CardDB Ruby Client
2
2
 
3
- A Ruby client library for the [CardDB](https://carddb.xtda.org) GraphQL API. Search and fetch card game data with an expressive filter DSL.
3
+ A Ruby client library for the [CardDB](https://carddb.dev) GraphQL API. Search and fetch card game data with an expressive filter DSL.
4
4
 
5
5
  ## Installation
6
6
 
@@ -13,7 +13,7 @@ gem 'carddb'
13
13
  Or install from source:
14
14
 
15
15
  ```ruby
16
- gem 'carddb', git: 'https://github.com/xtda/carddb-ruby'
16
+ gem 'carddb', git: 'https://github.com/carddb/carddb-ruby'
17
17
  ```
18
18
 
19
19
  ## Quick Start
@@ -56,7 +56,7 @@ CardDB.configure do |config|
56
56
  config.api_key = "carddb_legacy_key" # Legacy low-level API key
57
57
 
58
58
  # Endpoint (defaults to production)
59
- config.endpoint = "https://carddb.xtda.org/query"
59
+ config.endpoint = "https://carddb.dev/query"
60
60
 
61
61
  # Timeouts
62
62
  config.timeout = 30 # Request timeout in seconds
@@ -268,6 +268,140 @@ export = client.exports.wait_for_job(export.id)
268
268
  puts export.download_url
269
269
  ```
270
270
 
271
+ Card scanning uses the same direct-upload pattern. GraphQL requests and confirms the file metadata, while image bytes go directly to object storage:
272
+
273
+ ```ruby
274
+ scan_image = client.files.upload(
275
+ filename: 'scan.jpg',
276
+ content_type: 'image/jpeg',
277
+ body: File.open('scan.jpg', 'rb'),
278
+ purpose: 'scan_image',
279
+ publisher_id: 'publisher_uuid'
280
+ )
281
+
282
+ created = client.scans.create_job(
283
+ publisher_slug: 'pokemon-company',
284
+ game_key: 'pokemon-tcg',
285
+ dataset_key: 'cards',
286
+ file_id: scan_image.id,
287
+ client_request_id: 'device-request-123',
288
+ client_ocr_hints: { language: 'en' },
289
+ client_normalization: { region: 'en' },
290
+ webhook_url: 'https://publisher.example/webhooks/carddb/scan',
291
+ webhook_secret: ENV['CARDDB_SCAN_WEBHOOK_SECRET']
292
+ )
293
+
294
+ completed = client.scans.poll_job(created.job.job_id, timeout: 60, interval: 1)
295
+
296
+ if completed.best_match
297
+ client.scans.submit_feedback(
298
+ job_id: completed.job_id,
299
+ correct: true,
300
+ selected_record_id: completed.best_match.record_id
301
+ )
302
+ end
303
+
304
+ metrics = client.scans.metrics(
305
+ publisher_slug: 'pokemon-company',
306
+ game_key: 'pokemon-tcg',
307
+ dataset_key: 'cards'
308
+ )
309
+ puts metrics.feedback.accuracy
310
+ ```
311
+
312
+ Scan-capable clients can discover publisher-defined regions and manage templates. Template editing uses scan semantic types such as `card_name`, `collector_number`, `set_code`, and `set_name`.
313
+
314
+ ```ruby
315
+ regions = client.games.get_regions(publisher_slug: 'pokemon-company', game_key: 'pokemon-tcg')
316
+
317
+ resolution = client.scan_templates.resolve(
318
+ publisher_slug: 'pokemon-company',
319
+ game_key: 'pokemon-tcg',
320
+ dataset_key: 'cards'
321
+ )
322
+
323
+ templates = client.scan_templates.list(
324
+ publisher_slug: 'pokemon-company',
325
+ game_key: 'pokemon-tcg',
326
+ dataset_key: 'cards'
327
+ )
328
+
329
+ template_input = {
330
+ publisher_slug: 'pokemon-company',
331
+ game_key: 'pokemon-tcg',
332
+ dataset_key: 'cards',
333
+ key: 'default',
334
+ name: 'Default card scan',
335
+ status: 'active',
336
+ version: 1,
337
+ is_default: true,
338
+ regions: [
339
+ {
340
+ key: 'name',
341
+ label: 'Name',
342
+ sort_order: 1,
343
+ shape_type: 'rect',
344
+ geometry: { x: 0.08, y: 0.08, width: 0.84, height: 0.18 },
345
+ semantic_type: 'card_name',
346
+ extraction_mode: 'ocr',
347
+ lookup_mode: 'exact',
348
+ is_required: true,
349
+ config: { datasetFieldPath: 'name' }
350
+ }
351
+ ]
352
+ }
353
+
354
+ saved = client.scan_templates.create(template_input)
355
+
356
+ client.scan_templates.update(
357
+ id: saved.template.id,
358
+ input: template_input.merge(name: 'Default card scan v1')
359
+ )
360
+
361
+ preview = client.scan_templates.preview(
362
+ publisher_slug: 'pokemon-company',
363
+ game_key: 'pokemon-tcg',
364
+ dataset_key: 'cards',
365
+ key: 'default',
366
+ name: 'Default card scan',
367
+ status: 'active',
368
+ version: 1,
369
+ is_default: true,
370
+ regions: [
371
+ {
372
+ key: 'name',
373
+ label: 'Name',
374
+ sort_order: 1,
375
+ shape_type: 'rect',
376
+ geometry: { x: 0.08, y: 0.08, width: 0.84, height: 0.18 },
377
+ semantic_type: 'card_name',
378
+ extraction_mode: 'ocr',
379
+ lookup_mode: 'exact',
380
+ is_required: true
381
+ }
382
+ ],
383
+ region_ocr_hints: { name: 'Pikachu' }
384
+ )
385
+
386
+ puts [regions.first&.name, resolution.warnings.map(&:message), preview.message]
387
+ ```
388
+
389
+ Webhook handlers can verify the `X-CardDB-Signature` header without framework-specific code:
390
+
391
+ CardDB currently sends `scan.job.completed` for successful terminal jobs and `scan.job.failed` for failed terminal jobs. Mobile clients and browser apps should still poll scan job status; webhooks are optional server-to-server callbacks.
392
+
393
+ ```ruby
394
+ valid = client.scans.verify_webhook_signature(
395
+ body: raw_request_body,
396
+ signature: request.get_header('HTTP_X_CARDDB_SIGNATURE'),
397
+ secret: ENV.fetch('CARDDB_SCAN_WEBHOOK_SECRET')
398
+ )
399
+
400
+ raise 'Invalid CardDB scan webhook signature' unless valid
401
+ ```
402
+
403
+ SDK unit tests mock GraphQL and storage boundaries. Backend scan resolver integration coverage lives in CardDB's Go test suite and should be used for end-to-end contract validation against a local API/database.
404
+
271
405
  Publisher import source modes:
272
406
 
273
407
  - Direct payload: use `records`, `data`, or `imports.run(input: { data: ... })` for small CI payloads and tests.
@@ -594,6 +728,8 @@ session = client.decks.exchange_session_token(
594
728
  )
595
729
 
596
730
  # Account sessions can also create trusted issuers for a selected API app.
731
+ key_pair = CardDB::DeckTokens.generate_direct_access_key_pair
732
+
597
733
  client.decks.create_access_token_issuer(
598
734
  input: {
599
735
  deckId: upsert.deck.id,
@@ -602,10 +738,21 @@ client.decks.create_access_token_issuer(
602
738
  directSigningKey: {
603
739
  algorithm: "ED25519",
604
740
  keyId: "prod-2026-01",
605
- publicKey: "base64_raw_ed25519_public_key"
741
+ publicKey: key_pair[:public_key_base64]
606
742
  }
607
743
  }
608
744
  )
745
+
746
+ token = CardDB::DeckTokens.sign_direct_access_token(
747
+ issuer_id: "issuer_uuid",
748
+ deck_id: upsert.deck.id,
749
+ api_application_id: "app_uuid",
750
+ key_id: "prod-2026-01",
751
+ private_key: key_pair[:private_key_pem],
752
+ read_mode: "FULL",
753
+ subject: "user_123",
754
+ expires_at: Time.now + 900
755
+ )
609
756
  ```
610
757
 
611
758
  ### Records
data/carddb.gemspec CHANGED
@@ -6,18 +6,18 @@ Gem::Specification.new do |spec|
6
6
  spec.name = 'carddb'
7
7
  spec.version = CardDB::VERSION
8
8
  spec.authors = ['CardDB Team']
9
- spec.email = ['support@carddb.xtda.org']
9
+ spec.email = ['support@carddb.dev']
10
10
 
11
11
  spec.summary = 'Ruby client for the CardDB API'
12
12
  spec.description = 'A Ruby client library for interacting with the CardDB GraphQL API. ' \
13
13
  'Search and fetch card game data with an expressive filter DSL.'
14
- spec.homepage = 'https://github.com/xtda/carddb-ruby'
14
+ spec.homepage = 'https://carddb.dev'
15
15
  spec.license = 'MIT'
16
- spec.required_ruby_version = '>= 3.0.0'
16
+ spec.required_ruby_version = '>= 3.2.0'
17
17
 
18
18
  spec.metadata['homepage_uri'] = spec.homepage
19
- spec.metadata['source_code_uri'] = 'https://github.com/xtda/carddb-ruby'
20
- spec.metadata['changelog_uri'] = 'https://github.com/xtda/carddb-ruby/blob/main/CHANGELOG.md'
19
+ spec.metadata['source_code_uri'] = 'https://github.com/carddb/carddb-ruby'
20
+ spec.metadata['changelog_uri'] = 'https://github.com/carddb/carddb-ruby/blob/main/CHANGELOG.md'
21
21
  spec.metadata['rubygems_mfa_required'] = 'true'
22
22
 
23
23
  spec.files = Dir.chdir(__dir__) do
@@ -30,6 +30,7 @@ Gem::Specification.new do |spec|
30
30
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
31
31
  spec.require_paths = ['lib']
32
32
 
33
+ spec.add_dependency 'ed25519', '~> 1.3'
33
34
  spec.add_dependency 'faraday', '~> 2.0'
34
35
  spec.add_dependency 'faraday-retry', '~> 2.0'
35
36
  end
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'carddb'
5
+
6
+ client = CardDB::Client.new(secret_key: ENV.fetch('CARDDB_SECRET_KEY'))
7
+ publisher_id = ENV.fetch('CARDDB_PUBLISHER_ID')
8
+ publisher_slug = ENV.fetch('CARDDB_PUBLISHER_SLUG')
9
+ game_key = ENV.fetch('CARDDB_GAME_KEY')
10
+ dataset_key = ENV.fetch('CARDDB_DATASET_KEY', 'cards')
11
+ image_path = ENV.fetch('CARDDB_SCAN_IMAGE', 'scan.jpg')
12
+
13
+ scan_image = File.open(image_path, 'rb') do |file|
14
+ client.files.upload(
15
+ filename: File.basename(image_path),
16
+ content_type: 'image/jpeg',
17
+ body: file,
18
+ purpose: 'scan_image',
19
+ publisher_id: publisher_id
20
+ )
21
+ end
22
+
23
+ job = client.scans.create_job(
24
+ publisher_slug: publisher_slug,
25
+ game_key: game_key,
26
+ dataset_key: dataset_key,
27
+ file_id: scan_image.id,
28
+ client_request_id: "example-#{Time.now.to_i}",
29
+ client_ocr_hints: { language: 'en' }
30
+ ).job
31
+
32
+ completed = client.scans.poll_job(job.job_id, timeout: 60, interval: 1)
33
+ puts "Scan #{completed.job_id}: #{completed.status}"
34
+
35
+ if completed.best_match
36
+ puts "Best match: #{completed.best_match.record_id} (#{completed.best_match.confidence})"
37
+ client.scans.submit_feedback(
38
+ job_id: completed.job_id,
39
+ selected_record_id: completed.best_match.record_id,
40
+ correct: true
41
+ )
42
+ end
43
+
44
+ metrics = client.scans.metrics(
45
+ publisher_slug: publisher_slug,
46
+ game_key: game_key,
47
+ dataset_key: dataset_key
48
+ )
49
+ puts "Total scan jobs: #{metrics.total_jobs}"