squib 0.14.2 → 0.14.3.pre1

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 (163) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +41 -41
  3. data/.travis.yml +19 -19
  4. data/CHANGELOG.md +366 -357
  5. data/CONTRIBUTING.md +40 -40
  6. data/Gemfile +2 -2
  7. data/LICENSE.txt +22 -22
  8. data/README.md +121 -121
  9. data/RELEASE TODO.md +21 -21
  10. data/Rakefile +48 -48
  11. data/appveyor.yml +24 -24
  12. data/bin/squib +4 -4
  13. data/lib/squib.rb +32 -32
  14. data/lib/squib/api/background.rb +15 -15
  15. data/lib/squib/api/data.rb +137 -137
  16. data/lib/squib/api/groups.rb +54 -54
  17. data/lib/squib/api/image.rb +49 -49
  18. data/lib/squib/api/save.rb +83 -83
  19. data/lib/squib/api/settings.rb +21 -21
  20. data/lib/squib/api/shapes.rb +124 -124
  21. data/lib/squib/api/text.rb +25 -25
  22. data/lib/squib/api/text_embed.rb +71 -71
  23. data/lib/squib/api/units.rb +27 -27
  24. data/lib/squib/args/arg_loader.rb +126 -126
  25. data/lib/squib/args/box.rb +55 -55
  26. data/lib/squib/args/card_range.rb +32 -32
  27. data/lib/squib/args/color_validator.rb +12 -12
  28. data/lib/squib/args/coords.rb +35 -35
  29. data/lib/squib/args/csv_opts.rb +25 -25
  30. data/lib/squib/args/dir_validator.rb +16 -16
  31. data/lib/squib/args/draw.rb +92 -92
  32. data/lib/squib/args/embed_adjust.rb +25 -25
  33. data/lib/squib/args/embed_key.rb +17 -17
  34. data/lib/squib/args/hand_special.rb +37 -37
  35. data/lib/squib/args/import.rb +40 -40
  36. data/lib/squib/args/input_file.rb +37 -37
  37. data/lib/squib/args/paint.rb +44 -44
  38. data/lib/squib/args/paragraph.rb +116 -116
  39. data/lib/squib/args/save_batch.rb +63 -63
  40. data/lib/squib/args/scale_box.rb +53 -53
  41. data/lib/squib/args/sheet.rb +172 -172
  42. data/lib/squib/args/showcase_special.rb +38 -38
  43. data/lib/squib/args/sprue_file.rb +44 -44
  44. data/lib/squib/args/svg_special.rb +37 -37
  45. data/lib/squib/args/transform.rb +61 -61
  46. data/lib/squib/args/typographer.rb +119 -119
  47. data/lib/squib/args/unit_conversion.rb +29 -29
  48. data/lib/squib/builtin/layouts/economy.yml +85 -85
  49. data/lib/squib/builtin/layouts/fantasy.yml +101 -101
  50. data/lib/squib/builtin/layouts/hand.yml +62 -62
  51. data/lib/squib/builtin/layouts/party.yml +94 -94
  52. data/lib/squib/builtin/layouts/playing-card.yml +35 -35
  53. data/lib/squib/builtin/layouts/tuck_box.yml +46 -46
  54. data/lib/squib/builtin/projects/advanced/.gitignore +4 -4
  55. data/lib/squib/builtin/projects/advanced/ABOUT.md +19 -19
  56. data/lib/squib/builtin/projects/advanced/Gemfile +11 -11
  57. data/lib/squib/builtin/projects/advanced/Guardfile +21 -21
  58. data/lib/squib/builtin/projects/advanced/IDEAS.md +22 -22
  59. data/lib/squib/builtin/projects/advanced/PLAYTESTING.md +26 -26
  60. data/lib/squib/builtin/projects/advanced/Rakefile +27 -27
  61. data/lib/squib/builtin/projects/advanced/config.yml +53 -49
  62. data/lib/squib/builtin/projects/advanced/docs/PNP NOTES.md +3 -3
  63. data/lib/squib/builtin/projects/advanced/docs/RULES.md +21 -21
  64. data/lib/squib/builtin/projects/advanced/img/example.svg +60 -60
  65. data/lib/squib/builtin/projects/advanced/layouts/deck.yml +27 -27
  66. data/lib/squib/builtin/projects/advanced/src/deck.rb +34 -34
  67. data/lib/squib/builtin/projects/advanced/src/version.rb +3 -3
  68. data/lib/squib/builtin/projects/basic/.gitignore +4 -4
  69. data/lib/squib/builtin/projects/basic/ABOUT.md +19 -19
  70. data/lib/squib/builtin/projects/basic/Gemfile +3 -3
  71. data/lib/squib/builtin/projects/basic/IDEAS.md +22 -22
  72. data/lib/squib/builtin/projects/basic/PLAYTESTING.md +26 -26
  73. data/lib/squib/builtin/projects/basic/PNP NOTES.md +3 -3
  74. data/lib/squib/builtin/projects/basic/RULES.md +21 -21
  75. data/lib/squib/builtin/projects/basic/Rakefile +7 -7
  76. data/lib/squib/builtin/projects/basic/config.yml +53 -49
  77. data/lib/squib/builtin/projects/basic/deck.rb +6 -6
  78. data/lib/squib/builtin/sprues/a4_euro_card.yml +42 -42
  79. data/lib/squib/builtin/sprues/a4_poker_card_8up.yml +40 -40
  80. data/lib/squib/builtin/sprues/a4_poker_card_9up.yml +42 -42
  81. data/lib/squib/builtin/sprues/a4_usa_card.yml +42 -42
  82. data/lib/squib/builtin/sprues/drivethrucards_1up.yml +10 -10
  83. data/lib/squib/builtin/sprues/letter_poker_card_9up.yml +25 -25
  84. data/lib/squib/builtin/sprues/letter_poker_foldable_8up.yml +52 -52
  85. data/lib/squib/builtin/sprues/printplaygames_18up.yml +68 -68
  86. data/lib/squib/card.rb +75 -75
  87. data/lib/squib/commands/cli.rb +39 -39
  88. data/lib/squib/commands/data/template_option.rb +109 -109
  89. data/lib/squib/commands/make_sprue.rb +275 -275
  90. data/lib/squib/commands/new.rb +77 -77
  91. data/lib/squib/conf.rb +144 -139
  92. data/lib/squib/constants.rb +17 -17
  93. data/lib/squib/deck.rb +116 -116
  94. data/lib/squib/graphics/background.rb +14 -14
  95. data/lib/squib/graphics/cairo_context_wrapper.rb +113 -113
  96. data/lib/squib/graphics/embedding_utils.rb +28 -28
  97. data/lib/squib/graphics/gradient_regex.rb +47 -47
  98. data/lib/squib/graphics/hand.rb +42 -42
  99. data/lib/squib/graphics/image.rb +129 -108
  100. data/lib/squib/graphics/save_doc.rb +61 -61
  101. data/lib/squib/graphics/save_images.rb +52 -52
  102. data/lib/squib/graphics/save_pdf.rb +90 -90
  103. data/lib/squib/graphics/save_sprue.rb +204 -204
  104. data/lib/squib/graphics/shapes.rb +143 -143
  105. data/lib/squib/graphics/showcase.rb +85 -85
  106. data/lib/squib/graphics/text.rb +174 -174
  107. data/lib/squib/import/data_frame.rb +108 -108
  108. data/lib/squib/layout_parser.rb +138 -138
  109. data/lib/squib/progress.rb +38 -38
  110. data/lib/squib/sample_helpers.rb +34 -34
  111. data/lib/squib/sprues/crop_line.rb +28 -28
  112. data/lib/squib/sprues/crop_line_dash.rb +35 -35
  113. data/lib/squib/sprues/invalid_sprue_definition.rb +9 -9
  114. data/lib/squib/sprues/sprue.rb +203 -203
  115. data/lib/squib/sprues/sprue_schema.rb +48 -48
  116. data/lib/squib/version.rb +10 -10
  117. data/samples/autoscale_font/_autoscale_font.rb +29 -29
  118. data/samples/backend/_backend.rb +26 -26
  119. data/samples/basic.rb +19 -19
  120. data/samples/bug256/_bug256.rb +13 -0
  121. data/samples/build_groups/build_groups.rb +36 -36
  122. data/samples/colors/_colors.rb +38 -38
  123. data/samples/colors/_gradients.rb +34 -34
  124. data/samples/config/config_text_markup.rb +20 -20
  125. data/samples/config/custom_config.rb +18 -18
  126. data/samples/data/_csv.rb +33 -33
  127. data/samples/data/_excel.rb +55 -55
  128. data/samples/data/_yaml.rb +12 -12
  129. data/samples/hello_world.rb +6 -6
  130. data/samples/images/_cairo_access.rb +39 -39
  131. data/samples/images/_images.rb +104 -104
  132. data/samples/images/_more_load_images.rb +102 -102
  133. data/samples/intro/01_hello.rb +8 -8
  134. data/samples/intro/02_options.rb +14 -14
  135. data/samples/intro/03_layout.rb +11 -11
  136. data/samples/intro/04_arrays.rb +15 -15
  137. data/samples/intro/05_excel.rb +14 -14
  138. data/samples/layouts/builtin_layouts.rb +97 -97
  139. data/samples/layouts/layouts.rb +71 -71
  140. data/samples/project/src/characters.rb +8 -8
  141. data/samples/project/src/skills.rb +7 -7
  142. data/samples/proofs/_tgc_proofs.rb +16 -16
  143. data/samples/ranges/_ranges.rb +64 -64
  144. data/samples/saves/_hand.rb +23 -23
  145. data/samples/saves/_portrait_landscape.rb +23 -23
  146. data/samples/saves/_save_pdf.rb +29 -29
  147. data/samples/saves/_saves.rb +51 -51
  148. data/samples/saves/_showcase.rb +25 -25
  149. data/samples/shapes/_draw_shapes.rb +60 -60
  150. data/samples/shapes/_proofs.rb +22 -22
  151. data/samples/sprues/_advanced_sprues.rb +24 -24
  152. data/samples/sprues/_builtin_sprues.rb +21 -21
  153. data/samples/sprues/_fold_sheet.rb +27 -27
  154. data/samples/sprues/_hex_tiles.rb +15 -15
  155. data/samples/sprues/_mints.rb +11 -11
  156. data/samples/sprues/_sprue_example.rb +11 -11
  157. data/samples/text/_embed_text.rb +128 -128
  158. data/samples/text/_text.rb +47 -47
  159. data/samples/text/_text_options.rb +102 -102
  160. data/samples/text/bug134.rb +14 -14
  161. data/samples/units/_units.rb +32 -32
  162. data/squib.gemspec +52 -52
  163. metadata +51 -48
