carddb 0.2.1 → 0.3.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: '086e1a7e2dff325fbe85352d4d98490bec499ac25601bd69c02d90bda39b47d4'
4
- data.tar.gz: e383f2399ab4a45e1b740c056de488ea9f2abb450041ec6945fa8d8766355713
3
+ metadata.gz: 28e13db01ff91cbed41632eccb331c91785ad6698d39c0395950c61fd5781401
4
+ data.tar.gz: 2b3404e6970671ab7cb39c366d0de5431b12ea6ba1f3fa589f749ade0bd5271d
5
5
  SHA512:
6
- metadata.gz: 607ac570111283d6a8eb4c86531ec9d372955e11b0eb12ad50dc057926f69cc2db472bb2e07465328c8ce2956f1e589042168b96fadaea8413b3b50d201bee39
7
- data.tar.gz: 15ec236e12e5784c615680f4221757f29a4535e67e412a159e0f83f7d55e85964b5131677ca0aaf5f5286cba67df1255b61ed0af6e9937c709cf7e08749334ab
6
+ metadata.gz: ed41cf28d05c2332eb3c97746a0261814d0cf06b32fa459775d7bc0f5afb6f2ff0d4c95aacf36ff3ecd049ec883bf1d3088c5cbefca7b23179e5a2bb80f8bfa5
7
+ data.tar.gz: e230a4465dd0f04ee06ebc8837dedb34aaaddbb61fd7bd49a5400ce018978a7662ba65c96a8afb2ac05f2a2cae63c002c87ec0147f477b3965570fb940056ea8
data/.rspec_status CHANGED
@@ -1,112 +1,151 @@
1
1
  example_id | status | run_time |
2
2
  ------------------------------------------------- | ------ | --------------- |
3
- ./spec/carddb/client_spec.rb[1:1:1] | passed | 0.00037 seconds |
3
+ ./spec/carddb/client_spec.rb[1:1:1] | passed | 0.00024 seconds |
4
4
  ./spec/carddb/client_spec.rb[1:1:2] | passed | 0.00004 seconds |
5
- ./spec/carddb/client_spec.rb[1:1:3] | passed | 0.00003 seconds |
6
- ./spec/carddb/client_spec.rb[1:2:1] | passed | 0.00029 seconds |
7
- ./spec/carddb/client_spec.rb[1:2:2] | passed | 0.00025 seconds |
5
+ ./spec/carddb/client_spec.rb[1:1:3] | passed | 0.00004 seconds |
6
+ ./spec/carddb/client_spec.rb[1:1:4] | passed | 0.00004 seconds |
7
+ ./spec/carddb/client_spec.rb[1:2:1] | passed | 0.00016 seconds |
8
+ ./spec/carddb/client_spec.rb[1:2:2] | passed | 0.00017 seconds |
8
9
  ./spec/carddb/client_spec.rb[1:3:1] | passed | 0.00003 seconds |
9
10
  ./spec/carddb/client_spec.rb[1:4:1] | passed | 0.00003 seconds |
10
- ./spec/carddb/client_spec.rb[1:5:1] | passed | 0.00003 seconds |
11
+ ./spec/carddb/client_spec.rb[1:5:1] | passed | 0.00004 seconds |
11
12
  ./spec/carddb/client_spec.rb[1:6:1] | passed | 0.00003 seconds |
12
13
  ./spec/carddb/client_spec.rb[1:7:1] | passed | 0.00025 seconds |
13
- ./spec/carddb/client_spec.rb[1:7:2] | passed | 0.00859 seconds |
14
- ./spec/carddb/collection_spec.rb[1:1:1] | passed | 0.00006 seconds |
15
- ./spec/carddb/collection_spec.rb[2:1:1] | passed | 0.00003 seconds |
16
- ./spec/carddb/collection_spec.rb[3:1:1] | passed | 0.0055 seconds |
14
+ ./spec/carddb/client_spec.rb[1:7:2] | passed | 0.00901 seconds |
15
+ ./spec/carddb/collection_spec.rb[1:1:1] | passed | 0.00007 seconds |
16
+ ./spec/carddb/collection_spec.rb[2:1:1] | passed | 0.00004 seconds |
17
+ ./spec/carddb/collection_spec.rb[3:1:1] | passed | 0.00222 seconds |
17
18
  ./spec/carddb/collection_spec.rb[3:1:2] | passed | 0.00016 seconds |
18
- ./spec/carddb/collection_spec.rb[3:1:3] | passed | 0.00041 seconds |
19
- ./spec/carddb/collection_spec.rb[3:1:4] | passed | 0.00035 seconds |
19
+ ./spec/carddb/collection_spec.rb[3:1:3] | passed | 0.00042 seconds |
20
+ ./spec/carddb/collection_spec.rb[3:1:4] | passed | 0.0004 seconds |
20
21
  ./spec/carddb/collection_spec.rb[3:1:5] | passed | 0.00005 seconds |
21
- ./spec/carddb/collection_spec.rb[4:1:1] | passed | 0.0005 seconds |
22
- ./spec/carddb/collection_spec.rb[4:1:2] | passed | 0.00014 seconds |
23
- ./spec/carddb/collection_spec.rb[4:1:3] | passed | 0.00014 seconds |
22
+ ./spec/carddb/collection_spec.rb[4:1:1] | passed | 0.00016 seconds |
23
+ ./spec/carddb/collection_spec.rb[4:1:2] | passed | 0.00015 seconds |
24
+ ./spec/carddb/collection_spec.rb[4:1:3] | passed | 0.00016 seconds |
24
25
  ./spec/carddb/collection_spec.rb[4:1:4] | passed | 0.00004 seconds |
25
- ./spec/carddb/configuration_spec.rb[1:1:1] | passed | 0.00003 seconds |
26
+ ./spec/carddb/configuration_spec.rb[1:1:1] | passed | 0.00004 seconds |
26
27
  ./spec/carddb/configuration_spec.rb[1:1:2] | passed | 0.00003 seconds |
27
- ./spec/carddb/configuration_spec.rb[1:1:3] | passed | 0.00003 seconds |
28
- ./spec/carddb/configuration_spec.rb[1:1:4] | passed | 0.00003 seconds |
28
+ ./spec/carddb/configuration_spec.rb[1:1:3] | passed | 0.00004 seconds |
29
+ ./spec/carddb/configuration_spec.rb[1:1:4] | passed | 0.00004 seconds |
29
30
  ./spec/carddb/configuration_spec.rb[1:1:5] | passed | 0.00003 seconds |
30
31
  ./spec/carddb/configuration_spec.rb[1:1:6] | passed | 0.00003 seconds |
31
- ./spec/carddb/configuration_spec.rb[1:2:1:1] | passed | 0.00004 seconds |
32
+ ./spec/carddb/configuration_spec.rb[1:2:1:1] | passed | 0.00005 seconds |
32
33
  ./spec/carddb/configuration_spec.rb[1:2:2:1] | passed | 0.00004 seconds |
33
- ./spec/carddb/configuration_spec.rb[1:2:2:2] | passed | 0.00005 seconds |
34
+ ./spec/carddb/configuration_spec.rb[1:2:2:2] | passed | 0.00004 seconds |
34
35
  ./spec/carddb/configuration_spec.rb[1:3:1:1] | passed | 0.00004 seconds |
35
36
  ./spec/carddb/configuration_spec.rb[1:3:2:1] | passed | 0.00003 seconds |
36
37
  ./spec/carddb/configuration_spec.rb[1:3:2:2] | passed | 0.00004 seconds |
37
- ./spec/carddb/configuration_spec.rb[1:3:2:3] | passed | 0.00004 seconds |
38
+ ./spec/carddb/configuration_spec.rb[1:3:2:3] | passed | 0.00003 seconds |
38
39
  ./spec/carddb/configuration_spec.rb[1:4:1] | passed | 0.00003 seconds |
39
- ./spec/carddb/configuration_spec.rb[1:4:2] | passed | 0.00003 seconds |
40
- ./spec/carddb/configuration_spec.rb[1:5:1] | passed | 0.00004 seconds |
40
+ ./spec/carddb/configuration_spec.rb[1:4:2] | passed | 0.00005 seconds |
41
+ ./spec/carddb/configuration_spec.rb[1:5:1] | passed | 0.00003 seconds |
42
+ ./spec/carddb/configuration_spec.rb[1:6:1] | passed | 0.00003 seconds |
43
+ ./spec/carddb/configuration_spec.rb[1:6:2] | passed | 0.00003 seconds |
44
+ ./spec/carddb/configuration_spec.rb[1:6:3] | passed | 0.00003 seconds |
45
+ ./spec/carddb/configuration_spec.rb[1:7:1] | passed | 0.00004 seconds |
46
+ ./spec/carddb/configuration_spec.rb[1:7:2] | passed | 0.00004 seconds |
47
+ ./spec/carddb/configuration_spec.rb[1:7:3] | passed | 0.00004 seconds |
41
48
  ./spec/carddb/filter_builder_spec.rb[1:1:1] | passed | 0.00004 seconds |
42
- ./spec/carddb/filter_builder_spec.rb[1:1:2] | passed | 0.00004 seconds |
49
+ ./spec/carddb/filter_builder_spec.rb[1:1:2] | passed | 0.00003 seconds |
43
50
  ./spec/carddb/filter_builder_spec.rb[1:1:3] | passed | 0.00003 seconds |
44
- ./spec/carddb/filter_builder_spec.rb[1:1:4] | passed | 0.00004 seconds |
51
+ ./spec/carddb/filter_builder_spec.rb[1:1:4] | passed | 0.00003 seconds |
45
52
  ./spec/carddb/filter_builder_spec.rb[1:1:5] | passed | 0.00003 seconds |
46
53
  ./spec/carddb/filter_builder_spec.rb[1:1:6] | passed | 0.00003 seconds |
47
- ./spec/carddb/filter_builder_spec.rb[1:1:7] | passed | 0.00003 seconds |
54
+ ./spec/carddb/filter_builder_spec.rb[1:1:7] | passed | 0.00004 seconds |
48
55
  ./spec/carddb/filter_builder_spec.rb[1:1:8] | passed | 0.00003 seconds |
49
56
  ./spec/carddb/filter_builder_spec.rb[1:2:1] | passed | 0.00003 seconds |
50
57
  ./spec/carddb/filter_builder_spec.rb[1:2:2] | passed | 0.00003 seconds |
51
58
  ./spec/carddb/filter_builder_spec.rb[1:2:3] | passed | 0.00003 seconds |
52
59
  ./spec/carddb/filter_builder_spec.rb[1:2:4] | passed | 0.00003 seconds |
53
- ./spec/carddb/filter_builder_spec.rb[1:2:5] | passed | 0.00004 seconds |
54
- ./spec/carddb/filter_builder_spec.rb[1:2:6] | passed | 0.00006 seconds |
60
+ ./spec/carddb/filter_builder_spec.rb[1:2:5] | passed | 0.00003 seconds |
61
+ ./spec/carddb/filter_builder_spec.rb[1:2:6] | passed | 0.00002 seconds |
55
62
  ./spec/carddb/filter_builder_spec.rb[1:2:7] | passed | 0.00003 seconds |
56
63
  ./spec/carddb/filter_builder_spec.rb[1:2:8] | passed | 0.00003 seconds |
57
- ./spec/carddb/filter_builder_spec.rb[1:2:9] | passed | 0.00008 seconds |
64
+ ./spec/carddb/filter_builder_spec.rb[1:2:9] | passed | 0.00004 seconds |
58
65
  ./spec/carddb/filter_builder_spec.rb[1:2:10] | passed | 0.00003 seconds |
59
- ./spec/carddb/filter_builder_spec.rb[1:2:11] | passed | 0.00002 seconds |
66
+ ./spec/carddb/filter_builder_spec.rb[1:2:11] | passed | 0.00003 seconds |
60
67
  ./spec/carddb/filter_builder_spec.rb[1:2:12] | passed | 0.00003 seconds |
61
- ./spec/carddb/filter_builder_spec.rb[1:2:13] | passed | 0.00002 seconds |
68
+ ./spec/carddb/filter_builder_spec.rb[1:2:13] | passed | 0.00004 seconds |
62
69
  ./spec/carddb/query_builder_spec.rb[1:1:1] | passed | 0.00004 seconds |
63
70
  ./spec/carddb/query_builder_spec.rb[1:1:2] | passed | 0.00004 seconds |
