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,60 +1,63 @@
1
- require 'squib/args/arg_loader'
2
- require 'squib/args/dir_validator'
3
-
4
- module Squib
5
- # @api private
6
- module Args
7
- class SaveBatch
8
- include ArgLoader
9
- include DirValidator
10
-
11
- def initialize
12
- end
13
-
14
- def self.parameters
15
- { dir: '_output',
16
- prefix: 'card_',
17
- count_format: '%02d',
18
- rotate: false,
19
- angle: 0,
20
- }
21
- end
22
-
23
- def self.expanding_parameters
24
- self.parameters.keys # all of them
25
- end
26
-
27
- def self.params_with_units
28
- [] # none of them
29
- end
30
-
31
- def validate_dir(arg, _i)
32
- ensure_dir_created(arg)
33
- end
34
-
35
- def validate_rotate(arg, i)
36
- case arg
37
- when true, :clockwise
38
- angle[i] = 0.5 * Math::PI
39
- return true
40
- when :counterclockwise
41
- angle[i] = 1.5 * Math::PI
42
- return true
43
- when false
44
- false
45
- else
46
- raise 'invalid option to rotate: only [true, false, :clockwise, :counterclockwise]'
47
- end
48
- end
49
-
50
- def full_filename(i)
51
- "#{dir[i]}/#{prefix[i]}#{count_format[i] % i}.png"
52
- end
53
-
54
- def summary
55
- "#{dir[0]}/#{prefix[0]}_*"
56
- end
57
-
58
- end
59
- end
60
- end
1
+ require 'squib/args/arg_loader'
2
+ require 'squib/args/dir_validator'
3
+
4
+ module Squib
5
+ # @api private
6
+ module Args
7
+ class SaveBatch
8
+ include ArgLoader
9
+ include DirValidator
10
+
11
+ def initialize
12
+ end
13
+
14
+ def self.parameters
15
+ {
16
+ angle: 0,
17
+ count_format: '%02d',
18
+ dir: '_output',
19
+ prefix: 'card_',
20
+ rotate: false,
21
+ trim_radius: 0,
22
+ trim: 0,
23
+ }
24
+ end
25
+
26
+ def self.expanding_parameters
27
+ self.parameters.keys # all of them
28
+ end
29
+
30
+ def self.params_with_units
31
+ [:trim, :trim_radius]
32
+ end
33
+
34
+ def validate_dir(arg, _i)
35
+ ensure_dir_created(arg)
36
+ end
37
+
38
+ def validate_rotate(arg, i)
39
+ case arg
40
+ when true, :clockwise
41
+ angle[i] = 0.5 * Math::PI
42
+ return true
43
+ when :counterclockwise
44
+ angle[i] = 1.5 * Math::PI
45
+ return true
46
+ when false
47
+ false
48
+ else
49
+ raise 'invalid option to rotate: only [true, false, :clockwise, :counterclockwise]'
50
+ end
51
+ end
52
+
53
+ def full_filename(i)
54
+ "#{dir[i]}/#{prefix[i]}#{count_format[i] % i}.png"
55
+ end
56
+
57
+ def summary
58
+ "#{dir[0]}/#{prefix[0]}_*"
59
+ end
60
+
61
+ end
62
+ end
63
+ end
@@ -1,53 +1,53 @@
1
- require 'squib/args/arg_loader'
2
-
3
- module Squib
4
- # @api private
5
- module Args
6
-
7
- class ScaleBox
8
- include ArgLoader
9
-
10
- def initialize(deck)
11
- @deck = deck
12
- end
13
-
14
- def self.parameters
15
- { x: 0, y: 0,
16
- width: :native, height: :native
17
- }
18
- end
19
-
20
- def self.expanding_parameters
21
- parameters.keys # all of them
22
- end
23
-
24
- def self.params_with_units
25
- parameters.keys # all of them
26
- end
27
-
28
- def validate_width(arg, i)
29
- return @deck.width if arg.to_s == 'deck'
30
- return :native if arg.to_s == 'native'
31
- return arg if arg.respond_to? :to_f
32
- if arg.to_s == 'scale'
33
- raise 'if width is :scale, height must be a number' unless height[i].respond_to? :to_f
34
- return arg
35
- end
36
- raise 'width must be a number, :scale, :native, or :deck'
37
- end
38
-
39
- def validate_height(arg, i)
40
- return @deck.height if arg.to_s == 'deck'
41
- return :native if arg.to_s == 'native'
42
- return arg if arg.respond_to? :to_f
43
- if arg.to_s == 'scale'
44
- raise 'if height is \'scale\', width must be a number' unless width[i].respond_to? :to_f
45
- return arg
46
- end
47
- raise 'height must be a number, :scale, :native, or :deck'
48
- end
49
-
50
- end
51
-
52
- end
53
- end
1
+ require 'squib/args/arg_loader'
2
+
3
+ module Squib
4
+ # @api private
5
+ module Args
6
+
7
+ class ScaleBox
8
+ include ArgLoader
9
+
10
+ def initialize(deck)
11
+ @deck = deck
12
+ end
13
+
14
+ def self.parameters
15
+ { x: 0, y: 0,
16
+ width: :native, height: :native
17
+ }
18
+ end
19
+
20
+ def self.expanding_parameters
21
+ parameters.keys # all of them
22
+ end
23
+
24
+ def self.params_with_units
25
+ parameters.keys # all of them
26
+ end
27
+
28
+ def validate_width(arg, i)
29
+ return @deck.width if arg.to_s == 'deck'
30
+ return :native if arg.to_s == 'native'
31
+ return arg if arg.respond_to? :to_f
32
+ if arg.to_s == 'scale'
33
+ raise 'if width is :scale, height must be a number' unless height[i].respond_to? :to_f
34
+ return arg
35
+ end
36
+ raise 'width must be a number, :scale, :native, or :deck'
37
+ end
38
+
39
+ def validate_height(arg, i)
40
+ return @deck.height if arg.to_s == 'deck'
41
+ return :native if arg.to_s == 'native'
42
+ return arg if arg.respond_to? :to_f
43
+ if arg.to_s == 'scale'
44
+ raise 'if height is \'scale\', width must be a number' unless width[i].respond_to? :to_f
45
+ return arg
46
+ end
47
+ raise 'height must be a number, :scale, :native, or :deck'
48
+ end
49
+
50
+ end
51
+
52
+ end
53
+ end
@@ -1,72 +1,72 @@
1
- require 'cairo'
2
- require 'squib/args/arg_loader'
3
- require 'squib/args/color_validator'
4
- require 'squib/args/dir_validator'
5
-
6
- module Squib
7
- # @api private
8
- module Args
9
-
10
- class Sheet
11
- include ArgLoader
12
- include ColorValidator
13
- include DirValidator
14
-
15
- def initialize(custom_colors = {}, dsl_method_defaults = {}, deck_size = 1)
16
- @custom_colors = custom_colors
17
- @dsl_method_defaults = dsl_method_defaults
18
- @deck_size = deck_size
19
- end
20
-
21
- def self.parameters
22
- {
23
- dir: '_output',
24
- file: 'sheet.png',
25
- fill_color: :white,
26
- gap: 0,
27
- height: 2550,
28
- margin: 75,
29
- rows: :infinite,
30
- columns: 5,
31
- trim_radius: 38,
32
- trim: 0,
33
- width: 3300,
34
- }
35
- end
36
-
37
- def self.expanding_parameters
38
- [] # none of them
39
- end
40
-
41
- def self.params_with_units
42
- [ :gap, :height, :margin, :trim_radius, :trim, :width ]
43
- end
44
-
45
- def validate_fill_color(arg)
46
- colorify(arg, @custom_colors)
47
- end
48
-
49
- def validate_dir(arg)
50
- ensure_dir_created(arg)
51
- end
52
-
53
- def validate_columns(arg)
54
- raise 'columns must be an integer' unless arg.respond_to? :to_i
55
- arg.to_i
56
- end
57
-
58
- def validate_rows(arg)
59
- raise 'columns must be an integer' unless columns.respond_to? :to_i
60
- return 1 if @deck_size < columns
61
- return arg if arg.respond_to? :to_i
62
- (@deck_size.to_i / columns.to_i).ceil
63
- end
64
-
65
- def full_filename
66
- "#{dir}/#{file}"
67
- end
68
-
69
- end
70
-
71
- end
72
- end
1
+ require 'cairo'
2
+ require 'squib/args/arg_loader'
3
+ require 'squib/args/color_validator'
4
+ require 'squib/args/dir_validator'
5
+
6
+ module Squib
7
+ # @api private
8
+ module Args
9
+
10
+ class Sheet
11
+ include ArgLoader
12
+ include ColorValidator
13
+ include DirValidator
14
+
15
+ def initialize(custom_colors = {}, dsl_method_defaults = {}, deck_size = 1)
16
+ @custom_colors = custom_colors
17
+ @dsl_method_defaults = dsl_method_defaults
18
+ @deck_size = deck_size
19
+ end
20
+
21
+ def self.parameters
22
+ {
23
+ dir: '_output',
24
+ file: 'sheet.png',
25
+ fill_color: :white,
26
+ gap: 0,
27
+ height: 2550,
28
+ margin: 75,
29
+ rows: :infinite,
30
+ columns: 5,
31
+ trim_radius: 38,
32
+ trim: 0,
33
+ width: 3300,
34
+ }
35
+ end
36
+
37
+ def self.expanding_parameters
38
+ [] # none of them
39
+ end
40
+
41
+ def self.params_with_units
42
+ [ :gap, :height, :margin, :trim_radius, :trim, :width ]
43
+ end
44
+
45
+ def validate_fill_color(arg)
46
+ colorify(arg, @custom_colors)
47
+ end
48
+
49
+ def validate_dir(arg)
50
+ ensure_dir_created(arg)
51
+ end
52
+
53
+ def validate_columns(arg)
54
+ raise 'columns must be an integer' unless arg.respond_to? :to_i
55
+ arg.to_i
56
+ end
57
+
58
+ def validate_rows(arg)
59
+ raise 'columns must be an integer' unless columns.respond_to? :to_i
60
+ return 1 if @deck_size < columns
61
+ return arg if arg.respond_to? :to_i
62
+ (@deck_size.to_i / columns.to_i).ceil
63
+ end
64
+
65
+ def full_filename
66
+ "#{dir}/#{file}"
67
+ end
68
+
69
+ end
70
+
71
+ end
72
+ end
@@ -1,38 +1,38 @@
1
- require 'cairo'
2
- require 'squib/args/arg_loader'
3
- require 'squib/args/dir_validator'
4
-
5
- module Squib
6
- # @api private
7
- module Args
8
-
9
- class ShowcaseSpecial
10
- include ArgLoader
11
- include DirValidator
12
-
13
- def self.parameters
14
- { scale: 0.85,
15
- offset: 1.1,
16
- reflect_offset: 15,
17
- reflect_percent: 0.25,
18
- reflect_strength: 0.2,
19
- face: :left,
20
- }
21
- end
22
-
23
- def self.expanding_parameters
24
- [] # none of them
25
- end
26
-
27
- def self.params_with_units
28
- [ :reflect_offset ]
29
- end
30
-
31
- def face_right?
32
- @face.to_s.strip.downcase == 'right'
33
- end
34
-
35
- end
36
-
37
- end
38
- end
1
+ require 'cairo'
2
+ require 'squib/args/arg_loader'
3
+ require 'squib/args/dir_validator'
4
+
5
+ module Squib
6
+ # @api private
7
+ module Args
8
+
9
+ class ShowcaseSpecial
10
+ include ArgLoader
11
+ include DirValidator
12
+
13
+ def self.parameters
14
+ { scale: 0.85,
15
+ offset: 1.1,
16
+ reflect_offset: 15,
17
+ reflect_percent: 0.25,
18
+ reflect_strength: 0.2,
19
+ face: :left,
20
+ }
21
+ end
22
+
23
+ def self.expanding_parameters
24
+ [] # none of them
25
+ end
26
+
27
+ def self.params_with_units
28
+ [ :reflect_offset ]
29
+ end
30
+
31
+ def face_right?
32
+ @face.to_s.strip.downcase == 'right'
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+ end