squib 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3977769e38bdf72d2dd035c62648b2ffaae2085c
4
+ data.tar.gz: e9d8ad1586160caee1be3d2b497ab9c71daa56b2
5
+ SHA512:
6
+ metadata.gz: e8238d6b6e236a22a2bd164712771b9366f20e3d4d04101b0992d2517d666bd0e6cd8996c8ba24aeb56133b2d30b405ba37fd26a44f8d5b3017b1146bde63ad1
7
+ data.tar.gz: 4593d6fae7feac75dab22efa560042c7fc932f1b056d029ef53464bac21a1a2bda6a711336ef358c831de33930344251380975e66f16c73a1f1f8c1447191c0b
@@ -0,0 +1,26 @@
1
+ .DS_Store
2
+ *.gem
3
+ *.rbc
4
+ .bundle
5
+ .config
6
+ .yardoc
7
+ Gemfile.lock
8
+ InstalledFiles
9
+ _yardoc
10
+ coverage
11
+ doc/
12
+ lib/bundler/man
13
+ pkg
14
+ rdoc
15
+ spec/reports
16
+ test/tmp
17
+ test/version_tmp
18
+ tmp
19
+ *.bundle
20
+ *.so
21
+ *.o
22
+ *.a
23
+ mkmf.log
24
+ _img
25
+ samples/_img
26
+ samples/_output/*.png
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ - 2.1.0
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Andy Meneely
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,55 @@
1
+ [![Gem Version](https://badge.fury.io/rb/squib.svg)](https://rubygems.org/gems/squib)
2
+ [![Build Status](https://secure.travis-ci.org/andymeneely/squib.svg?branch=master)](https://travis-ci.org/andymeneely/squib)
3
+ [![Dependency Status](https://gemnasium.com/andymeneely/squib.svg)](https://gemnasium.com/andymeneely/squib)
4
+
5
+ # Squib
6
+
7
+ Squib is a ruby DSL for prototyping card and board games. Think of it like [nanDeck](http://nandeck.it) done "the Ruby way". Start with some basic commands and generate print-ready PNGs and PDFs.
8
+
9
+ Squib is currently pre-release alpha.
10
+
11
+ ```ruby
12
+ require 'squib'
13
+
14
+ Squib::Deck.new(width: 825, height: 1125, cards: 3) do
15
+ background color: [1.0,1.0,1.0]
16
+ data = xlsx file: 'sample.xlsx'
17
+
18
+ rect x: 15, y: 15, width: 795, height: 1095, x_radius: 50, y_radius: 50
19
+
20
+ text str: data['name'], x: 250, y: 55, font: 'Arial 54'
21
+ text str: data['level'], x: 65, y: 40, font: 'Arial 72'
22
+
23
+ png file: 'icon.png', x: 665, y: 30
24
+
25
+ save format: :png
26
+ end
27
+ ```
28
+
29
+ ## Installation
30
+
31
+ Add this line to your application's Gemfile:
32
+
33
+ gem 'squib'
34
+
35
+ And then execute:
36
+
37
+ $ bundle
38
+
39
+ Or install it yourself as:
40
+
41
+ $ gem install squib
42
+
43
+ Note: Squib is based on the `cairo` and `pango` extensions, which require at least Ruby 2.0
44
+
45
+ ## API
46
+
47
+ API docs to be written. See the `samples` directory.
48
+
49
+ ## Contributing
50
+
51
+ 1. Fork it ( https://github.com/[my-github-username]/squib/fork )
52
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
53
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
54
+ 4. Push to the branch (`git push origin my-new-feature`)
55
+ 5. Create a new Pull Request
@@ -0,0 +1,6 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env ruby
2
+ require 'squib'
@@ -0,0 +1,2 @@
1
+ require 'squib/deck'
2
+ require 'squib/card'
@@ -0,0 +1,12 @@
1
+ module Squib
2
+ class Deck
3
+ #module API
4
+
5
+ def background(range: :all, color: '#000000')
6
+ range = rangeify(range)
7
+ range.each { |i| @cards[i].background(color) }
8
+ end
9
+
10
+ #end
11
+ end
12
+ end
@@ -0,0 +1,29 @@
1
+ require 'roo'
2
+
3
+ module Squib
4
+ class Deck
5
+
6
+ def csv(file: 'deck.csv', header: true)
7
+ raise 'Not implemented!'
8
+ end
9
+
10
+ def xlsx(file: 'deck.xlsx', sheet: 0)
11
+ s = Roo::Excelx.new(file)
12
+ s.default_sheet = s.sheets.first
13
+ data = {}
14
+ s.first_column.upto(s.last_column) do |col|
15
+ header = s.cell(s.first_row,col).to_s
16
+ data[header] = []
17
+ (s.first_row+1).upto(s.last_row) do |row|
18
+ cell = s.cell(row,col)
19
+ # Roo hack for avoiding unnecessary .0's on whole integers
20
+ cell = s.excelx_value(row,col) if s.excelx_type(row,col) == [:numeric_or_formula, "General"]
21
+ data[header] << cell
22
+ end#row
23
+ end#col
24
+ data
25
+ end#xlsx
26
+
27
+ end
28
+ end
29
+
@@ -0,0 +1,11 @@
1
+ module Squib
2
+ class Deck
3
+
4
+ def png(range=:all, file: nil, x: 0, y: 0)
5
+ range = rangeify(range)
6
+ file = fileify(file)
7
+ range.each{ |i| @cards[i].png(file, x, y) }
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,16 @@
1
+ module Squib
2
+ class Deck
3
+
4
+ def save(range: :all, dir: "_output", format: :png, prefix: "card_")
5
+ format = [format].flatten
6
+ save_png(range: range, dir: dir, prefix: prefix) if format.include? :png
7
+ save_pdf if format.include? :pdf
8
+ end
9
+
10
+ def save_png(range: :all, dir: "_output", prefix: 'card_')
11
+ range = rangeify(range)
12
+ range.each { |i| @cards[i].save_png(i, dir, prefix) }
13
+ end
14
+
15
+ end
16
+ end
@@ -0,0 +1,13 @@
1
+ module Squib
2
+ class Deck
3
+
4
+ def rect(range: :all, x: 0, y: 0, width: 825, height: 1125, \
5
+ x_radius: 0, y_radius: 0)
6
+ range = rangeify(range)
7
+ range.each do |i|
8
+ @cards[i].draw_rectangle(x, y, width, height, x_radius, y_radius)
9
+ end
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,26 @@
1
+ module Squib
2
+ class Deck
3
+ def fontify (font)
4
+ font = 'Arial 36' if font==:use_set
5
+ font
6
+ end
7
+
8
+ def font(type: 'Arial', size: 12, **options)
9
+ raise 'Not implemented!'
10
+ end
11
+
12
+ def set_font(type: 'Arial', size: 12, **options)
13
+ raise 'Not implemented!'
14
+ end
15
+
16
+ def text(range: :all, str: '', font: :use_set, x: 0, y: 0, **options)
17
+ range = rangeify(range)
18
+ str = [str] * @cards.size unless str.respond_to? :each
19
+ font = fontify(font)
20
+ range.each do |i|
21
+ cards[i].text(str[i], font, x, y, options)
22
+ end
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,27 @@
1
+ require 'cairo'
2
+
3
+ module Squib
4
+
5
+ class Card
6
+ attr_reader :width, :height
7
+ attr_accessor :cairo_surface, :cairo_context
8
+
9
+ def initialize(width, height)
10
+ @width=width; @height=height
11
+ @cairo_surface = Cairo::ImageSurface.new(width,height)
12
+ @cairo_context = Cairo::Context.new(@cairo_surface)
13
+ end
14
+
15
+ ########################
16
+ ### BACKEND GRAPHICS ###
17
+ ########################
18
+ require 'squib/graphics/background'
19
+ require 'squib/graphics/image'
20
+ require 'squib/graphics/save_doc'
21
+ require 'squib/graphics/save_images'
22
+ require 'squib/graphics/shapes'
23
+ require 'squib/graphics/text'
24
+
25
+ end
26
+
27
+ end
@@ -0,0 +1,49 @@
1
+ require 'squib/card'
2
+
3
+ module Squib
4
+ class Deck
5
+ include Enumerable
6
+ attr_reader :width, :height
7
+ attr_reader :cards
8
+
9
+ def initialize(width: 825, height: 1125, cards: 1, &block)
10
+ @width=width; @height=height
11
+ @cards = []
12
+ cards.times{ @cards << Squib::Card.new(width, height) }
13
+ if block_given?
14
+ instance_eval(&block)
15
+ end
16
+ end
17
+
18
+ def [](key)
19
+ @cards[key]
20
+ end
21
+
22
+ #For Enumerable
23
+ def each(&block)
24
+ @cards.each { |card| block.call(card) }
25
+ end
26
+
27
+ def rangeify (range)
28
+ range = 0..(@cards.size-1) if range == :all
29
+ range = range..range if range.is_a? Integer
30
+ return range
31
+ end
32
+
33
+ def fileify(file)
34
+ raise 'File #{file} does not exist!' unless File.exists? file
35
+ file
36
+ end
37
+
38
+ ##################
39
+ ### PUBLIC API ###
40
+ ##################
41
+ require 'squib/api/background'
42
+ require 'squib/api/data'
43
+ require 'squib/api/image'
44
+ require 'squib/api/save'
45
+ require 'squib/api/shapes'
46
+ require 'squib/api/text'
47
+
48
+ end
49
+ end
@@ -0,0 +1,11 @@
1
+ module Squib
2
+ class Card
3
+
4
+ def background(color)
5
+ cc = cairo_context
6
+ cc.set_source_rgb(*color)
7
+ cc.paint
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ module Squib
2
+ class Card
3
+
4
+ def png(file, x, y)
5
+ cc = cairo_context
6
+ png = Cairo::ImageSurface.from_png(file)
7
+ cc.set_source(png, x, y)
8
+ cc.paint
9
+ end
10
+
11
+ end
12
+ end
@@ -0,0 +1,22 @@
1
+ module Squib
2
+ class Deck
3
+
4
+ def save_pdf
5
+ #paper is 8.5x11
6
+ # PDF points are 1/72 of an inch
7
+ raise "Not implemented yet!"
8
+ width = 8.5 * 72
9
+ height = 11 * 72
10
+ cc = Cairo::Context.new(Cairo::PDFSurface.new('_img/deck.pdf', width, height))
11
+ x = 10
12
+ y = 10
13
+ @cards.each_with_index do |card, i|
14
+ cc.move_to(x,y)
15
+ x += 825*i
16
+ cc.set_source(card.cairo_surface, 0, 300)
17
+ cc.paint
18
+ end
19
+ end
20
+
21
+ end
22
+ end
@@ -0,0 +1,9 @@
1
+ module Squib
2
+ class Card
3
+
4
+ def save_png(i, dir, prefix)
5
+ cairo_context.target.write_to_png("#{dir}/#{prefix}#{i}.png")
6
+ end
7
+
8
+ end
9
+ end
@@ -0,0 +1,12 @@
1
+ module Squib
2
+ class Card
3
+
4
+ def draw_rectangle(x, y, width, height, x_radius, y_radius)
5
+ cc = cairo_context
6
+ cc.set_source_rgb(0.0,0.0,0.0)
7
+ cc.rounded_rectangle(x, y, width, height, x_radius, y_radius)
8
+ cc.stroke
9
+ end
10
+
11
+ end
12
+ end
@@ -0,0 +1,28 @@
1
+ require 'pango'
2
+
3
+ module Squib
4
+ class Card
5
+
6
+ def text(str, font, x, y, options)
7
+ cc = cairo_context
8
+ cc.set_source_color(:black) #black
9
+ cc.move_to(x,y)
10
+ layout = cc.create_pango_layout
11
+ layout.text = str.to_s
12
+ w = options[:width] ; h = options[:height]
13
+ w ||= (@width - 2*x) ; h ||= (@height - 2*y) # default centers to x,y
14
+ w *= Pango::SCALE ; h *= Pango::SCALE
15
+ layout.width=w ; layout.height=h
16
+ layout.wrap = Pango::WRAP_WORD
17
+ layout.justify = true
18
+ layout.alignment = Pango::ALIGN_LEFT
19
+ layout.font_description = Pango::FontDescription.new(font)
20
+ #Center it vertically?
21
+ #puts "Height: #{layout.extents[1].height / Pango::SCALE}"
22
+ #puts "Height: #{layout.pixel_size[1]*layout.line_count}"
23
+ cc.update_pango_layout(layout)
24
+ cc.show_pango_layout(layout)
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,3 @@
1
+ module Squib
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,25 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <style>
5
+ img{
6
+ border: 1px solid black;
7
+ }
8
+ </style>
9
+ <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
10
+ <script>
11
+ setInterval(function () {
12
+ $("#img0").attr("src", "sample_excel_0.png?"+new Date().getTime());
13
+ $("#img1").attr("src", "sample_excel_1.png?"+new Date().getTime());
14
+
15
+ }, 1000);
16
+ </script>
17
+ </head>
18
+
19
+ <body>
20
+ <h1>Cards</h1>
21
+ <img id="img0" width=300 src="sample_excel_0.png"/>
22
+ <img id="img1" width=300 src="sample_excel_1.png"/>
23
+ </body>
24
+
25
+ </html>
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env ruby
2
+ require 'squib'
3
+
4
+ data = {'name' => ['Thief', 'Grifter', 'Mastermind'],
5
+ 'level' => [1,2,3]}
6
+ longtext = "Hello, World! What do you know about tweetle beetles? well... \nWhen tweetle beetles fight, it's called a tweetle beetle battle. And when they battle in a puddle, it's a tweetle beetle puddle battle. AND when tweetle beetles battle with paddles in a puddle, they call it a tweetle beetle puddle paddle battle. AND... When beetles battle beetles in a puddle paddle battle and the beetle battle puddle is a puddle in a bottle... ..they call this a tweetle beetle bottle puddle paddle battle muddle. AND... When beetles fight these battles in a bottle with their paddles and the bottle's on a poodle and the poodle's eating noodles... ...they call this a muddle puddle tweetle poodle beetle noodle bottle paddle battle."
7
+
8
+ Squib::Deck.new(width: 825, height: 1125, cards: 3) do
9
+ background color: [1.0,1.0,1.0]
10
+ rect x: 15, y: 15, width: 795, height: 1095, x_radius: 50, y_radius: 50
11
+ rect x: 30, y: 30, width: 128, height: 128, x_radius: 25, y_radius: 25
12
+
13
+ text str: data['name'], x: 250, y: 55, font: 'Arial 54'
14
+ text str: data['level'], x: 65, y: 40, font: 'Arial 72'
15
+ text str: longtext, x: 100, y: 600, font: 'Arial 16'
16
+
17
+ png file: 'shiny-purse.png', x: 665, y: 30
18
+
19
+ save format: :png
20
+ end
21
+
22
+ puts "Done!"
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ require 'squib'
3
+
4
+ Squib::Deck.new(width: 825, height: 1125, cards: 3) do
5
+ background color: [1.0,1.0,1.0]
6
+
7
+ data = xlsx file: 'sample.xlsx', sheet: 0
8
+
9
+ text str: data['Name'], x: 250, y: 55, font: 'Arial 54'
10
+ text str: data['Level'], x: 65, y: 65, font: 'Arial 72'
11
+ text str: data['Description'], x: 65, y: 600, font: 'Arial 36'
12
+
13
+ save format: :png, prefix: 'sample_excel_'
14
+ end
15
+
16
+ puts "Done!"
Binary file
Binary file
@@ -0,0 +1,48 @@
1
+ require 'squib/deck'
2
+
3
+ describe Squib::Deck do
4
+
5
+ it "initializes with default parameters" do
6
+ d = Squib::Deck.new
7
+ expect(d.width).to eq(825)
8
+ expect(d.height).to eq(1125)
9
+ expect(d.cards.size).to eq(1)
10
+ end
11
+
12
+ context "in dealing with ranges" do
13
+ it "calls text on all cards by default" do
14
+ card1 = instance_double(Squib::Card)
15
+ card2 = instance_double(Squib::Card)
16
+ expect(card1).to receive(:text).with('blah','Arial 36',0,0,{}).once
17
+ expect(card2).to receive(:text).with('blah','Arial 36',0,0,{}).once
18
+ Squib::Deck.new do
19
+ @cards = [card1, card2]
20
+ text str: 'blah'
21
+ end
22
+ end
23
+
24
+ it "calls text on some cards with an integer" do
25
+ card1 = instance_double(Squib::Card)
26
+ card2 = instance_double(Squib::Card)
27
+ expect(card2).to receive(:text).with('blah','Arial 36',0,0,{}).once
28
+ Squib::Deck.new do
29
+ @cards = [card1, card2]
30
+ text range: 1, str: 'blah'
31
+ end
32
+ end
33
+
34
+ it "calls text with ranges" do
35
+ card1 = instance_double(Squib::Card)
36
+ card2 = instance_double(Squib::Card)
37
+ card3 = instance_double(Squib::Card)
38
+ expect(card1).to receive(:text).with('blah','Arial 36',0,0,{}).once
39
+ expect(card2).to receive(:text).with('blah','Arial 36',0,0,{}).once
40
+ Squib::Deck.new do
41
+ @cards = [card1, card2, card3]
42
+ text range: 0..1, str: 'blah'
43
+ end
44
+ end
45
+ end
46
+
47
+ end#describe
48
+
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'squib/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "squib"
8
+ spec.version = Squib::VERSION
9
+ spec.authors = ["Andy Meneely"]
10
+ spec.email = ["playconfidencegames@gmail.com"]
11
+ spec.summary = %q{A Ruby API for prototyping card and other tabletop games}
12
+ spec.homepage = ""
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files -z`.split("\x0")
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_runtime_dependency 'cairo', '~> 1.12.9'
21
+ spec.add_runtime_dependency 'pango', '~> 2.2.0'
22
+ spec.add_runtime_dependency 'roo', '~> 1.13.2'
23
+
24
+ spec.add_development_dependency "bundler", "~> 1.6"
25
+ spec.add_development_dependency "rake"
26
+ spec.add_development_dependency "rspec", "~> 3.0"
27
+ end
metadata ADDED
@@ -0,0 +1,160 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: squib
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Andy Meneely
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-07-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: cairo
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 1.12.9
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 1.12.9
27
+ - !ruby/object:Gem::Dependency
28
+ name: pango
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 2.2.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 2.2.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: roo
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 1.13.2
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 1.13.2
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.6'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '1.6'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: '3.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: '3.0'
97
+ description:
98
+ email:
99
+ - playconfidencegames@gmail.com
100
+ executables:
101
+ - squib
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - .gitignore
106
+ - .travis.yml
107
+ - Gemfile
108
+ - LICENSE.txt
109
+ - README.md
110
+ - Rakefile
111
+ - bin/squib
112
+ - lib/squib.rb
113
+ - lib/squib/api/background.rb
114
+ - lib/squib/api/data.rb
115
+ - lib/squib/api/image.rb
116
+ - lib/squib/api/save.rb
117
+ - lib/squib/api/shapes.rb
118
+ - lib/squib/api/text.rb
119
+ - lib/squib/card.rb
120
+ - lib/squib/deck.rb
121
+ - lib/squib/graphics/background.rb
122
+ - lib/squib/graphics/image.rb
123
+ - lib/squib/graphics/save_doc.rb
124
+ - lib/squib/graphics/save_images.rb
125
+ - lib/squib/graphics/shapes.rb
126
+ - lib/squib/graphics/text.rb
127
+ - lib/squib/version.rb
128
+ - samples/_output/watch.html
129
+ - samples/basic.rb
130
+ - samples/excel.rb
131
+ - samples/sample.xlsx
132
+ - samples/shiny-purse.png
133
+ - spec/deck_spec.rb
134
+ - squib.gemspec
135
+ homepage: ''
136
+ licenses:
137
+ - MIT
138
+ metadata: {}
139
+ post_install_message:
140
+ rdoc_options: []
141
+ require_paths:
142
+ - lib
143
+ required_ruby_version: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - '>='
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ required_rubygems_version: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ requirements: []
154
+ rubyforge_project:
155
+ rubygems_version: 2.2.2
156
+ signing_key:
157
+ specification_version: 4
158
+ summary: A Ruby API for prototyping card and other tabletop games
159
+ test_files:
160
+ - spec/deck_spec.rb