64
- ./spec/carddb/resources/datasets_spec.rb[1:1:1] | passed | 0.00394 seconds |
65
- ./spec/carddb/resources/datasets_spec.rb[1:1:2] | passed | 0.00431 seconds |
66
- ./spec/carddb/resources/datasets_spec.rb[1:2:1] | passed | 0.00428 seconds |
67
- ./spec/carddb/resources/decks_spec.rb[1:1:1] | passed | 0.00429 seconds |
68
- ./spec/carddb/resources/decks_spec.rb[1:1:2] | passed | 0.00472 seconds |
69
- ./spec/carddb/resources/decks_spec.rb[1:2:1] | passed | 0.00443 seconds |
70
- ./spec/carddb/resources/decks_spec.rb[1:3:1] | passed | 0.00398 seconds |
71
- ./spec/carddb/resources/decks_spec.rb[1:4:1] | passed | 0.00432 seconds |
72
- ./spec/carddb/resources/decks_spec.rb[1:5:1] | passed | 0.00428 seconds |
73
- ./spec/carddb/resources/decks_spec.rb[1:6:1] | passed | 0.0041 seconds |
74
- ./spec/carddb/resources/decks_spec.rb[1:7:1] | passed | 0.00435 seconds |
75
- ./spec/carddb/resources/decks_spec.rb[1:8:1] | passed | 0.00439 seconds |
76
- ./spec/carddb/resources/decks_spec.rb[1:9:1] | passed | 0.00417 seconds |
77
- ./spec/carddb/resources/decks_spec.rb[1:10:1] | passed | 0.00405 seconds |
78
- ./spec/carddb/resources/decks_spec.rb[1:11:1] | passed | 0.00427 seconds |
79
- ./spec/carddb/resources/decks_spec.rb[1:12:1] | passed | 0.0041 seconds |
80
- ./spec/carddb/resources/decks_spec.rb[1:13:1] | passed | 0.004 seconds |
81
- ./spec/carddb/resources/decks_spec.rb[1:14:1] | passed | 0.00408 seconds |
82
- ./spec/carddb/resources/decks_spec.rb[1:15:1] | passed | 0.00408 seconds |
83
- ./spec/carddb/resources/decks_spec.rb[1:16:1] | passed | 0.00395 seconds |
84
- ./spec/carddb/resources/decks_spec.rb[1:17:1] | passed | 0.00416 seconds |
85
- ./spec/carddb/resources/decks_spec.rb[1:18:1] | passed | 0.0041 seconds |
86
- ./spec/carddb/resources/decks_spec.rb[1:19:1] | passed | 0.00393 seconds |
87
- ./spec/carddb/resources/games_spec.rb[1:1:1] | passed | 0.00398 seconds |
71
+ ./spec/carddb/query_builder_spec.rb[1:1:3] | passed | 0.00064 seconds |
72
+ ./spec/carddb/query_builder_spec.rb[1:2:1:1] | passed | 0.00006 seconds |
73
+ ./spec/carddb/query_builder_spec.rb[1:2:2:1] | passed | 0.00004 seconds |
74
+ ./spec/carddb/query_builder_spec.rb[1:3:1] | passed | 0.00005 seconds |
75
+ ./spec/carddb/query_builder_spec.rb[1:3:2] | passed | 0.00004 seconds |
76
+ ./spec/carddb/query_builder_spec.rb[1:4:1] | passed | 0.00004 seconds |
77
+ ./spec/carddb/query_builder_spec.rb[1:4:2] | passed | 0.00004 seconds |
78
+ ./spec/carddb/query_builder_spec.rb[1:5:1] | passed | 0.00003 seconds |
79
+ ./spec/carddb/query_builder_spec.rb[1:5:2] | passed | 0.00004 seconds |
80
+ ./spec/carddb/query_builder_spec.rb[1:5:3] | passed | 0.00006 seconds |
81
+ ./spec/carddb/query_builder_spec.rb[1:5:4] | passed | 0.00004 seconds |
82
+ ./spec/carddb/query_builder_spec.rb[1:5:5] | passed | 0.00007 seconds |
83
+ ./spec/carddb/query_builder_spec.rb[1:5:6] | passed | 0.00004 seconds |
84
+ ./spec/carddb/query_builder_spec.rb[1:5:7] | passed | 0.00004 seconds |
85
+ ./spec/carddb/resources/datasets_spec.rb[1:1:1] | passed | 0.00434 seconds |
86
+ ./spec/carddb/resources/datasets_spec.rb[1:1:2] | passed | 0.0044 seconds |
87
+ ./spec/carddb/resources/datasets_spec.rb[1:2:1] | passed | 0.00411 seconds |
88
+ ./spec/carddb/resources/decks_spec.rb[1:1:1] | passed | 0.00433 seconds |
89
+ ./spec/carddb/resources/decks_spec.rb[1:1:2] | passed | 0.00429 seconds |
90
+ ./spec/carddb/resources/decks_spec.rb[1:1:3] | passed | 0.00406 seconds |
91
+ ./spec/carddb/resources/decks_spec.rb[1:1:4] | passed | 0.00423 seconds |
92
+ ./spec/carddb/resources/decks_spec.rb[1:2:1] | passed | 0.0045 seconds |
93
+ ./spec/carddb/resources/decks_spec.rb[1:2:2] | passed | 0.0082 seconds |
94
+ ./spec/carddb/resources/decks_spec.rb[1:2:3] | passed | 0.00007 seconds |
95
+ ./spec/carddb/resources/decks_spec.rb[1:3:1] | passed | 0.00416 seconds |
96
+ ./spec/carddb/resources/decks_spec.rb[1:4:1] | passed | 0.00417 seconds |
97
+ ./spec/carddb/resources/decks_spec.rb[1:5:1] | passed | 0.00397 seconds |
98
+ ./spec/carddb/resources/decks_spec.rb[1:6:1] | passed | 0.004 seconds |
99
+ ./spec/carddb/resources/decks_spec.rb[1:7:1] | passed | 0.00399 seconds |
100
+ ./spec/carddb/resources/decks_spec.rb[1:8:1] | passed | 0.00412 seconds |
101
+ ./spec/carddb/resources/decks_spec.rb[1:9:1] | passed | 0.00416 seconds |
102
+ ./spec/carddb/resources/decks_spec.rb[1:10:1] | passed | 0.00424 seconds |
103
+ ./spec/carddb/resources/decks_spec.rb[1:11:1] | passed | 0.00415 seconds |
104
+ ./spec/carddb/resources/decks_spec.rb[1:11:2] | passed | 0.00402 seconds |
105
+ ./spec/carddb/resources/decks_spec.rb[1:11:3] | passed | 0.0082 seconds |
106
+ ./spec/carddb/resources/decks_spec.rb[1:11:4] | passed | 0.00452 seconds |
107
+ ./spec/carddb/resources/decks_spec.rb[1:12:1] | passed | 0.00408 seconds |
108
+ ./spec/carddb/resources/decks_spec.rb[1:13:1] | passed | 0.00396 seconds |
109
+ ./spec/carddb/resources/decks_spec.rb[1:14:1] | passed | 0.00432 seconds |
110
+ ./spec/carddb/resources/decks_spec.rb[1:14:2] | passed | 0.00454 seconds |
111
+ ./spec/carddb/resources/decks_spec.rb[1:14:3] | passed | 0.00404 seconds |
112
+ ./spec/carddb/resources/decks_spec.rb[1:15:1] | passed | 0.0042 seconds |
113
+ ./spec/carddb/resources/decks_spec.rb[1:16:1] | passed | 0.00418 seconds |
114
+ ./spec/carddb/resources/decks_spec.rb[1:17:1] | passed | 0.00442 seconds |
115
+ ./spec/carddb/resources/decks_spec.rb[1:17:2] | passed | 0.00463 seconds |
116
+ ./spec/carddb/resources/decks_spec.rb[1:17:3] | passed | 0.00502 seconds |
117
+ ./spec/carddb/resources/decks_spec.rb[1:18:1] | passed | 0.00582 seconds |
118
+ ./spec/carddb/resources/decks_spec.rb[1:19:1] | passed | 0.00495 seconds |
119
+ ./spec/carddb/resources/decks_spec.rb[1:20:1] | passed | 0.00392 seconds |
120
+ ./spec/carddb/resources/decks_spec.rb[1:21:1] | passed | 0.00396 seconds |
121
+ ./spec/carddb/resources/decks_spec.rb[1:22:1] | passed | 0.00508 seconds |
122
+ ./spec/carddb/resources/decks_spec.rb[1:23:1] | passed | 0.00391 seconds |
123
+ ./spec/carddb/resources/decks_spec.rb[1:24:1] | passed | 0.0042 seconds |
124
+ ./spec/carddb/resources/decks_spec.rb[1:25:1] | passed | 0.00405 seconds |
125
+ ./spec/carddb/resources/games_spec.rb[1:1:1] | passed | 0.0041 seconds |
88
126
  ./spec/carddb/resources/games_spec.rb[1:1:2] | passed | 0.00007 seconds |
89
- ./spec/carddb/resources/games_spec.rb[1:2:1] | passed | 0.00419 seconds |
90
- ./spec/carddb/resources/games_spec.rb[1:2:2] | passed | 0.00414 seconds |
91
- ./spec/carddb/resources/publishers_spec.rb[1:1:1] | passed | 0.00399 seconds |
92
- ./spec/carddb/resources/publishers_spec.rb[1:2:1] | passed | 0.00412 seconds |
127
+ ./spec/carddb/resources/games_spec.rb[1:2:1] | passed | 0.00376 seconds |
128
+ ./spec/carddb/resources/games_spec.rb[1:2:2] | passed | 0.00465 seconds |
129
+ ./spec/carddb/resources/publishers_spec.rb[1:1:1] | passed | 0.00394 seconds |
130
+ ./spec/carddb/resources/publishers_spec.rb[1:2:1] | passed | 0.00392 seconds |
93
131
  ./spec/carddb/resources/records_spec.rb[1:1:1] | passed | 0.00399 seconds |
94
- ./spec/carddb/resources/records_spec.rb[1:1:2] | passed | 0.0039 seconds |
132
+ ./spec/carddb/resources/records_spec.rb[1:1:2] | passed | 0.00394 seconds |
95
133
  ./spec/carddb/resources/records_spec.rb[1:1:3] | passed | 0.00011 seconds |
96
134
  ./spec/carddb/resources/records_spec.rb[1:1:4] | passed | 0.00004 seconds |
97
- ./spec/carddb/resources/records_spec.rb[1:2:1] | passed | 0.00448 seconds |
98
- ./spec/carddb/resources/records_spec.rb[1:2:2] | passed | 0.0037 seconds |
99
- ./spec/carddb/resources/records_spec.rb[1:3:1] | passed | 0.0038 seconds |
100
- ./spec/carddb/resources/records_spec.rb[1:3:2] | passed | 0.00016 seconds |
101
- ./spec/carddb/resources/records_spec.rb[1:4:1] | passed | 0.00431 seconds |
135
+ ./spec/carddb/resources/records_spec.rb[1:2:1] | passed | 0.00391 seconds |
136
+ ./spec/carddb/resources/records_spec.rb[1:2:2] | passed | 0.00395 seconds |
137
+ ./spec/carddb/resources/records_spec.rb[1:2:3] | passed | 0.0039 seconds |
138
+ ./spec/carddb/resources/records_spec.rb[1:3:1] | passed | 0.00387 seconds |
139
+ ./spec/carddb/resources/records_spec.rb[1:3:2] | passed | 0.00011 seconds |
140
+ ./spec/carddb/resources/records_spec.rb[1:4:1] | passed | 0.00412 seconds |
102
141
  ./spec/carddb/resources/records_spec.rb[1:4:2] | passed | 0.00005 seconds |
103
- ./spec/carddb/resources/records_spec.rb[1:4:3] | passed | 0.00011 seconds |
104
- ./spec/carddb/resources/rules_spec.rb[1:1:1] | passed | 0.00408 seconds |
105
- ./spec/carddb/resources/rules_spec.rb[1:2:1] | passed | 0.00417 seconds |
142
+ ./spec/carddb/resources/records_spec.rb[1:4:3] | passed | 0.00009 seconds |
143
+ ./spec/carddb/resources/rules_spec.rb[1:1:1] | passed | 0.004 seconds |
144
+ ./spec/carddb/resources/rules_spec.rb[1:2:1] | passed | 0.00388 seconds |
106
145
  ./spec/carddb_spec.rb[1:1] | passed | 0.00004 seconds |
107
- ./spec/carddb_spec.rb[1:2:1] | passed | 0.00003 seconds |
146
+ ./spec/carddb_spec.rb[1:2:1] | passed | 0.00004 seconds |
108
147
  ./spec/carddb_spec.rb[1:3:1] | passed | 0.00003 seconds |
109
148
  ./spec/carddb_spec.rb[1:4:1] | passed | 0.00004 seconds |
110
- ./spec/carddb_spec.rb[1:5:1] | passed | 0.00005 seconds |
111
- ./spec/carddb_spec.rb[1:6:1] | passed | 0.00005 seconds |
149
+ ./spec/carddb_spec.rb[1:5:1] | passed | 0.00003 seconds |
150
+ ./spec/carddb_spec.rb[1:6:1] | passed | 0.00003 seconds |
112
151
  ./spec/carddb_spec.rb[1:7:1] | passed | 0.00004 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
+ ### Added
11
+
12
+ - Deck import payloads now expose configured import format metadata and auto-detection details.
13
+ - Documentation now covers configured deck imports and `BAN` / `RESTRICTION` deck validation issue metadata.
14
+ - Deck clients now expose ownership-aware queries, claim/transfer/copy helpers, selected-deck app access management, configured import-format management, direct deck access token issuer fields, and `publishable_key` configuration.
15
+
10
16
  ## [0.2.1] - 2026-05-01
11
17
 
12
18
  ### Fixed
data/README.md CHANGED
@@ -50,7 +50,10 @@ records.each { |record| puts record.name }
50
50
  ```ruby
51
51
  CardDB.configure do |config|
52
52
  # Authentication (optional but recommended)
53
- config.api_key = "carddb_your_api_key"
53
+ config.publishable_key = "carddb_pk_public_key" # Public/read-oriented credential
54
+ config.secret_key = "carddb_sk_your_secret_key" # Server-side trusted workflows
55
+ config.access_token = "carddb_oat_user_token" # OAuth user-authorized requests
56
+ config.api_key = "carddb_legacy_key" # Legacy low-level API key
54
57
 
55
58
  # Endpoint (defaults to production)
56
59
  config.endpoint = "https://carddb.xtda.org/query"
@@ -87,7 +90,7 @@ end
87
90
 
88
91
  ```ruby
89
92
  client = CardDB::Client.new(
90
- api_key: "carddb_different_key",
93
+ secret_key: "carddb_sk_different_key",
91
94
  default_publisher: "wizards",
92
95
  default_game: "magic-the-gathering"
93
96
  )
