squib 0.0.5 → 0.0.6

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 (66) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +3 -1
  3. data/CHANGELOG.md +10 -0
  4. data/README.md +65 -4
  5. data/lib/squib/api/data.rb +48 -1
  6. data/lib/squib/api/text.rb +4 -2
  7. data/lib/squib/deck.rb +22 -5
  8. data/lib/squib/graphics/text.rb +4 -0
  9. data/lib/squib/layouts/hand.yml +46 -0
  10. data/lib/squib/layouts/playing-card.yml +18 -0
  11. data/lib/squib/version.rb +1 -1
  12. data/samples/cairo_access.rb +4 -3
  13. data/samples/csv_import.rb +20 -0
  14. data/samples/custom-layout.yml +5 -4
  15. data/samples/custom-layout2.yml +15 -0
  16. data/samples/custom_config.rb +0 -1
  17. data/samples/excel.rb +1 -2
  18. data/samples/layouts.rb +61 -0
  19. data/samples/ranges.rb +0 -1
  20. data/samples/sample.csv +3 -0
  21. data/samples/text_options.rb +14 -3
  22. data/samples/tgc_proofs.rb +0 -1
  23. data/samples/units.rb +1 -1
  24. data/spec/api/api_data_spec.rb +31 -0
  25. data/spec/api/api_image_spec.rb +38 -0
  26. data/spec/data/csv/basic.csv +3 -0
  27. data/spec/data/csv/dup_cols.csv +3 -0
  28. data/spec/data/csv/with_spaces.csv +3 -0
  29. data/spec/data/{easy-circular-extends.yml → layouts/easy-circular-extends.yml} +0 -0
  30. data/spec/data/{hard-circular-extends.yml → layouts/hard-circular-extends.yml} +0 -0
  31. data/spec/data/{multi-extends-single-entry.yml → layouts/multi-extends-single-entry.yml} +0 -0
  32. data/spec/data/{multi-level-extends.yml → layouts/multi-level-extends.yml} +0 -0
  33. data/spec/data/layouts/multifile-a.yml +4 -0
  34. data/spec/data/layouts/multifile-b.yml +4 -0
  35. data/spec/data/layouts/multifile-extends-a.yml +8 -0
  36. data/spec/data/layouts/multifile-extends-b.yml +9 -0
  37. data/spec/data/{no-extends.yml → layouts/no-extends.yml} +0 -0
  38. data/spec/data/{pre-extends.yml → layouts/pre-extends.yml} +0 -0
  39. data/spec/data/{self-circular-extends.yml → layouts/self-circular-extends.yml} +0 -0
  40. data/spec/data/{single-extends.yml → layouts/single-extends.yml} +0 -0
  41. data/spec/data/{single-level-multi-extends.yml → layouts/single-level-multi-extends.yml} +0 -0
  42. data/spec/data/samples/autoscale_font.rb.txt +81 -0
  43. data/spec/data/samples/basic.rb.txt +206 -0
  44. data/spec/data/samples/cairo_access.rb.txt +25 -0
  45. data/spec/data/samples/colors.rb.txt +124 -0
  46. data/spec/data/samples/csv_import.rb.txt +112 -0
  47. data/spec/data/samples/custom_config.rb.txt +45 -0
  48. data/spec/data/samples/draw_shapes.rb.txt +35 -0
  49. data/spec/data/samples/excel.rb.txt +168 -0
  50. data/spec/data/samples/hello_world.rb.txt +36 -0
  51. data/spec/data/samples/layouts.rb.txt +489 -0
  52. data/spec/data/samples/load_images.rb.txt +104 -0
  53. data/spec/data/samples/portrait-landscape.rb.txt +49 -0
  54. data/spec/data/samples/ranges.rb.txt +426 -0
  55. data/spec/data/samples/save_pdf.rb.txt +545 -0
  56. data/spec/data/samples/text_options.rb.txt +819 -0
  57. data/spec/data/samples/tgc_proofs.rb.txt +81 -0
  58. data/spec/data/samples/units.rb.txt +14 -0
  59. data/spec/deck_spec.rb +33 -9
  60. data/spec/graphics/graphics_text_spec.rb +7 -5
  61. data/spec/samples/samples_regression_spec.rb +73 -0
  62. data/spec/spec_helper.rb +64 -2
  63. data/squib.gemspec +2 -2
  64. metadata +100 -27
  65. data/samples/use_layout.rb +0 -34
  66. data/spec/samples_run_spec.rb +0 -20
