squib 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
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: