switchman 1.5.2 → 1.5.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (808) hide show
  1. checksums.yaml +4 -4
  2. data/lib/switchman/version.rb +1 -1
  3. metadata +4 -1612
  4. data/lib/switchman/engine.rb~ +0 -203
  5. data/spec/dummy/Rakefile +0 -7
  6. data/spec/dummy/app/models/appendage.rb +0 -22
  7. data/spec/dummy/app/models/digit.rb +0 -7
  8. data/spec/dummy/app/models/face.rb +0 -3
  9. data/spec/dummy/app/models/feature.rb +0 -3
  10. data/spec/dummy/app/models/mirror_user.rb +0 -5
  11. data/spec/dummy/app/models/root.rb +0 -5
  12. data/spec/dummy/app/models/user.rb +0 -29
  13. data/spec/dummy/config.ru +0 -4
  14. data/spec/dummy/config/application.rb +0 -48
  15. data/spec/dummy/config/boot.rb +0 -10
  16. data/spec/dummy/config/database.yml +0 -21
  17. data/spec/dummy/config/database.yml.example +0 -25
  18. data/spec/dummy/config/database.yml.travis +0 -4
  19. data/spec/dummy/config/environment.rb +0 -5
  20. data/spec/dummy/config/environments/development.rb +0 -26
  21. data/spec/dummy/config/environments/production.rb +0 -66
  22. data/spec/dummy/config/environments/test.rb +0 -28
  23. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
  24. data/spec/dummy/config/initializers/migrations_path.rb +0 -5
  25. data/spec/dummy/config/initializers/secret_token.rb +0 -7
  26. data/spec/dummy/config/initializers/session_store.rb +0 -8
  27. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
  28. data/spec/dummy/config/routes.rb +0 -8
  29. data/spec/dummy/db/development.sqlite3 +0 -0
  30. data/spec/dummy/db/migrate/20130403132607_create_users.rb +0 -10
  31. data/spec/dummy/db/migrate/20130411202442_create_appendages.rb +0 -10
  32. data/spec/dummy/db/migrate/20130411202551_create_mirror_users.rb +0 -9
  33. data/spec/dummy/db/migrate/20131022202028_create_digits.rb +0 -10
  34. data/spec/dummy/db/migrate/20131206172923_create_features.rb +0 -12
  35. data/spec/dummy/db/migrate/20140123154135_add_parent_id_to_users.rb +0 -5
  36. data/spec/dummy/db/migrate/20140219183820_create_roots.rb +0 -9
  37. data/spec/dummy/db/migrate/20150618035859_add_dummy_foreign_key.rb +0 -5
  38. data/spec/dummy/db/migrate/20160122150718_create_faces.rb +0 -9
  39. data/spec/dummy/db/schema.rb +0 -74
  40. data/spec/dummy/db/shard_1006.sqlite3 +0 -0
  41. data/spec/dummy/db/shard_101.sqlite3 +0 -0
  42. data/spec/dummy/db/shard_1020.sqlite3 +0 -0
  43. data/spec/dummy/db/shard_1038.sqlite3 +0 -0
  44. data/spec/dummy/db/shard_1051.sqlite3 +0 -0
  45. data/spec/dummy/db/shard_1067.sqlite3 +0 -0
  46. data/spec/dummy/db/shard_1083.sqlite3 +0 -0
  47. data/spec/dummy/db/shard_1088.sqlite3 +0 -0
  48. data/spec/dummy/db/shard_1093.sqlite3 +0 -0
  49. data/spec/dummy/db/shard_1119.sqlite3 +0 -0
  50. data/spec/dummy/db/shard_1124.sqlite3 +0 -0
  51. data/spec/dummy/db/shard_1126.sqlite3 +0 -0
  52. data/spec/dummy/db/shard_1147.sqlite3 +0 -0
  53. data/spec/dummy/db/shard_1156.sqlite3 +0 -0
  54. data/spec/dummy/db/shard_117.sqlite3 +0 -0
  55. data/spec/dummy/db/shard_1173.sqlite3 +0 -0
  56. data/spec/dummy/db/shard_1186.sqlite3 +0 -0
  57. data/spec/dummy/db/shard_120.sqlite3 +0 -0
  58. data/spec/dummy/db/shard_1206.sqlite3 +0 -0
  59. data/spec/dummy/db/shard_1220.sqlite3 +0 -0
  60. data/spec/dummy/db/shard_1248.sqlite3 +0 -0
  61. data/spec/dummy/db/shard_1259.sqlite3 +0 -0
  62. data/spec/dummy/db/shard_1276.sqlite3 +0 -0
  63. data/spec/dummy/db/shard_1286.sqlite3 +0 -0
  64. data/spec/dummy/db/shard_1297.sqlite3 +0 -0
  65. data/spec/dummy/db/shard_1309.sqlite3 +0 -0
  66. data/spec/dummy/db/shard_1330.sqlite3 +0 -0
  67. data/spec/dummy/db/shard_1345.sqlite3 +0 -0
  68. data/spec/dummy/db/shard_1361.sqlite3 +0 -0
  69. data/spec/dummy/db/shard_1377.sqlite3 +0 -0
  70. data/spec/dummy/db/shard_1384.sqlite3 +0 -0
  71. data/spec/dummy/db/shard_1392.sqlite3 +0 -0
  72. data/spec/dummy/db/shard_1422.sqlite3 +0 -0
  73. data/spec/dummy/db/shard_143.sqlite3 +0 -0
  74. data/spec/dummy/db/shard_1446.sqlite3 +0 -0
  75. data/spec/dummy/db/shard_1463.sqlite3 +0 -0
  76. data/spec/dummy/db/shard_1481.sqlite3 +0 -0
  77. data/spec/dummy/db/shard_1493.sqlite3 +0 -0
  78. data/spec/dummy/db/shard_1508.sqlite3 +0 -0
  79. data/spec/dummy/db/shard_1517.sqlite3 +0 -0
  80. data/spec/dummy/db/shard_1528.sqlite3 +0 -0
  81. data/spec/dummy/db/shard_1542.sqlite3 +0 -0
  82. data/spec/dummy/db/shard_1553.sqlite3 +0 -0
  83. data/spec/dummy/db/shard_156.sqlite3 +0 -0
  84. data/spec/dummy/db/shard_1588.sqlite3 +0 -0
  85. data/spec/dummy/db/shard_1596.sqlite3 +0 -0
  86. data/spec/dummy/db/shard_1609.sqlite3 +0 -0
  87. data/spec/dummy/db/shard_1630.sqlite3 +0 -0
  88. data/spec/dummy/db/shard_1643.sqlite3 +0 -0
  89. data/spec/dummy/db/shard_1652.sqlite3 +0 -0
  90. data/spec/dummy/db/shard_1658.sqlite3 +0 -0
  91. data/spec/dummy/db/shard_1679.sqlite3 +0 -0
  92. data/spec/dummy/db/shard_17.sqlite3 +0 -0
  93. data/spec/dummy/db/shard_170.sqlite3 +0 -0
  94. data/spec/dummy/db/shard_1700.sqlite3 +0 -0
  95. data/spec/dummy/db/shard_1703.sqlite3 +0 -0
  96. data/spec/dummy/db/shard_1721.sqlite3 +0 -0
  97. data/spec/dummy/db/shard_1733.sqlite3 +0 -0
  98. data/spec/dummy/db/shard_1746.sqlite3 +0 -0
  99. data/spec/dummy/db/shard_1759.sqlite3 +0 -0
  100. data/spec/dummy/db/shard_1783.sqlite3 +0 -0
  101. data/spec/dummy/db/shard_1809.sqlite3 +0 -0
  102. data/spec/dummy/db/shard_1846.sqlite3 +0 -0
  103. data/spec/dummy/db/shard_1872.sqlite3 +0 -0
  104. data/spec/dummy/db/shard_1881.sqlite3 +0 -0
  105. data/spec/dummy/db/shard_19.sqlite3 +0 -0
  106. data/spec/dummy/db/shard_1906.sqlite3 +0 -0
  107. data/spec/dummy/db/shard_191.sqlite3 +0 -0
  108. data/spec/dummy/db/shard_193.sqlite3 +0 -0
  109. data/spec/dummy/db/shard_1934.sqlite3 +0 -0
  110. data/spec/dummy/db/shard_1981.sqlite3 +0 -0
  111. data/spec/dummy/db/shard_2.sqlite3 +0 -0
  112. data/spec/dummy/db/shard_2006.sqlite3 +0 -0
  113. data/spec/dummy/db/shard_2013.sqlite3 +0 -0
  114. data/spec/dummy/db/shard_2041.sqlite3 +0 -0
  115. data/spec/dummy/db/shard_206.sqlite3 +0 -0
  116. data/spec/dummy/db/shard_2086.sqlite3 +0 -0
  117. data/spec/dummy/db/shard_2097.sqlite3 +0 -0
  118. data/spec/dummy/db/shard_2132.sqlite3 +0 -0
  119. data/spec/dummy/db/shard_2158.sqlite3 +0 -0
  120. data/spec/dummy/db/shard_2193.sqlite3 +0 -0
  121. data/spec/dummy/db/shard_2203.sqlite3 +0 -0
  122. data/spec/dummy/db/shard_2256.sqlite3 +0 -0
  123. data/spec/dummy/db/shard_23.sqlite3 +0 -0
  124. data/spec/dummy/db/shard_2301.sqlite3 +0 -0
  125. data/spec/dummy/db/shard_2336.sqlite3 +0 -0
  126. data/spec/dummy/db/shard_234.sqlite3 +0 -0
  127. data/spec/dummy/db/shard_235.sqlite3 +0 -0
  128. data/spec/dummy/db/shard_2360.sqlite3 +0 -0
  129. data/spec/dummy/db/shard_2385.sqlite3 +0 -0
  130. data/spec/dummy/db/shard_2406.sqlite3 +0 -0
  131. data/spec/dummy/db/shard_2452.sqlite3 +0 -0
  132. data/spec/dummy/db/shard_2465.sqlite3 +0 -0
  133. data/spec/dummy/db/shard_248.sqlite3 +0 -0
  134. data/spec/dummy/db/shard_2507.sqlite3 +0 -0
  135. data/spec/dummy/db/shard_2515.sqlite3 +0 -0
  136. data/spec/dummy/db/shard_2557.sqlite3 +0 -0
  137. data/spec/dummy/db/shard_257.sqlite3 +0 -0
  138. data/spec/dummy/db/shard_2580.sqlite3 +0 -0
  139. data/spec/dummy/db/shard_2598.sqlite3 +0 -0
  140. data/spec/dummy/db/shard_2626.sqlite3 +0 -0
  141. data/spec/dummy/db/shard_2672.sqlite3 +0 -0
  142. data/spec/dummy/db/shard_2681.sqlite3 +0 -0
  143. data/spec/dummy/db/shard_270.sqlite3 +0 -0
  144. data/spec/dummy/db/shard_2754.sqlite3 +0 -0
  145. data/spec/dummy/db/shard_277.sqlite3 +0 -0
  146. data/spec/dummy/db/shard_2790.sqlite3 +0 -0
  147. data/spec/dummy/db/shard_2803.sqlite3 +0 -0
  148. data/spec/dummy/db/shard_2834.sqlite3 +0 -0
  149. data/spec/dummy/db/shard_2862.sqlite3 +0 -0
  150. data/spec/dummy/db/shard_2897.sqlite3 +0 -0
  151. data/spec/dummy/db/shard_2928.sqlite3 +0 -0
  152. data/spec/dummy/db/shard_2951.sqlite3 +0 -0
  153. data/spec/dummy/db/shard_2970.sqlite3 +0 -0
  154. data/spec/dummy/db/shard_3009.sqlite3 +0 -0
  155. data/spec/dummy/db/shard_304.sqlite3 +0 -0
  156. data/spec/dummy/db/shard_3046.sqlite3 +0 -0
  157. data/spec/dummy/db/shard_3071.sqlite3 +0 -0
  158. data/spec/dummy/db/shard_311.sqlite3 +0 -0
  159. data/spec/dummy/db/shard_3114.sqlite3 +0 -0
  160. data/spec/dummy/db/shard_3157.sqlite3 +0 -0
  161. data/spec/dummy/db/shard_3234.sqlite3 +0 -0
  162. data/spec/dummy/db/shard_324.sqlite3 +0 -0
  163. data/spec/dummy/db/shard_3288.sqlite3 +0 -0
  164. data/spec/dummy/db/shard_333.sqlite3 +0 -0
  165. data/spec/dummy/db/shard_3352.sqlite3 +0 -0
  166. data/spec/dummy/db/shard_3380.sqlite3 +0 -0
  167. data/spec/dummy/db/shard_342.sqlite3 +0 -0
  168. data/spec/dummy/db/shard_3424.sqlite3 +0 -0
  169. data/spec/dummy/db/shard_3442.sqlite3 +0 -0
  170. data/spec/dummy/db/shard_3460.sqlite3 +0 -0
  171. data/spec/dummy/db/shard_347.sqlite3 +0 -0
  172. data/spec/dummy/db/shard_3488.sqlite3 +0 -0
  173. data/spec/dummy/db/shard_35.sqlite3 +0 -0
  174. data/spec/dummy/db/shard_3524.sqlite3 +0 -0
  175. data/spec/dummy/db/shard_3554.sqlite3 +0 -0
  176. data/spec/dummy/db/shard_3594.sqlite3 +0 -0
  177. data/spec/dummy/db/shard_3611.sqlite3 +0 -0
  178. data/spec/dummy/db/shard_3639.sqlite3 +0 -0
  179. data/spec/dummy/db/shard_3661.sqlite3 +0 -0
  180. data/spec/dummy/db/shard_3689.sqlite3 +0 -0
  181. data/spec/dummy/db/shard_3749.sqlite3 +0 -0
  182. data/spec/dummy/db/shard_375.sqlite3 +0 -0
  183. data/spec/dummy/db/shard_3792.sqlite3 +0 -0
  184. data/spec/dummy/db/shard_3819.sqlite3 +0 -0
  185. data/spec/dummy/db/shard_385.sqlite3 +0 -0
  186. data/spec/dummy/db/shard_3866.sqlite3 +0 -0
  187. data/spec/dummy/db/shard_389.sqlite3 +0 -0
  188. data/spec/dummy/db/shard_3897.sqlite3 +0 -0
  189. data/spec/dummy/db/shard_3945.sqlite3 +0 -0
  190. data/spec/dummy/db/shard_3951.sqlite3 +0 -0
  191. data/spec/dummy/db/shard_4002.sqlite3 +0 -0
  192. data/spec/dummy/db/shard_405.sqlite3 +0 -0
  193. data/spec/dummy/db/shard_4083.sqlite3 +0 -0
  194. data/spec/dummy/db/shard_4119.sqlite3 +0 -0
  195. data/spec/dummy/db/shard_4153.sqlite3 +0 -0
  196. data/spec/dummy/db/shard_4184.sqlite3 +0 -0
  197. data/spec/dummy/db/shard_4198.sqlite3 +0 -0
  198. data/spec/dummy/db/shard_4245.sqlite3 +0 -0
  199. data/spec/dummy/db/shard_4252.sqlite3 +0 -0
  200. data/spec/dummy/db/shard_427.sqlite3 +0 -0
  201. data/spec/dummy/db/shard_4279.sqlite3 +0 -0
  202. data/spec/dummy/db/shard_428.sqlite3 +0 -0
  203. data/spec/dummy/db/shard_4326.sqlite3 +0 -0
  204. data/spec/dummy/db/shard_4338.sqlite3 +0 -0
  205. data/spec/dummy/db/shard_441.sqlite3 +0 -0
  206. data/spec/dummy/db/shard_4422.sqlite3 +0 -0
  207. data/spec/dummy/db/shard_452.sqlite3 +0 -0
  208. data/spec/dummy/db/shard_462.sqlite3 +0 -0
  209. data/spec/dummy/db/shard_472.sqlite3 +0 -0
  210. data/spec/dummy/db/shard_483.sqlite3 +0 -0
  211. data/spec/dummy/db/shard_49.sqlite3 +0 -0
  212. data/spec/dummy/db/shard_505.sqlite3 +0 -0
  213. data/spec/dummy/db/shard_508.sqlite3 +0 -0
  214. data/spec/dummy/db/shard_531.sqlite3 +0 -0
  215. data/spec/dummy/db/shard_554.sqlite3 +0 -0
  216. data/spec/dummy/db/shard_577.sqlite3 +0 -0
  217. data/spec/dummy/db/shard_58.sqlite3 +0 -0
  218. data/spec/dummy/db/shard_600.sqlite3 +0 -0
  219. data/spec/dummy/db/shard_623.sqlite3 +0 -0
  220. data/spec/dummy/db/shard_646.sqlite3 +0 -0
  221. data/spec/dummy/db/shard_668.sqlite3 +0 -0
  222. data/spec/dummy/db/shard_680.sqlite3 +0 -0
  223. data/spec/dummy/db/shard_698.sqlite3 +0 -0
  224. data/spec/dummy/db/shard_708.sqlite3 +0 -0
  225. data/spec/dummy/db/shard_727.sqlite3 +0 -0
  226. data/spec/dummy/db/shard_735.sqlite3 +0 -0
  227. data/spec/dummy/db/shard_74.sqlite3 +0 -0
  228. data/spec/dummy/db/shard_753.sqlite3 +0 -0
  229. data/spec/dummy/db/shard_76.sqlite3 +0 -0
  230. data/spec/dummy/db/shard_766.sqlite3 +0 -0
  231. data/spec/dummy/db/shard_778.sqlite3 +0 -0
  232. data/spec/dummy/db/shard_802.sqlite3 +0 -0
  233. data/spec/dummy/db/shard_818.sqlite3 +0 -0
  234. data/spec/dummy/db/shard_827.sqlite3 +0 -0
  235. data/spec/dummy/db/shard_869.sqlite3 +0 -0
  236. data/spec/dummy/db/shard_887.sqlite3 +0 -0
  237. data/spec/dummy/db/shard_895.sqlite3 +0 -0
  238. data/spec/dummy/db/shard_923.sqlite3 +0 -0
  239. data/spec/dummy/db/shard_930.sqlite3 +0 -0
  240. data/spec/dummy/db/shard_948.sqlite3 +0 -0
  241. data/spec/dummy/db/shard_953.sqlite3 +0 -0
  242. data/spec/dummy/db/shard_955.sqlite3 +0 -0
  243. data/spec/dummy/db/shard_982.sqlite3 +0 -0
  244. data/spec/dummy/db/shard_988.sqlite3 +0 -0
  245. data/spec/dummy/db/shard_989.sqlite3 +0 -0
  246. data/spec/dummy/db/test.sqlite3 +0 -0
  247. data/spec/dummy/log/development.log +0 -153
  248. data/spec/dummy/log/test.log +0 -108385
  249. data/spec/dummy/script/rails +0 -6
  250. data/spec/dummy/tmp/cache/2E3/840/shard%2F3 +0 -1
  251. data/spec/dummy/tmp/cache/2E4/850/shard%2F4 +0 -1
  252. data/spec/dummy/tmp/cache/2E8/890/shard%2F8 +0 -1
  253. data/spec/dummy/tmp/cache/314/980/shard%2F31 +0 -1
  254. data/spec/dummy/tmp/cache/315/990/shard%2F32 +0 -1
  255. data/spec/dummy/tmp/cache/316/9B0/shard%2F42 +0 -1
  256. data/spec/dummy/tmp/cache/316/9D0/shard%2F60 +0 -1
  257. data/spec/dummy/tmp/cache/318/9F0/shard%2F62 +0 -1
  258. data/spec/dummy/tmp/cache/318/A10/shard%2F80 +0 -1
  259. data/spec/dummy/tmp/cache/319/A20/shard%2F81 +0 -1
  260. data/spec/dummy/tmp/cache/31A/A20/shard%2F73 +0 -1
  261. data/spec/dummy/tmp/cache/31A/A40/shard%2F91 +0 -1
  262. data/spec/dummy/tmp/cache/31B/A30/shard%2F74 +0 -1
  263. data/spec/dummy/tmp/cache/31B/A40/shard%2F83 +0 -1
  264. data/spec/dummy/tmp/cache/31C/A30/shard%2F66 +0 -1
  265. data/spec/dummy/tmp/cache/31D/A40/shard%2F67 +0 -1
  266. data/spec/dummy/tmp/cache/31D/A50/shard%2F76 +0 -1
  267. data/spec/dummy/tmp/cache/31D/A70/shard%2F94 +0 -1
  268. data/spec/dummy/tmp/cache/31E/A40/shard%2F59 +0 -1
  269. data/spec/dummy/tmp/cache/31E/A80/shard%2F95 +0 -1
  270. data/spec/dummy/tmp/cache/31F/A60/shard%2F69 +0 -1
  271. data/spec/dummy/tmp/cache/31F/A80/shard%2F87 +0 -1
  272. data/spec/dummy/tmp/cache/320/A90/shard%2F88 +0 -1
  273. data/spec/dummy/tmp/cache/321/AB0/shard%2F98 +0 -1
  274. data/spec/dummy/tmp/cache/342/D50/shard%2F101 +0 -1
  275. data/spec/dummy/tmp/cache/343/D60/shard%2F102 +0 -1
  276. data/spec/dummy/tmp/cache/344/D80/shard%2F112 +0 -1
  277. data/spec/dummy/tmp/cache/344/DA0/shard%2F130 +0 -1
  278. data/spec/dummy/tmp/cache/344/DB0/shard%2F220 +0 -0
  279. data/spec/dummy/tmp/cache/345/DA0/shard%2F122 +0 -1
  280. data/spec/dummy/tmp/cache/345/DC0/shard%2F140 +0 -1
  281. data/spec/dummy/tmp/cache/345/DC0/shard%2F221 +0 -0
  282. data/spec/dummy/tmp/cache/346/D90/shard%2F105 +0 -1
  283. data/spec/dummy/tmp/cache/346/DB0/shard%2F123 +0 -1
  284. data/spec/dummy/tmp/cache/346/DE0/shard%2F150 +0 -1
  285. data/spec/dummy/tmp/cache/346/DE0/shard%2F231 +0 -1
  286. data/spec/dummy/tmp/cache/346/E10/shard%2F501 +0 -1
  287. data/spec/dummy/tmp/cache/347/DB0/shard%2F115 +0 -1
  288. data/spec/dummy/tmp/cache/347/DF0/shard%2F151 +0 -1
  289. data/spec/dummy/tmp/cache/348/DC0/shard%2F116 +0 -1
  290. data/spec/dummy/tmp/cache/348/DD0/shard%2F125 +0 -1
  291. data/spec/dummy/tmp/cache/348/DE0/shard%2F134 +0 -1
  292. data/spec/dummy/tmp/cache/348/DF0/shard%2F143 +0 -1
  293. data/spec/dummy/tmp/cache/348/E30/shard%2F422 +0 -1
  294. data/spec/dummy/tmp/cache/349/DC0/shard%2F108 +0 -1
  295. data/spec/dummy/tmp/cache/349/E00/shard%2F144 +0 -1
  296. data/spec/dummy/tmp/cache/349/E20/shard%2F243 +0 -0
  297. data/spec/dummy/tmp/cache/349/E40/shard%2F423 +0 -1
  298. data/spec/dummy/tmp/cache/34A/DD0/shard%2F109 +0 -1
  299. data/spec/dummy/tmp/cache/34A/DE0/shard%2F118 +0 -1
  300. data/spec/dummy/tmp/cache/34A/E00/shard%2F136 +0 -1
  301. data/spec/dummy/tmp/cache/34A/E00/shard%2F217 +0 -1
  302. data/spec/dummy/tmp/cache/34A/E20/shard%2F154 +0 -1
  303. data/spec/dummy/tmp/cache/34A/E20/shard%2F316 +0 -1
  304. data/spec/dummy/tmp/cache/34A/E30/shard%2F244 +0 -0
  305. data/spec/dummy/tmp/cache/34A/E30/shard%2F325 +0 -1
  306. data/spec/dummy/tmp/cache/34A/E90/shard%2F460 +0 -0
  307. data/spec/dummy/tmp/cache/34A/EC0/shard%2F730 +0 -1
  308. data/spec/dummy/tmp/cache/34B/E10/shard%2F137 +0 -1
  309. data/spec/dummy/tmp/cache/34B/E40/shard%2F245 +0 -1
  310. data/spec/dummy/tmp/cache/34B/E60/shard%2F344 +0 -1
  311. data/spec/dummy/tmp/cache/34B/E60/shard%2F425 +0 -1
  312. data/spec/dummy/tmp/cache/34B/E70/shard%2F434 +0 -1
  313. data/spec/dummy/tmp/cache/34C/E10/shard%2F129 +0 -1
  314. data/spec/dummy/tmp/cache/34C/E30/shard%2F147 +0 -1
  315. data/spec/dummy/tmp/cache/34C/E40/shard%2F156 +0 -1
  316. data/spec/dummy/tmp/cache/34C/E80/shard%2F354 +0 -1
  317. data/spec/dummy/tmp/cache/34C/EA0/shard%2F453 +0 -1
  318. data/spec/dummy/tmp/cache/34C/EF0/shard%2F822 +0 -0
  319. data/spec/dummy/tmp/cache/34D/E60/shard%2F409 +0 -1
  320. data/spec/dummy/tmp/cache/34D/EC0/shard%2F382 +0 -1
  321. data/spec/dummy/tmp/cache/34D/EE0/shard%2F724 +0 -1
  322. data/spec/dummy/tmp/cache/34E/EA0/shard%2F437 +0 -1
  323. data/spec/dummy/tmp/cache/34E/EF0/shard%2F806 +0 -1
  324. data/spec/dummy/tmp/cache/34F/EB0/shard%2F438 +0 -1
  325. data/spec/dummy/tmp/cache/34F/EC0/shard%2F285 +0 -1
  326. data/spec/dummy/tmp/cache/34F/F20/shard%2F744 +0 -0
  327. data/spec/dummy/tmp/cache/350/EF0/shard%2F466 +0 -1
  328. data/spec/dummy/tmp/cache/350/F30/shard%2F907 +0 -1
  329. data/spec/dummy/tmp/cache/351/EC0/shard%2F188 +0 -1
  330. data/spec/dummy/tmp/cache/351/EE0/shard%2F368 +0 -1
  331. data/spec/dummy/tmp/cache/351/F50/shard%2F917 +0 -0
  332. data/spec/dummy/tmp/cache/351/F60/shard%2F926 +0 -0
  333. data/spec/dummy/tmp/cache/351/F70/shard%2F935 +0 -1
  334. data/spec/dummy/tmp/cache/351/FB0/shard%2F971 +0 -1
  335. data/spec/dummy/tmp/cache/352/EF0/shard%2F369 +0 -1
  336. data/spec/dummy/tmp/cache/352/F70/shard%2F927 +0 -0
  337. data/spec/dummy/tmp/cache/352/F80/shard%2F693 +0 -1
  338. data/spec/dummy/tmp/cache/352/F90/shard%2F864 +0 -1
  339. data/spec/dummy/tmp/cache/353/F70/shard%2F838 +0 -1
  340. data/spec/dummy/tmp/cache/354/FA0/shard%2F776 +0 -1
  341. data/spec/dummy/tmp/cache/354/FF0/shard%2F983 +0 -1
  342. data/spec/dummy/tmp/cache/355/F90/shard%2F759 +0 -1
  343. data/spec/dummy/tmp/cache/357/FF0/shard%2F878 +0 -1
  344. data/spec/dummy/tmp/cache/374/490/shard%2F1012 +0 -1
  345. data/spec/dummy/tmp/cache/374/4C0/shard%2F2011 +0 -1
  346. data/spec/dummy/tmp/cache/376/500/shard%2F1140 +0 -1
  347. data/spec/dummy/tmp/cache/376/510/shard%2F1230 +0 -0
  348. data/spec/dummy/tmp/cache/376/550/shard%2F3210 +0 -1
  349. data/spec/dummy/tmp/cache/377/510/shard%2F1222 +0 -0
  350. data/spec/dummy/tmp/cache/377/540/shard%2F2221 +0 -1
  351. data/spec/dummy/tmp/cache/377/560/shard%2F3211 +0 -1
  352. data/spec/dummy/tmp/cache/378/510/shard%2F2105 +0 -1
  353. data/spec/dummy/tmp/cache/378/570/shard%2F3050 +0 -1
  354. data/spec/dummy/tmp/cache/378/590/shard%2F4040 +0 -1
  355. data/spec/dummy/tmp/cache/379/4F0/shard%2F1107 +0 -1
  356. data/spec/dummy/tmp/cache/379/540/shard%2F3015 +0 -1
  357. data/spec/dummy/tmp/cache/379/550/shard%2F3024 +0 -1
  358. data/spec/dummy/tmp/cache/379/560/shard%2F2061 +0 -1
  359. data/spec/dummy/tmp/cache/379/570/shard%2F1341 +0 -1
  360. data/spec/dummy/tmp/cache/379/580/shard%2F2160 +0 -1
  361. data/spec/dummy/tmp/cache/379/580/shard%2F2403 +0 -1
  362. data/spec/dummy/tmp/cache/379/590/shard%2F1602 +0 -0
  363. data/spec/dummy/tmp/cache/379/590/shard%2F4113 +0 -1
  364. data/spec/dummy/tmp/cache/379/5C0/shard%2F1710 +0 -1
  365. data/spec/dummy/tmp/cache/37A/510/shard%2F1117 +0 -1
  366. data/spec/dummy/tmp/cache/37A/540/shard%2F1063 +0 -1
  367. data/spec/dummy/tmp/cache/37A/540/shard%2F2035 +0 -1
  368. data/spec/dummy/tmp/cache/37A/550/shard%2F1315 +0 -1
  369. data/spec/dummy/tmp/cache/37A/570/shard%2F1252 +0 -1
  370. data/spec/dummy/tmp/cache/37A/570/shard%2F1414 +0 -1
  371. data/spec/dummy/tmp/cache/37A/590/shard%2F4024 +0 -1
  372. data/spec/dummy/tmp/cache/37A/5A0/shard%2F1360 +0 -1
  373. data/spec/dummy/tmp/cache/37A/5A0/shard%2F1603 +0 -0
  374. data/spec/dummy/tmp/cache/37A/5B0/shard%2F3151 +0 -1
  375. data/spec/dummy/tmp/cache/37A/5C0/shard%2F3322 +0 -1
  376. data/spec/dummy/tmp/cache/37A/5C0/shard%2F4051 +0 -1
  377. data/spec/dummy/tmp/cache/37A/5E0/shard%2F2611 +0 -1
  378. data/spec/dummy/tmp/cache/37A/5F0/shard%2F4402 +0 -1
  379. data/spec/dummy/tmp/cache/37B/520/shard%2F1118 +0 -1
  380. data/spec/dummy/tmp/cache/37B/540/shard%2F1217 +0 -1
  381. data/spec/dummy/tmp/cache/37B/550/shard%2F1064 +0 -1
  382. data/spec/dummy/tmp/cache/37B/560/shard%2F1154 +0 -1
  383. data/spec/dummy/tmp/cache/37B/5A0/shard%2F2081 +0 -1
  384. data/spec/dummy/tmp/cache/37B/5A0/shard%2F2324 +0 -1
  385. data/spec/dummy/tmp/cache/37B/5B0/shard%2F1361 +0 -1
  386. data/spec/dummy/tmp/cache/37B/5B0/shard%2F3062 +0 -1
  387. data/spec/dummy/tmp/cache/37B/5C0/shard%2F3152 +0 -1
  388. data/spec/dummy/tmp/cache/37B/5D0/shard%2F3161 +0 -1
  389. data/spec/dummy/tmp/cache/37B/5D0/shard%2F3323 +0 -1
  390. data/spec/dummy/tmp/cache/37B/5E0/shard%2F4304 +0 -1
  391. data/spec/dummy/tmp/cache/37B/600/shard%2F4241 +0 -1
  392. data/spec/dummy/tmp/cache/37C/570/shard%2F2127 +0 -1
  393. data/spec/dummy/tmp/cache/37C/5C0/shard%2F1524 +0 -1
  394. data/spec/dummy/tmp/cache/37C/5D0/shard%2F2343 +0 -1
  395. data/spec/dummy/tmp/cache/37C/5D0/shard%2F4044 +0 -1
  396. data/spec/dummy/tmp/cache/37C/5E0/shard%2F2352 +0 -1
  397. data/spec/dummy/tmp/cache/37C/5E0/shard%2F3081 +0 -1
  398. data/spec/dummy/tmp/cache/37C/5F0/shard%2F3090 +0 -1
  399. data/spec/dummy/tmp/cache/37C/610/shard%2F4080 +0 -1
  400. data/spec/dummy/tmp/cache/37C/610/shard%2F4161 +0 -1
  401. data/spec/dummy/tmp/cache/37D/560/shard%2F1057 +0 -1
  402. data/spec/dummy/tmp/cache/37D/570/shard%2F2038 +0 -1
  403. data/spec/dummy/tmp/cache/37D/5A0/shard%2F4009 +0 -1
  404. data/spec/dummy/tmp/cache/37D/5C0/shard%2F1273 +0 -1
  405. data/spec/dummy/tmp/cache/37D/5C0/shard%2F4027 +0 -1
  406. data/spec/dummy/tmp/cache/37D/5D0/shard%2F2092 +0 -1
  407. data/spec/dummy/tmp/cache/37D/5D0/shard%2F3145 +0 -1
  408. data/spec/dummy/tmp/cache/37D/5D0/shard%2F3226 +0 -1
  409. data/spec/dummy/tmp/cache/37D/5E0/shard%2F2344 +0 -1
  410. data/spec/dummy/tmp/cache/37D/5F0/shard%2F1624 +0 -1
  411. data/spec/dummy/tmp/cache/37D/5F0/shard%2F3082 +0 -2
  412. data/spec/dummy/tmp/cache/37D/5F0/shard%2F3406 +0 -1
  413. data/spec/dummy/tmp/cache/37D/5F0/shard%2F4054 +0 -1
  414. data/spec/dummy/tmp/cache/37D/600/shard%2F3091 +0 -1
  415. data/spec/dummy/tmp/cache/37D/610/shard%2F1723 +0 -1
  416. data/spec/dummy/tmp/cache/37D/630/shard%2F1903 +0 -1
  417. data/spec/dummy/tmp/cache/37D/640/shard%2F1750 +0 -1
  418. data/spec/dummy/tmp/cache/37D/650/shard%2F2812 +0 -1
  419. data/spec/dummy/tmp/cache/37D/650/shard%2F3622 +0 -1
  420. data/spec/dummy/tmp/cache/37D/660/shard%2F2740 +0 -2
  421. data/spec/dummy/tmp/cache/37D/660/shard%2F4360 +0 -1
  422. data/spec/dummy/tmp/cache/37D/6A0/shard%2F3910 +0 -1
  423. data/spec/dummy/tmp/cache/37E/580/shard%2F2039 +0 -1
  424. data/spec/dummy/tmp/cache/37E/590/shard%2F1238 +0 -1
  425. data/spec/dummy/tmp/cache/37E/5B0/shard%2F1418 +0 -1
  426. data/spec/dummy/tmp/cache/37E/5B0/shard%2F3119 +0 -1
  427. data/spec/dummy/tmp/cache/37E/5D0/shard%2F1193 +0 -1
  428. data/spec/dummy/tmp/cache/37E/5E0/shard%2F3146 +0 -1
  429. data/spec/dummy/tmp/cache/37E/5E0/shard%2F4037 +0 -1
  430. data/spec/dummy/tmp/cache/37E/600/shard%2F4136 +0 -1
  431. data/spec/dummy/tmp/cache/37E/620/shard%2F4073 +0 -1
  432. data/spec/dummy/tmp/cache/37E/630/shard%2F1490 +0 -1
  433. data/spec/dummy/tmp/cache/37E/630/shard%2F4325 +0 -1
  434. data/spec/dummy/tmp/cache/37E/640/shard%2F1904 +0 -1
  435. data/spec/dummy/tmp/cache/37E/640/shard%2F2390 +0 -1
  436. data/spec/dummy/tmp/cache/37E/660/shard%2F1922 +0 -1
  437. data/spec/dummy/tmp/cache/37E/660/shard%2F4352 +0 -1
  438. data/spec/dummy/tmp/cache/37F/600/shard%2F4047 +0 -1
  439. data/spec/dummy/tmp/cache/37F/610/shard%2F3084 +0 -1
  440. data/spec/dummy/tmp/cache/37F/610/shard%2F4137 +0 -1
  441. data/spec/dummy/tmp/cache/37F/630/shard%2F4074 +0 -1
  442. data/spec/dummy/tmp/cache/37F/640/shard%2F1491 +0 -1
  443. data/spec/dummy/tmp/cache/37F/640/shard%2F1815 +0 -1
  444. data/spec/dummy/tmp/cache/37F/640/shard%2F4164 +0 -1
  445. data/spec/dummy/tmp/cache/37F/660/shard%2F2562 +0 -1
  446. data/spec/dummy/tmp/cache/37F/680/shard%2F2823 +0 -1
  447. data/spec/dummy/tmp/cache/37F/680/shard%2F4281 +0 -1
  448. data/spec/dummy/tmp/cache/37F/6A0/shard%2F3570 +0 -1
  449. data/spec/dummy/tmp/cache/37F/6A0/shard%2F3813 +0 -1
  450. data/spec/dummy/tmp/cache/37F/6B0/shard%2F2931 +0 -1
  451. data/spec/dummy/tmp/cache/37F/6C0/shard%2F3912 +0 -1
  452. data/spec/dummy/tmp/cache/380/5F0/shard%2F1357 +0 -1
  453. data/spec/dummy/tmp/cache/380/600/shard%2F3148 +0 -1
  454. data/spec/dummy/tmp/cache/380/620/shard%2F1384 +0 -1
  455. data/spec/dummy/tmp/cache/380/620/shard%2F3085 +0 -1
  456. data/spec/dummy/tmp/cache/380/630/shard%2F1636 +0 -1
  457. data/spec/dummy/tmp/cache/380/630/shard%2F2527 +0 -1
  458. data/spec/dummy/tmp/cache/380/640/shard%2F3508 +0 -1
  459. data/spec/dummy/tmp/cache/380/650/shard%2F4408 +0 -1
  460. data/spec/dummy/tmp/cache/380/670/shard%2F2644 +0 -1
  461. data/spec/dummy/tmp/cache/380/670/shard%2F3292 +0 -1
  462. data/spec/dummy/tmp/cache/380/670/shard%2F4183 +0 -1
  463. data/spec/dummy/tmp/cache/380/680/shard%2F4192 +0 -1
  464. data/spec/dummy/tmp/cache/380/690/shard%2F2824 +0 -1
  465. data/spec/dummy/tmp/cache/380/690/shard%2F4363 +0 -1
  466. data/spec/dummy/tmp/cache/380/6A0/shard%2F4372 +0 -1
  467. data/spec/dummy/tmp/cache/380/6B0/shard%2F3571 +0 -1
  468. data/spec/dummy/tmp/cache/380/6B0/shard%2F3814 +0 -1
  469. data/spec/dummy/tmp/cache/380/6B0/shard%2F4381 +0 -1
  470. data/spec/dummy/tmp/cache/380/6C0/shard%2F4390 +0 -1
  471. data/spec/dummy/tmp/cache/380/6D0/shard%2F3913 +0 -1
  472. data/spec/dummy/tmp/cache/380/6E0/shard%2F2950 +0 -1
  473. data/spec/dummy/tmp/cache/380/6E0/shard%2F3841 +0 -1
  474. data/spec/dummy/tmp/cache/380/6F0/shard%2F3850 +0 -2
  475. data/spec/dummy/tmp/cache/381/5C0/shard%2F1079 +0 -1
  476. data/spec/dummy/tmp/cache/381/610/shard%2F3149 +0 -1
  477. data/spec/dummy/tmp/cache/381/640/shard%2F3338 +0 -1
  478. data/spec/dummy/tmp/cache/381/660/shard%2F3437 +0 -1
  479. data/spec/dummy/tmp/cache/381/690/shard%2F3707 +0 -1
  480. data/spec/dummy/tmp/cache/381/690/shard%2F4193 +0 -1
  481. data/spec/dummy/tmp/cache/382/630/shard%2F2187 +0 -1
  482. data/spec/dummy/tmp/cache/382/630/shard%2F3078 +0 -1
  483. data/spec/dummy/tmp/cache/382/640/shard%2F1629 +0 -1
  484. data/spec/dummy/tmp/cache/382/640/shard%2F2277 +0 -1
  485. data/spec/dummy/tmp/cache/382/640/shard%2F3087 +0 -1
  486. data/spec/dummy/tmp/cache/382/650/shard%2F1395 +0 -1
  487. data/spec/dummy/tmp/cache/382/650/shard%2F2448 +0 -1
  488. data/spec/dummy/tmp/cache/382/660/shard%2F2295 +0 -1
  489. data/spec/dummy/tmp/cache/382/660/shard%2F4077 +0 -1
  490. data/spec/dummy/tmp/cache/382/670/shard%2F1656 +0 -1
  491. data/spec/dummy/tmp/cache/382/670/shard%2F4086 +0 -1
  492. data/spec/dummy/tmp/cache/382/690/shard%2F1836 +0 -1
  493. data/spec/dummy/tmp/cache/382/6A0/shard%2F3384 +0 -1
  494. data/spec/dummy/tmp/cache/382/6B0/shard%2F3636 +0 -1
  495. data/spec/dummy/tmp/cache/382/6D0/shard%2F3654 +0 -1
  496. data/spec/dummy/tmp/cache/382/6E0/shard%2F3906 +0 -1
  497. data/spec/dummy/tmp/cache/382/6F0/shard%2F2781 +0 -1
  498. data/spec/dummy/tmp/cache/382/6F0/shard%2F3915 +0 -1
  499. data/spec/dummy/tmp/cache/382/700/shard%2F2871 +0 -1
  500. data/spec/dummy/tmp/cache/383/640/shard%2F1297 +0 -1
  501. data/spec/dummy/tmp/cache/383/640/shard%2F1459 +0 -1
  502. data/spec/dummy/tmp/cache/383/640/shard%2F3079 +0 -1
  503. data/spec/dummy/tmp/cache/383/650/shard%2F3088 +0 -1
  504. data/spec/dummy/tmp/cache/383/690/shard%2F4258 +0 -1
  505. data/spec/dummy/tmp/cache/383/6B0/shard%2F2494 +0 -1
  506. data/spec/dummy/tmp/cache/383/6B0/shard%2F2575 +0 -2
  507. data/spec/dummy/tmp/cache/383/6C0/shard%2F4366 +0 -1
  508. data/spec/dummy/tmp/cache/383/6D0/shard%2F4375 +0 -1
  509. data/spec/dummy/tmp/cache/383/6E0/shard%2F1792 +0 -1
  510. data/spec/dummy/tmp/cache/383/6E0/shard%2F3574 +0 -1
  511. data/spec/dummy/tmp/cache/383/6E0/shard%2F4384 +0 -1
  512. data/spec/dummy/tmp/cache/383/6F0/shard%2F2935 +0 -1
  513. data/spec/dummy/tmp/cache/383/6F0/shard%2F3745 +0 -1
  514. data/spec/dummy/tmp/cache/383/6F0/shard%2F3907 +0 -1
  515. data/spec/dummy/tmp/cache/383/6F0/shard%2F4393 +0 -1
  516. data/spec/dummy/tmp/cache/383/700/shard%2F3916 +0 -1
  517. data/spec/dummy/tmp/cache/383/710/shard%2F3682 +0 -1
  518. data/spec/dummy/tmp/cache/383/750/shard%2F3961 +0 -1
  519. data/spec/dummy/tmp/cache/384/6B0/shard%2F3458 +0 -1
  520. data/spec/dummy/tmp/cache/384/6B0/shard%2F3539 +0 -1
  521. data/spec/dummy/tmp/cache/384/6C0/shard%2F4196 +0 -1
  522. data/spec/dummy/tmp/cache/384/6E0/shard%2F3566 +0 -1
  523. data/spec/dummy/tmp/cache/384/700/shard%2F2693 +0 -1
  524. data/spec/dummy/tmp/cache/384/700/shard%2F2936 +0 -1
  525. data/spec/dummy/tmp/cache/384/710/shard%2F3836 +0 -1
  526. data/spec/dummy/tmp/cache/384/720/shard%2F3683 +0 -1
  527. data/spec/dummy/tmp/cache/385/6C0/shard%2F1677 +0 -1
  528. data/spec/dummy/tmp/cache/385/6D0/shard%2F2739 +0 -2
  529. data/spec/dummy/tmp/cache/385/6E0/shard%2F1695 +0 -1
  530. data/spec/dummy/tmp/cache/385/6E0/shard%2F1938 +0 -1
  531. data/spec/dummy/tmp/cache/385/6E0/shard%2F2586 +0 -1
  532. data/spec/dummy/tmp/cache/385/710/shard%2F3909 +0 -1
  533. data/spec/dummy/tmp/cache/385/720/shard%2F3918 +0 -1
  534. data/spec/dummy/tmp/cache/385/740/shard%2F3936 +0 -1
  535. data/spec/dummy/tmp/cache/385/760/shard%2F2982 +0 -1
  536. data/spec/dummy/tmp/cache/386/6C0/shard%2F2479 +0 -1
  537. data/spec/dummy/tmp/cache/386/6E0/shard%2F3469 +0 -1
  538. data/spec/dummy/tmp/cache/386/6F0/shard%2F4369 +0 -1
  539. data/spec/dummy/tmp/cache/386/700/shard%2F4378 +0 -1
  540. data/spec/dummy/tmp/cache/386/710/shard%2F2767 +0 -2
  541. data/spec/dummy/tmp/cache/386/710/shard%2F2848 +0 -1
  542. data/spec/dummy/tmp/cache/386/710/shard%2F4387 +0 -1
  543. data/spec/dummy/tmp/cache/386/720/shard%2F4396 +0 -1
  544. data/spec/dummy/tmp/cache/386/730/shard%2F3919 +0 -1
  545. data/spec/dummy/tmp/cache/386/740/shard%2F3847 +0 -1
  546. data/spec/dummy/tmp/cache/387/700/shard%2F2669 +0 -1
  547. data/spec/dummy/tmp/cache/387/710/shard%2F2759 +0 -1
  548. data/spec/dummy/tmp/cache/387/770/shard%2F3785 +0 -1
  549. data/spec/dummy/tmp/cache/387/780/shard%2F3875 +0 -1
  550. data/spec/dummy/tmp/cache/388/720/shard%2F1869 +0 -1
  551. data/spec/dummy/tmp/cache/388/770/shard%2F2886 +0 -1
  552. data/spec/dummy/tmp/cache/389/750/shard%2F1969 +0 -1
  553. data/spec/dummy/tmp/cache/389/750/shard%2F4399 +0 -1
  554. data/spec/dummy/tmp/cache/389/760/shard%2F3598 +0 -1
  555. data/spec/dummy/tmp/cache/389/760/shard%2F3679 +0 -1
  556. data/spec/dummy/tmp/cache/38A/770/shard%2F3599 +0 -1
  557. data/spec/dummy/tmp/cache/38A/780/shard%2F1988 +0 -1
  558. data/spec/dummy/tmp/cache/38B/780/shard%2F1899 +0 -1
  559. data/spec/dummy/tmp/cache/38B/7B0/shard%2F3789 +0 -1
  560. data/spec/dummy/tmp/cache/38C/7E0/shard%2F3889 +0 -1
  561. data/spec/dummy/tmp/cache/3A4/EA0/shard%2F10012 +0 -1
  562. data/spec/dummy/tmp/cache/3A4/EB0/shard%2F10102 +0 -1
  563. data/spec/dummy/tmp/cache/3A4/EE0/shard%2F11101 +0 -1
  564. data/spec/dummy/tmp/cache/3A4/F20/shard%2F13000 +0 -1
  565. data/spec/dummy/tmp/cache/3A5/EA0/shard%2F10004 +0 -1
  566. data/spec/dummy/tmp/cache/3A5/EF0/shard%2F10130 +0 -1
  567. data/spec/dummy/tmp/cache/3A6/EE0/shard%2F10032 +0 -1
  568. data/spec/dummy/tmp/cache/3A6/F10/shard%2F10221 +0 -1
  569. data/spec/dummy/tmp/cache/3A6/F20/shard%2F12012 +0 -1
  570. data/spec/dummy/tmp/cache/3A6/F40/shard%2F10410 +0 -1
  571. data/spec/dummy/tmp/cache/3A6/F50/shard%2F12120 +0 -1
  572. data/spec/dummy/tmp/cache/3A6/F50/shard%2F12201 +0 -1
  573. data/spec/dummy/tmp/cache/3A7/EF0/shard%2F11005 +0 -1
  574. data/spec/dummy/tmp/cache/3A7/F00/shard%2F10123 +0 -1
  575. data/spec/dummy/tmp/cache/3A7/F20/shard%2F10060 +0 -1
  576. data/spec/dummy/tmp/cache/3A7/F20/shard%2F11032 +0 -1
  577. data/spec/dummy/tmp/cache/3A7/F30/shard%2F10231 +0 -1
  578. data/spec/dummy/tmp/cache/3A7/FA0/shard%2F12400 +0 -1
  579. data/spec/dummy/tmp/cache/3A8/EF0/shard%2F10106 +0 -1
  580. data/spec/dummy/tmp/cache/3A8/F40/shard%2F10151 +0 -1
  581. data/spec/dummy/tmp/cache/3A8/F50/shard%2F10322 +0 -1
  582. data/spec/dummy/tmp/cache/3A8/F70/shard%2F11312 +0 -1
  583. data/spec/dummy/tmp/cache/3A8/F90/shard%2F10520 +0 -1
  584. data/spec/dummy/tmp/cache/3A8/FB0/shard%2F13211 +0 -1
  585. data/spec/dummy/tmp/cache/3A9/F10/shard%2F10116 +0 -1
  586. data/spec/dummy/tmp/cache/3A9/F40/shard%2F10062 +0 -1
  587. data/spec/dummy/tmp/cache/3A9/F50/shard%2F10152 +0 -1
  588. data/spec/dummy/tmp/cache/3A9/F50/shard%2F11124 +0 -1
  589. data/spec/dummy/tmp/cache/3A9/F80/shard%2F10341 +0 -1
  590. data/spec/dummy/tmp/cache/3A9/F90/shard%2F13023 +0 -1
  591. data/spec/dummy/tmp/cache/3AA/010/shard%2F14221 +0 -1
  592. data/spec/dummy/tmp/cache/3AA/F10/shard%2F10027 +0 -1
  593. data/spec/dummy/tmp/cache/3AA/F10/shard%2F10108 +0 -1
  594. data/spec/dummy/tmp/cache/3AA/F30/shard%2F10045 +0 -1
  595. data/spec/dummy/tmp/cache/3AA/F50/shard%2F10144 +0 -1
  596. data/spec/dummy/tmp/cache/3AA/F70/shard%2F10081 +0 -1
  597. data/spec/dummy/tmp/cache/3AA/F90/shard%2F10423 +0 -1
  598. data/spec/dummy/tmp/cache/3AA/FB0/shard%2F10441 +0 -1
  599. data/spec/dummy/tmp/cache/3AA/FB0/shard%2F11170 +0 -1
  600. data/spec/dummy/tmp/cache/3AA/FC0/shard%2F10612 +0 -1
  601. data/spec/dummy/tmp/cache/3AA/FC0/shard%2F11260 +0 -1
  602. data/spec/dummy/tmp/cache/3AA/FC0/shard%2F11503 +0 -1
  603. data/spec/dummy/tmp/cache/3AA/FC0/shard%2F12313 +0 -1
  604. data/spec/dummy/tmp/cache/3AA/FD0/shard%2F13051 +0 -1
  605. data/spec/dummy/tmp/cache/3AB/000/shard%2F11450 +0 -1
  606. data/spec/dummy/tmp/cache/3AB/010/shard%2F10730 +0 -1
  607. data/spec/dummy/tmp/cache/3AB/010/shard%2F12512 +0 -1
  608. data/spec/dummy/tmp/cache/3AB/010/shard%2F13403 +0 -1
  609. data/spec/dummy/tmp/cache/3AB/010/shard%2F14051 +0 -1
  610. data/spec/dummy/tmp/cache/3AB/020/shard%2F10901 +0 -1
  611. data/spec/dummy/tmp/cache/3AB/020/shard%2F11630 +0 -1
  612. data/spec/dummy/tmp/cache/3AB/020/shard%2F11711 +0 -1
  613. data/spec/dummy/tmp/cache/3AB/F20/shard%2F10109 +0 -1
  614. data/spec/dummy/tmp/cache/3AB/F30/shard%2F11009 +0 -1
  615. data/spec/dummy/tmp/cache/3AB/F70/shard%2F10154 +0 -1
  616. data/spec/dummy/tmp/cache/3AB/F80/shard%2F10244 +0 -1
  617. data/spec/dummy/tmp/cache/3AB/FD0/shard%2F11342 +0 -1
  618. data/spec/dummy/tmp/cache/3AB/FE0/shard%2F14024 +0 -1
  619. data/spec/dummy/tmp/cache/3AB/FF0/shard%2F11603 +0 -1
  620. data/spec/dummy/tmp/cache/3AC/000/shard%2F11280 +0 -1
  621. data/spec/dummy/tmp/cache/3AC/000/shard%2F11361 +0 -1
  622. data/spec/dummy/tmp/cache/3AC/010/shard%2F13152 +0 -1
  623. data/spec/dummy/tmp/cache/3AC/020/shard%2F10650 +0 -1
  624. data/spec/dummy/tmp/cache/3AC/050/shard%2F13431 +0 -1
  625. data/spec/dummy/tmp/cache/3AC/F60/shard%2F10137 +0 -1
  626. data/spec/dummy/tmp/cache/3AC/F70/shard%2F11037 +0 -1
  627. data/spec/dummy/tmp/cache/3AC/F70/shard%2F11118 +0 -1
  628. data/spec/dummy/tmp/cache/3AC/F80/shard%2F10074 +0 -1
  629. data/spec/dummy/tmp/cache/3AC/F90/shard%2F10083 +0 -1
  630. data/spec/dummy/tmp/cache/3AC/F90/shard%2F11055 +0 -1
  631. data/spec/dummy/tmp/cache/3AC/FA0/shard%2F11064 +0 -1
  632. data/spec/dummy/tmp/cache/3AC/FA0/shard%2F11145 +0 -1
  633. data/spec/dummy/tmp/cache/3AC/FA0/shard%2F11226 +0 -1
  634. data/spec/dummy/tmp/cache/3AC/FA0/shard%2F11307 +0 -1
  635. data/spec/dummy/tmp/cache/3AC/FC0/shard%2F10272 +0 -1
  636. data/spec/dummy/tmp/cache/3AC/FD0/shard%2F11091 +0 -1
  637. data/spec/dummy/tmp/cache/3AC/FD0/shard%2F11172 +0 -1
  638. data/spec/dummy/tmp/cache/3AC/FD0/shard%2F11253 +0 -1
  639. data/spec/dummy/tmp/cache/3AC/FD0/shard%2F11415 +0 -1
  640. data/spec/dummy/tmp/cache/3AC/FF0/shard%2F10461 +0 -1
  641. data/spec/dummy/tmp/cache/3AC/FF0/shard%2F11514 +0 -1
  642. data/spec/dummy/tmp/cache/3AD/000/shard%2F10543 +0 -1
  643. data/spec/dummy/tmp/cache/3AD/010/shard%2F12253 +0 -1
  644. data/spec/dummy/tmp/cache/3AD/020/shard%2F14044 +0 -1
  645. data/spec/dummy/tmp/cache/3AD/040/shard%2F14305 +0 -1
  646. data/spec/dummy/tmp/cache/3AD/060/shard%2F11650 +0 -1
  647. data/spec/dummy/tmp/cache/3AD/F50/shard%2F10039 +0 -1
  648. data/spec/dummy/tmp/cache/3AD/F90/shard%2F10318 +0 -1
  649. data/spec/dummy/tmp/cache/3AD/FA0/shard%2F10246 +0 -1
  650. data/spec/dummy/tmp/cache/3AD/FC0/shard%2F10345 +0 -1
  651. data/spec/dummy/tmp/cache/3AE/030/shard%2F12344 +0 -1
  652. data/spec/dummy/tmp/cache/3AE/050/shard%2F10823 +0 -1
  653. data/spec/dummy/tmp/cache/3AE/060/shard%2F10751 +0 -1
  654. data/spec/dummy/tmp/cache/3AE/060/shard%2F11480 +0 -1
  655. data/spec/dummy/tmp/cache/3AE/070/shard%2F14081 +0 -1
  656. data/spec/dummy/tmp/cache/3AE/090/shard%2F10940 +0 -1
  657. data/spec/dummy/tmp/cache/3AE/0B0/shard%2F12740 +0 -1
  658. data/spec/dummy/tmp/cache/3AE/F90/shard%2F10067 +0 -1
  659. data/spec/dummy/tmp/cache/3AE/FC0/shard%2F10175 +0 -1
  660. data/spec/dummy/tmp/cache/3AE/FD0/shard%2F11237 +0 -1
  661. data/spec/dummy/tmp/cache/3AE/FF0/shard%2F10364 +0 -1
  662. data/spec/dummy/tmp/cache/3AF/000/shard%2F12066 +0 -1
  663. data/spec/dummy/tmp/cache/3AF/000/shard%2F12147 +0 -1
  664. data/spec/dummy/tmp/cache/3AF/010/shard%2F11427 +0 -1
  665. data/spec/dummy/tmp/cache/3AF/020/shard%2F11193 +0 -1
  666. data/spec/dummy/tmp/cache/3AF/020/shard%2F14109 +0 -1
  667. data/spec/dummy/tmp/cache/3AF/030/shard%2F10392 +0 -1
  668. data/spec/dummy/tmp/cache/3AF/030/shard%2F10635 +0 -1
  669. data/spec/dummy/tmp/cache/3AF/030/shard%2F11283 +0 -1
  670. data/spec/dummy/tmp/cache/3AF/030/shard%2F11526 +0 -1
  671. data/spec/dummy/tmp/cache/3AF/030/shard%2F12093 +0 -1
  672. data/spec/dummy/tmp/cache/3AF/030/shard%2F12174 +0 -1
  673. data/spec/dummy/tmp/cache/3AF/030/shard%2F14037 +0 -1
  674. data/spec/dummy/tmp/cache/3AF/070/shard%2F12372 +0 -1
  675. data/spec/dummy/tmp/cache/3AF/080/shard%2F12624 +0 -1
  676. data/spec/dummy/tmp/cache/3AF/080/shard%2F13515 +0 -1
  677. data/spec/dummy/tmp/cache/3AF/080/shard%2F14406 +0 -1
  678. data/spec/dummy/tmp/cache/3AF/090/shard%2F11823 +0 -1
  679. data/spec/dummy/tmp/cache/3AF/090/shard%2F11904 +0 -1
  680. data/spec/dummy/tmp/cache/3AF/0C0/shard%2F11850 +0 -1
  681. data/spec/dummy/tmp/cache/3AF/0C0/shard%2F11931 +0 -1
  682. data/spec/dummy/tmp/cache/3AF/0C0/shard%2F13551 +0 -1
  683. data/spec/dummy/tmp/cache/3AF/0F0/shard%2F13740 +0 -1
  684. data/spec/dummy/tmp/cache/3AF/FD0/shard%2F10095 +0 -1
  685. data/spec/dummy/tmp/cache/3AF/FD0/shard%2F12039 +0 -1
  686. data/spec/dummy/tmp/cache/3B0/000/shard%2F10438 +0 -1
  687. data/spec/dummy/tmp/cache/3B0/040/shard%2F11365 +0 -1
  688. data/spec/dummy/tmp/cache/3B0/060/shard%2F11626 +0 -1
  689. data/spec/dummy/tmp/cache/3B0/060/shard%2F12436 +0 -1
  690. data/spec/dummy/tmp/cache/3B0/060/shard%2F14137 +0 -1
  691. data/spec/dummy/tmp/cache/3B0/080/shard%2F14074 +0 -1
  692. data/spec/dummy/tmp/cache/3B0/090/shard%2F10681 +0 -1
  693. data/spec/dummy/tmp/cache/3B0/090/shard%2F11491 +0 -1
  694. data/spec/dummy/tmp/cache/3B0/090/shard%2F11572 +0 -1
  695. data/spec/dummy/tmp/cache/3B0/0A0/shard%2F10771 +0 -1
  696. data/spec/dummy/tmp/cache/3B0/0A0/shard%2F14335 +0 -1
  697. data/spec/dummy/tmp/cache/3B0/0C0/shard%2F12652 +0 -1
  698. data/spec/dummy/tmp/cache/3B0/FE0/shard%2F10177 +0 -1
  699. data/spec/dummy/tmp/cache/3B0/FE0/shard%2F11149 +0 -1
  700. data/spec/dummy/tmp/cache/3B0/FF0/shard%2F10267 +0 -1
  701. data/spec/dummy/tmp/cache/3B1/000/shard%2F11078 +0 -1
  702. data/spec/dummy/tmp/cache/3B1/030/shard%2F10295 +0 -1
  703. data/spec/dummy/tmp/cache/3B1/040/shard%2F10466 +0 -1
  704. data/spec/dummy/tmp/cache/3B1/070/shard%2F13328 +0 -1
  705. data/spec/dummy/tmp/cache/3B1/080/shard%2F10745 +0 -1
  706. data/spec/dummy/tmp/cache/3B1/080/shard%2F13094 +0 -1
  707. data/spec/dummy/tmp/cache/3B1/090/shard%2F10673 +0 -1
  708. data/spec/dummy/tmp/cache/3B1/090/shard%2F12293 +0 -1
  709. data/spec/dummy/tmp/cache/3B1/0A0/shard%2F14165 +0 -1
  710. data/spec/dummy/tmp/cache/3B1/0B0/shard%2F11744 +0 -1
  711. data/spec/dummy/tmp/cache/3B1/0E0/shard%2F12824 +0 -1
  712. data/spec/dummy/tmp/cache/3B1/100/shard%2F12680 +0 -1
  713. data/spec/dummy/tmp/cache/3B1/100/shard%2F13571 +0 -1
  714. data/spec/dummy/tmp/cache/3B1/100/shard%2F13814 +0 -1
  715. data/spec/dummy/tmp/cache/3B1/130/shard%2F13922 +0 -1
  716. data/spec/dummy/tmp/cache/3B1/FE0/shard%2F10088 +0 -1
  717. data/spec/dummy/tmp/cache/3B2/060/shard%2F10719 +0 -1
  718. data/spec/dummy/tmp/cache/3B2/070/shard%2F10566 +0 -1
  719. data/spec/dummy/tmp/cache/3B2/070/shard%2F11538 +0 -1
  720. data/spec/dummy/tmp/cache/3B2/0A0/shard%2F10917 +0 -1
  721. data/spec/dummy/tmp/cache/3B2/0A0/shard%2F12456 +0 -1
  722. data/spec/dummy/tmp/cache/3B2/0D0/shard%2F11673 +0 -1
  723. data/spec/dummy/tmp/cache/3B2/0E0/shard%2F10953 +0 -1
  724. data/spec/dummy/tmp/cache/3B2/0E0/shard%2F14193 +0 -1
  725. data/spec/dummy/tmp/cache/3B2/120/shard%2F12852 +0 -1
  726. data/spec/dummy/tmp/cache/3B2/150/shard%2F13851 +0 -1
  727. data/spec/dummy/tmp/cache/3B2/170/shard%2F13950 +0 -1
  728. data/spec/dummy/tmp/cache/3B3/030/shard%2F10198 +0 -1
  729. data/spec/dummy/tmp/cache/3B3/040/shard%2F10369 +0 -1
  730. data/spec/dummy/tmp/cache/3B3/060/shard%2F10387 +0 -1
  731. data/spec/dummy/tmp/cache/3B3/0A0/shard%2F11719 +0 -1
  732. data/spec/dummy/tmp/cache/3B3/0C0/shard%2F10927 +0 -1
  733. data/spec/dummy/tmp/cache/3B3/0E0/shard%2F12484 +0 -1
  734. data/spec/dummy/tmp/cache/3B3/0E0/shard%2F13375 +0 -1
  735. data/spec/dummy/tmp/cache/3B3/0F0/shard%2F13627 +0 -1
  736. data/spec/dummy/tmp/cache/3B3/100/shard%2F10963 +0 -1
  737. data/spec/dummy/tmp/cache/3B3/100/shard%2F11692 +0 -1
  738. data/spec/dummy/tmp/cache/3B3/160/shard%2F12880 +0 -1
  739. data/spec/dummy/tmp/cache/3B4/090/shard%2F10487 +0 -1
  740. data/spec/dummy/tmp/cache/3B4/0A0/shard%2F11468 +0 -1
  741. data/spec/dummy/tmp/cache/3B4/0A0/shard%2F11549 +0 -1
  742. data/spec/dummy/tmp/cache/3B4/0D0/shard%2F11657 +0 -1
  743. data/spec/dummy/tmp/cache/3B4/0D0/shard%2F11738 +0 -1
  744. data/spec/dummy/tmp/cache/3B4/0D0/shard%2F12548 +0 -1
  745. data/spec/dummy/tmp/cache/3B4/0D0/shard%2F14249 +0 -1
  746. data/spec/dummy/tmp/cache/3B4/0E0/shard%2F13286 +0 -1
  747. data/spec/dummy/tmp/cache/3B4/110/shard%2F12908 +0 -1
  748. data/spec/dummy/tmp/cache/3B4/130/shard%2F13655 +0 -1
  749. data/spec/dummy/tmp/cache/3B5/070/shard%2F10299 +0 -1
  750. data/spec/dummy/tmp/cache/3B5/080/shard%2F11199 +0 -1
  751. data/spec/dummy/tmp/cache/3B5/0B0/shard%2F10497 +0 -1
  752. data/spec/dummy/tmp/cache/3B5/0B0/shard%2F11388 +0 -1
  753. data/spec/dummy/tmp/cache/3B5/100/shard%2F11595 +0 -1
  754. data/spec/dummy/tmp/cache/3B5/110/shard%2F10875 +0 -1
  755. data/spec/dummy/tmp/cache/3B5/110/shard%2F12576 +0 -1
  756. data/spec/dummy/tmp/cache/3B5/110/shard%2F14277 +0 -1
  757. data/spec/dummy/tmp/cache/3B5/150/shard%2F12936 +0 -1
  758. data/spec/dummy/tmp/cache/3B5/170/shard%2F13683 +0 -1
  759. data/spec/dummy/tmp/cache/3B6/0F0/shard%2F10849 +0 -1
  760. data/spec/dummy/tmp/cache/3B6/100/shard%2F10696 +0 -1
  761. data/spec/dummy/tmp/cache/3B6/110/shard%2F13459 +0 -1
  762. data/spec/dummy/tmp/cache/3B6/190/shard%2F12964 +0 -1
  763. data/spec/dummy/tmp/cache/3B6/1F0/shard%2F13990 +0 -1
  764. data/spec/dummy/tmp/cache/3B7/0E0/shard%2F10589 +0 -1
  765. data/spec/dummy/tmp/cache/3B7/140/shard%2F11696 +0 -1
  766. data/spec/dummy/tmp/cache/3B7/150/shard%2F12596 +0 -1
  767. data/spec/dummy/tmp/cache/3B7/150/shard%2F13487 +0 -1
  768. data/spec/dummy/tmp/cache/3B8/140/shard%2F10797 +0 -1
  769. data/spec/dummy/tmp/cache/3B8/140/shard%2F11769 +0 -1
  770. data/spec/dummy/tmp/cache/3B8/170/shard%2F10986 +0 -1
  771. data/spec/dummy/tmp/cache/3B8/170/shard%2F11796 +0 -1
  772. data/spec/dummy/tmp/cache/3B8/170/shard%2F11877 +0 -1
  773. data/spec/dummy/tmp/cache/3B8/170/shard%2F11958 +0 -1
  774. data/spec/dummy/tmp/cache/3B8/170/shard%2F12768 +0 -1
  775. data/spec/dummy/tmp/cache/3B9/1B0/shard%2F12796 +0 -1
  776. data/spec/dummy/tmp/cache/3B9/1D0/shard%2F13786 +0 -1
  777. data/spec/dummy/tmp/cache/3BA/160/shard%2F10799 +0 -1
  778. data/spec/dummy/tmp/cache/3BA/180/shard%2F10979 +0 -1
  779. data/spec/dummy/tmp/cache/3BA/1C0/shard%2F11987 +0 -1
  780. data/spec/dummy/tmp/cache/3BB/1C0/shard%2F13599 +0 -1
  781. data/spec/dummy/tmp/cache/3BB/210/shard%2F13887 +0 -1
  782. data/spec/lib/action_controller/caching_spec.rb +0 -49
  783. data/spec/lib/active_record/abstract_adapter_spec.rb +0 -16
  784. data/spec/lib/active_record/association_spec.rb +0 -444
  785. data/spec/lib/active_record/attribute_methods_spec.rb +0 -122
  786. data/spec/lib/active_record/base_spec.rb +0 -130
  787. data/spec/lib/active_record/calculations_spec.rb +0 -282
  788. data/spec/lib/active_record/connection_handler_spec.rb +0 -45
  789. data/spec/lib/active_record/connection_pool_spec.rb +0 -83
  790. data/spec/lib/active_record/finder_methods_spec.rb +0 -58
  791. data/spec/lib/active_record/model_schema_spec.rb +0 -25
  792. data/spec/lib/active_record/persistence_spec.rb +0 -34
  793. data/spec/lib/active_record/postgresql_adapter_spec.rb +0 -40
  794. data/spec/lib/active_record/query_cache_spec.rb +0 -346
  795. data/spec/lib/active_record/query_methods_spec.rb +0 -166
  796. data/spec/lib/active_record/relation_spec.rb +0 -56
  797. data/spec/lib/active_record/spawn_methods_spec.rb +0 -44
  798. data/spec/lib/connection_pool_proxy_spec.rb +0 -45
  799. data/spec/lib/database_server_spec.rb +0 -231
  800. data/spec/lib/default_shard_spec.rb +0 -18
  801. data/spec/lib/engine_spec.rb +0 -14
  802. data/spec/lib/environment_spec.rb +0 -25
  803. data/spec/lib/r_spec_helper_spec.rb +0 -77
  804. data/spec/lib/rails_spec.rb +0 -31
  805. data/spec/lib/rake_spec.rb +0 -100
  806. data/spec/lib/shackles_spec.rb +0 -210
  807. data/spec/models/shard_spec.rb +0 -603
  808. data/spec/spec_helper.rb +0 -66