@@ -1,24 +1,24 @@
1
- version: '{build}'
2
-
3
- skip_tags: true
4
-
5
- environment:
6
- matrix:
7
- - ruby_version: "23"
8
- - ruby_version: "23-x64"
9
-
10
- install:
11
- - SET PATH=C:\Ruby%ruby_version%\bin;%PATH%
12
- - ruby --version
13
- - gem --version
14
- - gem install bundler --quiet --no-ri --no-rdoc
15
- - bundler --version
16
- - bundle install
17
-
18
- test_script:
19
- - rake
20
-
21
- artifacts:
22
- - path: pkg\*.gem
23
-
24
- build: off
1
+ version: '{build}'
2
+
3
+ skip_tags: true
4
+
5
+ environment:
6
+ matrix:
7
+ - ruby_version: "23"
8
+ - ruby_version: "23-x64"
9
+
10
+ install:
11
+ - SET PATH=C:\Ruby%ruby_version%\bin;%PATH%
12
+ - ruby --version
13
+ - gem --version
14
+ - gem install bundler --quiet --no-ri --no-rdoc
15
+ - bundler --version
16
+ - bundle install
17
+
18
+ test_script:
19
+ - rake
20
+
21
+ artifacts:
22
+ - path: pkg\*.gem
23
+
24
+ build: off
data/bin/squib CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env ruby
2
- require 'squib'
3
-
4
- Squib::CLI.new.run
1
+ #!/usr/bin/env ruby
2
+ require 'squib'
3
+
4
+ Squib::CLI.new.run
@@ -1,32 +1,32 @@
1
- require 'logger'
2
- require 'cairo'
3
- require 'pango'
4
- require 'rsvg2'
5
- require_relative 'squib/version'
6
- require_relative 'squib/commands/cli'
7
- require_relative 'squib/deck'
8
- require_relative 'squib/card'
9
-
10
- module Squib
11
-
12
- # Access the internal logger that Squib uses. By default, Squib configure the logger to the WARN level
13
- # Use this to suppress or increase output levels.
14
- # @example
15
- # Squib.logger.level = Logger::DEBUG #show waaaay more information than you probably need, unless you're a dev
16
- # Squib.logger.level = Logger::ERROR #basically turns it off
17
- #
18
- # @return [Logger] the ruby logger
19
- # @api public
20
- def logger
21
- if @logger.nil?
22
- @logger = Logger.new($stdout)
23
- @logger.level = Logger::WARN
24
- @logger.formatter = proc do |severity, datetime, m_progname, msg|
25
- "#{datetime} #{severity}: #{msg}\n"
26
- end
27
- end
28
- @logger
29
- end
30
- module_function :logger
31
-
32
- end
1
+ require 'logger'
2
+ require 'cairo'
3
+ require 'pango'
4
+ require 'rsvg2'
5
+ require_relative 'squib/version'
6
+ require_relative 'squib/commands/cli'
7
+ require_relative 'squib/deck'
8
+ require_relative 'squib/card'
9
+
10
+ module Squib
11
+
12
+ # Access the internal logger that Squib uses. By default, Squib configure the logger to the WARN level
13
+ # Use this to suppress or increase output levels.
14
+ # @example
15
+ # Squib.logger.level = Logger::DEBUG #show waaaay more information than you probably need, unless you're a dev
16
+ # Squib.logger.level = Logger::ERROR #basically turns it off
17
+ #
18
+ # @return [Logger] the ruby logger
19
+ # @api public
20
+ def logger
21
+ if @logger.nil?
22
+ @logger = Logger.new($stdout)
23
+ @logger.level = Logger::WARN
24
+ @logger.formatter = proc do |severity, datetime, m_progname, msg|
25
+ "#{datetime} #{severity}: #{msg}\n"
26
+ end
27
+ end
28
+ @logger
29
+ end
30
+ module_function :logger
31
+
32
+ end
@@ -1,15 +1,15 @@
1
- require_relative '../args/card_range'
2
- require_relative '../args/draw'
3
-
4
- module Squib
5
- class Deck
6
-
7
- # DSL method. See http://squib.readthedocs.io
8
- def background(opts = {})
9
- range = Args::CardRange.new(opts[:range], deck_size: size)
10
- draw = Args::Draw.new(custom_colors).load!(opts, expand_by: size, layout: layout, dpi: dpi)
11
- range.each { |i| @cards[i].background(draw.color[i]) }
12
- end
13
-
14
- end
15
- end
1
+ require_relative '../args/card_range'
2
+ require_relative '../args/draw'
3
+
4
+ module Squib
5
+ class Deck
6
+
7
+ # DSL method. See http://squib.readthedocs.io
8
+ def background(opts = {})
9
+ range = Args::CardRange.new(opts[:range], deck_size: size)
10
+ draw = Args::Draw.new(custom_colors).load!(opts, expand_by: size, layout: layout, dpi: dpi)
11
+ range.each { |i| @cards[i].background(draw.color[i]) }
12
+ end
13
+
14
+ end
15
+ end
@@ -1,137 +1,137 @@
1
- require 'roo'
2
- require 'csv'
3
- require 'yaml'
4
- require_relative '../args/input_file'
5
- require_relative '../args/import'
6
- require_relative '../args/csv_opts'
7
- require_relative '../import/data_frame'
8
-
9
- module Squib
10
-
11
- # DSL method. See http://squib.readthedocs.io
12
- def xlsx(opts = {})
13
- input = Args::InputFile.new(file: 'deck.xlsx').load!(opts)
14
- import = Args::Import.new.load!(opts)
15
- s = Roo::Excelx.new(input.file[0])
16
- s.default_sheet = s.sheets[input.sheet[0]]
17
- data = Squib::DataFrame.new
18
- s.first_column.upto(s.last_column) do |col|
19
- header = s.cell(s.first_row, col).to_s
20
- header.strip! if import.strip?
21
- data[header] = []
22
- (s.first_row + 1).upto(s.last_row) do |row|
23
- cell = s.cell(row, col)
24
- # Roo hack for avoiding unnecessary .0's on whole integers (https://github.com/roo-rb/roo/issues/139)
25
- cell = s.excelx_value(row, col) if s.excelx_type(row, col) == [:numeric_or_formula, 'General']
26
- cell.strip! if cell.respond_to?(:strip) && import.strip?
27
- cell = yield(header, cell) if block_given?
28
- data[header] << cell
29
- end# row
30
- end# col
31
- explode_quantities(data, import.explode)
32
- end# xlsx
33
- module_function :xlsx
34
-
35
- # DSL method. See http://squib.readthedocs.io
36
- def csv(opts = {})
37
- # TODO refactor all this out to separate methods, and its own class
38
- import = Args::Import.new.load!(opts)
39
- file = Args::InputFile.new(file: 'deck.csv').load!(opts).file[0]
40
- data = opts.key?(:data) ? opts[:data] : File.read(file)
41
- csv_opts = Args::CSV_Opts.new(opts)
42
- table = CSV.parse(data, csv_opts.to_hash)
43
- check_duplicate_csv_headers(table)
44
- hash = Squib::DataFrame.new
45
- table.headers.each do |header|
46
- new_header = header.to_s
47
- new_header = new_header.strip if import.strip?
48
- hash[new_header] ||= table[header]
49
- end
50
- if import.strip?
51
- new_hash = Squib::DataFrame.new
52
- hash.each do |header, col|
53
- new_hash[header] = col.map do |str|
54
- str = str.strip if str.respond_to?(:strip)
55
- str
56
- end
57
- end
58
- hash = new_hash
59
- end
60
- if block_given?
61
- hash.each do |header, col|
62
- col.map! do |val|
63
- yield(header, val)
64
- end
65
- end
66
- end
67
- return explode_quantities(hash, import.explode)
68
- end
69
- module_function :csv
70
-
71
- # DSL method. See http://squib.readthedocs.io
72
- def yaml(opts = {})
73
- input = Args::InputFile.new(file: 'deck.yml').load!(opts)
74
- import = Args::Import.new.load!(opts)
75
- yml = YAML.load_file(input.file[0])
76
- data = Squib::DataFrame.new
77
- # Get a universal list of keys to ensure everything is covered.
78
- keys = yml.map { |c| c.keys}.flatten.uniq
79
- keys.each { |k| data[k] = [] } #init arrays
80
- yml.each do |card|
81
- # nil value if key isn't set.
82
- keys.each { |k| data[k] << card[k] }
83
- end
84
- if block_given?
85
- data.each do |header, col|
86
- col.map! do |val|
87
- yield(header, val)
88
- end
89
- end
90
- end
91
- explode_quantities(data, import.explode)
92
- end
93
- module_function :yaml
94
-
95
- # Check if the given CSV table has duplicate columns, and throw a warning
96
- # @api private
97
- def check_duplicate_csv_headers(table)
98
- if table.headers.size != table.headers.uniq.size
99
- dups = table.headers.select{|e| table.headers.count(e) > 1 }
100
- Squib.logger.warn "CSV duplicated the following column keys: #{dups.join(',')}"
101
- end
102
- end
103
- module_function :check_duplicate_csv_headers
104
-
105
- # @api private
106
- def explode_quantities(data, qty)
107
- return data unless data.col? qty.to_s.strip
108
- qtys = data[qty]
109
- new_data = Squib::DataFrame.new
110
- data.each do |col, arr|
111
- new_data[col] = []
112
- qtys.each_with_index do |qty, index|
113
- qty.to_i.times { new_data[col] << arr[index] }
114
- end
115
- end
116
- return new_data
117
- end
118
- module_function :explode_quantities
119
-
120
- class Deck
121
-
122
- # DSL method. See http://squib.readthedocs.io
123
- def xlsx(opts = {})
124
- Squib.xlsx(opts)
125
- end
126
-
127
- # DSL method. See http://squib.readthedocs.io
128
- def csv(opts = {})
129
- Squib.csv(opts)
130
- end
131
-
132
- # DSL method. See http://squib.readthedocs.io
133
- def yaml(opts = {})
134
- Squib.yaml(opts)
135
- end
136
- end
137
- end
1
+ require 'roo'
2
+ require 'csv'
3
+ require 'yaml'
4
+ require_relative '../args/input_file'
5
+ require_relative '../args/import'
6
+ require_relative '../args/csv_opts'
7
+ require_relative '../import/data_frame'
8
+
9
+ module Squib
10
+
11
+ # DSL method. See http://squib.readthedocs.io
12
+ def xlsx(opts = {})
13
+ input = Args::InputFile.new(file: 'deck.xlsx').load!(opts)
14
+ import = Args::Import.new.load!(opts)
15
+ s = Roo::Excelx.new(input.file[0])
16
+ s.default_sheet = s.sheets[input.sheet[0]]
17
+ data = Squib::DataFrame.new
18
+ s.first_column.upto(s.last_column) do |col|
19
+ header = s.cell(s.first_row, col).to_s
20
+ header.strip! if import.strip?
21
+ data[header] = []
22
+ (s.first_row + 1).upto(s.last_row) do |row|
23
+ cell = s.cell(row, col)
24
+ # Roo hack for avoiding unnecessary .0's on whole integers (https://github.com/roo-rb/roo/issues/139)
25
+ cell = s.excelx_value(row, col) if s.excelx_type(row, col) == [:numeric_or_formula, 'General']
26
+ cell.strip! if cell.respond_to?(:strip) && import.strip?
27
+ cell = yield(header, cell) if block_given?
28
+ data[header] << cell
29
+ end# row
30
+ end# col
31
+ explode_quantities(data, import.explode)
32
+ end# xlsx
33
+ module_function :xlsx
34
+
35
+ # DSL method. See http://squib.readthedocs.io
36
+ def csv(opts = {})
37
+ # TODO refactor all this out to separate methods, and its own class
38
+ import = Args::Import.new.load!(opts)
39
+ file = Args::InputFile.new(file: 'deck.csv').load!(opts).file[0]
40
+ data = opts.key?(:data) ? opts[:data] : File.read(file)
41
+ csv_opts = Args::CSV_Opts.new(opts)
42
+ table = CSV.parse(data, csv_opts.to_hash)
43
+ check_duplicate_csv_headers(table)
44
+ hash = Squib::DataFrame.new
45
+ table.headers.each do |header|
46
+ new_header = header.to_s
47
+ new_header = new_header.strip if import.strip?
48
+ hash[new_header] ||= table[header]
49
+ end
50
+ if import.strip?
51
+ new_hash = Squib::DataFrame.new
52
+ hash.each do |header, col|
53
+ new_hash[header] = col.map do |str|
54
+ str = str.strip if str.respond_to?(:strip)
55
+ str
56
+ end
57
+ end
58
+ hash = new_hash
59
+ end
60
+ if block_given?
61
+ hash.each do |header, col|
62
+ col.map! do |val|
63
+ yield(header, val)
64
+ end
65
+ end
66
+ end
67
+ return explode_quantities(hash, import.explode)
68
+ end
69
+ module_function :csv
70
+
71
+ # DSL method. See http://squib.readthedocs.io
72
+ def yaml(opts = {})
73
+ input = Args::InputFile.new(file: 'deck.yml').load!(opts)
74
+ import = Args::Import.new.load!(opts)
75
+ yml = YAML.load_file(input.file[0])
76
+ data = Squib::DataFrame.new
77
+ # Get a universal list of keys to ensure everything is covered.
78
+ keys = yml.map { |c| c.keys}.flatten.uniq
79
+ keys.each { |k| data[k] = [] } #init arrays
80
+ yml.each do |card|
81
+ # nil value if key isn't set.
82
+ keys.each { |k| data[k] << card[k] }
83
+ end
84
+ if block_given?
85
+ data.each do |header, col|
86
+ col.map! do |val|
87
+ yield(header, val)
88
+ end
89
+ end
90
+ end
91
+ explode_quantities(data, import.explode)
92
+ end
93
+ module_function :yaml
94
+
95
+ # Check if the given CSV table has duplicate columns, and throw a warning
96
+ # @api private
97
+ def check_duplicate_csv_headers(table)
98
+ if table.headers.size != table.headers.uniq.size
99
+ dups = table.headers.select{|e| table.headers.count(e) > 1 }
100
+ Squib.logger.warn "CSV duplicated the following column keys: #{dups.join(',')}"
101
+ end
102
+ end
103
+ module_function :check_duplicate_csv_headers
104
+
105
+ # @api private
106
+ def explode_quantities(data, qty)
107
+ return data unless data.col? qty.to_s.strip
108
+ qtys = data[qty]
109
+ new_data = Squib::DataFrame.new
110
+ data.each do |col, arr|
111
+ new_data[col] = []
112
+ qtys.each_with_index do |qty, index|
113
+ qty.to_i.times { new_data[col] << arr[index] }
114
+ end
115
+ end
116
+ return new_data
117
+ end
118
+ module_function :explode_quantities
119
+
120
+ class Deck
121
+
122
+ # DSL method. See http://squib.readthedocs.io
123
+ def xlsx(opts = {})
124
+ Squib.xlsx(opts)
125
+ end
126
+
127
+ # DSL method. See http://squib.readthedocs.io
128
+ def csv(opts = {})
129
+ Squib.csv(opts)
130
+ end
131
+
132
+ # DSL method. See http://squib.readthedocs.io
133
+ def yaml(opts = {})
134
+ Squib.yaml(opts)
135
+ end
136
+ end
137
+ end
@@ -1,54 +1,54 @@
1
- require 'set'
2
-
3
- module Squib
4
-
5
- # DSL method. See http://squib.readthedocs.io
6
- def enable_build_globally group
7
- groups = (ENV['SQUIB_BUILD'] ||= '').split(',')
8
- ENV['SQUIB_BUILD'] = (groups << group).uniq.join(',')
9
- end
10
- module_function :enable_build_globally
11
-
12
- # DSL method. See http://squib.readthedocs.io
13
- def disable_build_globally group
14
- groups = (ENV['SQUIB_BUILD'] ||= '').split(',')
15
- groups.delete(group.to_s)
16
- ENV['SQUIB_BUILD'] = groups.uniq.join(',')
17
- end
18
- module_function :disable_build_globally
19
-
20
- class Deck
21
-
22
- # DSL method. See http://squib.readthedocs.io
23
- def build grp = :all, &block
24
- raise 'Please provide a block' unless block_given?
25
- block.yield if build_groups.include? grp
26
- end
27
-
28
- # DSL method. See http://squib.readthedocs.io
29
- def enable_build grp
30
- build_groups # make sure it's initialized
31
- @build_groups << grp
32
- end
33
-
34
- # DSL method. See http://squib.readthedocs.io
35
- def disable_build grp
36
- build_groups # make sure it's initialized
37
- @build_groups.delete grp
38
- end
39
-
40
- # DSL method. See http://squib.readthedocs.io
41
- def build_groups
42
- @build_groups ||= Set.new.add(:all)
43
- end
44
-
45
- # Not a DSL method, but initialized from Deck.new
46
- def enable_groups_from_env!
47
- return if ENV['SQUIB_BUILD'].nil?
48
- ENV['SQUIB_BUILD'].split(',').each do |grp|
49
- enable_build grp.strip.to_sym
50
- end
51
- end
52
-
53
- end
54
- end
1
+ require 'set'
2
+
3
+ module Squib
4
+
5
+ # DSL method. See http://squib.readthedocs.io
6
+ def enable_build_globally group
7
+ groups = (ENV['SQUIB_BUILD'] ||= '').split(',')
8
+ ENV['SQUIB_BUILD'] = (groups << group).uniq.join(',')
9
+ end
10
+ module_function :enable_build_globally
11
+
12
+ # DSL method. See http://squib.readthedocs.io
13
+ def disable_build_globally group
14
+ groups = (ENV['SQUIB_BUILD'] ||= '').split(',')
15
+ groups.delete(group.to_s)
16
+ ENV['SQUIB_BUILD'] = groups.uniq.join(',')
17
+ end
18
+ module_function :disable_build_globally
19
+
20
+ class Deck
21
+
22
+ # DSL method. See http://squib.readthedocs.io
23
+ def build grp = :all, &block
24
+ raise 'Please provide a block' unless block_given?
25
+ block.yield if build_groups.include? grp
26
+ end
27
+
28
+ # DSL method. See http://squib.readthedocs.io
29
+ def enable_build grp
30
+ build_groups # make sure it's initialized
31
+ @build_groups << grp
32
+ end
33
+
34
+ # DSL method. See http://squib.readthedocs.io
35
+ def disable_build grp
36
+ build_groups # make sure it's initialized
37
+ @build_groups.delete grp
38
+ end
39
+
40
+ # DSL method. See http://squib.readthedocs.io
41
+ def build_groups
42
+ @build_groups ||= Set.new.add(:all)
43
+ end
44
+
45
+ # Not a DSL method, but initialized from Deck.new
46
+ def enable_groups_from_env!
47
+ return if ENV['SQUIB_BUILD'].nil?
48
+ ENV['SQUIB_BUILD'].split(',').each do |grp|
49
+ enable_build grp.strip.to_sym
50
+ end
51
+ end
52
+
53
+ end
54
+ end