squib 0.12.0 → 0.13.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.
Files changed (392) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -2
  3. data/CHANGELOG.md +16 -1
  4. data/appveyor.yml +2 -3
  5. data/lib/squib/args/sheet.rb +66 -34
  6. data/lib/squib/graphics/save_pdf.rb +1 -1
  7. data/lib/squib/import/data_frame.rb +7 -7
  8. data/lib/squib/version.rb +1 -1
  9. data/samples/autoscale_font/_autoscale_font.rb +1 -1
  10. data/samples/build_groups/build_groups.rb +3 -3
  11. data/samples/colors/_colors.rb +1 -0
  12. data/samples/{config_text_markup.rb → config/config_text_markup.rb} +0 -0
  13. data/samples/{custom_config.rb → config/custom_config.rb} +0 -0
  14. data/samples/{cairo_access.rb → images/_cairo_access.rb} +0 -0
  15. data/samples/images/_images.rb +1 -1
  16. data/samples/{unicode.rb → images/_unicode.rb} +0 -0
  17. data/samples/intro/01_hello.rb +1 -2
  18. data/samples/intro/02_options.rb +1 -2
  19. data/samples/intro/03_layout.rb +1 -2
  20. data/samples/intro/04_arrays.rb +1 -2
  21. data/samples/intro/05_excel.rb +3 -4
  22. data/samples/{tgc_proofs.rb → proofs/_tgc_proofs.rb} +1 -4
  23. data/samples/saves/_save_pdf.rb +7 -0
  24. data/samples/{embed_text.rb → text/_embed_text.rb} +1 -0
  25. data/samples/text/_text.rb +1 -1
  26. data/samples/{text_options.rb → text/_text_options.rb} +1 -1
  27. data/samples/{bug134.rb → text/bug134.rb} +0 -0
  28. data/squib.gemspec +17 -16
  29. metadata +90 -596
  30. data/benchmarks/antialias_best.rb +0 -13
  31. data/benchmarks/antialias_best.yml +0 -1
  32. data/benchmarks/antialias_fast.rb +0 -13
  33. data/benchmarks/antialias_fast.yml +0 -1
  34. data/benchmarks/backend-svg.yml +0 -4
  35. data/benchmarks/backend_memory.rb +0 -14
  36. data/benchmarks/backend_svg.rb +0 -14
  37. data/benchmarks/shiny-purse.png +0 -0
  38. data/benchmarks/spanner.svg +0 -91
  39. data/benchmarks/tons_of_png.rb +0 -6
  40. data/benchmarks/tons_of_svg.rb +0 -7
  41. data/benchmarks/tons_of_text.rb +0 -8
  42. data/docs/Makefile +0 -216
  43. data/docs/_static/css/squibdocs.css +0 -23
  44. data/docs/args/draw.rst +0 -36
  45. data/docs/args/expansion.rst +0 -3
  46. data/docs/args/layout.rst +0 -6
  47. data/docs/args/output_dir.rst +0 -6
  48. data/docs/args/range.rst +0 -6
  49. data/docs/args/transform.rst +0 -51
  50. data/docs/args/trim.rst +0 -11
  51. data/docs/args/wh.rst +0 -12
  52. data/docs/args/xy.rst +0 -12
  53. data/docs/arrays.rst +0 -80
  54. data/docs/backends.rst +0 -20
  55. data/docs/bleed.rst +0 -13
  56. data/docs/build_groups.rst +0 -45
  57. data/docs/colors.rst +0 -90
  58. data/docs/conf.py +0 -287
  59. data/docs/config.rst +0 -135
  60. data/docs/data.rst +0 -26
  61. data/docs/dsl/background.rst +0 -20
  62. data/docs/dsl/build.rst +0 -32
  63. data/docs/dsl/build_groups.rst +0 -23
  64. data/docs/dsl/circle.rst +0 -27
  65. data/docs/dsl/cm.rst +0 -19
  66. data/docs/dsl/configure.rst +0 -18
  67. data/docs/dsl/csv.rst +0 -81
  68. data/docs/dsl/curve.rst +0 -63
  69. data/docs/dsl/data_frame.rst +0 -85
  70. data/docs/dsl/deck.rst +0 -45
  71. data/docs/dsl/disable_build.rst +0 -25
  72. data/docs/dsl/disable_build_globally.rst +0 -46
  73. data/docs/dsl/ellipse.rst +0 -23
  74. data/docs/dsl/enable_build.rst +0 -25
  75. data/docs/dsl/enable_build_globally.rst +0 -44
  76. data/docs/dsl/grid.rst +0 -31
  77. data/docs/dsl/hand.rst +0 -40
  78. data/docs/dsl/hint.rst +0 -15
  79. data/docs/dsl/inches.rst +0 -19
  80. data/docs/dsl/index.rst +0 -9
  81. data/docs/dsl/line.rst +0 -52
  82. data/docs/dsl/mm.rst +0 -19
  83. data/docs/dsl/png.rst +0 -49
  84. data/docs/dsl/polygon.rst +0 -28
  85. data/docs/dsl/rect.rst +0 -22
  86. data/docs/dsl/save.rst +0 -23
  87. data/docs/dsl/save_pdf.rst +0 -89
  88. data/docs/dsl/save_png.rst +0 -46
  89. data/docs/dsl/save_sheet.rst +0 -55
  90. data/docs/dsl/showcase.rst +0 -76
  91. data/docs/dsl/star.rst +0 -35
  92. data/docs/dsl/svg.rst +0 -119
  93. data/docs/dsl/text.rst +0 -292
  94. data/docs/dsl/triangle.rst +0 -50
  95. data/docs/dsl/use_layout.rst +0 -16
  96. data/docs/dsl/xlsx.rst +0 -56
  97. data/docs/guides/game_icons.rst +0 -126
  98. data/docs/guides/getting-started/index.rst +0 -5
  99. data/docs/guides/getting-started/part_0_learning_ruby.rst +0 -145
  100. data/docs/guides/getting-started/part_1_zero_to_game.rst +0 -217
  101. data/docs/guides/getting-started/part_2_iconography.rst +0 -228
  102. data/docs/guides/getting-started/part_3_workflows.rst +0 -46
  103. data/docs/guides/getting-started/part_4_ruby_power.rst +0 -18
  104. data/docs/guides/git.rst +0 -14
  105. data/docs/guides/guard.rst +0 -84
  106. data/docs/guides/hello_world.rst +0 -65
  107. data/docs/guides/projects.rst +0 -35
  108. data/docs/help.rst +0 -157
  109. data/docs/index.rst +0 -35
  110. data/docs/install.rst +0 -68
  111. data/docs/layouts.rst +0 -290
  112. data/docs/learning.rst +0 -12
  113. data/docs/make.bat +0 -263
  114. data/docs/parameters.rst +0 -34
  115. data/docs/server.bat +0 -1
  116. data/docs/text_feature.rst +0 -115
  117. data/docs/units.rst +0 -14
  118. data/samples/autoscale_font/.gitignore +0 -2
  119. data/samples/autoscale_font/card_00_expected.png +0 -0
  120. data/samples/backend/.gitignore +0 -1
  121. data/samples/backend/_backend-config.yml +0 -5
  122. data/samples/backend/backend_00_expected.png +0 -0
  123. data/samples/backend/backend_01_expected.png +0 -0
  124. data/samples/backend/backend_vectorized_expected.pdf +0 -0
  125. data/samples/backend/backend_vectors_00_expected.svg +0 -84
  126. data/samples/backend/backend_vectors_01_expected.svg +0 -84
  127. data/samples/backend/shiny-purse.png +0 -0
  128. data/samples/backend/showcase_expected.png +0 -0
  129. data/samples/backend/spanner.svg +0 -91
  130. data/samples/ball.png +0 -0
  131. data/samples/build_groups/.gitignore +0 -1
  132. data/samples/build_groups/Rakefile +0 -25
  133. data/samples/colors/.gitignore +0 -1
  134. data/samples/colors/color_constants_00_expected.png +0 -0
  135. data/samples/colors/colors_00_expected.png +0 -0
  136. data/samples/colors/gradient_00_expected.png +0 -0
  137. data/samples/config_disable_quotes.yml +0 -3
  138. data/samples/config_text_markup.yml +0 -9
  139. data/samples/custom-config.yml +0 -5
  140. data/samples/customconfig-imgdir/shiny-purse2.png +0 -0
  141. data/samples/customconfig-imgdir/spanner2.svg +0 -91
  142. data/samples/data/.gitignore +0 -1
  143. data/samples/data/explode_quantities.xlsx +0 -0
  144. data/samples/data/quantity_explosion.csv +0 -3
  145. data/samples/data/sample.csv +0 -3
  146. data/samples/data/sample.xlsx +0 -0
  147. data/samples/data/sample_csv_00_expected.png +0 -0
  148. data/samples/data/sample_csv_01_expected.png +0 -0
  149. data/samples/data/sample_csv_qty_00_expected.png +0 -0
  150. data/samples/data/sample_excel_00_expected.png +0 -0
  151. data/samples/data/sample_excel_01_expected.png +0 -0
  152. data/samples/data/sample_excel_02_expected.png +0 -0
  153. data/samples/data/sample_excel_resources_00_expected.png +0 -0
  154. data/samples/data/sample_excel_resources_01_expected.png +0 -0
  155. data/samples/data/sample_xlsx_qty_00_expected.png +0 -0
  156. data/samples/glass-heart.svg +0 -52
  157. data/samples/grit.png +0 -0
  158. data/samples/images/.gitignore +0 -8
  159. data/samples/images/_images_00_expected.png +0 -0
  160. data/samples/images/angler-fish.png +0 -0
  161. data/samples/images/ball.png +0 -0
  162. data/samples/images/glass-heart.svg +0 -52
  163. data/samples/images/grit.png +0 -0
  164. data/samples/images/offset.svg +0 -85
  165. data/samples/images/robot-golem.svg +0 -1
  166. data/samples/images/shiny-purse.png +0 -0
  167. data/samples/images/spanner.svg +0 -91
  168. data/samples/images/sprites.png +0 -0
  169. data/samples/images/with-alpha.png +0 -0
  170. data/samples/intro/.gitignore +0 -2
  171. data/samples/intro/auto-repair.svg +0 -1
  172. data/samples/intro/crawling.svg +0 -1
  173. data/samples/intro/data.xlsx +0 -0
  174. data/samples/intro/humans.svg +0 -1
  175. data/samples/intro/ninja-mask.svg +0 -1
  176. data/samples/intro/part1_00_expected.png +0 -0
  177. data/samples/intro/part2_00_expected.png +0 -0
  178. data/samples/intro/part3_00_expected.png +0 -0
  179. data/samples/intro/part3_layout.yml +0 -34
  180. data/samples/intro/part4_00_expected.png +0 -0
  181. data/samples/intro/part4_01_expected.png +0 -0
  182. data/samples/intro/part5_00_expected.png +0 -0
  183. data/samples/intro/part5_01_expected.png +0 -0
  184. data/samples/intro/part5_02_expected.png +0 -0
  185. data/samples/intro/part5_03_expected.png +0 -0
  186. data/samples/intro/part5_hand_expected.png +0 -0
  187. data/samples/intro/part5_showcase_expected.png +0 -0
  188. data/samples/intro/pirate-skull.svg +0 -1
  189. data/samples/intro/robot-golem.svg +0 -1
  190. data/samples/layouts/custom-layout.yml +0 -60
  191. data/samples/layouts/custom-layout2.yml +0 -15
  192. data/samples/layouts/expected_layouts_builtin_economy_00.png +0 -0
  193. data/samples/layouts/expected_layouts_builtin_fantasy_00.png +0 -0
  194. data/samples/layouts/expected_layouts_builtin_hand_00.png +0 -0
  195. data/samples/layouts/expected_layouts_builtin_playing_card_00.png +0 -0
  196. data/samples/layouts/expected_layouts_builtin_tuck_box_00.png +0 -0
  197. data/samples/layouts/shiny-purse.png +0 -0
  198. data/samples/layouts/spanner.svg +0 -91
  199. data/samples/load_images_config.yml +0 -1
  200. data/samples/offset.svg +0 -71
  201. data/samples/pokercard.png +0 -0
  202. data/samples/project/Gemfile +0 -6
  203. data/samples/project/Guardfile +0 -18
  204. data/samples/project/Rakefile +0 -25
  205. data/samples/project/bw/robot-golem.svg +0 -53
  206. data/samples/project/color/robot-golem.svg +0 -1
  207. data/samples/project/config.yml +0 -2
  208. data/samples/project/layouts/characters.yml +0 -3
  209. data/samples/project/layouts/skills.yml +0 -3
  210. data/samples/ranges/glass-heart.svg +0 -52
  211. data/samples/ranges/ranges_00_expected.png +0 -0
  212. data/samples/saves/.gitignore +0 -1
  213. data/samples/saves/hand_expected.png +0 -0
  214. data/samples/saves/hand_pretty_expected.png +0 -0
  215. data/samples/saves/save-pdf-small_expected.pdf +0 -0
  216. data/samples/saves/save-pdf_expected.pdf +0 -0
  217. data/samples/saves/save_png_00_expected.png +0 -0
  218. data/samples/saves/save_png_trimmed_00_expected.png +0 -0
  219. data/samples/saves/save_sheet_00_expected.png +0 -0
  220. data/samples/saves/save_sheet_01_expected.png +0 -0
  221. data/samples/saves/save_sheet_range_00_expected.png +0 -0
  222. data/samples/saves/save_sheet_range_01_expected.png +0 -0
  223. data/samples/saves/save_single_sheet_00_expected.png +0 -0
  224. data/samples/saves/saves_notrim_01_expected.png +0 -0
  225. data/samples/saves/showcase2_expected.png +0 -0
  226. data/samples/saves/showcase_expected.png +0 -0
  227. data/samples/saves/showcase_individual_00_expected.png +0 -0
  228. data/samples/saves/showcase_individual_01_expected.png +0 -0
  229. data/samples/saves/showcase_individual_02_expected.png +0 -0
  230. data/samples/saves/showcase_individual_03_expected.png +0 -0
  231. data/samples/saves/spanner.svg +0 -91
  232. data/samples/shapes/.gitignore +0 -1
  233. data/samples/shapes/shape_00_expected.png +0 -0
  234. data/samples/shiny-purse.png +0 -0
  235. data/samples/spanner.svg +0 -91
  236. data/samples/sprites.png +0 -0
  237. data/samples/text/.gitignore +0 -2
  238. data/samples/text/README.md +0 -1
  239. data/samples/text/_text_00_expected.png +0 -0
  240. data/samples/text/config.yml +0 -2
  241. data/samples/units/units_00_expected.png +0 -0
  242. data/samples/units/using_units.yml +0 -10
  243. data/spec/api/api_data_spec.rb +0 -172
  244. data/spec/api/api_groups_spec.rb +0 -49
  245. data/spec/api/api_settings_spec.rb +0 -38
  246. data/spec/api/api_units_spec.rb +0 -37
  247. data/spec/args/box_spec.rb +0 -127
  248. data/spec/args/draw_spec.rb +0 -101
  249. data/spec/args/embed_key_spec.rb +0 -13
  250. data/spec/args/input_file_spec.rb +0 -21
  251. data/spec/args/paint_spec.rb +0 -22
  252. data/spec/args/paragraph_spec.rb +0 -153
  253. data/spec/args/range_spec.rb +0 -41
  254. data/spec/args/save_batch_spec.rb +0 -51
  255. data/spec/args/scale_box_spec.rb +0 -71
  256. data/spec/args/sheet_spec.rb +0 -80
  257. data/spec/args/showcase_special_spec.rb +0 -15
  258. data/spec/args/transform_spec.rb +0 -25
  259. data/spec/args/typographer_spec.rb +0 -71
  260. data/spec/args/unit_conversion_spec.rb +0 -29
  261. data/spec/card_spec.rb +0 -11
  262. data/spec/commands/new_spec.rb +0 -48
  263. data/spec/conf_spec.rb +0 -47
  264. data/spec/data/conf/basic.yml +0 -1
  265. data/spec/data/conf/empty.yml +0 -1
  266. data/spec/data/conf/unrecognized.yml +0 -4
  267. data/spec/data/csv/basic.csv +0 -3
  268. data/spec/data/csv/custom_opts.csv +0 -2
  269. data/spec/data/csv/dup_cols.csv +0 -3
  270. data/spec/data/csv/newline.csv +0 -3
  271. data/spec/data/csv/qty.csv +0 -3
  272. data/spec/data/csv/qty_named.csv +0 -3
  273. data/spec/data/csv/with_spaces.csv +0 -3
  274. data/spec/data/csv/yield.csv +0 -3
  275. data/spec/data/layouts/easy-circular-extends.yml +0 -6
  276. data/spec/data/layouts/empty-rule.yml +0 -1
  277. data/spec/data/layouts/empty.yml +0 -1
  278. data/spec/data/layouts/extends-nonexists.yml +0 -3
  279. data/spec/data/layouts/extends-units-mixed.yml +0 -8
  280. data/spec/data/layouts/extends-units.yml +0 -8
  281. data/spec/data/layouts/hard-circular-extends.yml +0 -9
  282. data/spec/data/layouts/multi-extends-single-entry.yml +0 -14
  283. data/spec/data/layouts/multi-level-extends.yml +0 -10
  284. data/spec/data/layouts/multifile-a.yml +0 -4
  285. data/spec/data/layouts/multifile-b.yml +0 -4
  286. data/spec/data/layouts/multifile-extends-a.yml +0 -8
  287. data/spec/data/layouts/multifile-extends-b.yml +0 -9
  288. data/spec/data/layouts/no-extends.yml +0 -5
  289. data/spec/data/layouts/pre-extends.yml +0 -7
  290. data/spec/data/layouts/self-circular-extends.yml +0 -3
  291. data/spec/data/layouts/single-extends.yml +0 -7
  292. data/spec/data/layouts/single-level-multi-extends.yml +0 -12
  293. data/spec/data/samples/autoscale_font/_autoscale_font.rb.txt +0 -133
  294. data/spec/data/samples/basic.rb.txt +0 -248
  295. data/spec/data/samples/cairo_access.rb.txt +0 -59
  296. data/spec/data/samples/colors/_gradients.rb.txt +0 -84
  297. data/spec/data/samples/config_text_markup.rb.txt +0 -74
  298. data/spec/data/samples/custom_config.rb.txt +0 -59
  299. data/spec/data/samples/data/_csv.rb.txt +0 -231
  300. data/spec/data/samples/data/_excel.rb.txt +0 -704
  301. data/spec/data/samples/embed_text.rb.txt +0 -431
  302. data/spec/data/samples/hello_world.rb.txt +0 -38
  303. data/spec/data/samples/images/_more_load_images.rb.txt +0 -335
  304. data/spec/data/samples/layouts.rb.txt +0 -489
  305. data/spec/data/samples/ranges/_ranges.rb.txt +0 -484
  306. data/spec/data/samples/saves/_hand.rb.txt +0 -594
  307. data/spec/data/samples/saves/_portrait_landscape.rb.txt +0 -57
  308. data/spec/data/samples/saves/_save_pdf.rb.txt +0 -1601
  309. data/spec/data/samples/saves/_saves.rb.txt +0 -873
  310. data/spec/data/samples/saves/_showcase.rb.txt +0 -5942
  311. data/spec/data/samples/shapes/_draw_shapes.rb.txt +0 -757
  312. data/spec/data/samples/text_options.rb.txt +0 -1158
  313. data/spec/data/samples/tgc_proofs.rb.txt +0 -102
  314. data/spec/data/samples/units/_units.rb.txt +0 -53
  315. data/spec/data/xlsx/basic.xlsx +0 -0
  316. data/spec/data/xlsx/explode_quantities.xlsx +0 -0
  317. data/spec/data/xlsx/formulas.xlsx +0 -0
  318. data/spec/data/xlsx/whitespace.xlsx +0 -0
  319. data/spec/data/xlsx/with_macros.xlsm +0 -0
  320. data/spec/deck_spec.rb +0 -73
  321. data/spec/graphics/cairo_context_wrapper_spec.rb +0 -104
  322. data/spec/graphics/embedding_utils_spec.rb +0 -73
  323. data/spec/graphics/graphics_save_doc_spec.rb +0 -74
  324. data/spec/import/data_frame_spec.rb +0 -251
  325. data/spec/layout_parser_spec.rb +0 -226
  326. data/spec/logger_spec.rb +0 -12
  327. data/spec/samples/_diffs/gitkeep.txt +0 -0
  328. data/spec/samples/diff-with-css.example.html +0 -39
  329. data/spec/samples/expected/autoscale_00.png +0 -0
  330. data/spec/samples/expected/autoscale_01.png +0 -0
  331. data/spec/samples/expected/autoscale_02.png +0 -0
  332. data/spec/samples/expected/backend_00.png +0 -0
  333. data/spec/samples/expected/backend_00.svg +0 -78
  334. data/spec/samples/expected/backend_01.png +0 -0
  335. data/spec/samples/expected/backend_01.svg +0 -78
  336. data/spec/samples/expected/basic_00.png +0 -0
  337. data/spec/samples/expected/basic_01.png +0 -0
  338. data/spec/samples/expected/basic_02.png +0 -0
  339. data/spec/samples/expected/cairo_access_00.png +0 -0
  340. data/spec/samples/expected/cairo_access_01.png +0 -0
  341. data/spec/samples/expected/card_00.png +0 -0
  342. data/spec/samples/expected/card_01.png +0 -0
  343. data/spec/samples/expected/colors_00.png +0 -0
  344. data/spec/samples/expected/config_disable_text_00.png +0 -0
  345. data/spec/samples/expected/config_text_00.png +0 -0
  346. data/spec/samples/expected/custom-config_00.png +0 -0
  347. data/spec/samples/expected/embed_00.png +0 -0
  348. data/spec/samples/expected/embed_multisheet_00.png +0 -0
  349. data/spec/samples/expected/gitkeep.txt +0 -0
  350. data/spec/samples/expected/gradient_00.png +0 -0
  351. data/spec/samples/expected/hand.png +0 -0
  352. data/spec/samples/expected/hand_pretty.png +0 -0
  353. data/spec/samples/expected/landscape_00.png +0 -0
  354. data/spec/samples/expected/layout2_00.png +0 -0
  355. data/spec/samples/expected/layout_00.png +0 -0
  356. data/spec/samples/expected/layout_builtin_hand_00.png +0 -0
  357. data/spec/samples/expected/layout_builtin_playing_card_00.png +0 -0
  358. data/spec/samples/expected/load_images_00.png +0 -0
  359. data/spec/samples/expected/portrait_00.png +0 -0
  360. data/spec/samples/expected/ranges_00.png +0 -0
  361. data/spec/samples/expected/sample_csv_00.png +0 -0
  362. data/spec/samples/expected/sample_csv_01.png +0 -0
  363. data/spec/samples/expected/sample_excel_00.png +0 -0
  364. data/spec/samples/expected/sample_excel_01.png +0 -0
  365. data/spec/samples/expected/sample_excel_02.png +0 -0
  366. data/spec/samples/expected/save_sheet_00.png +0 -0
  367. data/spec/samples/expected/save_sheet_01.png +0 -0
  368. data/spec/samples/expected/save_sheet_range_00.png +0 -0
  369. data/spec/samples/expected/save_sheet_range_01.png +0 -0
  370. data/spec/samples/expected/save_single_sheet_00.png +0 -0
  371. data/spec/samples/expected/saves_notrim_01.png +0 -0
  372. data/spec/samples/expected/shape_00.png +0 -0
  373. data/spec/samples/expected/showcase.png +0 -0
  374. data/spec/samples/expected/showcase2.png +0 -0
  375. data/spec/samples/expected/showcase_individual_00.png +0 -0
  376. data/spec/samples/expected/showcase_individual_01.png +0 -0
  377. data/spec/samples/expected/showcase_individual_02.png +0 -0
  378. data/spec/samples/expected/showcase_individual_03.png +0 -0
  379. data/spec/samples/expected/text_00.png +0 -0
  380. data/spec/samples/expected/text_01.png +0 -0
  381. data/spec/samples/expected/text_02.png +0 -0
  382. data/spec/samples/expected/tgc_sample_00.png +0 -0
  383. data/spec/samples/expected/units_00.png +0 -0
  384. data/spec/samples/run_samples_spec.rb +0 -17
  385. data/spec/samples/samples_regression_spec.rb +0 -71
  386. data/spec/samples/sanity.html.erb +0 -28
  387. data/spec/samples/sanity.rb +0 -70
  388. data/spec/sanity/.gitignore +0 -1
  389. data/spec/sanity/sanity.html.erb +0 -42
  390. data/spec/sanity/sanity_test.rb +0 -42
  391. data/spec/sanity/tests.yml +0 -12
  392. data/spec/spec_helper.rb +0 -159
@@ -1,251 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'spec_helper'
4
- require 'squib/import/data_frame'
5
-
6
- describe Squib::DataFrame do
7
- let(:basic) do
8
- {
9
- 'Name' => ['Mage', 'Rogue', 'Warrior'],
10
- 'Cost' => [1, 2, 3],
11
- }
12
- end
13
-
14
- let(:uneven) do
15
- {
16
- 'Name' => ['Mage', 'Rogue', 'Warrior'],
17
- 'Cost' => [1, 2],
18
- }
19
- end
20
-
21
- let(:whitespace) do
22
- {
23
- 'Name \n\r\t' => [' Mage \t\r\n'],
24
- }
25
- end
26
-
27
- let(:defined) do
28
- {
29
- 'nrows' => [1,2,3],
30
- }
31
- end
32
-
33
- context 'is Enumerable and like a hash, so it' do
34
- it 'responds to each' do
35
- expect(subject).to respond_to(:each)
36
- end
37
-
38
- it 'responds to any?' do
39
- expect(subject.any?).to be false
40
- end
41
-
42
- it 'responds to []' do
43
- data = Squib::DataFrame.new basic
44
- expect(data['Cost']).to eq([1, 2, 3])
45
- end
46
-
47
- it 'responds to []=' do
48
- data = Squib::DataFrame.new basic
49
- data[:a] = 2
50
- expect(data[:a]).to eq(2)
51
- end
52
- end
53
-
54
- context :columns do
55
- it 'provides a list of columns' do
56
- data = Squib::DataFrame.new basic
57
- expect(data.columns).to eq %w(Name Cost)
58
- end
59
- end
60
-
61
- context :ncolumns do
62
- it 'provides column count' do
63
- data = Squib::DataFrame.new basic
64
- expect(data.ncolumns).to eq 2
65
- end
66
- end
67
-
68
- context :row do
69
- it 'returns a hash of each row' do
70
- data = Squib::DataFrame.new basic
71
- expect(data.row(0)).to eq ({'Name' => 'Mage', 'Cost' => 1})
72
- expect(data.row(1)).to eq ({'Name' => 'Rogue', 'Cost' => 2})
73
- end
74
-
75
- it 'returns nil for uneven data' do
76
- data = Squib::DataFrame.new uneven
77
- expect(data.row(2)).to eq ({'Name' => 'Warrior', 'Cost' => nil})
78
- end
79
- end
80
-
81
- context :nrows do
82
- it 'returns a row count on even data' do
83
- data = Squib::DataFrame.new basic
84
- expect(data.nrows).to eq 3
85
- end
86
-
87
- it 'returns largest row count on uneven data' do
88
- data = Squib::DataFrame.new basic
89
- expect(data.nrows).to eq 3
90
- end
91
- end
92
-
93
- context :json do
94
- it 'returns quoty json' do
95
- data = Squib::DataFrame.new basic
96
- expect(data.to_json).to eq "{\"Name\":[\"Mage\",\"Rogue\",\"Warrior\"],\"Cost\":[1,2,3]}"
97
- end
98
-
99
- it 'returns pretty json' do
100
- data = Squib::DataFrame.new basic
101
- str = <<-EOS
102
- {
103
- "Name": [
104
- "Mage",
105
- "Rogue",
106
- "Warrior"
107
- ],
108
- "Cost": [
109
- 1,
110
- 2,
111
- 3
112
- ]
113
- }
114
- EOS
115
- expect(data.to_pretty_json).to eq str.chomp
116
- end
117
- end
118
-
119
- context :def_column do
120
- it 'creates name for Name column' do
121
- data = Squib::DataFrame.new basic
122
- expect(data).to respond_to(:name)
123
- expect(data.name).to eq %w(Mage Rogue Warrior)
124
- expect(data.cost).to eq [1, 2, 3]
125
- end
126
-
127
- it 'does not redefine methods' do
128
- data = Squib::DataFrame.new defined
129
- expect(data).to respond_to(:nrows)
130
- expect(data.nrows).to eq 3
131
- end
132
-
133
- it 'defines a new column from empty data frame' do
134
- data = Squib::DataFrame.new
135
- expect(data).not_to respond_to(:snark)
136
- data['snark'] = [1,2,3]
137
- expect(data.snark).to eq [1,2,3]
138
- end
139
- end
140
-
141
- context :snake_case do
142
- subject { Squib::DataFrame.new }
143
- it 'strips leading & trailing whitespace' do
144
- expect(subject.send(:snake_case, ' A ')).to eq :a
145
- end
146
-
147
- it 'converts space to _' do
148
- expect(subject.send(:snake_case, 'A b')).to eq :a_b
149
- end
150
-
151
- it 'handles multiwhitespace' do
152
- expect(subject.send(:snake_case, 'A b')).to eq :a_b
153
- end
154
-
155
- it 'handles camelcase' do
156
- expect(subject.send(:snake_case, 'fooBar')).to eq :foo_bar
157
- end
158
-
159
- it 'handles camelcase with multiple capitals' do
160
- expect(subject.send(:snake_case, 'FOOBar')).to eq :foo_bar
161
- end
162
- end
163
-
164
- context :col? do
165
- it 'returns true if a column exists' do
166
- data = Squib::DataFrame.new basic
167
- expect(data.col? 'Name').to be true
168
- end
169
-
170
- it 'returns false if a column does not exist' do
171
- data = Squib::DataFrame.new basic
172
- expect(data.col? 'ROUS').to be false
173
- end
174
- end
175
-
176
- context :wrap_n_pad do
177
- subject { Squib::DataFrame.new basic }
178
-
179
- it 'returns a handles a single line' do
180
- expect(subject.send(:wrap_n_pad, 'a', 3)).
181
- to eq "| a |\n"
182
- end
183
-
184
- it 'wraps multiple a lines at 34 characters' do
185
- expect(subject.send(:wrap_n_pad, 'a' * 40, 3)).
186
- to eq <<-EOS
187
- | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
188
- | aaaaaa |
189
- EOS
190
- end
191
- end
192
-
193
- context :to_pretty_text do
194
-
195
- let(:verbose) do
196
- {
197
- 'Name' => ['Mage', 'Rogue', 'Warrior'],
198
- 'Cost' => [1, 2, 3],
199
- 'Description' => [
200
- 'Magic, dude.',
201
- 'I like to be sneaky',
202
- 'I have a long story to tell to test the word-wrapping ability of pretty text formatting.'
203
- ],
204
- 'Snark' => [nil, '', ' ']
205
- }
206
- end
207
-
208
- it 'returns fun ascii art of the card' do
209
- data = Squib::DataFrame.new verbose
210
- expect(data.to_pretty_text).to eq <<-EOS
211
- ╭------------------------------------╮
212
- Name | Mage |
213
- Cost | 1 |
214
- Description | Magic, dude. |
215
- Snark | |
216
- ╰------------------------------------╯
217
- ╭------------------------------------╮
218
- Name | Rogue |
219
- Cost | 2 |
220
- Description | I like to be sneaky |
221
- Snark | |
222
- ╰------------------------------------╯
223
- ╭------------------------------------╮
224
- Name | Warrior |
225
- Cost | 3 |
226
- Description | I have a long story to tell to tes |
227
- | t the word-wrapping ability of pre |
228
- | tty text formatting. |
229
- Snark | |
230
- ╰------------------------------------╯
231
- EOS
232
- end
233
-
234
- let(:utf8_fun) do
235
- {
236
- 'Fun with UTF8!' => ['👊'],
237
- }
238
- end
239
-
240
- it 'is admittedly janky with multibyte chars' do
241
- # I hate how Ruby handles multibyte chars. Blech!
242
- data = Squib::DataFrame.new utf8_fun
243
- expect(data.to_pretty_text).to eq <<-EOS
244
- ╭------------------------------------╮
245
- Fun with UTF8! | 👊 |
246
- ╰------------------------------------╯
247
- EOS
248
- end
249
- end
250
-
251
- end
@@ -1,226 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Squib::LayoutParser do
4
-
5
- it 'loads a normal layout with no extends' do
6
- layout = subject.load_layout(layout_file('no-extends.yml'))
7
- expect(layout).to eq({ 'frame' => {
8
- 'x' => 38,
9
- 'valign' => :middle,
10
- 'str' => 'blah',
11
- 'font' => 'Mr. Font',
12
- }
13
- }
14
- )
15
- end
16
-
17
- it 'loads with a single extends' do
18
- layout = subject.load_layout(layout_file('single-extends.yml'))
19
- expect(layout).to eq({ 'frame' => {
20
- 'x' => 38,
21
- 'y' => 38,
22
- },
23
- 'title' => {
24
- 'extends' => 'frame',
25
- 'x' => 38,
26
- 'y' => 50,
27
- 'width' => 100,
28
- }
29
- }
30
- )
31
- end
32
-
33
- it 'applies the extends regardless of order' do
34
- layout = subject.load_layout(layout_file('pre-extends.yml'))
35
- expect(layout).to eq({ 'frame' => {
36
- 'x' => 38,
37
- 'y' => 38,
38
- },
39
- 'title' => {
40
- 'extends' => 'frame',
41
- 'x' => 38,
42
- 'y' => 50,
43
- 'width' => 100,
44
- }
45
- }
46
- )
47
- end
48
-
49
- it 'applies the single-level extends multiple times' do
50
- layout = subject.load_layout(layout_file('single-level-multi-extends.yml'))
51
- expect(layout).to eq({ 'frame' => {
52
- 'x' => 38,
53
- 'y' => 38,
54
- },
55
- 'title' => {
56
- 'extends' => 'frame',
57
- 'x' => 38,
58
- 'y' => 50,
59
- 'width' => 100,
60
- },
61
- 'title2' => {
62
- 'extends' => 'frame',
63
- 'x' => 75,
64
- 'y' => 150,
65
- 'width' => 150,
66
- },
67
- }
68
- )
69
- end
70
-
71
- it 'applies multiple extends in a single rule' do
72
- layout = subject.load_layout(layout_file('multi-extends-single-entry.yml'))
73
- expect(layout).to eq({ 'aunt' => {
74
- 'a' => 101,
75
- 'b' => 102,
76
- 'c' => 103,
77
- },
78
- 'uncle' => {
79
- 'x' => 104,
80
- 'y' => 105,
81
- 'b' => 106,
82
- },
83
- 'child' => {
84
- 'extends' => ['uncle', 'aunt'],
85
- 'a' => 107, # my own
86
- 'b' => 102, # from the younger aunt
87
- 'c' => 103, # from aunt
88
- 'x' => 108, # my own
89
- 'y' => 105, # from uncle
90
- },
91
- }
92
- )
93
- end
94
-
95
- it 'applies multi-level extends' do
96
- layout = subject.load_layout(layout_file('multi-level-extends.yml'))
97
- expect(layout).to eq({ 'frame' => {
98
- 'x' => 38,
99
- 'y' => 38,
100
- },
101
- 'title' => {
102
- 'extends' => 'frame',
103
- 'x' => 38,
104
- 'y' => 50,
105
- 'width' => 100,
106
- },
107
- 'subtitle' => {
108
- 'extends' => 'title',
109
- 'x' => 38,
110
- 'y' => 150,
111
- 'width' => 100,
112
- },
113
- }
114
- )
115
- end
116
-
117
- it 'fails on a self-circular extends' do
118
- file = layout_file('self-circular-extends.yml')
119
- expect { subject.load_layout(file)}
120
- .to raise_error(RuntimeError, 'Invalid layout: circular extends with \'a\'')
121
- end
122
-
123
- it 'fails on a easy-circular extends' do
124
- file = layout_file('easy-circular-extends.yml')
125
- expect { subject.load_layout(file)}
126
- .to raise_error(RuntimeError, 'Invalid layout: circular extends with \'a\'')
127
- end
128
-
129
- it 'hard on a easy-circular extends' do
130
- file = layout_file('hard-circular-extends.yml')
131
- expect { subject.load_layout(file)}
132
- .to raise_error(RuntimeError, 'Invalid layout: circular extends with \'a\'')
133
- end
134
-
135
- it 'redefines keys on multiple layouts' do
136
- a = layout_file('multifile-a.yml')
137
- b = layout_file('multifile-b.yml')
138
- layout = subject.load_layout([a, b])
139
- expect(layout).to eq({
140
- 'title' => { 'x' => 300 },
141
- 'subtitle' => { 'x' => 200 },
142
- 'desc' => { 'x' => 400 }
143
- })
144
- end
145
-
146
- it 'evaluates extends on each file first' do
147
- a = layout_file('multifile-extends-a.yml')
148
- b = layout_file('multifile-extends-b.yml')
149
- layout = subject.load_layout([a, b])
150
- expect(layout).to eq({
151
- 'grandparent' => { 'x' => 100 },
152
- 'parent_a' => { 'x' => 110, 'extends' => 'grandparent' },
153
- 'parent_b' => { 'x' => 130, 'extends' => 'grandparent' },
154
- 'child_a' => { 'x' => 113, 'extends' => 'parent_a' },
155
- 'child_b' => { 'x' => 133, 'extends' => 'parent_b' }
156
- })
157
- end
158
-
159
- it 'loads nothing on an empty layout file' do
160
- layout = subject.load_layout(layout_file('empty.yml'))
161
- expect(layout).to eq({})
162
- end
163
-
164
- it 'handles extends on a rule with no args' do
165
- layout = subject.load_layout(layout_file('empty-rule.yml'))
166
- expect(layout).to eq({
167
- 'empty' => nil
168
- })
169
- end
170
-
171
- it 'logs an error when a file is not found' do
172
- expect(Squib.logger).to receive(:error).once
173
- subject.load_layout('yeti')
174
- end
175
-
176
- it 'freaks out if you extend something doesn\'t exist' do
177
- expect(Squib.logger)
178
- .to receive(:error)
179
- .with("Processing layout: 'verbal' attempts to extend a missing 'kaisersoze'")
180
- layout = subject.load_layout(layout_file('extends-nonexists.yml'))
181
- expect(layout).to eq({
182
- 'verbal' => {
183
- 'font_size' => 25,
184
- 'extends' => 'kaisersoze'
185
- }
186
- })
187
- end
188
-
189
- it 'does unit conversion when extending' do
190
- layout = subject.load_layout(layout_file('extends-units.yml'))
191
- expect(layout).to eq({
192
- 'parent' => { 'x' => '0.5in', 'y' => '1in'},
193
- 'child' => { 'x' => 450.0, 'y' => 150.0, 'extends' => 'parent' },
194
- })
195
- end
196
-
197
- it 'does unit conversion on non-300 dpis' do
198
- parser = Squib::LayoutParser.new(100)
199
- layout = parser.load_layout(layout_file('extends-units.yml'))
200
- expect(layout).to eq({
201
- 'parent' => { 'x' => '0.5in', 'y' => '1in'},
202
- 'child' => { 'x' => 150.0, 'y' => 50.0, 'extends' => 'parent' },
203
- })
204
- end
205
-
206
- it 'does mixed unit conversion when extending' do
207
- layout = subject.load_layout(layout_file('extends-units-mixed.yml'))
208
- expect(layout).to eq({
209
- 'parent' => { 'x' => '0.5in', 'y' => '1in'},
210
- 'child' => { 'x' => 450.0, 'y' => 150.0, 'extends' => 'parent' },
211
- })
212
- end
213
-
214
- it 'loads progressively on multiple calls' do
215
- a = layout_file('multifile-a.yml')
216
- b = layout_file('multifile-b.yml')
217
- layout = subject.load_layout(a)
218
- layout = subject.load_layout(b, layout)
219
- expect(layout).to eq({
220
- 'title' => { 'x' => 300 },
221
- 'subtitle' => { 'x' => 200 },
222
- 'desc' => { 'x' => 400 }
223
- })
224
- end
225
-
226
- end