squib 0.18.0 → 0.19.0a

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 (202) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +39 -39
  3. data/.github/ISSUE_TEMPLATE/feature_request.md +22 -22
  4. data/.github/ISSUE_TEMPLATE/help-wanted.md +13 -13
  5. data/.github/ISSUE_TEMPLATE/release-todo.md +45 -33
  6. data/.github/PULL_REQUEST_TEMPLATE.md +13 -13
  7. data/.github/workflows/tests.yml +22 -22
  8. data/.gitignore +41 -41
  9. data/.vscode/settings.json +4 -3
  10. data/CHANGELOG.md +460 -460
  11. data/CONTRIBUTING.md +40 -40
  12. data/Dockerfile +27 -27
  13. data/Gemfile +2 -2
  14. data/Guardfile +8 -8
  15. data/LICENSE.txt +22 -22
  16. data/README.md +139 -139
  17. data/Rakefile +51 -51
  18. data/bin/squib +5 -5
  19. data/lib/squib/api/settings.rb +21 -21
  20. data/lib/squib/args/arg_loader.rb +138 -138
  21. data/lib/squib/args/box.rb +59 -59
  22. data/lib/squib/args/card_range.rb +34 -34
  23. data/lib/squib/args/color_validator.rb +7 -7
  24. data/lib/squib/args/coords.rb +49 -49
  25. data/lib/squib/args/csv_opts.rb +22 -22
  26. data/lib/squib/args/dir_validator.rb +11 -11
  27. data/lib/squib/args/draw.rb +93 -93
  28. data/lib/squib/args/drop_shadow.rb +39 -39
  29. data/lib/squib/args/embed_adjust.rb +22 -22
  30. data/lib/squib/args/embed_key.rb +12 -12
  31. data/lib/squib/args/hand_special.rb +37 -37
  32. data/lib/squib/args/import.rb +67 -67
  33. data/lib/squib/args/input_file.rb +55 -55
  34. data/lib/squib/args/paint.rb +43 -43
  35. data/lib/squib/args/paragraph.rb +118 -118
  36. data/lib/squib/args/save_batch.rb +65 -65
  37. data/lib/squib/args/scale_box.rb +57 -57
  38. data/lib/squib/args/sheet.rb +165 -165
  39. data/lib/squib/args/showcase_special.rb +41 -41
  40. data/lib/squib/args/sprue_file.rb +44 -44
  41. data/lib/squib/args/svg_special.rb +37 -37
  42. data/lib/squib/args/transform.rb +55 -55
  43. data/lib/squib/args/typographer.rb +115 -115
  44. data/lib/squib/args/unit_conversion.rb +27 -27
  45. data/lib/squib/args/xywh_shorthands.rb +50 -50
  46. data/lib/squib/builtin/layouts/economy.yml +85 -85
  47. data/lib/squib/builtin/layouts/fantasy.yml +101 -101
  48. data/lib/squib/builtin/layouts/hand.yml +62 -62
  49. data/lib/squib/builtin/layouts/party.yml +94 -94
  50. data/lib/squib/builtin/layouts/playing-card.yml +35 -35
  51. data/lib/squib/builtin/layouts/tuck_box.yml +46 -46
  52. data/lib/squib/builtin/projects/advanced/.gitignore +4 -4
  53. data/lib/squib/builtin/projects/advanced/ABOUT.md +19 -19
  54. data/lib/squib/builtin/projects/advanced/Gemfile +11 -11
  55. data/lib/squib/builtin/projects/advanced/Guardfile +21 -21
  56. data/lib/squib/builtin/projects/advanced/IDEAS.md +22 -22
  57. data/lib/squib/builtin/projects/advanced/PLAYTESTING.md +26 -26
  58. data/lib/squib/builtin/projects/advanced/Rakefile +27 -27
  59. data/lib/squib/builtin/projects/advanced/config.yml +49 -49
  60. data/lib/squib/builtin/projects/advanced/docs/PNP NOTES.md +3 -3
  61. data/lib/squib/builtin/projects/advanced/docs/RULES.md +21 -21
  62. data/lib/squib/builtin/projects/advanced/img/example.svg +60 -60
  63. data/lib/squib/builtin/projects/advanced/layouts/deck.yml +27 -27
  64. data/lib/squib/builtin/projects/advanced/src/deck.rb +34 -34
  65. data/lib/squib/builtin/projects/advanced/src/version.rb +3 -3
  66. data/lib/squib/builtin/projects/basic/.gitignore +4 -4
  67. data/lib/squib/builtin/projects/basic/ABOUT.md +19 -19
  68. data/lib/squib/builtin/projects/basic/Gemfile +3 -3
  69. data/lib/squib/builtin/projects/basic/IDEAS.md +22 -22
  70. data/lib/squib/builtin/projects/basic/PLAYTESTING.md +26 -26
  71. data/lib/squib/builtin/projects/basic/PNP NOTES.md +3 -3
  72. data/lib/squib/builtin/projects/basic/RULES.md +21 -21
  73. data/lib/squib/builtin/projects/basic/Rakefile +7 -7
  74. data/lib/squib/builtin/projects/basic/config.yml +50 -50
  75. data/lib/squib/builtin/projects/basic/deck.rb +6 -6
  76. data/lib/squib/builtin/sprues/a4_euro_card.yml +42 -42
  77. data/lib/squib/builtin/sprues/a4_poker_card_8up.yml +40 -40
  78. data/lib/squib/builtin/sprues/a4_poker_card_9up.yml +42 -42
  79. data/lib/squib/builtin/sprues/a4_usa_card.yml +42 -42
  80. data/lib/squib/builtin/sprues/drivethrucards_1up.yml +10 -10
  81. data/lib/squib/builtin/sprues/letter_poker_card_9up.yml +25 -25
  82. data/lib/squib/builtin/sprues/letter_poker_foldable_8up.yml +52 -52
  83. data/lib/squib/builtin/sprues/printplaygames_18up.yml +68 -68
  84. data/lib/squib/card.rb +75 -75
  85. data/lib/squib/commands/cli.rb +39 -39
  86. data/lib/squib/commands/data/template_option.rb +109 -109
  87. data/lib/squib/commands/make_sprue.rb +277 -277
  88. data/lib/squib/commands/new.rb +77 -77
  89. data/lib/squib/conf.rb +149 -149
  90. data/lib/squib/constants.rb +17 -17
  91. data/lib/squib/deck.rb +138 -138
  92. data/lib/squib/dsl/background.rb +35 -35
  93. data/lib/squib/dsl/circle.rb +39 -39
  94. data/lib/squib/dsl/csv.rb +42 -42
  95. data/lib/squib/dsl/curve.rb +35 -35
  96. data/lib/squib/dsl/cut_zone.rb +47 -47
  97. data/lib/squib/dsl/ellipse.rb +37 -37
  98. data/lib/squib/dsl/grid.rb +35 -35
  99. data/lib/squib/dsl/groups.rb +54 -54
  100. data/lib/squib/dsl/hand.rb +42 -42
  101. data/lib/squib/dsl/line.rb +35 -35
  102. data/lib/squib/dsl/png.rb +57 -57
  103. data/lib/squib/dsl/polygon.rb +36 -36
  104. data/lib/squib/dsl/rect.rb +37 -37
  105. data/lib/squib/dsl/safe_zone.rb +48 -48
  106. data/lib/squib/dsl/save.rb +21 -21
  107. data/lib/squib/dsl/save_pdf.rb +50 -50
  108. data/lib/squib/dsl/save_png.rb +48 -48
  109. data/lib/squib/dsl/save_sheet.rb +53 -53
  110. data/lib/squib/dsl/showcase.rb +43 -43
  111. data/lib/squib/dsl/star.rb +37 -37
  112. data/lib/squib/dsl/svg.rb +63 -63
  113. data/lib/squib/dsl/text.rb +54 -54
  114. data/lib/squib/dsl/text_embed.rb +79 -79
  115. data/lib/squib/dsl/triangle.rb +35 -35
  116. data/lib/squib/dsl/units.rb +37 -37
  117. data/lib/squib/dsl/xlsx.rb +40 -40
  118. data/lib/squib/dsl/yaml.rb +40 -40
  119. data/lib/squib/errors_warnings/warn_unexpected_params.rb +14 -14
  120. data/lib/squib/graphics/background.rb +14 -14
  121. data/lib/squib/graphics/cairo_context_wrapper.rb +115 -115
  122. data/lib/squib/graphics/embedding_utils.rb +28 -28
  123. data/lib/squib/graphics/gradient_regex.rb +47 -47
  124. data/lib/squib/graphics/hand.rb +42 -42
  125. data/lib/squib/graphics/image.rb +123 -123
  126. data/lib/squib/graphics/save_doc.rb +77 -77
  127. data/lib/squib/graphics/save_images.rb +91 -91
  128. data/lib/squib/graphics/save_pdf.rb +90 -90
  129. data/lib/squib/graphics/save_sprue.rb +231 -231
  130. data/lib/squib/graphics/shapes.rb +143 -143
  131. data/lib/squib/graphics/showcase.rb +85 -85
  132. data/lib/squib/graphics/text.rb +202 -202
  133. data/lib/squib/import/csv_importer.rb +45 -45
  134. data/lib/squib/import/data_frame.rb +108 -108
  135. data/lib/squib/import/quantity_exploder.rb +17 -17
  136. data/lib/squib/import/xlsx_importer.rb +28 -28
  137. data/lib/squib/import/yaml_importer.rb +30 -30
  138. data/lib/squib/layout_parser.rb +155 -155
  139. data/lib/squib/progress.rb +38 -38
  140. data/lib/squib/sample_helpers.rb +34 -34
  141. data/lib/squib/sprues/crop_line.rb +28 -28
  142. data/lib/squib/sprues/crop_line_dash.rb +35 -35
  143. data/lib/squib/sprues/invalid_sprue_definition.rb +9 -9
  144. data/lib/squib/sprues/sprue.rb +208 -208
  145. data/lib/squib/sprues/sprue_schema.rb +51 -51
  146. data/lib/squib/system_fonts.rb +16 -16
  147. data/lib/squib/version.rb +11 -11
  148. data/lib/squib.rb +35 -35
  149. data/samples/autoscale_font/_autoscale_font.rb +98 -98
  150. data/samples/backend/_backend.rb +26 -26
  151. data/samples/basic.rb +19 -19
  152. data/samples/build_groups/build_groups.rb +36 -36
  153. data/samples/colors/_colors.rb +44 -44
  154. data/samples/colors/_gradients.rb +34 -34
  155. data/samples/colors/_switch_color.rb +33 -33
  156. data/samples/config/config_text_markup.rb +20 -20
  157. data/samples/config/custom_config.rb +18 -18
  158. data/samples/data/_csv.rb +33 -33
  159. data/samples/data/_excel.rb +55 -55
  160. data/samples/data/_yaml.rb +12 -12
  161. data/samples/hello_world.rb +6 -6
  162. data/samples/images/_cairo_access.rb +39 -39
  163. data/samples/images/_images.rb +104 -104
  164. data/samples/images/_more_load_images.rb +102 -102
  165. data/samples/images/_placeholders.rb +48 -48
  166. data/samples/intro/01_hello.rb +8 -8
  167. data/samples/intro/02_options.rb +14 -14
  168. data/samples/intro/03_layout.rb +11 -11
  169. data/samples/intro/04_arrays.rb +15 -15
  170. data/samples/intro/05_excel.rb +14 -14
  171. data/samples/layouts/builtin_layouts.rb +97 -97
  172. data/samples/layouts/layouts.rb +71 -71
  173. data/samples/project/src/characters.rb +8 -8
  174. data/samples/project/src/skills.rb +7 -7
  175. data/samples/proofs/_tgc_proofs.rb +16 -16
  176. data/samples/ranges/_ranges.rb +64 -64
  177. data/samples/saves/_hand.rb +23 -23
  178. data/samples/saves/_portrait_landscape.rb +23 -23
  179. data/samples/saves/_save_filenames.rb +28 -28
  180. data/samples/saves/_save_pdf.rb +29 -29
  181. data/samples/saves/_saves.rb +75 -75
  182. data/samples/saves/_showcase.rb +25 -25
  183. data/samples/shadows/_shadow.rb +71 -71
  184. data/samples/shapes/_draw_shapes.rb +60 -60
  185. data/samples/shapes/_proofs.rb +22 -22
  186. data/samples/sprues/_advanced_sprues.rb +25 -25
  187. data/samples/sprues/_builtin_sprues.rb +22 -22
  188. data/samples/sprues/_fold_sheet.rb +30 -30
  189. data/samples/sprues/_hex_tiles.rb +15 -15
  190. data/samples/sprues/_mints.rb +11 -11
  191. data/samples/sprues/_negative_coords.rb +6 -6
  192. data/samples/sprues/_sprue_example.rb +11 -11
  193. data/samples/system_font_debug/_list_fonts.rb +14 -14
  194. data/samples/text/_embed_text.rb +128 -128
  195. data/samples/text/_text.rb +52 -52
  196. data/samples/text/_text_options.rb +103 -103
  197. data/samples/text/bug134.rb +14 -14
  198. data/samples/units/_cells.rb +50 -50
  199. data/samples/units/_shorthands.rb +48 -48
  200. data/samples/units/_units.rb +39 -39
  201. data/squib.gemspec +58 -58
  202. metadata +21 -21
