squib 0.8.0 → 0.9.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 (140) hide show
  1. checksums.yaml +4 -4
  2. data/.gitmodules +14 -0
  3. data/.travis.yml +4 -0
  4. data/CHANGELOG.md +201 -175
  5. data/Gemfile +2 -4
  6. data/README.md +650 -645
  7. data/RELEASE TODO.md +18 -18
  8. data/Rakefile +106 -99
  9. data/appveyor.yml +29 -0
  10. data/lib/squib.rb +32 -32
  11. data/lib/squib/api/background.rb +20 -20
  12. data/lib/squib/api/data.rb +131 -131
  13. data/lib/squib/api/image.rb +108 -90
  14. data/lib/squib/api/save.rb +151 -149
  15. data/lib/squib/api/settings.rb +35 -35
  16. data/lib/squib/api/shapes.rb +255 -230
  17. data/lib/squib/api/text.rb +65 -65
  18. data/lib/squib/api/text_embed.rb +96 -96
  19. data/lib/squib/args/arg_loader.rb +138 -138
  20. data/lib/squib/args/box.rb +54 -54
  21. data/lib/squib/args/card_range.rb +32 -32
  22. data/lib/squib/args/color_validator.rb +11 -11
  23. data/lib/squib/args/coords.rb +32 -32
  24. data/lib/squib/args/dir_validator.rb +16 -16
  25. data/lib/squib/args/draw.rb +92 -92
  26. data/lib/squib/args/embed_adjust.rb +25 -25
  27. data/lib/squib/args/embed_key.rb +17 -17
  28. data/lib/squib/args/hand_special.rb +37 -37
  29. data/lib/squib/args/import.rb +39 -39
  30. data/lib/squib/args/input_file.rb +37 -37
  31. data/lib/squib/args/paint.rb +43 -43
  32. data/lib/squib/args/paragraph.rb +116 -115
  33. data/lib/squib/args/save_batch.rb +63 -60
  34. data/lib/squib/args/scale_box.rb +53 -53
  35. data/lib/squib/args/sheet.rb +72 -72
  36. data/lib/squib/args/showcase_special.rb +38 -38
  37. data/lib/squib/args/svg_special.rb +37 -37
  38. data/lib/squib/args/transform.rb +60 -24
  39. data/lib/squib/args/typographer.rb +117 -117
  40. data/lib/squib/card.rb +66 -67
  41. data/lib/squib/conf.rb +131 -117
  42. data/lib/squib/constants.rb +12 -178
  43. data/lib/squib/deck.rb +113 -113
  44. data/lib/squib/graphics/cairo_context_wrapper.rb +113 -99
  45. data/lib/squib/graphics/gradient_regex.rb +46 -46
  46. data/lib/squib/graphics/hand.rb +42 -42
  47. data/lib/squib/graphics/image.rb +103 -76
  48. data/lib/squib/graphics/save_doc.rb +103 -103
  49. data/lib/squib/graphics/save_images.rb +39 -33
  50. data/lib/squib/graphics/shapes.rb +135 -119
  51. data/lib/squib/graphics/showcase.rb +85 -85
  52. data/lib/squib/graphics/text.rb +176 -176
  53. data/lib/squib/layout_parser.rb +91 -91
  54. data/lib/squib/layouts/economy.yml +85 -85
  55. data/lib/squib/layouts/fantasy.yml +101 -101
  56. data/lib/squib/layouts/hand.yml +62 -62
  57. data/lib/squib/layouts/playing-card.yml +35 -35
  58. data/lib/squib/layouts/tuck_box.yml +45 -45
  59. data/lib/squib/project_template/IDEAS.md +22 -0
  60. data/lib/squib/project_template/PLAYTESTING.md +26 -0
  61. data/lib/squib/project_template/RULES.md +21 -0
  62. data/lib/squib/project_template/config.yml +49 -45
  63. data/lib/squib/sample_helpers.rb +34 -0
  64. data/lib/squib/version.rb +10 -10
  65. data/samples/autoscale_font/_autoscale_font.rb +29 -0
  66. data/samples/color_shortcuts.rb +6 -6
  67. data/samples/csv_import.rb +26 -26
  68. data/samples/custom-config.yml +5 -5
  69. data/samples/custom_config.rb +18 -18
  70. data/samples/draw_shapes.rb +48 -45
  71. data/samples/embed_text.rb +88 -88
  72. data/samples/excel.rb +55 -55
  73. data/samples/hand.rb +24 -24
  74. data/samples/images/_images.rb +104 -0
  75. data/samples/intro/01_hello.rb +9 -0
  76. data/samples/intro/02_options.rb +15 -0
  77. data/samples/intro/03_layout.rb +12 -0
  78. data/samples/intro/04_arrays.rb +16 -0
  79. data/samples/intro/05_excel.rb +15 -0
  80. data/samples/layouts.rb +62 -62
  81. data/samples/layouts_builtin.rb +51 -51
  82. data/samples/load_images.rb +99 -78
  83. data/samples/load_images_config.yml +1 -0
  84. data/samples/quantity_explosion.csv +2 -2
  85. data/samples/ranges.rb +64 -64
  86. data/samples/sample.csv +2 -2
  87. data/samples/saves.rb +9 -1
  88. data/samples/sprites.png +0 -0
  89. data/samples/text/_text.rb +46 -0
  90. data/samples/text_options.rb +102 -102
  91. data/spec/api/api_data_spec.rb +117 -117
  92. data/spec/api/api_settings_spec.rb +37 -37
  93. data/spec/args/box_spec.rb +127 -127
  94. data/spec/args/draw_spec.rb +101 -95
  95. data/spec/args/embed_key_spec.rb +13 -13
  96. data/spec/args/input_file_spec.rb +21 -21
  97. data/spec/args/paint_spec.rb +21 -21
  98. data/spec/args/paragraph_spec.rb +152 -152
  99. data/spec/args/range_spec.rb +40 -40
  100. data/spec/args/save_batch_spec.rb +51 -51
  101. data/spec/args/scale_box_spec.rb +71 -71
  102. data/spec/args/sheet_spec.rb +58 -58
  103. data/spec/args/showcase_special_spec.rb +15 -15
  104. data/spec/args/transform_spec.rb +25 -0
  105. data/spec/card_spec.rb +11 -0
  106. data/spec/conf_spec.rb +13 -3
  107. data/spec/data/conf/unrecognized.yml +4 -0
  108. data/spec/data/csv/qty.csv +2 -2
  109. data/spec/data/csv/qty_named.csv +2 -2
  110. data/spec/data/csv/with_spaces.csv +2 -2
  111. data/spec/data/samples/autoscale_font.rb.txt +84 -84
  112. data/spec/data/samples/basic.rb.txt +227 -209
  113. data/spec/data/samples/config_text_markup.rb.txt +72 -72
  114. data/spec/data/samples/csv_import.rb.txt +213 -213
  115. data/spec/data/samples/custom_config.rb.txt +57 -48
  116. data/spec/data/samples/draw_shapes.rb.txt +555 -3
  117. data/spec/data/samples/embed_text.rb.txt +283 -283
  118. data/spec/data/samples/excel.rb.txt +661 -661
  119. data/spec/data/samples/gradients.rb.txt +77 -79
  120. data/spec/data/samples/hand.rb.txt +538 -538
  121. data/spec/data/samples/hello_world.rb.txt +36 -36
  122. data/spec/data/samples/load_images.rb.txt +170 -0
  123. data/spec/data/samples/portrait-landscape.rb.txt +51 -49
  124. data/spec/data/samples/ranges.rb.txt +472 -460
  125. data/spec/data/samples/saves.rb.txt +810 -801
  126. data/spec/data/samples/showcase.rb.txt +5926 -5910
  127. data/spec/data/samples/text_options.rb.txt +1125 -1125
  128. data/spec/data/samples/tgc_proofs.rb.txt +95 -81
  129. data/spec/graphics/cairo_context_wrapper_spec.rb +104 -84
  130. data/spec/graphics/graphics_save_doc_spec.rb +67 -67
  131. data/spec/samples/diff-with-css.example.html +39 -0
  132. data/spec/samples/expected/load_images_00.png +0 -0
  133. data/spec/samples/expected/shape_00.png +0 -0
  134. data/spec/samples/run_samples_spec.rb +17 -0
  135. data/spec/samples/samples_regression_spec.rb +72 -82
  136. data/spec/spec_helper.rb +9 -1
  137. data/squib.gemspec +49 -48
  138. data/squib.sublime-project +42 -42
  139. metadata +94 -48
  140. data/spec/graphics/graphics_images_spec.rb +0 -94
@@ -1,94 +0,0 @@
1
- require 'spec_helper'
2
- require 'squib'
3
- require 'ostruct'
4
-
5
- describe Squib::Card do
6
-
7
- let(:deck) { double(Squib::Deck) }
8
- let(:context) { double(Cairo::Context) }
9
- let(:svg) { double(RSVG::Handle) }
10
- let(:png) { double(Cairo::ImageSurface) }
11
- let(:box) { OpenStruct.new({x: 37, y: 38, width: :native, height: :native})}
12
- let(:paint) { OpenStruct.new({alpha: 0.9, blend: :none, mask: '' })}
13
- let(:trans) { OpenStruct.new({angle: 0.0})}
14
-
15
- before(:each) do
16
- allow(Cairo::Context).to receive(:new).and_return(context)
17
- allow(Cairo::ImageSurface).to receive(:from_png).and_return(png)
18
- allow(Cairo::ImageSurface).to receive(:new).and_return(png)
19
- allow(RSVG::Handle).to receive(:new_from_data).and_return(svg)
20
- allow(deck).to receive(:dir).and_return('_output')
21
- allow(deck).to receive(:count_format).and_return('%02d')
22
- allow(deck).to receive(:prefix).and_return('card_')
23
- allow(deck).to receive(:antialias).and_return('subpixel')
24
- allow(deck).to receive(:backend).and_return('memory')
25
- end
26
-
27
- context '#png' do
28
- it 'makes all the expected calls on a smoke test' do
29
- expect(context).to receive(:antialias=).with('subpixel')
30
- expect(context).to receive(:save).once
31
- expect(context).to receive(:translate).with(-37, -38).once
32
- expect(context).to receive(:rotate).with(0.0).once
33
- expect(context).to receive(:translate).with(37, 38).once
34
- expect(context).to receive(:set_source).with(png, 37, 38).once
35
- expect(context).to receive(:paint).with(0.9).once
36
- expect(context).to receive(:restore).once
37
-
38
- card = Squib::Card.new(deck, 100, 150)
39
- # png(file, x, y, alpha, blend, angle)
40
- card.png('foo.png', box, paint, trans)
41
- end
42
-
43
- it 'sets blend when needed' do
44
- context.as_null_object
45
- expect(context).to receive(:operator=).with(:overlay).once
46
-
47
- card = Squib::Card.new(deck, 100, 150)
48
- paint.blend = :overlay
49
- card.png('foo.png', box, paint, trans)
50
- end
51
- end
52
-
53
- context '#svg' do
54
- let(:svg_args) { OpenStruct.new({data: '<svg></svg>', id: 'id'}) }
55
-
56
- it 'makes all the expected calls on a smoke test' do
57
- expect(svg).to receive(:width).and_return(100).twice
58
- expect(svg).to receive(:height).and_return(100).twice
59
- expect(context).to receive(:antialias=).with('subpixel').once
60
- expect(context).to receive(:save).once
61
- expect(context).to receive(:rotate).with(0.0).once
62
- expect(context).to receive(:translate).with(37, 38).once
63
- expect(context).to receive(:scale).with(1.0, 1.0).once
64
- expect(context).to receive(:render_rsvg_handle).with(svg, 'id').once
65
- expect(context).to receive(:restore).once
66
-
67
- card = Squib::Card.new(deck, 100, 150)
68
- card.svg(nil, svg_args, box, paint, trans)
69
- end
70
-
71
- it 'sets blend when needed' do
72
- context.as_null_object
73
- svg.as_null_object
74
- expect(context).to receive(:operator=).with(:overlay).once
75
-
76
- card = Squib::Card.new(deck, 100, 150)
77
- paint.blend = :overlay
78
- card.svg(nil, svg_args, box, paint, trans)
79
- end
80
-
81
- it 'sets width & height when needed' do
82
- context.as_null_object
83
- expect(svg).to receive(:width).and_return(100).once
84
- expect(svg).to receive(:height).and_return(100).once
85
- expect(context).to receive(:scale).with(2.0, 3.0).once
86
-
87
- card = Squib::Card.new(deck, 100, 150)
88
- box.width = 200
89
- box.height = 300
90
- card.svg(nil, svg_args, box, paint, trans)
91
- end
92
- end
93
-
94
- end