@@ -95,6 +98,13 @@ client = CardDB::Client.new(
95
98
  records = client.records.search(dataset_key: "cards")
96
99
  ```
97
100
 
101
+ Credential guidance:
102
+
103
+ - Use `publishable_key` for public reads and OAuth setup flows.
104
+ - Use `access_token` for user-authorized deck workflows.
105
+ - Use `secret_key` only in trusted server runtimes for app-owned deck sync and token exchange.
106
+ - Secret-only helpers fail before making a request if `access_token` or `publishable_key` would be sent instead of a secret credential.
107
+
98
108
  ## Usage
99
109
 
100
110
  ### Publishers
@@ -207,6 +217,210 @@ rules = CardDB.rules.list(
207
217
  )
208
218
  ```
209
219
 
220
+ ### Hosted Decks
221
+
222
+ ```ruby
223
+ # OAuth/user-owned or server-owned list and lookup helpers
224
+ decks = CardDB.decks.list_mine(include_archived: false)
225
+ public_decks = CardDB.decks.list_public(filter: { discoverability: "LISTED" })
226
+ deck = CardDB.decks.fetch_mine(decks.first.id)
227
+
228
+ # Metadata updates are separate from entry mutations
229
+ updated = CardDB.decks.update_metadata(
230
+ id: deck.id,
231
+ input: {
232
+ expectedDraftRevision: deck.draft_revision,
233
+ title: "Updated title"
234
+ }
235
+ )
236
+
237
+ entry_payload = CardDB.decks.add_entry(
238
+ input: {
239
+ deckId: updated.id,
240
+ expectedDraftRevision: updated.draft_revision,
241
+ datasetKey: "cards",
242
+ identifier: "CARD-001",
243
+ quantity: 4
244
+ }
245
+ )
246
+
247
+ validation = CardDB.decks.validate(id: updated.id)
248
+ publish = CardDB.decks.publish(
249
+ id: updated.id,
250
+ input: { expectedDraftRevision: entry_payload.deck.draft_revision }
251
+ )
252
+
253
+ puts publish.blockers.map(&:message) unless publish.blockers.empty?
254
+ puts CardDB.decks.export_deck(id: updated.id).text
255
+
256
+ # Import with publisher-configured format auto-detection
257
+ imported = CardDB.decks.import_deck(
258
+ input: {
259
+ deckId: updated.id,
260
+ text: "1 Iron Leaves ex TEF 25",
261
+ autoDetect: true,
262
+ dryRun: true
263
+ }
264
+ )
265
+
266
+ puts "Detected #{imported.detection.name} (#{imported.detection.confidence})"
267
+
268
+ # Or force one configured import format by key/id
269
+ CardDB.decks.import_deck(
270
+ input: {
271
+ deckId: updated.id,
272
+ format: "CONFIGURED",
273
+ importFormatKey: "pokemon-live",
274
+ text: "1 Iron Leaves ex TEF 25"
275
+ }
276
+ )
277
+ ```
278
+
279
+ Section definitions come from the deck ruleset and are available on `deck.section_definitions`,
280
+ `version.section_definitions`, or through `CardDB.decks.section_definitions(...)`. Use `key`,
281
+ `default?`, `min_cards`, `max_cards`, and `excluded_from_deck_size?` to render sections and
282
+ preflight deck builders before calling `validate` or `publish`.
283
+
284
+ Entry annotations are JSON with CardDB common keys and app-owned namespaces:
285
+
286
+ ```ruby
287
+ CardDB.decks.add_entry(
288
+ input: {
289
+ deckId: deck.id,
290
+ expectedDraftRevision: deck.draft_revision,
291
+ datasetKey: "cards",
292
+ identifier: "CARD-001",
293
+ quantity: 1,
294
+ annotations: {
295
+ common: {
296
+ notes: "Flex slot",
297
+ featuredVisible: true,
298
+ previewVisible: false
299
+ },
300
+ apps: {
301
+ api_application_id => { sideboardPlan: "control" }
302
+ }
303
+ }
304
+ }
305
+ )
306
+ ```
307
+
308
+ Publisher/admin import-format management:
309
+
310
+ ```ruby
311
+ formats = CardDB.decks.import_formats(game_id: "game_uuid", include_archived: false)
312
+ test = CardDB.decks.test_import_format(
313
+ input: {
314
+ gameId: "game_uuid",
315
+ formatKey: "pokemon-live",
316
+ text: "1 Iron Leaves ex TEF 25"
317
+ }
318
+ )
319
+
320
+ created_format = CardDB.decks.create_import_format(
321
+ input: {
322
+ gameId: "game_uuid",
323
+ key: "pokemon-live",
324
+ name: "Pokemon TCG Live",
325
+ config: { schemaVersion: 1 }
326
+ }
327
+ )
328
+ ```
329
+
330
+ OAuth selected-deck and ownership flows:
331
+
332
+ ```ruby
333
+ CardDB.decks.claim(id: deck.id, input: { expectedDraftRevision: deck.draft_revision, appAccess: "RETAIN" })
334
+ CardDB.decks.transfer_ownership(
335
+ id: deck.id,
336
+ input: {
337
+ targetAccountId: "account_uuid",
338
+ expectedDraftRevision: deck.draft_revision,
339
+ appAccess: "REVOKE"
340
+ }
341
+ )
342
+ copy = CardDB.decks.copy(
343
+ id: deck.id,
344
+ input: { title: "Testing copy", expectedDraftRevision: deck.draft_revision, appAccess: "RETAIN" }
345
+ )
346
+
347
+ CardDB.decks.grant_api_application_access(
348
+ input: { deckId: copy.deck.id, apiApplicationId: "app_uuid", role: "VIEWER" }
349
+ )
350
+ ```
351
+
352
+ Deck validation issues may include rule-specific codes such as `BAN` and `RESTRICTION`.
353
+ Those issues expose metadata such as rule key, matched value, limit, quantity, and field path when available.
354
+
355
+ Example ruleset JSON fragments for publisher/admin workflows:
356
+
357
+ ```ruby
358
+ rules = {
359
+ schemaVersion: 1,
360
+ sections: [{ key: "main", label: "Main Deck", default: true }],
361
+ deckSize: { min: 60, max: 60 },
362
+ bans: [
363
+ {
364
+ key: "no-banned-cards",
365
+ label: "Banned cards",
366
+ identifiers: ["CARD-001"],
367
+ severity: "BLOCKER"
368
+ }
369
+ ],
370
+ restrictions: [
371
+ {
372
+ key: "one-copy-limit",
373
+ label: "Restricted cards",
374
+ identifiers: ["CARD-002"],
375
+ limit: 1,
376
+ severity: "BLOCKER"
377
+ }
378
+ ]
379
+ }
380
+ ```
381
+
382
+ Server-side app-owned and trusted token workflow:
383
+
384
+ ```ruby
385
+ client = CardDB::Client.new(secret_key: ENV.fetch("CARDDB_SECRET_KEY"))
386
+
387
+ upsert = client.decks.upsert_by_external_ref(
388
+ input: {
389
+ externalRef: "metafy:deck:123",
390
+ publisherSlug: "pokemon-company",
391
+ gameKey: "pokemon-tcg",
392
+ title: "Course Deck",
393
+ accessMode: "AUTHORIZED_TOKEN",
394
+ discoverability: "UNLISTED",
395
+ entries: []
396
+ }
397
+ )
398
+
399
+ access = client.decks.exchange_access_token(
400
+ input: {
401
+ deckId: upsert.deck.id,
402
+ readMode: "FULL",
403
+ externalSubject: "user_123"
404
+ }
405
+ )
406
+
407
+ deck = client.decks.access(token: access.token)
408
+
409
+ # Account sessions can also create trusted issuers for a selected API app.
410
+ client.decks.create_access_token_issuer(
411
+ input: {
412
+ deckId: upsert.deck.id,
413
+ apiApplicationId: "app_uuid",
414
+ readModes: ["FULL"],
415
+ directSigningKey: {
416
+ algorithm: "ED25519",
417
+ keyId: "prod-2026-01",
418
+ publicKey: "base64_raw_ed25519_public_key"
419
+ }
420
+ }
421
+ )
422
+ ```
423
+
210
424
  ### Records
211
425
 
212
426
  ```ruby
data/lib/carddb/client.rb CHANGED
@@ -24,6 +24,9 @@ module CardDB
24
24
  # Create a new CardDB client.
25
25
  #
26
26
  # @param api_key [String, nil] API key for authentication
27
+ # @param publishable_key [String, nil] Browser-safe publishable API key
28
+ # @param secret_key [String, nil] Server-side secret API key for trusted workflows
29
+ # @param access_token [String, nil] OAuth bearer token for user-authorized requests
27
30
  # @param endpoint [String, nil] API endpoint URL
28
31
  # @param timeout [Integer, nil] Request timeout in seconds
29
32
  # @param open_timeout [Integer, nil] Connection timeout in seconds
@@ -32,8 +35,13 @@ module CardDB
32
35
  # @param allowed_publishers [Array<String>, nil] Allowed publisher slugs
33
36
  # @param allowed_games [Hash<String, Array<String>>, nil] Allowed games per publisher
34
37
  # @param config [Configuration, nil] Configuration object (overrides other params)
38
+ # rubocop:disable Metrics/ParameterLists
35
39
  def initialize(
36
40
  api_key: nil,
41
+ publishable_key: nil,
42
+ secret_key: nil,
43
+ access_token: nil,
44
+ environment: nil,
37
45
  endpoint: nil,
38
46
  timeout: nil,
39
47
  open_timeout: nil,
@@ -46,6 +54,10 @@ module CardDB
46
54
  @config = build_config(
47
55
  config: config,
48
56
  api_key: api_key,
57
+ publishable_key: publishable_key,
58
+ secret_key: secret_key,
59
+ access_token: access_token,
60
+ environment: environment,
49
61
  endpoint: endpoint,
50
62
  timeout: timeout,
51
63
  open_timeout: open_timeout,
@@ -56,6 +68,7 @@ module CardDB
56
68
  )
57
69
  @connection = Connection.new(@config)
58
70
  end
71
+ # rubocop:enable Metrics/ParameterLists
59
72
 
60
73
  # Access the Publishers resource
61
74
  #
@@ -103,7 +116,7 @@ module CardDB
103
116
  #
104
117
  # @return [Hash, nil] API key info or nil if no API key
105
118
  def me
106
- return nil unless config.api_key
119
+ return nil unless config.effective_api_key || config.access_token
107
120
 
108
121
  query = QueryBuilder.fetch_me
109
122
  data = connection.execute(query, {})