@@ -1,93 +1,93 @@
1
- require 'cairo'
2
- require_relative 'arg_loader'
3
- require_relative 'color_validator'
4
-
5
- module Squib::Args
6
-
7
- module_function def extract_draw(opts, deck, dsl_method_defaults = {})
8
- Draw.new(deck.custom_colors, dsl_method_defaults).extract!(opts, deck)
9
- end
10
-
11
- class Draw
12
- include ArgLoader
13
- include ColorValidator
14
-
15
- def initialize(custom_colors, dsl_method_defaults = {})
16
- @custom_colors = custom_colors
17
- @dsl_method_defaults = dsl_method_defaults
18
- end
19
-
20
- def self.parameters
21
- { color: :black,
22
- fill_color: '#0000',
23
- stroke_color: :black,
24
- stroke_width: 2.0,
25
- stroke_strategy: :fill_first,
26
- join: :miter,
27
- cap: 'butt',
28
- dash: ''
29
- }
30
- end
31
-
32
- def self.expanding_parameters
33
- parameters.keys # all of them are expandable
34
- end
35
-
36
- def self.params_with_units
37
- [:stroke_width]
38
- end
39
-
40
- def validate_join(arg, _i)
41
- case arg.to_s.strip.downcase
42
- when 'miter'
43
- Cairo::LINE_JOIN_MITER
44
- when 'round'
45
- Cairo::LINE_JOIN_ROUND
46
- when 'bevel'
47
- Cairo::LINE_JOIN_BEVEL
48
- end
49
- end
50
-
51
- def validate_cap(arg, _i)
52
- case arg.to_s.strip.downcase
53
- when 'butt'
54
- Cairo::LINE_CAP_BUTT
55
- when 'round'
56
- Cairo::LINE_CAP_ROUND
57
- when 'square'
58
- Cairo::LINE_CAP_SQUARE
59
- end
60
- end
61
-
62
- def validate_dash(arg, _i)
63
- arg.to_s.split.collect do |x|
64
- UnitConversion.parse(x, @dpi, @cell_px).to_f
65
- end
66
- end
67
-
68
- def validate_fill_color(arg, _i)
69
- colorify(arg, @custom_colors)
70
- end
71
-
72
- def validate_stroke_color(arg, _i)
73
- colorify(arg, @custom_colors)
74
- end
75
-
76
- def validate_color(arg, _i)
77
- colorify(arg, @custom_colors)
78
- end
79
-
80
- def validate_stroke_strategy(arg, _i)
81
- case arg.to_s.downcase.strip
82
- when 'fill_first'
83
- :fill_first
84
- when 'stroke_first'
85
- :stroke_first
86
- else
87
- raise "Only 'stroke_first' or 'fill_first' allowed"
88
- end
89
- end
90
-
91
- end
92
-
93
- end
1
+ require 'cairo'
2
+ require_relative 'arg_loader'
3
+ require_relative 'color_validator'
4
+
5
+ module Squib::Args
6
+
7
+ module_function def extract_draw(opts, deck, dsl_method_defaults = {})
8
+ Draw.new(deck.custom_colors, dsl_method_defaults).extract!(opts, deck)
9
+ end
10
+
11
+ class Draw
12
+ include ArgLoader
13
+ include ColorValidator
14
+
15
+ def initialize(custom_colors, dsl_method_defaults = {})
16
+ @custom_colors = custom_colors
17
+ @dsl_method_defaults = dsl_method_defaults
18
+ end
19
+
20
+ def self.parameters
21
+ { color: :black,
22
+ fill_color: '#0000',
23
+ stroke_color: :black,
24
+ stroke_width: 2.0,
25
+ stroke_strategy: :fill_first,
26
+ join: :miter,
27
+ cap: 'butt',
28
+ dash: ''
29
+ }
30
+ end
31
+
32
+ def self.expanding_parameters
33
+ parameters.keys # all of them are expandable
34
+ end
35
+
36
+ def self.params_with_units
37
+ [:stroke_width]
38
+ end
39
+
40
+ def validate_join(arg, _i)
41
+ case arg.to_s.strip.downcase
42
+ when 'miter'
43
+ Cairo::LINE_JOIN_MITER
44
+ when 'round'
45
+ Cairo::LINE_JOIN_ROUND
46
+ when 'bevel'
47
+ Cairo::LINE_JOIN_BEVEL
48
+ end
49
+ end
50
+
51
+ def validate_cap(arg, _i)
52
+ case arg.to_s.strip.downcase
53
+ when 'butt'
54
+ Cairo::LINE_CAP_BUTT
55
+ when 'round'
56
+ Cairo::LINE_CAP_ROUND
57
+ when 'square'
58
+ Cairo::LINE_CAP_SQUARE
59
+ end
60
+ end
61
+
62
+ def validate_dash(arg, _i)
63
+ arg.to_s.split.collect do |x|
64
+ UnitConversion.parse(x, @dpi, @cell_px).to_f
65
+ end
66
+ end
67
+
68
+ def validate_fill_color(arg, _i)
69
+ colorify(arg, @custom_colors)
70
+ end
71
+
72
+ def validate_stroke_color(arg, _i)
73
+ colorify(arg, @custom_colors)
74
+ end
75
+
76
+ def validate_color(arg, _i)
77
+ colorify(arg, @custom_colors)
78
+ end
79
+
80
+ def validate_stroke_strategy(arg, _i)
81
+ case arg.to_s.downcase.strip
82
+ when 'fill_first'
83
+ :fill_first
84
+ when 'stroke_first'
85
+ :stroke_first
86
+ else
87
+ raise "Only 'stroke_first' or 'fill_first' allowed"
88
+ end
89
+ end
90
+
91
+ end
92
+
93
+ end
@@ -1,39 +1,39 @@
1
- require_relative 'color_validator'
2
-
3
- module Squib::Args
4
- module_function def extract_drop_shadow(opts, deck)
5
- DropShadow.new(deck.custom_colors).extract! opts, deck
6
- end
7
-
8
- class DropShadow
9
- include ArgLoader
10
- include ColorValidator
11
-
12
- def initialize(custom_colors)
13
- @custom_colors = custom_colors
14
- end
15
-
16
- def self.parameters
17
- {
18
- shadow_color: :black,
19
- shadow_offset_x: 3,
20
- shadow_offset_y: 3,
21
- shadow_radius: nil,
22
- shadow_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
- [:shadow_offset_x, :shadow_offset_y, :shadow_radius, :shadow_trim]
32
- end
33
-
34
- def validate_shadow_color(arg, _i)
35
- colorify(arg, @custom_colors)
36
- end
37
-
38
- end
39
- end
1
+ require_relative 'color_validator'
2
+
3
+ module Squib::Args
4
+ module_function def extract_drop_shadow(opts, deck)
5
+ DropShadow.new(deck.custom_colors).extract! opts, deck
6
+ end
7
+
8
+ class DropShadow
9
+ include ArgLoader
10
+ include ColorValidator
11
+
12
+ def initialize(custom_colors)
13
+ @custom_colors = custom_colors
14
+ end
15
+
16
+ def self.parameters
17
+ {
18
+ shadow_color: :black,
19
+ shadow_offset_x: 3,
20
+ shadow_offset_y: 3,
21
+ shadow_radius: nil,
22
+ shadow_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
+ [:shadow_offset_x, :shadow_offset_y, :shadow_radius, :shadow_trim]
32
+ end
33
+
34
+ def validate_shadow_color(arg, _i)
35
+ colorify(arg, @custom_colors)
36
+ end
37
+
38
+ end
39
+ end
@@ -1,22 +1,22 @@
1
- require_relative 'arg_loader'
2
-
3
- module Squib::Args
4
-
5
- class EmbedAdjust
6
- include ArgLoader
7
-
8
- def self.parameters
9
- { dx: 0, dy: 0 }
10
- end
11
-
12
- def self.expanding_parameters
13
- parameters.keys # all of them
14
- end
15
-
16
- def self.params_with_units
17
- parameters.keys # all of them
18
- end
19
-
20
- end
21
-
22
- end
1
+ require_relative 'arg_loader'
2
+
3
+ module Squib::Args
4
+
5
+ class EmbedAdjust
6
+ include ArgLoader
7
+
8
+ def self.parameters
9
+ { dx: 0, dy: 0 }
10
+ end
11
+
12
+ def self.expanding_parameters
13
+ parameters.keys # all of them
14
+ end
15
+
16
+ def self.params_with_units
17
+ parameters.keys # all of them
18
+ end
19
+
20
+ end
21
+
22
+ end
@@ -1,12 +1,12 @@
1
- require_relative 'arg_loader'
2
-
3
- module Squib::Args
4
- class EmbedKey
5
-
6
- # Validate the embed lookup key
7
- def validate_key(str)
8
- str.to_s
9
- end
10
-
11
- end
12
- end
1
+ require_relative 'arg_loader'
2
+
3
+ module Squib::Args
4
+ class EmbedKey
5
+
6
+ # Validate the embed lookup key
7
+ def validate_key(str)
8
+ str.to_s
9
+ end
10
+
11
+ end
12
+ end
@@ -1,37 +1,37 @@
1
- require 'cairo'
2
-
3
- module Squib::Args
4
- module_function def extract_hand_special(opts, deck)
5
- HandSpecial.new(deck.height).extract! opts, deck
6
- end
7
-
8
- class HandSpecial
9
- include ArgLoader
10
-
11
- def initialize(card_height)
12
- @card_height = card_height
13
- end
14
-
15
- def self.parameters
16
- {
17
- angle_range: (Math::PI / -4.0)..(Math::PI / 4),
18
- radius: :auto
19
- }
20
- end
21
-
22
- def self.expanding_parameters
23
- [] # none of them
24
- end
25
-
26
- def self.params_with_units
27
- [ :radius ]
28
- end
29
-
30
- def validate_radius(arg)
31
- return 0.3 * @card_height if arg.to_s.downcase.strip == 'auto'
32
- arg
33
- end
34
-
35
- end
36
-
37
- end
1
+ require 'cairo'
2
+
3
+ module Squib::Args
4
+ module_function def extract_hand_special(opts, deck)
5
+ HandSpecial.new(deck.height).extract! opts, deck
6
+ end
7
+
8
+ class HandSpecial
9
+ include ArgLoader
10
+
11
+ def initialize(card_height)
12
+ @card_height = card_height
13
+ end
14
+
15
+ def self.parameters
16
+ {
17
+ angle_range: (Math::PI / -4.0)..(Math::PI / 4),
18
+ radius: :auto
19
+ }
20
+ end
21
+
22
+ def self.expanding_parameters
23
+ [] # none of them
24
+ end
25
+
26
+ def self.params_with_units
27
+ [ :radius ]
28
+ end
29
+
30
+ def validate_radius(arg)
31
+ return 0.3 * @card_height if arg.to_s.downcase.strip == 'auto'
32
+ arg
33
+ end
34
+
35
+ end
36
+
37
+ end
@@ -1,67 +1,67 @@
1
- module Squib::Args
2
- module_function def extract_import(opts)
3
- # note how we don't use ArgLoader here because it's way more complex than
4
- # what we need here. Don't need layouts or singleton expansion, so...
5
- # ...let's just do it ourselves.
6
- Import.parameters.each { |p, value| opts[p] = value unless opts.key? p }
7
- return Import.new.load! opts
8
- end
9
-
10
- class Import
11
-
12
- def self.parameters
13
- {
14
- data: nil,
15
- explode: 'qty',
16
- file: nil,
17
- sheet: 0,
18
- strip: true,
19
- }
20
- end
21
-
22
- attr_accessor *(self.parameters.keys)
23
-
24
- def self.expanding_parameters
25
- [] # none of them
26
- end
27
-
28
- def self.params_with_units
29
- [] # none of them
30
- end
31
-
32
- def load!(opts)
33
- @strip = validate_strip opts[:strip]
34
- @explode = validate_explode opts[:explode]
35
- @file = validate_file opts[:file]
36
- @data = validate_data opts[:data]
37
- @sheet = opts[:sheet]
38
- return self
39
- end
40
-
41
- def validate_strip(arg)
42
- raise 'Strip must be true or false' unless arg == true || arg == false
43
- arg
44
- end
45
-
46
- def validate_explode(arg)
47
- arg.to_s
48
- end
49
-
50
- def validate_file(arg)
51
- return nil if arg.nil?
52
- raise "File #{File.expand_path(arg)} does not exist!" unless File.exists?(arg)
53
- File.expand_path(arg)
54
- end
55
-
56
- def strip?
57
- strip
58
- end
59
-
60
- def validate_data(arg)
61
- return nil if arg.nil?
62
- arg.to_s
63
- end
64
-
65
- end
66
-
67
- end
1
+ module Squib::Args
2
+ module_function def extract_import(opts)
3
+ # note how we don't use ArgLoader here because it's way more complex than
4
+ # what we need here. Don't need layouts or singleton expansion, so...
5
+ # ...let's just do it ourselves.
6
+ Import.parameters.each { |p, value| opts[p] = value unless opts.key? p }
7
+ return Import.new.load! opts
8
+ end
9
+
10
+ class Import
11
+
12
+ def self.parameters
13
+ {
14
+ data: nil,
15
+ explode: 'qty',
16
+ file: nil,
17
+ sheet: 0,
18
+ strip: true,
19
+ }
20
+ end
21
+
22
+ attr_accessor *(self.parameters.keys)
23
+
24
+ def self.expanding_parameters
25
+ [] # none of them
26
+ end
27
+
28
+ def self.params_with_units
29
+ [] # none of them
30
+ end
31
+
32
+ def load!(opts)
33
+ @strip = validate_strip opts[:strip]
34
+ @explode = validate_explode opts[:explode]
35
+ @file = validate_file opts[:file]
36
+ @data = validate_data opts[:data]
37
+ @sheet = opts[:sheet]
38
+ return self
39
+ end
40
+
41
+ def validate_strip(arg)
42
+ raise 'Strip must be true or false' unless arg == true || arg == false
43
+ arg
44
+ end
45
+
46
+ def validate_explode(arg)
47
+ arg.to_s
48
+ end
49
+
50
+ def validate_file(arg)
51
+ return nil if arg.nil?
52
+ raise "File #{File.expand_path(arg)} does not exist!" unless File.exist?(arg)
53
+ File.expand_path(arg)
54
+ end
55
+
56
+ def strip?
57
+ strip
58
+ end
59
+
60
+ def validate_data(arg)
61
+ return nil if arg.nil?
62
+ arg.to_s
63
+ end
64
+
65
+ end
66
+
67
+ end
@@ -1,55 +1,55 @@
1
- require_relative 'arg_loader'
2
-
3
- module Squib::Args
4
- module_function def extract_input_file(opts, deck, dsl_method_default = {})
5
- InputFile.new(dsl_method_default).extract!(opts, deck)
6
- end
7
-
8
- class InputFile
9
- include ArgLoader
10
-
11
- def initialize(dsl_method_default = {})
12
- @dsl_method_default = dsl_method_default
13
- end
14
-
15
- def self.parameters
16
- {
17
- file: nil,
18
- placeholder: nil
19
- }
20
- end
21
-
22
- def self.expanding_parameters
23
- parameters.keys # all of them
24
- end
25
-
26
- def self.params_with_units
27
- [] # none of them
28
- end
29
-
30
- def validate_file(arg, i)
31
- return nil if arg.nil?
32
- return File.expand_path(arg) if File.exists?(arg)
33
- return File.expand_path(placeholder[i]) if File.exists?(placeholder[i].to_s)
34
-
35
- case deck_conf.img_missing.to_sym
36
- when :error
37
- raise "File #{File.expand_path(arg)} does not exist!"
38
- when :warn
39
- Squib.logger.warn "File #{File.expand_path(arg)} does not exist!"
40
- end
41
- return nil # the silent option - as if nil in the first place
42
- end
43
-
44
- def validate_placeholder(arg, _i)
45
- # What if they specify placeholder, but it doesn't exist?
46
- # ...always warn... that's probably a mistake they made
47
- unless arg.nil? || File.exists?(arg)
48
- msg = "Image placeholder #{File.expand_path(arg)} does not exist!"
49
- Squib.logger.warn msg
50
- return nil
51
- end
52
- return arg
53
- end
54
- end
55
- end
1
+ require_relative 'arg_loader'
2
+
3
+ module Squib::Args
4
+ module_function def extract_input_file(opts, deck, dsl_method_default = {})
5
+ InputFile.new(dsl_method_default).extract!(opts, deck)
6
+ end
7
+
8
+ class InputFile
9
+ include ArgLoader
10
+
11
+ def initialize(dsl_method_default = {})
12
+ @dsl_method_default = dsl_method_default
13
+ end
14
+
15
+ def self.parameters
16
+ {
17
+ file: nil,
18
+ placeholder: nil
19
+ }
20
+ end
21
+
22
+ def self.expanding_parameters
23
+ parameters.keys # all of them
24
+ end
25
+
26
+ def self.params_with_units
27
+ [] # none of them
28
+ end
29
+
30
+ def validate_file(arg, i)
31
+ return nil if arg.nil?
32
+ return File.expand_path(arg) if File.exist?(arg)
33
+ return File.expand_path(placeholder[i]) if File.exist?(placeholder[i].to_s)
34
+
35
+ case deck_conf.img_missing.to_sym
36
+ when :error
37
+ raise "File #{File.expand_path(arg)} does not exist!"
38
+ when :warn
39
+ Squib.logger.warn "File #{File.expand_path(arg)} does not exist!"
40
+ end
41
+ return nil # the silent option - as if nil in the first place
42
+ end
43
+
44
+ def validate_placeholder(arg, _i)
45
+ # What if they specify placeholder, but it doesn't exist?
46
+ # ...always warn... that's probably a mistake they made
47
+ unless arg.nil? || File.exist?(arg)
48
+ msg = "Image placeholder #{File.expand_path(arg)} does not exist!"
49
+ Squib.logger.warn msg
50
+ return nil
51
+ end
52
+ return arg
53
+ end
54
+ end
55
+ end