@@ -1,603 +0,0 @@
1
- require "spec_helper"
2
-
3
- module Switchman
4
- describe Shard do
5
- include RSpecHelper
6
-
7
- describe ".activate" do
8
- it "should activate a hash of shard categories" do
9
- expect(Shard.current).to eq Shard.default
10
- expect(Shard.current(:other)).to eq Shard.default
11
- Shard.activate(:default => @shard1, :other => @shard2) do
12
- expect(Shard.current).to eq @shard1
13
- expect(Shard.current(:other)).to eq @shard2
14
- end
15
- expect(Shard.current).to eq Shard.default
16
- expect(Shard.current(:other)).to eq Shard.default
17
- end
18
-
19
- it "should not allow activating the unsharded category" do
20
- expect(Shard.current(:unsharded)).to eq Shard.default
21
- Shard.activate(:unsharded => @shard1) do
22
- expect(Shard.current(:unsharded)).to eq Shard.default
23
- end
24
- expect(Shard.current(:unsharded)).to eq Shard.default
25
- end
26
- end
27
-
28
- describe ".destroy" do
29
- it "works on created shards" do
30
- server = DatabaseServer.create(Shard.default.database_server.config)
31
- shard = server.create_new_shard
32
- expect{ shard.destroy }.to_not raise_error
33
- expect(Shard.where(id: shard.id)).to be_empty
34
- end
35
-
36
- it "fails on the default shard" do
37
- shard = Shard.default
38
- expect{ shard.destroy }.to raise_error("Cannot destroy the default shard")
39
- end
40
- end
41
-
42
- describe "#activate" do
43
- it "should activate the default category when no args are used" do
44
- expect(Shard.current).to eq Shard.default
45
- @shard1.activate do
46
- expect(Shard.current).to eq @shard1
47
- end
48
- expect(Shard.current).to eq Shard.default
49
- end
50
-
51
- it "should activate other categories" do
52
- expect(Shard.current(:other)).to eq Shard.default
53
- @shard1.activate(:other) do
54
- expect(Shard.current(:other)).to eq @shard1
55
- expect(Shard.current).to eq Shard.default
56
- end
57
- expect(Shard.current(:other)).to eq Shard.default
58
- end
59
-
60
- it "should activate multiple categories" do
61
- expect(Shard.current).to eq Shard.default
62
- expect(Shard.current(:other)).to eq Shard.default
63
- @shard1.activate(:default, :other) do
64
- expect(Shard.current).to eq @shard1
65
- expect(Shard.current(:other)).to eq @shard1
66
- end
67
- expect(Shard.current).to eq Shard.default
68
- expect(Shard.current(:other)).to eq Shard.default
69
- end
70
- end
71
-
72
- describe "#shard" do
73
- it "should return the default shard if the instance variable is not set" do
74
- # i.e. the instance var would not be set if we got this back from a cache
75
- # that was populated pre-sharding
76
- a = User.new
77
- expect(a.shard).to eq Shard.default
78
- a.instance_variable_set(:@shard, nil)
79
- expect(a.shard).to eq Shard.default
80
- end
81
- end
82
-
83
- describe "#drop_database" do
84
- it "should work" do
85
- # use a separate connection so we don't commit the transaction
86
- server = DatabaseServer.create(Shard.default.database_server.config)
87
- shard = server.create_new_shard
88
- shard.activate do
89
- User.create!
90
- expect(User.count).to eq 1
91
- end
92
- shard.drop_database
93
- shard.activate do
94
- expect { User.count }.to raise_error(::ActiveRecord::StatementInvalid)
95
- end
96
- end
97
-
98
- it "raises an exception if the shard is the default shard" do
99
- expect{ Shard.default.drop_database }.to raise_error("Cannot drop the database of the default shard")
100
- end
101
- end
102
-
103
- describe ".lookup" do
104
- it "should work with pseudo-ids" do
105
- expect(Shard.lookup('default')).to eq Shard.default
106
- expect(Shard.lookup('self')).to eq Shard.current
107
- @shard1.activate do
108
- expect(Shard.lookup('default')).to eq Shard.default
109
- expect(Shard.lookup('self')).to eq Shard.current
110
- end
111
- end
112
-
113
- it "should work with string ids" do
114
- expect(Shard.lookup(Shard.current.id.to_s)).to eq Shard.current
115
- expect(Shard.lookup(@shard1.id.to_s)).to eq @shard1
116
- end
117
-
118
- it "should raise an error for non-ids" do
119
- expect { Shard.lookup('jacob') }.to raise_error(ArgumentError)
120
- end
121
- end
122
-
123
- describe ".with_each_shard" do
124
- describe ":exception" do
125
- it "should default to :raise" do
126
- expect { Shard.with_each_shard { raise "error" } }.to raise_error("error")
127
- end
128
-
129
- it "should :ignore" do
130
- expect(Shard.with_each_shard(exception: :ignore) { raise "error" }).to eq []
131
- end
132
-
133
- it "should :defer" do
134
- counter = 0
135
- expect { Shard.with_each_shard(exception: :defer) { counter += 1; raise "error" } }.to raise_error("error")
136
- # called more than once
137
- expect(counter).to be > 1
138
- end
139
-
140
- it "should call a proc" do
141
- counter = 0
142
- expect(Shard.with_each_shard(exception: -> { counter += 1 }) { raise "error" }).to eq []
143
- # called more than once
144
- expect(counter).to be > 1
145
- end
146
- end
147
-
148
- it "orders explicit scopes without an explicit order" do
149
- scope = Shard.where(id: Shard.default)
150
- scope.expects(:order).once.returns(scope)
151
- Shard.with_each_shard(scope) {}
152
- end
153
-
154
- it "does not order explicit scopes that already have an order" do
155
- scope = Shard.order(:id)
156
- scope.expects(:order).never
157
- Shard.with_each_shard(scope) {}
158
- end
159
-
160
- context "non-transactional" do
161
- self.use_transactional_fixtures = false
162
-
163
- it "should disconnect when switching among different database servers" do
164
- User.connection
165
- expect(User.connected?).to eq true
166
- Shard.with_each_shard([Shard.default, @shard2]) {}
167
- expect(User.connected?).to eq false
168
- end
169
-
170
- it "should disconnect from other environments" do
171
- ::Shackles.activate(:slave) do
172
- Shard.with_each_shard([Shard.default, @shard2]) do
173
- ::Shackles.activate(:master) do
174
- User.connection
175
- expect(User.connected?).to eq true
176
- end
177
- end
178
- end
179
-
180
- ::Shackles.activate(:slave) { expect(User.connected?).to eq false }
181
- ::Shackles.activate(:master) { expect(User.connected?).to eq false }
182
- end
183
-
184
- it "should not disconnect when it's the current shard" do
185
- User.connection
186
- expect(User.connected?).to eq true
187
- Shard.with_each_shard([Shard.default]) {}
188
- expect(User.connected?).to eq true
189
- end
190
-
191
- it "should not disconnect for zero shards" do
192
- User.connection
193
- expect(User.connected?).to eq true
194
- Shard.with_each_shard([]) {}
195
- expect(User.connected?).to eq true
196
- end
197
- end
198
- end
199
-
200
- describe ".cached_shards" do
201
- it "is a hash rather than array" do
202
- Shard.instance_variable_set(:@cached_shards, nil)
203
- expect(Shard.send(:cached_shards)).to be_a(Hash)
204
- Shard.clear_cache
205
- expect(Shard.send(:cached_shards)).to be_a(Hash)
206
- end
207
- end
208
-
209
- describe ".partition_by_shard" do
210
- it "should work" do
211
- ids = [2, 48, Shard::IDS_PER_SHARD * @shard1.id + 6, Shard::IDS_PER_SHARD * @shard1.id + 8, 10, 12]
212
- results = Shard.partition_by_shard(ids) do |ids|
213
- expect(ids.length == 4 || ids.length == 2).to eq true
214
- ids.map { |id| id + 1}
215
- end
216
-
217
- # could have done either shard first, but we can't sort, because we want to see the shards grouped together
218
- expect(results == [3, 49, 11, 13, 7, 9] ||
219
- results == [7, 9, 3, 49, 11, 13]).to eq true
220
- end
221
-
222
- it "should work for a partition_proc that returns a shard" do
223
- array = [{:id => 1, :shard => @shard1}, {:id => 2, :shard => @shard2}]
224
- results = Shard.partition_by_shard(array, lambda { |a| a[:shard] }) do |objects|
225
- expect(objects.length).to eq 1
226
- expect(Shard.current).to eq objects.first[:shard]
227
- objects.first[:id]
228
- end
229
- expect(results.sort).to eq [1, 2]
230
- end
231
-
232
- it "should support shortened id syntax, and strings" do
233
- ids = [@shard1.global_id_for(1), "#{@shard2.id}~2"]
234
- result = Shard.partition_by_shard(ids) do |ids|
235
- expect(ids.length).to eq 1
236
- expect([@shard1, @shard2].include?(Shard.current)).to eq true
237
- expect(ids.first).to eq 1 if Shard.current == @shard1
238
- expect(ids.first).to eq 2 if Shard.current == @shard2
239
- ids.first
240
- end
241
- expect(result.sort).to eq [1, 2]
242
- end
243
-
244
- it "should partition unrecognized types unchanged into current shard" do
245
- expected_shard = Shard.current
246
- items = [:symbol, Object.new]
247
- result = Shard.partition_by_shard(items) do |shard_items|
248
- [Shard.current, shard_items]
249
- end
250
- expect(result).to eq [expected_shard, items]
251
- end
252
-
253
- it "should partition unrecognized strings unchanged into current shard" do
254
- expected_shard = Shard.current
255
- items = ["not an id", "something other than an id"]
256
- result = Shard.partition_by_shard(items) do |shard_items|
257
- [Shard.current, shard_items]
258
- end
259
- expect(result).to eq [expected_shard, items]
260
- end
261
-
262
- it "should partition recognized ids with an invalid shard unchanged into current shard" do
263
- expected_shard = Shard.current
264
- bad_shard_id = @shard2.id + 10000
265
- items = ["#{bad_shard_id}~1", Shard::IDS_PER_SHARD * bad_shard_id + 1]
266
- result = Shard.partition_by_shard(items) do |shard_items|
267
- [Shard.current, shard_items]
268
- end
269
- expect(result).to eq [expected_shard, items]
270
- end
271
- end
272
-
273
- describe "#name" do
274
- it "the default shard should not be marked as dirty after reading its name" do
275
- s = Shard.default
276
- expect(s).not_to be_new_record
277
- s.name
278
- expect(s).not_to be_changed
279
- end
280
-
281
- it "should fall back to shard_name in the config if nil" do
282
- db = DatabaseServer.new(nil, adapter: 'mysql', database: 'canvas', shard_name: 'yoyoyo')
283
- shard = Shard.new(database_server: db)
284
- expect(shard.name).to eq 'yoyoyo'
285
- end
286
-
287
- it "should fall back to the database_server if nil" do
288
- db = DatabaseServer.new(nil, adapter: 'mysql', database: 'canvas')
289
- shard = Shard.new(database_server: db)
290
- expect(shard.name).to eq 'canvas'
291
- end
292
-
293
- it "should get it from the postgres connection if not otherwise specified" do
294
- db = DatabaseServer.create(adapter: 'postgresql', database: 'notme')
295
- shard = Shard.new(database_server: db)
296
- shard.database_server = db
297
- connection = mock()
298
- connection.stubs(:open_transactions).returns(0)
299
- connection.expects(:current_schemas).returns(['canvas', 'public']).once
300
- connection.expects(:schema_search_path).returns('canvas,public').once
301
- connection.expects(:schema_search_path=).with(nil).once
302
- connection.stubs(:shard).returns(Shard.default)
303
- connection.expects(:shard=).with(shard)
304
- connection.stubs(:adapter_name).returns('PostgreSQL')
305
- connection.stubs(:run_callbacks).returns(nil)
306
- connection.stubs(:_run_checkin_callbacks).returns(nil)
307
- connection.stubs(:owner).returns(Thread.current)
308
- ::ActiveRecord::ConnectionAdapters::ConnectionPool.any_instance.stubs(:checkout).returns(connection)
309
- begin
310
- expect(shard.name).to eq 'canvas'
311
- ensure
312
- shard.activate { ::ActiveRecord::Base.connection_pool.current_pool.disconnect! }
313
- end
314
- end
315
- end
316
-
317
- describe ".shard_for" do
318
- it "should work" do
319
- expect(Shard.shard_for(1)).to eq Shard.default
320
- expect(Shard.shard_for(1, @shard1)).to eq @shard1
321
- expect(Shard.shard_for(@shard1.global_id_for(1))).to eq @shard1
322
- expect(Shard.shard_for(Shard.default.global_id_for(1))).to eq Shard.default
323
- expect(Shard.shard_for(@shard1.global_id_for(1), @shard1)).to eq @shard1
324
- expect(Shard.shard_for(Shard.default.global_id_for(1), @shard1)).to eq Shard.default
325
- end
326
- end
327
-
328
- describe ".local_id_for" do
329
- it "should recognize shortened string ids" do
330
- expected_id = 1
331
- expected_shard = @shard2
332
- id, shard = Shard.local_id_for("#{expected_shard.id}~#{expected_id}")
333
- expect(id).to eq expected_id
334
- expect(shard).to eq expected_shard
335
- end
336
-
337
- it "should recognize global ids" do
338
- expected_id = 1
339
- expected_shard = @shard2
340
- id, shard = Shard.local_id_for(Shard::IDS_PER_SHARD * expected_shard.id + expected_id)
341
- expect(id).to eq expected_id
342
- expect(shard).to eq expected_shard
343
- end
344
-
345
- it "should recognize local ids with no shard" do
346
- expected_id = 1
347
- id, shard = Shard.local_id_for(expected_id)
348
- expect(id).to eq expected_id
349
- expect(shard).to be_nil
350
- end
351
-
352
- it "should return nil for unrecognized input" do
353
- id, shard = Shard.local_id_for("not an id")
354
- expect(id).to be_nil
355
- expect(shard).to be_nil
356
- end
357
-
358
- it "should return nil for ids with bad shard values" do
359
- bad_shard_id = @shard2.id + 10000
360
- id, shard = Shard.local_id_for("#{bad_shard_id}~1")
361
- expect(id).to be_nil
362
- expect(shard).to be_nil
363
- end
364
- end
365
-
366
- context "id translation" do
367
- before do
368
- @local_id = 1
369
- @global_id = Shard::IDS_PER_SHARD * @shard1.id + @local_id
370
- end
371
-
372
- describe ".integral_id" do
373
- it "should return recognized ids" do
374
- expect(Shard.integral_id_for(@local_id)).to eq @local_id
375
- expect(Shard.integral_id_for(@local_id.to_s)).to eq @local_id
376
- expect(Shard.integral_id_for(@global_id)).to eq @global_id
377
- expect(Shard.integral_id_for(@global_id.to_s)).to eq @global_id
378
- expect(Shard.integral_id_for("#{@shard1.id}~#{@local_id}")).to eq @global_id
379
- end
380
-
381
- it "should work even for shards that don't exist" do
382
- shard = Shard.create!
383
- shard.destroy
384
- global_id = shard.global_id_for(1)
385
- expect(Shard.integral_id_for(global_id)).to eq global_id
386
- expect(Shard.integral_id_for(global_id.to_s)).to eq global_id
387
- expect(Shard.integral_id_for("#{shard.id}~1")).to eq global_id
388
- end
389
-
390
- it "should return nil for unrecognized ids" do
391
- expect(Shard.integral_id_for('not an id')).to eq nil
392
- end
393
- end
394
-
395
- describe ".local_id_for" do
396
- it "should return id without shard for local id" do
397
- expect(Shard.local_id_for(@local_id)).to eq [@local_id, nil]
398
- end
399
-
400
- it "should return id with shard for global id" do
401
- expect(Shard.local_id_for(@global_id)).to eq [@local_id, @shard1]
402
- end
403
-
404
- it "should return nil for shards that don't exist" do
405
- shard = Shard.create!
406
- shard.destroy
407
- expect(Shard.local_id_for(shard.global_id_for(1))).to eq [nil, nil]
408
- end
409
-
410
- it "should return nil for unrecognized ids" do
411
- expect(Shard.local_id_for('not an id')).to eq [nil, nil]
412
- end
413
- end
414
-
415
- describe ".relative_id_for" do
416
- it "should return recognized ids relative to the target shard" do
417
- expect(Shard.relative_id_for(@local_id, @shard1, @shard2)).to eq @global_id
418
- expect(Shard.relative_id_for(@local_id, @shard2, @shard2)).to eq @local_id
419
- expect(Shard.relative_id_for(@global_id, @shard1, @shard2)).to eq @global_id
420
- expect(Shard.relative_id_for(@global_id, @shard2, @shard2)).to eq @global_id
421
- end
422
-
423
- it "should return the original id for unrecognized ids" do
424
- expect(Shard.relative_id_for('not an id', @shard1, @shard2)).to eq 'not an id'
425
- end
426
- end
427
-
428
- describe ".short_id_for" do
429
- it "should return shorted strings for global ids" do
430
- expect(Shard.short_id_for(@local_id)).to eq @local_id
431
- expect(Shard.short_id_for("#{@local_id}")).to eq @local_id
432
- expect(Shard.short_id_for(@global_id)).to eq "#{@shard1.id}~#{@local_id}"
433
- end
434
-
435
- it "should return the original id for unrecognized ids" do
436
- expect(Shard.short_id_for('not an id')).to eq 'not an id'
437
- end
438
- end
439
-
440
- describe ".global_id_for" do
441
- it "should return the provided id if already global" do
442
- local_id = 5
443
- Shard.with_each_shard do
444
- global_id = Shard.current.global_id_for(local_id)
445
- expect(Shard.global_id_for(global_id)).to eq global_id
446
- end
447
- end
448
-
449
- it "should treat local ids as local to the current shard" do
450
- local_id = 5
451
- Shard.with_each_shard do
452
- next if Shard.current == Shard.default
453
- expect(Shard.shard_for(Shard.global_id_for(local_id))).to eq Shard.current
454
- end
455
- end
456
- end
457
- end
458
-
459
- describe ".default" do
460
-
461
- after(:each) do
462
- Shard.unstub(:where)
463
- Shard.send(:active_shards).clear
464
- Shard.default(reload: true)
465
- end
466
-
467
- it "returns the cached value if default is already set" do
468
- Shard.instance_variable_set(:@default, DefaultShard.instance)
469
- expect(Shard.default).to eq(DefaultShard.instance)
470
- end
471
-
472
- it "loads a default value if cached value is nil" do
473
- Shard.instance_variable_set(:@default, nil)
474
- expect(Shard.default).to be_a(Switchman::Shard)
475
- end
476
-
477
- it "reloads the default shard even when it's set when the reload arg present" do
478
- Shard.instance_variable_set(:@default, DefaultShard.instance)
479
- expect(Shard.default(true)).to be_a(Switchman::Shard)
480
- end
481
-
482
- context "when using reload with_fallback" do
483
- it "replaces DefaultShard instance if cached" do
484
- Shard.instance_variable_set(:@default, DefaultShard.instance)
485
- expect(Shard.default(reload: true, with_fallback: true)).to be_a(Switchman::Shard)
486
- end
487
-
488
- it "replaces a Shard instance if replacement query successful" do
489
- non_default = Shard.where(default: false).first
490
- actual_default = Shard.where(default:true).first
491
- expect(non_default).to_not be(nil)
492
- expect(actual_default).to_not be(nil)
493
- Shard.instance_variable_set(:@default, non_default)
494
- Shard.stubs(:where).with(default: true).returns([actual_default])
495
- new_default = Shard.default(reload: true, with_fallback: true)
496
- expect(new_default).to eq(actual_default)
497
- end
498
-
499
- it "uses the default shard instance when fallback is off" do
500
- non_default = Shard.where(default: false).first
501
- actual_default = Shard.where(default:true).first
502
- Shard.instance_variable_set(:@default, non_default)
503
- Shard.stubs(:where).with(default: true).raises(PG::UnableToSend)
504
- new_default = Shard.default(reload: true, with_fallback: false)
505
- expect(new_default).to eq(DefaultShard.instance)
506
- end
507
-
508
- it "falls back to existing default shard if replacement query fails" do
509
- non_default = Shard.where(default: false).first
510
- Shard.instance_variable_set(:@default, non_default)
511
- Shard.stubs(:where).with(default: true).raises(PG::UnableToSend)
512
- new_default = Shard.default(reload: true, with_fallback: true)
513
- expect(new_default).to eq(non_default)
514
- end
515
-
516
- it "respects a false reload even with fallback" do
517
- Shard.instance_variable_set(:@default, DefaultShard.instance)
518
- expect(Shard.default(reload: false, with_fallback: true)).to eq(DefaultShard.instance)
519
- end
520
-
521
- it "uses the original positional parameter if provided (will go away ultimately, remove this spec then)" do
522
- Shard.instance_variable_set(:@default, DefaultShard.instance)
523
- expect(Shard.default(true, reload: false, with_fallback: false)).to be_a(Switchman::Shard)
524
- end
525
- end
526
-
527
- it "doesn't forget current shard activations when reloading" do
528
- @shard1.activate do
529
- Shard.default(reload: true)
530
- expect(Shard.current).to eq @shard1
531
- end
532
- end
533
- end
534
-
535
- describe ".determine_max_procs" do
536
- context "with no info on cpu_count" do
537
- before(:each) do
538
- ::Switchman::Environment.stubs(:cpu_count).returns(nil)
539
- end
540
-
541
- it "returns the option if valid" do
542
- expect(Shard.determine_max_procs(5)).to eq(5)
543
- end
544
-
545
- it "makes the option an integer" do
546
- expect(Shard.determine_max_procs("8")).to eq(8)
547
- end
548
-
549
- it "returns nil if the option is nil" do
550
- expect(Shard.determine_max_procs(nil)).to be_nil
551
- end
552
-
553
- it "is nil if the option is 0" do
554
- expect(Shard.determine_max_procs("0")).to be_nil
555
- end
556
-
557
- it "is nil if the option is nonsense" do
558
- expect(Shard.determine_max_procs("asdf")).to be_nil
559
- end
560
-
561
- it "ignores parallel input if max procs specified" do
562
- expect(Shard.determine_max_procs("4", 3)).to eq(4)
563
- end
564
- end
565
-
566
- context "with a cpu_count" do
567
- before(:each) do
568
- ::Switchman::Environment.stubs(:cpu_count).returns(8)
569
- end
570
-
571
- it "returns the option if valid" do
572
- expect(Shard.determine_max_procs("4")).to eq(4)
573
- end
574
-
575
- it "returns 2x cores if the option is nil and no parallel input" do
576
- expect(Shard.determine_max_procs(nil)).to eq(16)
577
- end
578
-
579
- it "uses the parallel input as a multiplier if provided" do
580
- expect(Shard.determine_max_procs(nil, 3)).to eq(24)
581
- end
582
-
583
- it "maxes at 1 if parallel is 0" do
584
- expect(Shard.determine_max_procs(nil, 0)).to eq(1)
585
- end
586
-
587
- it "maxes at 1 if parallel is nil" do
588
- expect(Shard.determine_max_procs(nil, nil)).to eq(1)
589
- end
590
-
591
- it "is nil if the option is 0" do
592
- expect(Shard.determine_max_procs("0")).to eq(nil)
593
- end
594
-
595
- it "is nil if the cpu count is 0" do
596
- ::Switchman::Environment.stubs(:cpu_count).returns(0)
597
- expect(Shard.determine_max_procs(nil)).to eq(nil)
598
- end
599
- end
600
-
601
- end
602
- end
603
- end