@@ -0,0 +1,81 @@
1
+ cairo: save([])
2
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=1.0, @green=1.0, @blue=1.0>])
3
+ cairo: paint([])
4
+ cairo: restore([])
5
+ cairo: save([])
6
+ cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
7
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
8
+ cairo: set_line_width([2.0])
9
+ cairo: stroke([])
10
+ cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
11
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=0.0, @red=0.0, @green=0.0, @blue=0.0>])
12
+ cairo: fill([])
13
+ cairo: restore([])
14
+ cairo: save([])
15
+ cairo: rounded_rectangle([75, 75, 128, 128, 25, 25])
16
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
17
+ cairo: set_line_width([2.0])
18
+ cairo: stroke([])
19
+ cairo: rounded_rectangle([75, 75, 128, 128, 25, 25])
20
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=0.0, @red=0.0, @green=0.0, @blue=0.0>])
21
+ cairo: fill([])
22
+ cairo: restore([])
23
+ cairo: save([])
24
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
25
+ cairo: translate([220, 78])
26
+ cairo: rotate([0])
27
+ cairo: translate([-220, -78])
28
+ cairo: move_to([220, 78])
29
+ pango: font_description=([])
30
+ pango: text=(["Mastermind"])
31
+ pango: wrap=([#<Pango::Layout::WrapMode word-char>])
32
+ pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
33
+ pango: alignment=([#<Pango::Layout::Alignment left>])
34
+ pango: justify=([false])
35
+ pango: spacing=([0])
36
+ cairo: update_pango_layout([MockDouble])
37
+ cairo: update_pango_layout([MockDouble])
38
+ cairo: show_pango_layout([MockDouble])
39
+ cairo: restore([])
40
+ cairo: save([])
41
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
42
+ cairo: translate([75, 85])
43
+ cairo: rotate([0])
44
+ cairo: translate([-75, -85])
45
+ cairo: move_to([75, 85])
46
+ pango: font_description=([])
47
+ pango: text=(["3"])
48
+ pango: width=([131072])
49
+ pango: wrap=([#<Pango::Layout::WrapMode word-char>])
50
+ pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
51
+ pango: alignment=([#<Pango::Layout::Alignment center>])
52
+ pango: justify=([false])
53
+ pango: spacing=([0])
54
+ cairo: update_pango_layout([MockDouble])
55
+ cairo: update_pango_layout([MockDouble])
56
+ cairo: show_pango_layout([MockDouble])
57
+ cairo: restore([])
58
+ cairo: save([])
59
+ cairo: translate([620, 75])
60
+ cairo: rotate([0])
61
+ cairo: translate([-620, -75])
62
+ cairo: set_source([ImageSurface, 620, 75])
63
+ cairo: paint([1.0])
64
+ cairo: restore([])
65
+ cairo: scale([1.0, 1.0])
66
+ cairo: render_rsvg_handle([RSVG::Handle, nil])
67
+ cairo: save([])
68
+ cairo: translate([620, 218])
69
+ cairo: rotate([0])
70
+ cairo: translate([-620, -218])
71
+ cairo: set_source([MockDouble, 620, 218])
72
+ cairo: paint([1.0])
73
+ cairo: restore([])
74
+ cairo: save([])
75
+ cairo: translate([0, 0])
76
+ cairo: rotate([0])
77
+ cairo: translate([0, 0])
78
+ cairo: set_source([ImageSurface, 0, 0])
79
+ cairo: paint([0.5])
80
+ cairo: restore([])
81
+ surface: write_to_png(["_output/tgc_sample_0.png"])
@@ -0,0 +1,14 @@
1
+ cairo: save([])
2
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=1.0, @green=1.0, @blue=1.0>])
3
+ cairo: paint([])
4
+ cairo: restore([])
5
+ cairo: save([])
6
+ cairo: rounded_rectangle([37.5, 37.5, 750.0, 1050.0, 25, 25])
7
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
8
+ cairo: set_line_width([2.0])
9
+ cairo: stroke([])
10
+ cairo: rounded_rectangle([37.5, 37.5, 750.0, 1050.0, 25, 25])
11
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=0.0, @red=0.0, @green=0.0, @blue=0.0>])
12
+ cairo: fill([])
13
+ cairo: restore([])
14
+ surface: write_to_png(["_output/units_0.png"])
data/spec/deck_spec.rb CHANGED
@@ -48,7 +48,7 @@ describe Squib::Deck do
48
48
  context '#load_layout' do
49
49
 
50
50
  it 'loads a normal layout with no extends' do
51
- d = Squib::Deck.new(layout: test_file('no-extends.yml'))
51
+ d = Squib::Deck.new(layout: layout_file('no-extends.yml'))
52
52
  expect(d.layout).to \
53
53
  eq({'frame' => {
54
54
  'x' => 38,
@@ -61,7 +61,7 @@ describe Squib::Deck do
61
61
  end
62
62
 
63
63
  it 'loads with a single extends' do
64
- d = Squib::Deck.new(layout: test_file('single-extends.yml'))
64
+ d = Squib::Deck.new(layout: layout_file('single-extends.yml'))
65
65
  expect(d.layout).to \
66
66
  eq({'frame' => {
67
67
  'x' => 38,
@@ -78,7 +78,7 @@ describe Squib::Deck do
78
78
  end
79
79
 
80
80
  it 'applies the extends regardless of order' do
81
- d = Squib::Deck.new(layout: test_file('pre-extends.yml'))
81
+ d = Squib::Deck.new(layout: layout_file('pre-extends.yml'))
82
82
  expect(d.layout).to \
83
83
  eq({'frame' => {
84
84
  'x' => 38,
@@ -95,7 +95,7 @@ describe Squib::Deck do
95
95
  end
96
96
 
97
97
  it 'applies the single-level extends multiple times' do
98
- d = Squib::Deck.new(layout: test_file('single-level-multi-extends.yml'))
98
+ d = Squib::Deck.new(layout: layout_file('single-level-multi-extends.yml'))
99
99
  expect(d.layout).to \
100
100
  eq({'frame' => {
101
101
  'x' => 38,
@@ -118,7 +118,7 @@ describe Squib::Deck do
118
118
  end
119
119
 
120
120
  it 'applies multiple extends in a single rule' do
121
- d = Squib::Deck.new(layout: test_file('multi-extends-single-entry.yml'))
121
+ d = Squib::Deck.new(layout: layout_file('multi-extends-single-entry.yml'))
122
122
  expect(d.layout).to \
123
123
  eq({'aunt' => {
124
124
  'a' => 101,
@@ -143,7 +143,7 @@ describe Squib::Deck do
143
143
  end
144
144
 
145
145
  it 'applies multi-level extends' do
146
- d = Squib::Deck.new(layout: test_file('multi-level-extends.yml'))
146
+ d = Squib::Deck.new(layout: layout_file('multi-level-extends.yml'))
147
147
  expect(d.layout).to \
148
148
  eq({'frame' => {
149
149
  'x' => 38,
@@ -166,23 +166,47 @@ describe Squib::Deck do
166
166
  end
167
167
 
168
168
  it 'fails on a self-circular extends' do
169
- file = test_file('self-circular-extends.yml')
169
+ file = layout_file('self-circular-extends.yml')
170
170
  expect { Squib::Deck.new(layout: file) }.to \
171
171
  raise_error(RuntimeError, 'Invalid layout: circular extends with \'a\'')
172
172
  end
173
173
 
174
174
  it 'fails on a easy-circular extends' do
175
- file = test_file('easy-circular-extends.yml')
175
+ file = layout_file('easy-circular-extends.yml')
176
176
  expect { Squib::Deck.new(layout: file) }.to \
177
177
  raise_error(RuntimeError, 'Invalid layout: circular extends with \'a\'')
178
178
  end
179
179
 
180
180
  it 'hard on a easy-circular extends' do
181
- file = test_file('hard-circular-extends.yml')
181
+ file = layout_file('hard-circular-extends.yml')
182
182
  expect { Squib::Deck.new(layout: file) }.to \
183
183
  raise_error(RuntimeError, 'Invalid layout: circular extends with \'a\'')
184
184
  end
185
185
 
186
+ it 'redefines keys on multiple layouts' do
187
+ a = layout_file('multifile-a.yml')
188
+ b = layout_file('multifile-b.yml')
189
+ d = Squib::Deck.new(layout: [a, b])
190
+ expect(d.layout).to eq({
191
+ 'title' => { 'x' => 300 },
192
+ 'subtitle' => { 'x' => 200 },
193
+ 'desc' => { 'x' => 400 }
194
+ })
195
+ end
196
+
197
+ it 'evaluates extends on each file first' do
198
+ a = layout_file('multifile-extends-a.yml')
199
+ b = layout_file('multifile-extends-b.yml')
200
+ d = Squib::Deck.new(layout: [a, b])
201
+ expect(d.layout).to eq({
202
+ 'grandparent' => { 'x' => 100 },
203
+ 'parent_a' => { 'x' => 110, 'extends' => 'grandparent' },
204
+ 'parent_b' => { 'x' => 130, 'extends' => 'grandparent' },
205
+ 'child_a' => { 'x' => 113, 'extends' => 'parent_a' },
206
+ 'child_b' => { 'x' => 133, 'extends' => 'parent_b' }
207
+ })
208
+ end
209
+
186
210
  end
187
211
 
188
212
  end
@@ -13,6 +13,7 @@ describe Squib::Card, '#text' do
13
13
 
14
14
  it 'make all the expected calls on a smoke test' do
15
15
  mock_squib_logger(@old_logger) do
16
+ extent = Pango::Rectangle.new(50,60,100,200)
16
17
  expect(Squib.logger).to receive(:debug).once
17
18
  expect(@context).to receive(:save).once
18
19
  expect(@context).to receive(:set_source_color).once
@@ -31,7 +32,7 @@ describe Squib::Card, '#text' do
31
32
  expect(@layout).to receive(:spacing=).with(1.0 * Pango::SCALE).once
32
33
  expect(@context).to receive(:update_pango_layout).once
33
34
  expect(@layout).to receive(:height).once.and_return(25)
34
- expect(@layout).to receive(:extents).once.and_return([0,0])
35
+ expect(@layout).to receive(:extents).thrice.and_return([nil,extent])
35
36
  expect(@context).to receive(:update_pango_layout).once
36
37
  expect(@context).to receive(:show_pango_layout).once
37
38
  expect(@context).to receive(:restore).once
@@ -41,10 +42,11 @@ describe Squib::Card, '#text' do
41
42
  # x, y, width, height,
42
43
  # markup, justify, wrap, ellipsize,
43
44
  # spacing, align, valign, hint, angle)
44
- card.text('foo', 'Sans 12', nil, '#abc',
45
- 10, 15, 20, 25,
46
- nil, false, false, false,
47
- 1.0, :left, :top, nil, 0.0)
45
+ ret = card.text('foo', 'Sans 12', nil, '#abc',
46
+ 10, 15, 20, 25,
47
+ nil, false, false, false,
48
+ 1.0, :left, :top, nil, 0.0)
49
+ expect(ret).to eq({width: 0, height: 0})
48
50
  end
49
51
  end
50
52
  end
@@ -0,0 +1,73 @@
1
+ require 'spec_helper'
2
+ require 'squib'
3
+ require 'pp'
4
+
5
+ describe "Squib samples" do
6
+ let(:samples_dir) { "#{File.expand_path(File.dirname(__FILE__))}/../../samples/" }
7
+
8
+ around(:each) do |example|
9
+ Dir.chdir(samples_dir) do
10
+ example.run
11
+ end
12
+ end
13
+
14
+ it 'should execute with no errors' do
15
+ allow(ProgressBar).to receive(:create).and_return(Squib::DoNothing.new)
16
+ Dir["#{samples_dir}/**/*.rb"].each do |sample|
17
+ load sample
18
+ end
19
+ end
20
+
21
+ # This test could use some explanation
22
+ # Much of the development of Squib has been sample-driven. Every time I want
23
+ # new syntax or feature, I write a sample, get it working, and then write
24
+ # tests for boundary cases in the unit tests.
25
+ #
26
+ # This makes documentation much easier and example-driven.
27
+ # ...but I want to use those samples for regression & integration tests too.
28
+ #
29
+ # The above test is a good smoke test, but it just looks for exceptions.
30
+ # What this set of tests do is run the samples again, but mocking out Cairo,
31
+ # Pango, RSVG, and any other dependencies. We log those API calls and store
32
+ # them in a super-verbose string. We compare our runs against what happened
33
+ # before.
34
+ #
35
+ # Thus, if we ever change anything that results in a ANY change to our
36
+ # regression logs, then these tests will fail. If it's SURPRISING, then we
37
+ # caught an integration bug. If it's not, just update and overwrite the logs.
38
+ #
39
+ # So it's understood that you should have to periodically enable the
40
+ # overwrite_sample method below to store the new regression log. Just make
41
+ # sure you inspect the change and make sure it makes sense with the change
42
+ # you made to the samples or Squib.
43
+ # FOR NOW!! These two I can't get working on Travis, so I'm disabling
44
+ # Has to do with UTF-8 encoding of a special characters
45
+ # layouts.rb
46
+ # text_options.rb
47
+ %w( hello_world.rb
48
+ autoscale_font.rb
49
+ save_pdf.rb
50
+ custom_config.rb
51
+ load_images.rb
52
+ basic.rb
53
+ cairo_access.rb
54
+ draw_shapes.rb
55
+ colors.rb
56
+ excel.rb
57
+ csv_import.rb
58
+ portrait-landscape.rb
59
+ tgc_proofs.rb
60
+ ranges.rb
61
+ units.rb
62
+ ).each do |sample|
63
+ it "has not changed for #{sample}" do
64
+ log = StringIO.new
65
+ mock_cairo(log)
66
+ load sample
67
+ # overwrite_sample(sample, log) # Use TEMPORARILY once happy with the new sample log
68
+ test_file_str = File.open(sample_regression_file(sample), 'r:UTF-8').read
69
+ expect(log.string).to eq(test_file_str)
70
+ end
71
+ end
72
+
73
+ end
data/spec/spec_helper.rb CHANGED
@@ -15,8 +15,70 @@ RSpec.configure do |config|
15
15
  end
16
16
  end
17
17
 
18
- def test_file(str)
19
- "#{File.expand_path(File.dirname(__FILE__))}/data/#{str}"
18
+ def layout_file(str)
19
+ "#{File.expand_path(File.dirname(__FILE__))}/data/layouts/#{str}"
20
+ end
21
+
22
+ def sample_file(file)
23
+ "#{File.expand_path(File.dirname(__FILE__))}/../samples/#{file}"
24
+ end
25
+
26
+ def sample_regression_file(file)
27
+ "#{File.expand_path(File.dirname(__FILE__))}/data/samples/#{file}.txt"
28
+ end
29
+
30
+ def csv_file(file)
31
+ "#{File.expand_path(File.dirname(__FILE__))}/data/csv/#{file}"
32
+ end
33
+
34
+ def overwrite_sample(sample_name, log)
35
+ # Use this to overwrite the regression with current state
36
+ File.open(sample_regression_file(sample_name), 'w+:UTF-8') do |f|
37
+ f.write(log.string)
38
+ end
39
+ end
40
+
41
+ def scrub_hex(str)
42
+ str.gsub(/0x\w{1,8}/,'')
43
+ .gsub(/ptr=\w{1,8}/,'')
44
+ .gsub(/#<Pango::FontDescription:.*>/,'')
45
+ .gsub(/#<Cairo::ImageSurface:.*>/,'ImageSurface')
46
+ .gsub(/#<RSVG::Handle.*>/,'RSVG::Handle')
47
+ .gsub(/#<RSpec::Mocks::Double:.*>/,'MockDouble')
48
+ .gsub(/RGB:\w{1,8}/,'RGB:')
49
+ end
50
+
51
+ # Build a mock cairo instance that allows basically any method
52
+ # and logs that call to the string buffer
53
+ def mock_cairo(strio)
54
+ cxt = double(Cairo::Context)
55
+ surface = double(Cairo::ImageSurface)
56
+ pango = double(Pango::Layout)
57
+ allow(ProgressBar).to receive(:create).and_return(Squib::DoNothing.new)
58
+ allow(Cairo::ImageSurface).to receive(:new).and_return(surface)
59
+ allow(surface).to receive(:width).and_return(100)
60
+ allow(Cairo::Context).to receive(:new).and_return(cxt)
61
+ allow(cxt).to receive(:create_pango_layout).and_return(pango)
62
+ allow(cxt).to receive(:target).and_return(surface)
63
+ allow(pango).to receive(:height).and_return(25)
64
+ allow(pango).to receive(:width).and_return(25)
65
+ allow(pango).to receive(:extents).and_return([Pango::Rectangle.new(0,0,0,0)]*2)
66
+
67
+ %w(save set_source_color paint restore translate rotate move_to
68
+ update_pango_layout width height show_pango_layout rounded_rectangle
69
+ set_line_width stroke fill set_source scale render_rsvg_handle circle
70
+ triangle line_to operator= show_page).each do |m|
71
+ allow(cxt).to receive(m) { |*args| strio << scrub_hex("cairo: #{m}(#{args})\n") }
72
+ end
73
+
74
+ %w(font_description= text= width= height= wrap= ellipsize= alignment=
75
+ justify= spacing= markup=).each do |m|
76
+ allow(pango).to receive(m) {|*args| strio << scrub_hex("pango: #{m}(#{args})\n") }
77
+ end
78
+
79
+ %w(write_to_png).each do |m|
80
+ allow(surface).to receive(m) { |*args| strio << scrub_hex("surface: #{m}(#{args})\n") }
81
+ end
20
82
  end
21
83
 
22
84
  # Refine Squib to allow setting the logger and progress bar
data/squib.gemspec CHANGED
@@ -20,14 +20,14 @@ Gem::Specification.new do |spec|
20
20
  spec.homepage = 'https://github.com/andymeneely/squib'
21
21
 
22
22
  spec.rdoc_options = ['--charset=UTF-8']
23
- spec.extra_rdoc_files = %w(README.md LICENSE.txt)
23
+ spec.extra_rdoc_files = Dir['README.md', 'samples/**/*.rb']
24
24
 
25
25
  spec.files = `git ls-files -z`.split("\x0")
26
26
  spec.executables = spec.files.grep(/^bin\//) { |f| File.basename(f) }
27
27
  spec.test_files = spec.files.grep(/^(test|spec|features)\//)
28
28
  spec.require_paths = ['lib']
29
29
 
30
- spec.add_runtime_dependency 'cairo', '~> 1.12.9'
30
+ spec.add_runtime_dependency 'cairo', '~> 1.14.0'
31
31
  spec.add_runtime_dependency 'pango', '~> 2.2.0'
32
32
  spec.add_runtime_dependency 'roo', '~> 1.13.2'
33
33
  spec.add_runtime_dependency 'rsvg2', '~> 2.2.0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: squib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Meneely
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-04 00:00:00.000000000 Z
11
+ date: 2014-12-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cairo
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: 1.12.9
19
+ version: 1.14.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: 1.12.9
26
+ version: 1.14.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: pango
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -213,7 +213,23 @@ executables:
213
213
  extensions: []
214
214
  extra_rdoc_files:
215
215
  - README.md
216
- - LICENSE.txt
216
+ - samples/autoscale_font.rb
217
+ - samples/basic.rb
218
+ - samples/cairo_access.rb
219
+ - samples/colors.rb
220
+ - samples/csv_import.rb
221
+ - samples/custom_config.rb
222
+ - samples/draw_shapes.rb
223
+ - samples/excel.rb
224
+ - samples/hello_world.rb
225
+ - samples/layouts.rb
226
+ - samples/load_images.rb
227
+ - samples/portrait-landscape.rb
228
+ - samples/ranges.rb
229
+ - samples/save_pdf.rb
230
+ - samples/text_options.rb
231
+ - samples/tgc_proofs.rb
232
+ - samples/units.rb
217
233
  files:
218
234
  - .gitignore
219
235
  - .travis.yml
@@ -244,6 +260,8 @@ files:
244
260
  - lib/squib/graphics/shapes.rb
245
261
  - lib/squib/graphics/text.rb
246
262
  - lib/squib/input_helpers.rb
263
+ - lib/squib/layouts/hand.yml
264
+ - lib/squib/layouts/playing-card.yml
247
265
  - lib/squib/progress.rb
248
266
  - lib/squib/project_template/.gitignore
249
267
  - lib/squib/project_template/ABOUT.md
@@ -260,8 +278,10 @@ files:
260
278
  - samples/basic.rb
261
279
  - samples/cairo_access.rb
262
280
  - samples/colors.rb
281
+ - samples/csv_import.rb
263
282
  - samples/custom-config.yml
264
283
  - samples/custom-layout.yml
284
+ - samples/custom-layout2.yml
265
285
  - samples/custom_config.rb
266
286
  - samples/customconfig-imgdir/shiny-purse2.png
267
287
  - samples/customconfig-imgdir/spanner2.svg
@@ -269,11 +289,13 @@ files:
269
289
  - samples/excel.rb
270
290
  - samples/grit.png
271
291
  - samples/hello_world.rb
292
+ - samples/layouts.rb
272
293
  - samples/load_images.rb
273
294
  - samples/offset.svg
274
295
  - samples/pokercard.png
275
296
  - samples/portrait-landscape.rb
276
297
  - samples/ranges.rb
298
+ - samples/sample.csv
277
299
  - samples/sample.xlsx
278
300
  - samples/save_pdf.rb
279
301
  - samples/shiny-purse.png
@@ -281,25 +303,50 @@ files:
281
303
  - samples/text_options.rb
282
304
  - samples/tgc_proofs.rb
283
305
  - samples/units.rb
284
- - samples/use_layout.rb
306
+ - spec/api/api_data_spec.rb
307
+ - spec/api/api_image_spec.rb
285
308
  - spec/api/api_text_spec.rb
286
309
  - spec/commands/new_spec.rb
287
- - spec/data/easy-circular-extends.yml
288
- - spec/data/hard-circular-extends.yml
289
- - spec/data/multi-extends-single-entry.yml
290
- - spec/data/multi-level-extends.yml
291
- - spec/data/no-extends.yml
292
- - spec/data/pre-extends.yml
293
- - spec/data/self-circular-extends.yml
294
- - spec/data/single-extends.yml
295
- - spec/data/single-level-multi-extends.yml
310
+ - spec/data/csv/basic.csv
311
+ - spec/data/csv/dup_cols.csv
312
+ - spec/data/csv/with_spaces.csv
313
+ - spec/data/layouts/easy-circular-extends.yml
314
+ - spec/data/layouts/hard-circular-extends.yml
315
+ - spec/data/layouts/multi-extends-single-entry.yml
316
+ - spec/data/layouts/multi-level-extends.yml
317
+ - spec/data/layouts/multifile-a.yml
318
+ - spec/data/layouts/multifile-b.yml
319
+ - spec/data/layouts/multifile-extends-a.yml
320
+ - spec/data/layouts/multifile-extends-b.yml
321
+ - spec/data/layouts/no-extends.yml
322
+ - spec/data/layouts/pre-extends.yml
323
+ - spec/data/layouts/self-circular-extends.yml
324
+ - spec/data/layouts/single-extends.yml
325
+ - spec/data/layouts/single-level-multi-extends.yml
326
+ - spec/data/samples/autoscale_font.rb.txt
327
+ - spec/data/samples/basic.rb.txt
328
+ - spec/data/samples/cairo_access.rb.txt
329
+ - spec/data/samples/colors.rb.txt
330
+ - spec/data/samples/csv_import.rb.txt
331
+ - spec/data/samples/custom_config.rb.txt
332
+ - spec/data/samples/draw_shapes.rb.txt
333
+ - spec/data/samples/excel.rb.txt
334
+ - spec/data/samples/hello_world.rb.txt
335
+ - spec/data/samples/layouts.rb.txt
336
+ - spec/data/samples/load_images.rb.txt
337
+ - spec/data/samples/portrait-landscape.rb.txt
338
+ - spec/data/samples/ranges.rb.txt
339
+ - spec/data/samples/save_pdf.rb.txt
340
+ - spec/data/samples/text_options.rb.txt
341
+ - spec/data/samples/tgc_proofs.rb.txt
342
+ - spec/data/samples/units.rb.txt
296
343
  - spec/deck_spec.rb
297
344
  - spec/graphics/graphics_images_spec.rb
298
345
  - spec/graphics/graphics_save_doc_spec.rb
299
346
  - spec/graphics/graphics_shapes_spec.rb
300
347
  - spec/graphics/graphics_text_spec.rb
301
348
  - spec/input_helpers_spec.rb
302
- - spec/samples_run_spec.rb
349
+ - spec/samples/samples_regression_spec.rb
303
350
  - spec/spec_helper.rb
304
351
  - squib.gemspec
305
352
  homepage: https://github.com/andymeneely/squib
@@ -323,28 +370,54 @@ required_rubygems_version: !ruby/object:Gem::Requirement
323
370
  version: '0'
324
371
  requirements: []
325
372
  rubyforge_project:
326
- rubygems_version: 2.0.14
373
+ rubygems_version: 2.4.5
327
374
  signing_key:
328
375
  specification_version: 2
329
376
  summary: A Ruby DSL for prototyping card games
330
377
  test_files:
378
+ - spec/api/api_data_spec.rb
379
+ - spec/api/api_image_spec.rb
331
380
  - spec/api/api_text_spec.rb
332
381
  - spec/commands/new_spec.rb
333
- - spec/data/easy-circular-extends.yml
334
- - spec/data/hard-circular-extends.yml
335
- - spec/data/multi-extends-single-entry.yml
336
- - spec/data/multi-level-extends.yml
337
- - spec/data/no-extends.yml
338
- - spec/data/pre-extends.yml
339
- - spec/data/self-circular-extends.yml
340
- - spec/data/single-extends.yml
341
- - spec/data/single-level-multi-extends.yml
382
+ - spec/data/csv/basic.csv
383
+ - spec/data/csv/dup_cols.csv
384
+ - spec/data/csv/with_spaces.csv
385
+ - spec/data/layouts/easy-circular-extends.yml
386
+ - spec/data/layouts/hard-circular-extends.yml
387
+ - spec/data/layouts/multi-extends-single-entry.yml
388
+ - spec/data/layouts/multi-level-extends.yml
389
+ - spec/data/layouts/multifile-a.yml
390
+ - spec/data/layouts/multifile-b.yml
391
+ - spec/data/layouts/multifile-extends-a.yml
392
+ - spec/data/layouts/multifile-extends-b.yml
393
+ - spec/data/layouts/no-extends.yml
394
+ - spec/data/layouts/pre-extends.yml
395
+ - spec/data/layouts/self-circular-extends.yml
396
+ - spec/data/layouts/single-extends.yml
397
+ - spec/data/layouts/single-level-multi-extends.yml
398
+ - spec/data/samples/autoscale_font.rb.txt
399
+ - spec/data/samples/basic.rb.txt
400
+ - spec/data/samples/cairo_access.rb.txt
401
+ - spec/data/samples/colors.rb.txt
402
+ - spec/data/samples/csv_import.rb.txt
403
+ - spec/data/samples/custom_config.rb.txt
404
+ - spec/data/samples/draw_shapes.rb.txt
405
+ - spec/data/samples/excel.rb.txt
406
+ - spec/data/samples/hello_world.rb.txt
407
+ - spec/data/samples/layouts.rb.txt
408
+ - spec/data/samples/load_images.rb.txt
409
+ - spec/data/samples/portrait-landscape.rb.txt
410
+ - spec/data/samples/ranges.rb.txt
411
+ - spec/data/samples/save_pdf.rb.txt
412
+ - spec/data/samples/text_options.rb.txt
413
+ - spec/data/samples/tgc_proofs.rb.txt
414
+ - spec/data/samples/units.rb.txt
342
415
  - spec/deck_spec.rb
343
416
  - spec/graphics/graphics_images_spec.rb
344
417
  - spec/graphics/graphics_save_doc_spec.rb
345
418
  - spec/graphics/graphics_shapes_spec.rb
346
419
  - spec/graphics/graphics_text_spec.rb
347
420
  - spec/input_helpers_spec.rb
348
- - spec/samples_run_spec.rb
421
+ - spec/samples/samples_regression_spec.rb
349
422
  - spec/spec_helper.rb
350
423
  has_rdoc: